spree_api 5.6.1 → 6.0.0.beta1
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 +9 -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 +16 -7
- 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 +157 -32
- 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 +231 -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 +65 -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 +59 -16
- data/app/controllers/spree/api/v3/resource_controller.rb +154 -38
- 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/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 +1 -1
- 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 +29 -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 +35 -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 +19 -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 +131 -19
- 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 +0 -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 +59 -0
- data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -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 +49 -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 +63 -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 +39 -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 +2 -7
- data/lib/spree/api/dependencies.rb +173 -227
- 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 +341 -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
|
@@ -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: try_spree_current_user,
|
|
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,8 +71,21 @@ 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: try_spree_current_user,
|
|
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
|
|
|
@@ -77,22 +97,50 @@ module Spree
|
|
|
77
97
|
end
|
|
78
98
|
end
|
|
79
99
|
|
|
80
|
-
# PATCH /api/v3/admin/orders/:id/resume
|
|
81
|
-
def resume
|
|
82
|
-
with_order_lock do
|
|
83
|
-
@resource.resume!
|
|
84
|
-
render json: serialize_resource(@resource.reload)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
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,25 @@ 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 are preloaded here rather than via scope_includes,
|
|
154
|
+
# which this override bypasses; the serializer reads them per row.
|
|
105
155
|
def scope
|
|
106
|
-
current_store.orders.accessible_by(current_ability, :show).
|
|
156
|
+
base = current_store.orders.accessible_by(current_ability, :show).
|
|
157
|
+
includes(line_items: { variant: :prices }).preload_associations_lazily
|
|
158
|
+
|
|
159
|
+
# Transient completion drafts (status draft + cart_id set) belong
|
|
160
|
+
# to in-flight checkouts, never to the admin. Admin drafts are the
|
|
161
|
+
# cart-less ones.
|
|
162
|
+
base.where(cart_id: nil).or(base.where.not(status: 'draft'))
|
|
107
163
|
end
|
|
108
164
|
|
|
165
|
+
# Through find_resource, not find_by_prefix_id! directly, so the
|
|
166
|
+
# external:<system>:<id> addressing the concern provides reaches
|
|
167
|
+
# orders — an ERP that pushed its order number wants to read the
|
|
168
|
+
# order back by it.
|
|
109
169
|
def set_resource
|
|
110
|
-
@resource =
|
|
170
|
+
@resource = find_resource
|
|
111
171
|
@order = @resource # needed for OrderLock
|
|
112
172
|
authorize_resource!(@resource)
|
|
113
173
|
end
|
|
@@ -115,35 +175,81 @@ module Spree
|
|
|
115
175
|
# Map state transition actions to :update permission
|
|
116
176
|
def authorize_resource!(resource = @resource, action = action_name.to_sym)
|
|
117
177
|
mapped_action = case action
|
|
118
|
-
when :complete, :cancel, :approve, :
|
|
178
|
+
when :complete, :cancel, :approve, :resend_confirmation, :resend_digital_links
|
|
119
179
|
:update
|
|
180
|
+
when :po_document
|
|
181
|
+
:show
|
|
120
182
|
else
|
|
121
183
|
action
|
|
122
184
|
end
|
|
123
185
|
authorize!(mapped_action, resource)
|
|
124
186
|
end
|
|
125
187
|
|
|
188
|
+
# seller is preloaded because its id is read on every row and an
|
|
189
|
+
# expanded list renders the whole profile; order_group is not, since
|
|
190
|
+
# only its id is reported and that comes off the order's own column.
|
|
191
|
+
# Variant prices ride along because the admin line-item serializer
|
|
192
|
+
# reads the base catalog price for every row (the negotiated-price
|
|
193
|
+
# comparison); without it each line costs its own price query.
|
|
126
194
|
def collection_includes
|
|
127
|
-
|
|
195
|
+
# `market` is the withdrawal deadline's other input. Fulfillments
|
|
196
|
+
# are loaded with their selected rate because the freight summary
|
|
197
|
+
# reads it — otherwise a page of orders costs a query per
|
|
198
|
+
# fulfillment for a field that is nil on every parcel order.
|
|
199
|
+
[:customer, :channel, :seller, :external_references, :cancel_reason,
|
|
200
|
+
:market, { fulfillments: :selected_delivery_rate },
|
|
201
|
+
{ line_items: { variant: :prices } }, { po_document_attachment: :blob }]
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Read through the store's own vocabulary, so a reason belonging to
|
|
205
|
+
# another store is a 404 rather than a silent mislabel.
|
|
206
|
+
def cancel_reason
|
|
207
|
+
id = params[:cancel_reason_id].presence
|
|
208
|
+
return if id.nil?
|
|
209
|
+
|
|
210
|
+
current_store.order_cancellation_reasons.find_by_prefix_id!(id)
|
|
128
211
|
end
|
|
129
212
|
|
|
130
213
|
private
|
|
131
214
|
|
|
132
|
-
def
|
|
133
|
-
|
|
215
|
+
def render_invalid_po_document
|
|
216
|
+
render_error(
|
|
217
|
+
code: ERROR_CODES[:validation_error],
|
|
218
|
+
message: Spree.t(:po_document_invalid_signed_id),
|
|
219
|
+
status: :unprocessable_content
|
|
220
|
+
)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def resolve_customer
|
|
224
|
+
customer_param = params[:customer_id].presence
|
|
134
225
|
return unless customer_param
|
|
135
226
|
|
|
136
|
-
Spree.
|
|
227
|
+
Spree.customer_class.
|
|
228
|
+
accessible_by(current_ability, :show).
|
|
229
|
+
find_by_prefix_id!(customer_param)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# An upsert arrives on the create action, so addresses come in under
|
|
233
|
+
# the create names. Translate them to the ones update accepts, or a
|
|
234
|
+
# replayed feed row would silently lose the address it sent.
|
|
235
|
+
def normalize_upsert_params!
|
|
236
|
+
# update runs under with_order_lock, which reads @order — normally
|
|
237
|
+
# set by set_resource, which the create path never runs.
|
|
238
|
+
@order = @resource
|
|
137
239
|
end
|
|
138
240
|
|
|
139
241
|
def order_create_params
|
|
140
|
-
normalize_params(
|
|
242
|
+
permitted = normalize_params(
|
|
141
243
|
params.permit(
|
|
142
|
-
:email, :customer_id, :
|
|
244
|
+
:email, :customer_id, :use_customer_default_address,
|
|
143
245
|
:currency, :market_id, :channel_id, :locale,
|
|
144
246
|
:customer_note, :internal_note,
|
|
247
|
+
# The buyer's own purchase-order reference, and the signed blob
|
|
248
|
+
# id of the document behind it — a PO arriving by email and
|
|
249
|
+
# keyed in is the draft-order flow plus these two fields.
|
|
250
|
+
:po_number, :po_document,
|
|
145
251
|
:shipping_address_id, :billing_address_id,
|
|
146
|
-
:preferred_stock_location_id,
|
|
252
|
+
:preferred_stock_location_id, :company_id,
|
|
147
253
|
:coupon_code,
|
|
148
254
|
metadata: {},
|
|
149
255
|
tags: [],
|
|
@@ -152,36 +258,55 @@ module Spree
|
|
|
152
258
|
items: item_permitted_keys
|
|
153
259
|
)
|
|
154
260
|
)
|
|
261
|
+
resolve_company_param(permitted)
|
|
155
262
|
end
|
|
156
263
|
|
|
157
264
|
def order_update_params
|
|
158
|
-
normalize_params(
|
|
265
|
+
permitted = normalize_params(
|
|
159
266
|
params.permit(
|
|
160
|
-
:email, :customer_id,
|
|
267
|
+
:email, :customer_id,
|
|
161
268
|
:customer_note, :internal_note,
|
|
269
|
+
:po_number, :po_document,
|
|
162
270
|
:currency, :locale, :market_id, :channel_id,
|
|
163
|
-
:preferred_stock_location_id,
|
|
271
|
+
:preferred_stock_location_id, :company_id,
|
|
164
272
|
metadata: {},
|
|
165
273
|
tags: [],
|
|
166
|
-
|
|
167
|
-
|
|
274
|
+
shipping_address: address_permitted_keys,
|
|
275
|
+
billing_address: address_permitted_keys,
|
|
168
276
|
items: item_permitted_keys
|
|
169
277
|
)
|
|
170
278
|
)
|
|
279
|
+
resolve_company_param(permitted)
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# An incidental lookup like any other: resolved through the store so
|
|
283
|
+
# another tenant's node 404s instead of surfacing as a validation
|
|
284
|
+
# error (which would confirm the id exists). Reads the raw param —
|
|
285
|
+
# normalize_params has already decoded the prefixed id.
|
|
286
|
+
def resolve_company_param(permitted)
|
|
287
|
+
return permitted unless permitted.key?(:company_id)
|
|
288
|
+
|
|
289
|
+
permitted[:company_id] =
|
|
290
|
+
if params[:company_id].present?
|
|
291
|
+
current_store.companies.find_by_prefix_id!(params[:company_id]).id
|
|
292
|
+
else
|
|
293
|
+
nil
|
|
294
|
+
end
|
|
295
|
+
permitted
|
|
171
296
|
end
|
|
172
297
|
|
|
173
298
|
def address_permitted_keys
|
|
174
299
|
[
|
|
175
300
|
:firstname, :lastname, :first_name, :last_name,
|
|
176
301
|
:address1, :address2, :city,
|
|
177
|
-
:
|
|
302
|
+
:country_code, :state_code,
|
|
178
303
|
:zipcode, :postal_code, :phone, :alternative_phone,
|
|
179
304
|
:state_name, :company, :label
|
|
180
305
|
]
|
|
181
306
|
end
|
|
182
307
|
|
|
183
308
|
def item_permitted_keys
|
|
184
|
-
[:variant_id, :quantity, { metadata: {} }]
|
|
309
|
+
[:variant_id, :quantity, :price, { metadata: {} }]
|
|
185
310
|
end
|
|
186
311
|
end
|
|
187
312
|
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)
|
|
@@ -43,12 +43,23 @@ module Spree
|
|
|
43
43
|
Spree.api.admin_payment_method_serializer
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
# Explicit allowlist per the v3 convention — flat params
|
|
47
|
-
# reach into the global `Spree::PermittedAttributes` registry
|
|
48
|
-
# (which is the legacy Rails admin's surface). `type` and
|
|
46
|
+
# Explicit allowlist per the v3 convention — flat params. `type` and
|
|
49
47
|
# `preferences` are added by `SubclassedResource` on top.
|
|
48
|
+
# Deliberately NOT routed through `normalize_params`: gateway
|
|
49
|
+
# `preferences` are opaque provider values, and prefixed-ID resolution
|
|
50
|
+
# recurses into nested hashes — a Stripe `webhook_endpoint_id` like
|
|
51
|
+
# `we_1MqJ8b...` matches the prefixed-ID shape and would be decoded to
|
|
52
|
+
# an integer. `type` and `preferences` are added by `SubclassedResource`.
|
|
50
53
|
def permitted_params
|
|
51
|
-
params.permit(
|
|
54
|
+
params.permit(
|
|
55
|
+
:name, :description, :active, :storefront_visible, :auto_capture, :capture_method, :position,
|
|
56
|
+
*model_additional_permitted_attributes,
|
|
57
|
+
metadata: {}, preferences: {}
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def scope
|
|
62
|
+
super.ordered
|
|
52
63
|
end
|
|
53
64
|
|
|
54
65
|
# `types` is read-only discovery — maps to the read scope + :show ability.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# How this installation can pay its sellers, and which of those a store
|
|
6
|
+
# could use today.
|
|
7
|
+
#
|
|
8
|
+
# Discovery rather than CRUD: providers are classes registered in code,
|
|
9
|
+
# not rows — so there is no serializer, and each class describes itself
|
|
10
|
+
# (`to_api_hash`), the same shape `/tax_providers` uses.
|
|
11
|
+
#
|
|
12
|
+
# Whether a provider needs sellers to hold an account with it is the
|
|
13
|
+
# part worth surfacing at selection time: choosing one changes what a
|
|
14
|
+
# marketplace has to ask of its sellers before it can pay them, which
|
|
15
|
+
# is better known before the choice than after.
|
|
16
|
+
class PayoutProvidersController < BaseController
|
|
17
|
+
scoped_resource :settings
|
|
18
|
+
|
|
19
|
+
# GET /api/v3/admin/payout_providers
|
|
20
|
+
def index
|
|
21
|
+
render json: { data: Spree.payout_providers.map { |provider| provider.to_api_hash(current_store) } }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# The permission catalog discovery endpoint — the vocabulary the role
|
|
6
|
+
# editor and the API-key scope picker render. It is vocabulary, not
|
|
7
|
+
# data, so any authenticated admin credential may read it (same class
|
|
8
|
+
# of exemption as `/tags`).
|
|
9
|
+
#
|
|
10
|
+
# Staff keys only. Both surfaces this feeds build something owned by
|
|
11
|
+
# the store — a store role, a secret key — and a key another audience
|
|
12
|
+
# holds (a seller's own profile or books) would render as an option
|
|
13
|
+
# that fails validation the moment it is picked.
|
|
14
|
+
class PermissionsController < Admin::BaseController
|
|
15
|
+
skip_scope_check!
|
|
16
|
+
|
|
17
|
+
# GET /api/v3/admin/permissions
|
|
18
|
+
def index
|
|
19
|
+
entries = Spree.permissions.entries
|
|
20
|
+
|
|
21
|
+
render json: {
|
|
22
|
+
data: entries.map { |entry| Spree.api.admin_permission_serializer.new(entry).to_h },
|
|
23
|
+
meta: { count: entries.size }
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# The store's own legal documents. A seller's policies belong to the
|
|
6
|
+
# seller and are managed on the seller branch — this controller never
|
|
7
|
+
# reaches them, since its scope is the store's own association.
|
|
8
|
+
class PoliciesController < ResourceController
|
|
9
|
+
scoped_resource :settings
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def model_class
|
|
14
|
+
Spree::Policy
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def serializer_class
|
|
18
|
+
Spree.api.admin_policy_serializer
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def resource_permitted_attributes
|
|
22
|
+
[:name, :slug, :body]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Accept slug (e.g. returns-policy) or prefixed ID (e.g. pol_abc123),
|
|
26
|
+
# matching the storefront's lookup.
|
|
27
|
+
def find_resource
|
|
28
|
+
if params[:id].to_s.start_with?('pol_')
|
|
29
|
+
scope.find_by_prefix_id!(params[:id])
|
|
30
|
+
else
|
|
31
|
+
scope.friendly.find(params[:id])
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def scope
|
|
36
|
+
super.order(:name)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module PriceLists
|
|
6
|
+
# The products a price list covers — the uniform nested membership
|
|
7
|
+
# surface (see Spree::Api::V3::Admin::ProductMembership). Membership
|
|
8
|
+
# is derived from the list's price rows: adding a product
|
|
9
|
+
# materializes a placeholder price for every variant × store
|
|
10
|
+
# currency (the spreadsheet's empty cells), removing hard-deletes
|
|
11
|
+
# its price rows. Unordered — a price list prices, it never
|
|
12
|
+
# merchandises — so listing is by name.
|
|
13
|
+
class ProductsController < ResourceController
|
|
14
|
+
include Spree::Api::V3::Admin::ProductMembership
|
|
15
|
+
|
|
16
|
+
# Price lists ride the products scope like their parent
|
|
17
|
+
# controller — no separate read_price_lists scope.
|
|
18
|
+
scoped_resource :products
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def serializer_class
|
|
23
|
+
Spree.api.admin_price_list_product_serializer
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# The resolver rides along in the serializer params, preloaded
|
|
27
|
+
# with this page's variants — one query for the page rather than
|
|
28
|
+
# one per row (see Catalogs::ProductsController, the same shape).
|
|
29
|
+
def serializer_params
|
|
30
|
+
return super unless expanded_keys.include?('price_list_price')
|
|
31
|
+
|
|
32
|
+
super.merge(price_list_price_resolver: price_list_price_resolver)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# The list read as it stands, draft or not: this is its editor.
|
|
36
|
+
def price_list_price_resolver
|
|
37
|
+
@price_list_price_resolver ||=
|
|
38
|
+
Spree::Catalogs::ResolvePrices.new(price_list: @price_list, currency: current_currency).
|
|
39
|
+
tap { |resolver| resolver.preload(priced_variants) }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def priced_variants
|
|
43
|
+
Array(@collection).flat_map { |product| product.variants.to_a }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Every row lists its variants and prices each of them, so what
|
|
47
|
+
# the rows read comes down with the page: the prices the resolver
|
|
48
|
+
# picks from, the option values that name the variant, the stock
|
|
49
|
+
# levels behind the flags. `default_variant` separately, since it
|
|
50
|
+
# is its own belongs_to with a cache of its own.
|
|
51
|
+
# Only what this page reads: the card's thumbnail, and every
|
|
52
|
+
# variant with the rows and option values the resolver and the
|
|
53
|
+
# variant rows need. `default_variant` is deliberately absent —
|
|
54
|
+
# it is a separate `belongs_to` with a cache of its own, so
|
|
55
|
+
# reading it here would re-query option values per row. Publications, stock levels and the default
|
|
56
|
+
# variant's own prices are deliberately absent — the serializer
|
|
57
|
+
# here is not the admin product serializer and never asks for them.
|
|
58
|
+
def collection_includes
|
|
59
|
+
[
|
|
60
|
+
:primary_media,
|
|
61
|
+
{ variants: [:prices, { option_values: :option_type }] }
|
|
62
|
+
]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# DISTINCT (the base default): a product joins once per
|
|
66
|
+
# variant × currency price row.
|
|
67
|
+
def scope
|
|
68
|
+
product_scope.
|
|
69
|
+
joins(variants: :prices).
|
|
70
|
+
where(Spree::Price.table_name => { price_list_id: @price_list.id }).
|
|
71
|
+
order(:name)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def add_member_products(products)
|
|
75
|
+
@price_list.add_products(products.map(&:id))
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def remove_member_products(products)
|
|
79
|
+
@price_list.remove_products(products.map(&:id))
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def set_parent
|
|
83
|
+
@price_list = current_store.price_lists.
|
|
84
|
+
accessible_by(current_ability, parent_ability_action).
|
|
85
|
+
find_by_prefix_id!(params[:price_list_id])
|
|
86
|
+
authorize_parent!(@price_list)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|