spree_api 5.6.1 → 6.0.0.beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +28 -0
- data/Rakefile +1 -1
- data/app/controllers/concerns/spree/api/v3/address_params.rb +17 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_listing.rb +46 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +110 -0
- data/app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb +68 -0
- data/app/controllers/concerns/spree/api/v3/admin/reporting_authorization.rb +27 -0
- data/app/controllers/concerns/spree/api/v3/admin/role_grant_guard.rb +69 -33
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +86 -0
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +97 -0
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +12 -6
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +91 -0
- data/app/controllers/concerns/spree/api/v3/admin_authentication.rb +20 -5
- data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +41 -5
- data/app/controllers/concerns/spree/api/v3/authentication_strategies.rb +48 -0
- data/app/controllers/concerns/spree/api/v3/bulk_operations.rb +4 -6
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +52 -16
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +37 -0
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +41 -0
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +53 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -4
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +54 -0
- data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +23 -3
- data/app/controllers/concerns/spree/api/v3/key_store_context.rb +31 -0
- data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +3 -3
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +22 -3
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +112 -0
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +105 -0
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +117 -0
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +157 -0
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +76 -0
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +116 -0
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +128 -0
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +7 -4
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +42 -0
- data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +40 -6
- data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +80 -26
- data/app/controllers/concerns/spree/api/v3/seller/auth_cookies.rb +62 -0
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +127 -0
- data/app/controllers/concerns/spree/api/v3/seller_authentication.rb +40 -0
- data/app/controllers/concerns/spree/api/v3/storefront_access.rb +38 -0
- data/app/controllers/concerns/spree/api/v3/streams_shipping_label.rb +37 -0
- data/app/controllers/concerns/spree/api/v3/tax_identifier_validation.rb +41 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +11 -14
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +18 -9
- data/app/controllers/spree/api/v3/admin/auth_controller.rb +138 -22
- data/app/controllers/spree/api/v3/admin/base_controller.rb +2 -0
- data/app/controllers/spree/api/v3/admin/catalog_assignments_controller.rb +27 -0
- data/app/controllers/spree/api/v3/admin/catalogs/base_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/catalogs/products_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +75 -0
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +191 -0
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +28 -41
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +16 -7
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +50 -2
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/claims_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/collection_rules_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +101 -0
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/commission_lines_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +174 -0
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +65 -0
- data/app/controllers/spree/api/v3/admin/companies/base_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +66 -0
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +137 -0
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +59 -0
- data/app/controllers/spree/api/v3/admin/concerns/external_references.rb +166 -0
- data/app/controllers/spree/api/v3/admin/consent_records_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +12 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +19 -4
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +5 -5
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -4
- data/app/controllers/spree/api/v3/admin/customers/base_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +2 -3
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +190 -11
- data/app/controllers/spree/api/v3/admin/dashboard_controller.rb +24 -20
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +60 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +54 -0
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +114 -0
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +243 -0
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +80 -0
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +116 -0
- data/app/controllers/spree/api/v3/admin/digital_links_controller.rb +48 -0
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +17 -3
- data/app/controllers/spree/api/v3/admin/exchanges_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +3 -2
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +71 -8
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +67 -0
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +5 -5
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +3 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/me_controller.rb +4 -30
- data/app/controllers/spree/api/v3/admin/media_controller.rb +88 -38
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +156 -0
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/order_groups_controller.rb +43 -0
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +66 -0
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +86 -0
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +99 -0
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +62 -0
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +83 -0
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +45 -67
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +40 -22
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +75 -0
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +36 -18
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +39 -18
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +70 -0
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/orders/tax_identifiers_controller.rb +41 -0
- data/app/controllers/spree/api/v3/admin/orders/tax_lines_controller.rb +32 -0
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +164 -33
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +15 -4
- data/app/controllers/spree/api/v3/admin/payout_providers_controller.rb +27 -0
- data/app/controllers/spree/api/v3/admin/permissions_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +42 -0
- data/app/controllers/spree/api/v3/admin/price_lists/products_controller.rb +93 -0
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +43 -29
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +41 -4
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +93 -0
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +148 -0
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +24 -3
- data/app/controllers/spree/api/v3/admin/products_controller.rb +149 -33
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/purchase_orders/stock_receipts_controller.rb +32 -0
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +161 -0
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +45 -0
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +95 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +27 -10
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/returns_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +50 -6
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +83 -0
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +139 -0
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +115 -0
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +36 -0
- data/app/controllers/spree/api/v3/admin/sellers/balances_controller.rb +44 -0
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +77 -0
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +64 -0
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +197 -0
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +239 -0
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +172 -0
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +3 -2
- data/app/controllers/spree/api/v3/admin/stock_movements_controller.rb +37 -0
- data/app/controllers/spree/api/v3/admin/stock_reservations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/stock_transfers/stock_receipts_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +134 -38
- data/app/controllers/spree/api/v3/admin/store_controller.rb +66 -0
- data/app/controllers/spree/api/v3/admin/store_credits/events_controller.rb +47 -0
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +87 -0
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/tax_providers_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/translatable_resources_controller.rb +37 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +10 -5
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +150 -0
- data/app/controllers/spree/api/v3/admin/variants_controller.rb +11 -4
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +1 -1
- data/app/controllers/spree/api/v3/base_controller.rb +74 -16
- data/app/controllers/spree/api/v3/resource_controller.rb +170 -39
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +169 -0
- data/app/controllers/spree/api/v3/seller/balances_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/base_controller.rb +25 -0
- data/app/controllers/spree/api/v3/seller/claim_reasons_controller.rb +20 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +38 -0
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +265 -0
- data/app/controllers/spree/api/v3/seller/delivery_profiles_controller.rb +65 -0
- data/app/controllers/spree/api/v3/seller/delivery_zones_controller.rb +41 -0
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +21 -0
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +195 -0
- data/app/controllers/spree/api/v3/seller/import_rows_controller.rb +49 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +317 -0
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +152 -0
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +71 -0
- data/app/controllers/spree/api/v3/seller/me_controller.rb +72 -0
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +111 -0
- data/app/controllers/spree/api/v3/seller/order_cancellation_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/seller/orders/base_controller.rb +44 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +45 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +38 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +50 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +79 -0
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +55 -0
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +82 -0
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +44 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +199 -0
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +100 -0
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +155 -0
- data/app/controllers/spree/api/v3/seller/payouts_controller.rb +47 -0
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +57 -0
- data/app/controllers/spree/api/v3/seller/product_types_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/products_controller.rb +394 -0
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +137 -0
- data/app/controllers/spree/api/v3/seller/reasons_controller.rb +45 -0
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +95 -0
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +75 -0
- data/app/controllers/spree/api/v3/seller/return_reasons_controller.rb +20 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +56 -0
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +48 -0
- data/app/controllers/spree/api/v3/seller/team_controller.rb +103 -0
- data/app/controllers/spree/api/v3/seller/tracking_carriers_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/transfers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/store/account/companies_controller.rb +42 -0
- data/app/controllers/spree/api/v3/store/auth_controller.rb +21 -34
- data/app/controllers/spree/api/v3/store/base_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +24 -2
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +41 -15
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +53 -20
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +36 -20
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +111 -0
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -2
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +96 -0
- data/app/controllers/spree/api/v3/store/carts_controller.rb +57 -12
- data/app/controllers/spree/api/v3/store/categories_controller.rb +6 -3
- data/app/controllers/spree/api/v3/store/collections/products_controller.rb +59 -0
- data/app/controllers/spree/api/v3/store/collections_controller.rb +36 -0
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +81 -0
- data/app/controllers/spree/api/v3/store/companies/base_controller.rb +24 -0
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +50 -0
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +66 -0
- data/app/controllers/spree/api/v3/store/companies/orders_controller.rb +28 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +47 -0
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +90 -0
- data/app/controllers/spree/api/v3/store/countries_controller.rb +8 -6
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +3 -1
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +78 -0
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
- data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
- data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
- data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
- data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
- data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
- data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
- data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
- data/app/controllers/spree/api/v3/store/products/filters_controller.rb +10 -3
- data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
- data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
- data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
- data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
- data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
- data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
- data/app/models/spree/api/data_request_urls.rb +25 -0
- data/app/models/spree/api/digital_link_urls.rb +26 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
- data/app/serializers/spree/api/v3/admin/actor_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
- data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +15 -2
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
- data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
- data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
- data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +46 -5
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
- data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +126 -31
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +6 -5
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +58 -0
- data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
- data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
- data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +48 -0
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +65 -1
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/base_serializer.rb +61 -2
- data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
- data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
- data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
- data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
- data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
- data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
- data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
- data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
- data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
- data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
- data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
- data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
- data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
- data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
- data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
- data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
- data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
- data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
- data/config/brakeman.ignore +1 -1
- data/config/initializers/typelizer.rb +51 -4
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +730 -22
- data/lib/spree/api/configuration.rb +19 -19
- data/lib/spree/api/dependencies.rb +174 -227
- data/lib/spree/api/engine.rb +6 -0
- data/lib/spree/api/openapi/schema_helper.rb +179 -13
- data/lib/spree/api/testing_support/v3/base.rb +45 -15
- data/lib/spree/api.rb +10 -4
- data/lib/typelizer/open_enums.rb +35 -0
- metadata +342 -27
- data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
- data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
- data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
- data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
- data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
- data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
- data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
- data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
- data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
- data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
- data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
- data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
- data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
- data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
- data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
- data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
- data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
|
@@ -27,32 +27,50 @@ module Spree
|
|
|
27
27
|
|
|
28
28
|
authorize_resource!(@resource, :create)
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
render_validation_error(@resource.errors) unless @resource.save
|
|
31
|
+
end
|
|
32
|
+
return if performed?
|
|
33
|
+
|
|
34
|
+
# Gateway I/O — outside the order lock. A source that cannot be
|
|
35
|
+
# profiled must not linger on a half-created payment; the old
|
|
36
|
+
# after_save callback rolled the whole save back.
|
|
37
|
+
begin
|
|
38
|
+
@resource.create_payment_profile if @resource.profiles_supported?
|
|
39
|
+
rescue Spree::Core::GatewayError => e
|
|
40
|
+
@resource.destroy
|
|
41
|
+
return render_service_error(e.message)
|
|
35
42
|
end
|
|
43
|
+
|
|
44
|
+
render json: serialize_resource(@resource), status: :created
|
|
36
45
|
end
|
|
37
46
|
|
|
38
47
|
# PATCH /api/v3/admin/orders/:order_id/payments/:id/capture
|
|
48
|
+
#
|
|
49
|
+
# Capture and void deliberately skip with_order_lock: the workflows
|
|
50
|
+
# call the gateway from an external_step, and holding a row lock
|
|
51
|
+
# across a network round trip is exactly what that boundary exists
|
|
52
|
+
# to prevent. Both flows are idempotent on replay — an
|
|
53
|
+
# already-captured or already-void payment returns success.
|
|
39
54
|
def capture
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
55
|
+
amount = params[:amount] ? (params[:amount].to_f * 100).round : nil
|
|
56
|
+
|
|
57
|
+
result = Spree.payment_capture_workflow.call(payment: @resource, amount: amount)
|
|
58
|
+
|
|
59
|
+
if result.success?
|
|
60
|
+
render json: serialize_resource(result.value)
|
|
61
|
+
else
|
|
62
|
+
render_result_error(result)
|
|
46
63
|
end
|
|
47
64
|
end
|
|
48
65
|
|
|
49
66
|
# PATCH /api/v3/admin/orders/:order_id/payments/:id/void
|
|
50
67
|
def void
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
68
|
+
result = Spree.payment_void_workflow.call(payment: @resource)
|
|
69
|
+
|
|
70
|
+
if result.success?
|
|
71
|
+
render json: serialize_resource(result.value)
|
|
72
|
+
else
|
|
73
|
+
render_result_error(result)
|
|
56
74
|
end
|
|
57
75
|
end
|
|
58
76
|
|
|
@@ -78,9 +96,9 @@ module Spree
|
|
|
78
96
|
# to that customer to prevent attaching customer A's card to
|
|
79
97
|
# customer B's order. Refuse if no customer is assigned.
|
|
80
98
|
def find_source!(payment_method, source_id)
|
|
81
|
-
raise ActiveRecord::RecordNotFound unless @parent.
|
|
99
|
+
raise ActiveRecord::RecordNotFound unless @parent.customer
|
|
82
100
|
|
|
83
|
-
@parent.
|
|
101
|
+
@parent.customer.credit_cards.find_by_prefix_id!(source_id)
|
|
84
102
|
end
|
|
85
103
|
end
|
|
86
104
|
end
|
|
@@ -7,24 +7,36 @@ module Spree
|
|
|
7
7
|
scoped_resource :refunds
|
|
8
8
|
|
|
9
9
|
# POST /api/v3/admin/orders/:order_id/refunds
|
|
10
|
+
#
|
|
11
|
+
# Deliberately not wrapped in with_order_lock: the workflow calls
|
|
12
|
+
# the gateway from an external_step, and holding a row lock across
|
|
13
|
+
# a network round trip is exactly what that boundary exists to
|
|
14
|
+
# prevent. Refund#perform! is a no-op on a credited refund, so a
|
|
15
|
+
# double submit cannot credit twice.
|
|
10
16
|
def create
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
payment = settlement_payments.accessible_by(current_ability, :update).find_by_prefix_id!(params[:payment_id])
|
|
18
|
+
# Scoped to the store, not just the ability — a reason id from
|
|
19
|
+
# another store must 404, not attach.
|
|
20
|
+
reason = current_store.refund_reasons.accessible_by(current_ability, :show).find_by_prefix_id!(params[:refund_reason_id]) if params[:refund_reason_id].present?
|
|
21
|
+
reason ||= current_store.refund_reasons.accessible_by(current_ability, :show).first
|
|
22
|
+
|
|
23
|
+
authorize_resource!(payment.refunds.build(amount: params[:amount], reason: reason), :create)
|
|
24
|
+
|
|
25
|
+
result = Spree.refund_create_workflow.call(
|
|
26
|
+
payment: payment,
|
|
27
|
+
amount: params[:amount],
|
|
28
|
+
reason: reason,
|
|
29
|
+
refunder: current_actor,
|
|
30
|
+
# Names which order is being refunded. Only matters when the
|
|
31
|
+
# payment is shared by a split checkout, where it covers several
|
|
32
|
+
# and the payment cannot say which one this is for.
|
|
33
|
+
order: @parent
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
if result.success?
|
|
37
|
+
render json: serialize_resource(result.value), status: :created
|
|
38
|
+
else
|
|
39
|
+
render_result_error(result)
|
|
28
40
|
end
|
|
29
41
|
end
|
|
30
42
|
|
|
@@ -38,8 +50,17 @@ module Spree
|
|
|
38
50
|
Spree.api.admin_refund_serializer
|
|
39
51
|
end
|
|
40
52
|
|
|
53
|
+
# Every refund names the order it put right, so this reads the same
|
|
54
|
+
# for an ordinary order and for one placed in a split checkout,
|
|
55
|
+
# whose payments belong to its group rather than to itself.
|
|
41
56
|
def scope
|
|
42
|
-
Spree::Refund.where(
|
|
57
|
+
Spree::Refund.where(order_id: @parent.id)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# The payments that can settle this order — its own, or its group's
|
|
61
|
+
# when it was placed alongside others.
|
|
62
|
+
def settlement_payments
|
|
63
|
+
@parent.settlement_payments
|
|
43
64
|
end
|
|
44
65
|
|
|
45
66
|
def collection_includes
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module Orders
|
|
6
|
+
# Returns on a completed order. Every status change goes through its
|
|
7
|
+
# own member action rather than mass assignment, because each one is
|
|
8
|
+
# a workflow with its own arguments — receiving carries the
|
|
9
|
+
# quantities the warehouse counted, refunding carries a method and
|
|
10
|
+
# an amount.
|
|
11
|
+
class ReturnsController < BaseController
|
|
12
|
+
include Spree::Api::V3::Orders::ReturnActions
|
|
13
|
+
|
|
14
|
+
# Returns are a subject of the `orders` catalog resource (see
|
|
15
|
+
# Spree::PermissionConfiguration), so `read_orders`/`write_orders`
|
|
16
|
+
# gate these endpoints — matching the cross-order ReturnsController.
|
|
17
|
+
# Declaring `:returns` here would name a key no catalog knows: the
|
|
18
|
+
# JWT gate would silently no-op and a `write_orders` secret key
|
|
19
|
+
# would be wrongly denied.
|
|
20
|
+
scoped_resource :orders
|
|
21
|
+
|
|
22
|
+
before_action :set_resource, only: [:show, :update, :approve, :receive, :refund, :cancel]
|
|
23
|
+
|
|
24
|
+
# PATCH /api/v3/admin/orders/:order_id/returns/:id
|
|
25
|
+
#
|
|
26
|
+
# Editable fields only — status moves through the member actions.
|
|
27
|
+
def update
|
|
28
|
+
if @resource.update(permitted_params)
|
|
29
|
+
render json: serialize_resource(@resource.reload)
|
|
30
|
+
else
|
|
31
|
+
render_validation_error(@resource.errors)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
protected
|
|
36
|
+
|
|
37
|
+
def serializer_class
|
|
38
|
+
Spree.api.admin_return_serializer
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# `documents` resolves the provider through the returned units and
|
|
42
|
+
# reads the labels it produced, so both are preloaded: without them
|
|
43
|
+
# a page of returns is a query per row.
|
|
44
|
+
def collection_includes
|
|
45
|
+
[
|
|
46
|
+
:reason, :stock_location, :deliveries,
|
|
47
|
+
{ shipping_labels: { file_attachment: :blob } },
|
|
48
|
+
{ return_line_items: [:variant, :line_item, { fulfillment_item: :fulfillment }] }
|
|
49
|
+
]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def permitted_params
|
|
53
|
+
params.permit(:memo, :reason_id, :stock_location_id, metadata: {})
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
# Any of the store's warehouses the caller may see.
|
|
59
|
+
def stock_location_for_create
|
|
60
|
+
return nil if create_params[:stock_location_id].blank?
|
|
61
|
+
|
|
62
|
+
current_store.stock_locations.accessible_by(current_ability, :show).
|
|
63
|
+
find_by_prefix_id!(create_params[:stock_location_id])
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -14,7 +14,7 @@ module Spree
|
|
|
14
14
|
# credit up to the order total.
|
|
15
15
|
def create
|
|
16
16
|
with_order_lock do
|
|
17
|
-
result = Spree.
|
|
17
|
+
result = Spree.store_credit_apply_service.call(
|
|
18
18
|
order: @parent,
|
|
19
19
|
amount: params[:amount].try(:to_f)
|
|
20
20
|
)
|
|
@@ -30,7 +30,7 @@ module Spree
|
|
|
30
30
|
# DELETE /api/v3/admin/orders/:order_id/store_credits
|
|
31
31
|
def destroy
|
|
32
32
|
with_order_lock do
|
|
33
|
-
result = Spree.
|
|
33
|
+
result = Spree.store_credit_remove_service.call(order: @parent)
|
|
34
34
|
|
|
35
35
|
if result.success?
|
|
36
36
|
head :no_content
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module Orders
|
|
6
|
+
# The registration the order was taxed against, frozen at completion.
|
|
7
|
+
# Read-only because the row is: staff investigating why an invoice was
|
|
8
|
+
# zero-rated need to see the number and the verdict behind it, not
|
|
9
|
+
# change what the invoice already says.
|
|
10
|
+
class TaxIdentifiersController < BaseController
|
|
11
|
+
# A singular nested resource: there is no :id to look up, and the
|
|
12
|
+
# inherited lookup would reach for a plural association that does
|
|
13
|
+
# not exist. Mirrors Orders::StoreCreditsController.
|
|
14
|
+
skip_before_action :set_resource, raise: false
|
|
15
|
+
|
|
16
|
+
scoped_resource :orders
|
|
17
|
+
|
|
18
|
+
# GET /api/v3/admin/orders/:order_id/tax_identifier
|
|
19
|
+
def show
|
|
20
|
+
return head :not_found if @parent.tax_identifier.nil?
|
|
21
|
+
|
|
22
|
+
authorize_resource!(@parent.tax_identifier, :show)
|
|
23
|
+
|
|
24
|
+
render json: serialize_resource(@parent.tax_identifier)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
def model_class
|
|
30
|
+
Spree::TaxIdentifier
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def serializer_class
|
|
34
|
+
Spree.api.admin_tax_identifier_serializer
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module Orders
|
|
6
|
+
# Read-only: tax lines are written exclusively by the tax provider.
|
|
7
|
+
class TaxLinesController < BaseController
|
|
8
|
+
scoped_resource :orders
|
|
9
|
+
|
|
10
|
+
protected
|
|
11
|
+
|
|
12
|
+
def model_class
|
|
13
|
+
Spree::TaxLine
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def serializer_class
|
|
17
|
+
Spree.api.admin_tax_line_serializer
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def scope
|
|
21
|
+
@parent.tax_lines
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def collection_includes
|
|
25
|
+
[:tax_rate, :line_item, :fulfillment, :fee]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -7,8 +7,14 @@ module Spree
|
|
|
7
7
|
|
|
8
8
|
scoped_resource :orders
|
|
9
9
|
|
|
10
|
+
# The order accepts a `po_document` signed blob id and streams it back.
|
|
11
|
+
include ActiveStorage::SetCurrent
|
|
12
|
+
|
|
13
|
+
# A tampered signed id would otherwise surface as a 500.
|
|
14
|
+
rescue_from ActiveSupport::MessageVerifier::InvalidSignature, with: :render_invalid_po_document
|
|
15
|
+
|
|
10
16
|
skip_before_action :set_resource, only: [:index, :create]
|
|
11
|
-
before_action :set_resource, only: [:show, :update, :destroy, :complete, :cancel, :approve, :
|
|
17
|
+
before_action :set_resource, only: [:show, :update, :destroy, :complete, :cancel, :approve, :resend_confirmation, :resend_digital_links, :po_document]
|
|
12
18
|
|
|
13
19
|
# POST /api/v3/admin/orders
|
|
14
20
|
def create
|
|
@@ -16,7 +22,8 @@ module Spree
|
|
|
16
22
|
|
|
17
23
|
result = Spree.order_create_service.call(
|
|
18
24
|
store: current_store,
|
|
19
|
-
|
|
25
|
+
customer: resolve_customer,
|
|
26
|
+
created_by: current_actor,
|
|
20
27
|
params: order_create_params
|
|
21
28
|
)
|
|
22
29
|
|
|
@@ -49,7 +56,7 @@ module Spree
|
|
|
49
56
|
with_order_lock do
|
|
50
57
|
result = Spree.order_complete_service.call(
|
|
51
58
|
order: @resource,
|
|
52
|
-
payment_pending:
|
|
59
|
+
payment_pending: params[:payment_pending].to_b,
|
|
53
60
|
notify_customer: ActiveModel::Type::Boolean.new.cast(params[:notify_customer])
|
|
54
61
|
)
|
|
55
62
|
|
|
@@ -64,35 +71,76 @@ module Spree
|
|
|
64
71
|
# PATCH /api/v3/admin/orders/:id/cancel
|
|
65
72
|
def cancel
|
|
66
73
|
with_order_lock do
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
result = Spree.order_cancel_workflow.call(
|
|
75
|
+
order: @resource,
|
|
76
|
+
canceler: current_actor,
|
|
77
|
+
reason: cancel_reason,
|
|
78
|
+
note: params[:cancel_note].presence,
|
|
79
|
+
refund_payments: params[:refund_payments].to_b,
|
|
80
|
+
refund_amount: params[:refund_amount].presence,
|
|
81
|
+
notify_customer: params[:notify_customer].to_b
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
if result.success?
|
|
85
|
+
render json: serialize_resource(@resource.reload)
|
|
86
|
+
else
|
|
87
|
+
render_service_error(@resource.errors.presence || result.error)
|
|
88
|
+
end
|
|
69
89
|
end
|
|
70
90
|
end
|
|
71
91
|
|
|
72
92
|
# PATCH /api/v3/admin/orders/:id/approve
|
|
73
93
|
def approve
|
|
74
94
|
with_order_lock do
|
|
75
|
-
@resource.approved_by(
|
|
76
|
-
render json: serialize_resource(@resource.reload)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# PATCH /api/v3/admin/orders/:id/resume
|
|
81
|
-
def resume
|
|
82
|
-
with_order_lock do
|
|
83
|
-
@resource.resume!
|
|
95
|
+
@resource.approved_by(current_actor)
|
|
84
96
|
render json: serialize_resource(@resource.reload)
|
|
85
97
|
end
|
|
86
98
|
end
|
|
87
99
|
|
|
88
100
|
# POST /api/v3/admin/orders/:id/resend_confirmation
|
|
89
101
|
def resend_confirmation
|
|
90
|
-
@resource.publish_event('order.
|
|
102
|
+
@resource.publish_event('order.resend_confirmation_email')
|
|
91
103
|
render json: serialize_resource(@resource)
|
|
92
104
|
end
|
|
93
105
|
|
|
106
|
+
# POST /api/v3/admin/orders/:id/resend_digital_links
|
|
107
|
+
def resend_digital_links
|
|
108
|
+
@resource.publish_event('order.resend_digital_links_email')
|
|
109
|
+
render json: serialize_resource(@resource)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# GET /api/v3/admin/orders/:id/po_document
|
|
113
|
+
#
|
|
114
|
+
# The buyer's purchase order, streamed rather than redirected so the
|
|
115
|
+
# document is never reachable without admin credentials.
|
|
116
|
+
def po_document
|
|
117
|
+
unless @resource.po_document.attached?
|
|
118
|
+
return render_error(
|
|
119
|
+
code: ERROR_CODES[:validation_error],
|
|
120
|
+
message: Spree.t(:po_document_missing),
|
|
121
|
+
status: :unprocessable_content
|
|
122
|
+
)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
send_data(
|
|
126
|
+
@resource.po_document.download,
|
|
127
|
+
filename: @resource.po_document.filename.to_s,
|
|
128
|
+
type: @resource.po_document.content_type || 'application/octet-stream',
|
|
129
|
+
disposition: 'attachment'
|
|
130
|
+
)
|
|
131
|
+
end
|
|
132
|
+
|
|
94
133
|
protected
|
|
95
134
|
|
|
135
|
+
# Fetching the document is a read of the order, so it takes the read
|
|
136
|
+
# scope rather than being classed as a write for not being index or
|
|
137
|
+
# show.
|
|
138
|
+
READ_ACTIONS = %w[index show po_document].freeze
|
|
139
|
+
|
|
140
|
+
def read_actions
|
|
141
|
+
READ_ACTIONS
|
|
142
|
+
end
|
|
143
|
+
|
|
96
144
|
def model_class
|
|
97
145
|
Spree::Order
|
|
98
146
|
end
|
|
@@ -101,13 +149,27 @@ module Spree
|
|
|
101
149
|
Spree.api.admin_order_serializer
|
|
102
150
|
end
|
|
103
151
|
|
|
104
|
-
# Override scope — Order uses SingleStoreResource (for_store)
|
|
152
|
+
# Override scope — Order uses SingleStoreResource (for_store).
|
|
153
|
+
# Variant prices and each line's price list are named here rather
|
|
154
|
+
# than via scope_includes, which this override bypasses; the
|
|
155
|
+
# serializer reads both per row.
|
|
105
156
|
def scope
|
|
106
|
-
current_store.orders.accessible_by(current_ability, :show).
|
|
157
|
+
base = current_store.orders.accessible_by(current_ability, :show).
|
|
158
|
+
includes(line_items: [{ variant: :prices }, { price_list: :catalog }]).
|
|
159
|
+
preload_associations_lazily
|
|
160
|
+
|
|
161
|
+
# Transient completion drafts (status draft + cart_id set) belong
|
|
162
|
+
# to in-flight checkouts, never to the admin. Admin drafts are the
|
|
163
|
+
# cart-less ones.
|
|
164
|
+
base.where(cart_id: nil).or(base.where.not(status: 'draft'))
|
|
107
165
|
end
|
|
108
166
|
|
|
167
|
+
# Through find_resource, not find_by_prefix_id! directly, so the
|
|
168
|
+
# external:<system>:<id> addressing the concern provides reaches
|
|
169
|
+
# orders — an ERP that pushed its order number wants to read the
|
|
170
|
+
# order back by it.
|
|
109
171
|
def set_resource
|
|
110
|
-
@resource =
|
|
172
|
+
@resource = find_resource
|
|
111
173
|
@order = @resource # needed for OrderLock
|
|
112
174
|
authorize_resource!(@resource)
|
|
113
175
|
end
|
|
@@ -115,35 +177,85 @@ module Spree
|
|
|
115
177
|
# Map state transition actions to :update permission
|
|
116
178
|
def authorize_resource!(resource = @resource, action = action_name.to_sym)
|
|
117
179
|
mapped_action = case action
|
|
118
|
-
when :complete, :cancel, :approve, :
|
|
180
|
+
when :complete, :cancel, :approve, :resend_confirmation, :resend_digital_links
|
|
119
181
|
:update
|
|
182
|
+
when :po_document
|
|
183
|
+
:show
|
|
120
184
|
else
|
|
121
185
|
action
|
|
122
186
|
end
|
|
123
187
|
authorize!(mapped_action, resource)
|
|
124
188
|
end
|
|
125
189
|
|
|
190
|
+
# seller is preloaded because its id is read on every row and an
|
|
191
|
+
# expanded list renders the whole profile; order_group is not, since
|
|
192
|
+
# only its id is reported and that comes off the order's own column.
|
|
193
|
+
# Variant prices ride along because the admin line-item serializer
|
|
194
|
+
# reads the base catalog price for every row (the negotiated-price
|
|
195
|
+
# comparison); without it each line costs its own price query. Each
|
|
196
|
+
# line's price list and its catalog are named for the same reason —
|
|
197
|
+
# stated rather than left to ar_lazy_preload, which happens to cover
|
|
198
|
+
# them today.
|
|
126
199
|
def collection_includes
|
|
127
|
-
|
|
200
|
+
# `market` is the withdrawal deadline's other input. Fulfillments
|
|
201
|
+
# are loaded with their selected rate because the freight summary
|
|
202
|
+
# reads it — otherwise a page of orders costs a query per
|
|
203
|
+
# fulfillment for a field that is nil on every parcel order.
|
|
204
|
+
[:customer, :channel, :seller, :external_references, :cancel_reason,
|
|
205
|
+
:market, { fulfillments: :selected_delivery_rate },
|
|
206
|
+
{ line_items: [{ variant: :prices }, { price_list: :catalog }] },
|
|
207
|
+
{ po_document_attachment: :blob }]
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Read through the store's own vocabulary, so a reason belonging to
|
|
211
|
+
# another store is a 404 rather than a silent mislabel.
|
|
212
|
+
def cancel_reason
|
|
213
|
+
id = params[:cancel_reason_id].presence
|
|
214
|
+
return if id.nil?
|
|
215
|
+
|
|
216
|
+
current_store.order_cancellation_reasons.find_by_prefix_id!(id)
|
|
128
217
|
end
|
|
129
218
|
|
|
130
219
|
private
|
|
131
220
|
|
|
132
|
-
def
|
|
133
|
-
|
|
221
|
+
def render_invalid_po_document
|
|
222
|
+
render_error(
|
|
223
|
+
code: ERROR_CODES[:validation_error],
|
|
224
|
+
message: Spree.t(:po_document_invalid_signed_id),
|
|
225
|
+
status: :unprocessable_content
|
|
226
|
+
)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def resolve_customer
|
|
230
|
+
customer_param = params[:customer_id].presence
|
|
134
231
|
return unless customer_param
|
|
135
232
|
|
|
136
|
-
Spree.
|
|
233
|
+
Spree.customer_class.
|
|
234
|
+
accessible_by(current_ability, :show).
|
|
235
|
+
find_by_prefix_id!(customer_param)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# An upsert arrives on the create action, so addresses come in under
|
|
239
|
+
# the create names. Translate them to the ones update accepts, or a
|
|
240
|
+
# replayed feed row would silently lose the address it sent.
|
|
241
|
+
def normalize_upsert_params!
|
|
242
|
+
# update runs under with_order_lock, which reads @order — normally
|
|
243
|
+
# set by set_resource, which the create path never runs.
|
|
244
|
+
@order = @resource
|
|
137
245
|
end
|
|
138
246
|
|
|
139
247
|
def order_create_params
|
|
140
|
-
normalize_params(
|
|
248
|
+
permitted = normalize_params(
|
|
141
249
|
params.permit(
|
|
142
|
-
:email, :customer_id, :
|
|
250
|
+
:email, :customer_id, :use_customer_default_address,
|
|
143
251
|
:currency, :market_id, :channel_id, :locale,
|
|
144
252
|
:customer_note, :internal_note,
|
|
253
|
+
# The buyer's own purchase-order reference, and the signed blob
|
|
254
|
+
# id of the document behind it — a PO arriving by email and
|
|
255
|
+
# keyed in is the draft-order flow plus these two fields.
|
|
256
|
+
:po_number, :po_document,
|
|
145
257
|
:shipping_address_id, :billing_address_id,
|
|
146
|
-
:preferred_stock_location_id,
|
|
258
|
+
:preferred_stock_location_id, :company_id,
|
|
147
259
|
:coupon_code,
|
|
148
260
|
metadata: {},
|
|
149
261
|
tags: [],
|
|
@@ -152,36 +264,55 @@ module Spree
|
|
|
152
264
|
items: item_permitted_keys
|
|
153
265
|
)
|
|
154
266
|
)
|
|
267
|
+
resolve_company_param(permitted)
|
|
155
268
|
end
|
|
156
269
|
|
|
157
270
|
def order_update_params
|
|
158
|
-
normalize_params(
|
|
271
|
+
permitted = normalize_params(
|
|
159
272
|
params.permit(
|
|
160
|
-
:email, :customer_id,
|
|
273
|
+
:email, :customer_id,
|
|
161
274
|
:customer_note, :internal_note,
|
|
275
|
+
:po_number, :po_document,
|
|
162
276
|
:currency, :locale, :market_id, :channel_id,
|
|
163
|
-
:preferred_stock_location_id,
|
|
277
|
+
:preferred_stock_location_id, :company_id,
|
|
164
278
|
metadata: {},
|
|
165
279
|
tags: [],
|
|
166
|
-
|
|
167
|
-
|
|
280
|
+
shipping_address: address_permitted_keys,
|
|
281
|
+
billing_address: address_permitted_keys,
|
|
168
282
|
items: item_permitted_keys
|
|
169
283
|
)
|
|
170
284
|
)
|
|
285
|
+
resolve_company_param(permitted)
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
# An incidental lookup like any other: resolved through the store so
|
|
289
|
+
# another tenant's node 404s instead of surfacing as a validation
|
|
290
|
+
# error (which would confirm the id exists). Reads the raw param —
|
|
291
|
+
# normalize_params has already decoded the prefixed id.
|
|
292
|
+
def resolve_company_param(permitted)
|
|
293
|
+
return permitted unless permitted.key?(:company_id)
|
|
294
|
+
|
|
295
|
+
permitted[:company_id] =
|
|
296
|
+
if params[:company_id].present?
|
|
297
|
+
current_store.companies.find_by_prefix_id!(params[:company_id]).id
|
|
298
|
+
else
|
|
299
|
+
nil
|
|
300
|
+
end
|
|
301
|
+
permitted
|
|
171
302
|
end
|
|
172
303
|
|
|
173
304
|
def address_permitted_keys
|
|
174
305
|
[
|
|
175
306
|
:firstname, :lastname, :first_name, :last_name,
|
|
176
307
|
:address1, :address2, :city,
|
|
177
|
-
:
|
|
308
|
+
:country_code, :state_code,
|
|
178
309
|
:zipcode, :postal_code, :phone, :alternative_phone,
|
|
179
310
|
:state_name, :company, :label
|
|
180
311
|
]
|
|
181
312
|
end
|
|
182
313
|
|
|
183
314
|
def item_permitted_keys
|
|
184
|
-
[:variant_id, :quantity, { metadata: {} }]
|
|
315
|
+
[:variant_id, :quantity, :price, { metadata: {} }]
|
|
185
316
|
end
|
|
186
317
|
end
|
|
187
318
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# The store's packaging vocabulary. Marking one row default makes it
|
|
6
|
+
# the box the store's own parcel quotes are built on; the model
|
|
7
|
+
# demotes whichever row held the flag before.
|
|
8
|
+
#
|
|
9
|
+
# On a marketplace this lists every row in the store, the operator's
|
|
10
|
+
# and each seller's, so `q[seller_id_eq]` narrows it to one owner. A
|
|
11
|
+
# row the operator writes here is the marketplace's: `seller_id` is
|
|
12
|
+
# not writable, and a seller's own packaging is theirs to edit through
|
|
13
|
+
# the seller API (docs/plans/6.0-seller-package-types.md).
|
|
14
|
+
class PackageTypesController < ResourceController
|
|
15
|
+
scoped_resource :package_types
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def model_class
|
|
20
|
+
Spree::PackageType
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def serializer_class
|
|
24
|
+
Spree.api.admin_package_type_serializer
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def collection_includes
|
|
28
|
+
[:seller]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def resource_permitted_attributes
|
|
32
|
+
[:name, :kind, :length, :width, :height, :dimensions_unit,
|
|
33
|
+
:weight, :max_weight, :weight_unit, :default, { metadata: {} }]
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -60,7 +60,7 @@ module Spree
|
|
|
60
60
|
# password. Revoke first, then mint the fresh token for this
|
|
61
61
|
# browser (the auto-sign-in below).
|
|
62
62
|
Spree::RefreshToken.revoke_all_for(user)
|
|
63
|
-
refresh_token = Spree::RefreshToken.create_for(user, request_env: request_env_for_token)
|
|
63
|
+
refresh_token = Spree::RefreshToken.create_for(user, audience: JWT_AUDIENCE_ADMIN, request_env: request_env_for_token)
|
|
64
64
|
set_refresh_cookie(refresh_token)
|
|
65
65
|
|
|
66
66
|
render json: auth_response(user)
|