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
|
@@ -4,6 +4,7 @@ module Spree
|
|
|
4
4
|
module Admin
|
|
5
5
|
class ProductsController < ResourceController
|
|
6
6
|
include Spree::Api::V3::BulkOperations
|
|
7
|
+
include Spree::Api::V3::Admin::ProductListing
|
|
7
8
|
|
|
8
9
|
scoped_resource :products
|
|
9
10
|
|
|
@@ -11,6 +12,8 @@ module Spree
|
|
|
11
12
|
:bulk_status_update,
|
|
12
13
|
:bulk_add_to_categories,
|
|
13
14
|
:bulk_remove_from_categories,
|
|
15
|
+
:bulk_add_to_collections,
|
|
16
|
+
:bulk_remove_from_collections,
|
|
14
17
|
:bulk_add_to_channels,
|
|
15
18
|
:bulk_remove_from_channels,
|
|
16
19
|
:bulk_destroy
|
|
@@ -29,6 +32,20 @@ module Spree
|
|
|
29
32
|
end
|
|
30
33
|
end
|
|
31
34
|
|
|
35
|
+
# PATCH /api/v3/admin/products/:id/approve
|
|
36
|
+
#
|
|
37
|
+
# Accepting a product a seller submitted, putting it on sale.
|
|
38
|
+
def approve
|
|
39
|
+
run_review_workflow(Spree.product_approve_workflow)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# PATCH /api/v3/admin/products/:id/reject
|
|
43
|
+
#
|
|
44
|
+
# Turning a submission down. The reason goes back to the seller.
|
|
45
|
+
def reject
|
|
46
|
+
run_review_workflow(Spree.product_reject_workflow, reason: params[:reason])
|
|
47
|
+
end
|
|
48
|
+
|
|
32
49
|
# POST /api/v3/admin/products/bulk_status_update
|
|
33
50
|
# Body: { ids: [...], status: 'draft' | 'active' | 'archived' }
|
|
34
51
|
def bulk_status_update
|
|
@@ -42,23 +59,47 @@ module Spree
|
|
|
42
59
|
)
|
|
43
60
|
end
|
|
44
61
|
|
|
45
|
-
|
|
62
|
+
# Products in review are excluded rather than refused: a bulk
|
|
63
|
+
# activate over a mixed selection should still do the plain ones,
|
|
64
|
+
# and moving the rest is `approve`/`reject`, which records who
|
|
65
|
+
# decided (docs/plans/6.0-seller-product-submission.md).
|
|
66
|
+
movable = bulk_collection.where.not(status: Spree::Product::REVIEW_STATUSES)
|
|
67
|
+
skipped = bulk_collection.where(status: Spree::Product::REVIEW_STATUSES).count
|
|
68
|
+
|
|
69
|
+
count = movable.update_all(status: params[:status], updated_at: Time.current)
|
|
46
70
|
# `update_all` skips `after_commit`, so the search index won't refresh on its own.
|
|
47
|
-
|
|
71
|
+
movable.each(&:enqueue_search_index)
|
|
72
|
+
|
|
73
|
+
payload = { product_count: count, status: params[:status] }
|
|
74
|
+
# Only when it happened: a key on every response would say
|
|
75
|
+
# "nothing was skipped" to clients that never skip anything.
|
|
76
|
+
payload[:skipped_in_review_count] = skipped if skipped.positive?
|
|
48
77
|
|
|
49
|
-
render json:
|
|
78
|
+
render json: payload
|
|
50
79
|
end
|
|
51
80
|
|
|
52
81
|
# POST /api/v3/admin/products/bulk_add_to_categories
|
|
53
82
|
# Body: { ids: [...], category_ids: [...] }
|
|
54
83
|
def bulk_add_to_categories
|
|
55
|
-
apply_categories(Spree::
|
|
84
|
+
apply_categories(Spree::Categories::AddProducts)
|
|
56
85
|
end
|
|
57
86
|
|
|
58
87
|
# POST /api/v3/admin/products/bulk_remove_from_categories
|
|
59
88
|
# Body: { ids: [...], category_ids: [...] }
|
|
60
89
|
def bulk_remove_from_categories
|
|
61
|
-
apply_categories(Spree::
|
|
90
|
+
apply_categories(Spree::Categories::RemoveProducts)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# POST /api/v3/admin/products/bulk_add_to_collections
|
|
94
|
+
# Body: { ids: [...], collection_ids: [...] }
|
|
95
|
+
def bulk_add_to_collections
|
|
96
|
+
apply_collections(Spree::Collections::AddProducts)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# POST /api/v3/admin/products/bulk_remove_from_collections
|
|
100
|
+
# Body: { ids: [...], collection_ids: [...] }
|
|
101
|
+
def bulk_remove_from_collections
|
|
102
|
+
apply_collections(Spree::Collections::RemoveProducts)
|
|
62
103
|
end
|
|
63
104
|
|
|
64
105
|
# POST /api/v3/admin/products/bulk_add_to_channels
|
|
@@ -101,6 +142,17 @@ module Spree
|
|
|
101
142
|
render json: { product_count: destroyed }
|
|
102
143
|
end
|
|
103
144
|
|
|
145
|
+
# DELETE /api/v3/admin/products/:id
|
|
146
|
+
def destroy
|
|
147
|
+
result = Spree.product_destroy_workflow.call(product: @resource)
|
|
148
|
+
|
|
149
|
+
if result.success?
|
|
150
|
+
head :no_content
|
|
151
|
+
else
|
|
152
|
+
render_result_error(result)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
104
156
|
protected
|
|
105
157
|
|
|
106
158
|
def model_class
|
|
@@ -111,14 +163,12 @@ module Spree
|
|
|
111
163
|
Spree.api.admin_product_serializer
|
|
112
164
|
end
|
|
113
165
|
|
|
114
|
-
def
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
variants: [:prices, stock_items: [:stock_location, :active_stock_reservations]]
|
|
121
|
-
]
|
|
166
|
+
def create_workflow
|
|
167
|
+
Spree.product_create_workflow
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def update_workflow
|
|
171
|
+
Spree.product_update_workflow
|
|
122
172
|
end
|
|
123
173
|
|
|
124
174
|
# Use SearchProvider::Database for collection to handle price/best_selling
|
|
@@ -157,56 +207,108 @@ module Spree
|
|
|
157
207
|
# docs/plans/6.0-remove-master-variant.md.
|
|
158
208
|
#
|
|
159
209
|
# Top-level `prices` is a convenience for simple (no-options)
|
|
160
|
-
# products: the merchant doesn't need to know the
|
|
161
|
-
#
|
|
162
|
-
# `Spree::Product#prices=` setter forwards them to
|
|
210
|
+
# products: the merchant doesn't need to know about the default
|
|
211
|
+
# variant, so they ship prices alongside name/status and the
|
|
212
|
+
# `Spree::Product#prices=` setter forwards them to it.
|
|
163
213
|
params.permit(
|
|
214
|
+
*model_additional_permitted_attributes,
|
|
164
215
|
:name, :description, :slug, :status,
|
|
165
216
|
:meta_title, :meta_description, :meta_keywords,
|
|
166
|
-
:tax_category_id,
|
|
167
|
-
:promotionable,
|
|
217
|
+
:tax_category_id, :product_type_id, :delivery_profile_id,
|
|
218
|
+
:promotionable,
|
|
168
219
|
tags: [],
|
|
169
220
|
category_ids: [],
|
|
221
|
+
# Manual collection membership only — the model setter ignores
|
|
222
|
+
# incoming automatic collections and preserves the product's
|
|
223
|
+
# existing ones, since those are materialized from their rules.
|
|
224
|
+
#
|
|
225
|
+
# Deliberately reachable with `write_products` rather than
|
|
226
|
+
# `write_collections`: filing a product into its groupings is part
|
|
227
|
+
# of maintaining the product, which is why `category_ids` and the
|
|
228
|
+
# bulk membership endpoints have always worked this way too.
|
|
229
|
+
# Creating or configuring a collection still needs
|
|
230
|
+
# `write_collections`.
|
|
231
|
+
collection_ids: [],
|
|
170
232
|
metadata: {},
|
|
171
233
|
prices: [:amount, :compare_at_amount, :currency],
|
|
172
234
|
# Inline custom field values keyed by definition id. The model
|
|
173
|
-
# setter (`Spree::
|
|
235
|
+
# setter (`Spree::HasCustomFields#custom_fields=`) validates each
|
|
174
236
|
# entry against its definition. We permit `value` as a scalar AND
|
|
175
|
-
# as `value: []` / `value: {}` so JSON
|
|
237
|
+
# as `value: []` / `value: {}` so JSON custom_fields round-trip
|
|
176
238
|
# whether the parsed payload is an array or an object, while
|
|
177
239
|
# text/number/boolean ship scalars.
|
|
178
240
|
custom_fields: [:id, :custom_field_definition_id, :value, { value: [] }, { value: {} }],
|
|
179
|
-
# Inline media. Entries with `id` patch an existing asset
|
|
180
|
-
#
|
|
181
|
-
#
|
|
182
|
-
# alongside the rest of the product
|
|
183
|
-
# `Spree::
|
|
184
|
-
|
|
241
|
+
# Inline media. Entries with `id` patch an existing asset.
|
|
242
|
+
# Entries with `signed_id` create + attach a fresh upload; an
|
|
243
|
+
# external video creates with a URL and no file. Lets the
|
|
244
|
+
# dashboard ship media changes alongside the rest of the product
|
|
245
|
+
# form. See `Spree::Products::NestedAttributes`.
|
|
246
|
+
#
|
|
247
|
+
# `external_url` is deliberately not permitted here: it makes the
|
|
248
|
+
# server fetch a URL the caller chose, so it belongs to trusted
|
|
249
|
+
# importers rather than to a request body.
|
|
250
|
+
media: [*Spree::Media::WRITABLE_ATTRIBUTES, :id, :signed_id, :source_media_id, { variant_ids: [] }],
|
|
251
|
+
# Inline digital files, so a new product ships its downloadable
|
|
252
|
+
# files in the same request. Additive: an entry carries a
|
|
253
|
+
# `signed_id` (uploaded file) or a `provider_type` (provider-backed
|
|
254
|
+
# asset), and an `id` patches that asset in place rather than
|
|
255
|
+
# building a duplicate — so replaying a product's list on update
|
|
256
|
+
# does not accumulate copies. Removal uses the nested
|
|
257
|
+
# digital_assets endpoint. See `Spree::Product#digital_assets=`.
|
|
258
|
+
digital_assets: [:id, :signed_id, :variant_id, :provider_type, :authorized_clicks, :authorized_days, provider_settings: {}],
|
|
185
259
|
product_publications: [:id, :channel_id, :published_at, :unpublished_at],
|
|
186
260
|
variants: [
|
|
187
261
|
:id, :sku, :barcode,
|
|
188
262
|
:cost_price, :cost_currency,
|
|
189
263
|
:weight, :height, :width, :depth, :weight_unit, :dimensions_unit,
|
|
264
|
+
:hs_code, :country_of_origin, :customs_description,
|
|
265
|
+
:minimum_order_quantity, :order_multiple, :purchase_unit, :units_per_carton,
|
|
266
|
+
:carton_package_type_id, :carton_weight, :cartons_per_pallet,
|
|
267
|
+
:seller_id, :delivery_profile_id,
|
|
190
268
|
:track_inventory, :preorderable, :preorder_ships_at, :backorder_limit, :tax_category_id, :position,
|
|
191
269
|
options: [:name, :value],
|
|
192
270
|
prices: [:amount, :compare_at_amount, :currency],
|
|
193
|
-
|
|
271
|
+
stock_levels: [:id, :stock_location_id, :count_on_hand, :backorderable]
|
|
194
272
|
]
|
|
195
|
-
)
|
|
273
|
+
).tap { |attrs| attrs.delete(:status) if review_status?(attrs[:status]) }
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
# A review status is an outcome, not a value to assign: `proposed`
|
|
277
|
+
# means a seller asked, and `rejected` means somebody decided. Both
|
|
278
|
+
# are reached through the workflows behind `approve`/`reject`, so a
|
|
279
|
+
# status naming one here is dropped rather than written — the same
|
|
280
|
+
# reason `bulk_status_update` validates against `STATUSES` and not
|
|
281
|
+
# the full list (docs/plans/6.0-seller-product-submission.md).
|
|
282
|
+
def review_status?(status)
|
|
283
|
+
status.present? && Spree::Product::REVIEW_STATUSES.include?(status.to_s)
|
|
196
284
|
end
|
|
197
285
|
|
|
198
286
|
private
|
|
199
287
|
|
|
288
|
+
# Approving and rejecting are edits to the catalog, so they answer to
|
|
289
|
+
# the same key as any other product write.
|
|
290
|
+
def run_review_workflow(workflow, **arguments)
|
|
291
|
+
@resource = find_resource
|
|
292
|
+
authorize!(:update, @resource)
|
|
293
|
+
|
|
294
|
+
result = workflow.call(product: @resource, reviewer: try_spree_current_user, **arguments)
|
|
295
|
+
|
|
296
|
+
if result.success?
|
|
297
|
+
render json: serialize_resource(@resource.reload)
|
|
298
|
+
else
|
|
299
|
+
render_service_error(@resource.errors.presence || result.error)
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
200
303
|
def search_provider
|
|
201
304
|
@search_provider ||= Spree::SearchProvider::Database.new(current_store)
|
|
202
305
|
end
|
|
203
306
|
|
|
204
|
-
#
|
|
205
|
-
# tag changes can flip automatic-taxon matches, and `Tags::Bulk*`
|
|
307
|
+
# Tag changes can flip automatic-collection matches, and `Tags::Bulk*`
|
|
206
308
|
# touch records via `touch_all` (which skips `after_commit`), so the
|
|
207
309
|
# search index needs an explicit kick.
|
|
208
310
|
def after_bulk_tags_change
|
|
209
|
-
Spree::Product.
|
|
311
|
+
Spree::Product.bulk_auto_match_collections(current_store, bulk_collection.ids)
|
|
210
312
|
bulk_collection.each(&:enqueue_search_index)
|
|
211
313
|
end
|
|
212
314
|
|
|
@@ -221,12 +323,26 @@ module Spree
|
|
|
221
323
|
categories = current_store.categories.
|
|
222
324
|
accessible_by(current_ability, :update).where(id: category_ids)
|
|
223
325
|
|
|
224
|
-
service.call(
|
|
225
|
-
Spree::Product.bulk_auto_match_taxons(current_store, bulk_collection.ids)
|
|
326
|
+
service.call(categories: categories, products: bulk_collection)
|
|
226
327
|
|
|
227
328
|
render json: { product_count: bulk_collection.size, category_count: categories.size }
|
|
228
329
|
end
|
|
229
330
|
|
|
331
|
+
def apply_collections(service)
|
|
332
|
+
authorize! :update, model_class
|
|
333
|
+
|
|
334
|
+
# Only manual collections accept curation — automatic membership is
|
|
335
|
+
# rebuilt from rules, so a manual add/remove would be lost on the next
|
|
336
|
+
# regeneration (mirrors apply_categories, whose association is manual).
|
|
337
|
+
collection_ids = decode_ids(params[:collection_ids])
|
|
338
|
+
collections = current_store.collections.manual.
|
|
339
|
+
accessible_by(current_ability, :update).where(id: collection_ids)
|
|
340
|
+
|
|
341
|
+
service.call(collections: collections, products: bulk_collection)
|
|
342
|
+
|
|
343
|
+
render json: { product_count: bulk_collection.size, collection_count: collections.size }
|
|
344
|
+
end
|
|
345
|
+
|
|
230
346
|
def scoped_channels
|
|
231
347
|
channel_ids = decode_ids(params[:channel_ids])
|
|
232
348
|
current_store.channels.accessible_by(current_ability, :manage).where(id: channel_ids)
|
|
@@ -30,9 +30,13 @@ module Spree
|
|
|
30
30
|
klass = resolve_subclass(params[:type])
|
|
31
31
|
return render_unknown_type unless klass && klass.respond_to?(:calculators)
|
|
32
32
|
|
|
33
|
+
# `api_type`, not the Ruby class name: it is what the action
|
|
34
|
+
# serializer reports for the calculator a record already has, and
|
|
35
|
+
# what a client matches against to find it in this list. The write
|
|
36
|
+
# path accepts either form.
|
|
33
37
|
data = klass.calculators.map do |calc|
|
|
34
38
|
{
|
|
35
|
-
type: calc.
|
|
39
|
+
type: calc.api_type,
|
|
36
40
|
label: calc.respond_to?(:description) ? calc.description : calc.to_s.demodulize.titleize,
|
|
37
41
|
preference_schema: calc.respond_to?(:serialized_preference_schema) ? calc.serialized_preference_schema : []
|
|
38
42
|
}
|
|
@@ -52,7 +56,7 @@ module Spree
|
|
|
52
56
|
end
|
|
53
57
|
|
|
54
58
|
def permitted_params
|
|
55
|
-
params.permit(:type, preferences: {})
|
|
59
|
+
params.permit(*model_additional_permitted_attributes, :type, preferences: {})
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
# `types`/`calculators` are read-only discovery — read scope + :show ability.
|
|
@@ -29,11 +29,7 @@ module Spree
|
|
|
29
29
|
# every built-in rule/action's expected keys. Plugin-defined
|
|
30
30
|
# subclasses can add to it — see `additional_permitted_attributes`
|
|
31
31
|
# below.
|
|
32
|
-
def
|
|
33
|
-
normalize_params(params.permit(*permitted_attributes))
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def permitted_attributes
|
|
32
|
+
def resource_permitted_attributes
|
|
37
33
|
[
|
|
38
34
|
:name, :description, :code, :path,
|
|
39
35
|
:starts_at, :expires_at, :usage_limit, :match_policy,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module PurchaseOrders
|
|
6
|
+
# The deliveries booked against one purchase order. Recording one
|
|
7
|
+
# is how the order is received: this is the moment purchased goods
|
|
8
|
+
# first count toward availability.
|
|
9
|
+
class StockReceiptsController < ResourceController
|
|
10
|
+
include Spree::Api::V3::Admin::StockReceiptActions
|
|
11
|
+
|
|
12
|
+
scoped_resource :purchasing
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
def set_parent
|
|
17
|
+
@parent = current_store.purchase_orders.find_by_prefix_id!(params[:purchase_order_id])
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_workflow
|
|
21
|
+
Spree.purchase_order_receive_workflow
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def receivable_keyword
|
|
25
|
+
:purchase_order
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# Goods bought from a supplier.
|
|
6
|
+
#
|
|
7
|
+
# Ordered units never count toward availability: nothing here touches
|
|
8
|
+
# `count_on_hand` until `receive` runs, because a merchant who has
|
|
9
|
+
# ordered stock does not have it.
|
|
10
|
+
#
|
|
11
|
+
# Each status change is its own member action rather than a PATCH that
|
|
12
|
+
# mass-assigns `status`, because receiving carries the quantities the
|
|
13
|
+
# warehouse counted.
|
|
14
|
+
class PurchaseOrdersController < ResourceController
|
|
15
|
+
include Spree::Api::V3::Admin::ReceivableActions
|
|
16
|
+
|
|
17
|
+
scoped_resource :purchasing
|
|
18
|
+
|
|
19
|
+
# The base registers this for show/update/destroy; a second
|
|
20
|
+
# `before_action :set_resource` replaces that registration rather than
|
|
21
|
+
# adding to it, so those three are listed again here.
|
|
22
|
+
before_action :set_resource, only: [:show, :update, :destroy, :mark_ordered, :mark_draft, :close, :cancel]
|
|
23
|
+
|
|
24
|
+
# DELETE /api/v3/admin/purchase_orders/:id
|
|
25
|
+
#
|
|
26
|
+
# Only a draft. Once the order has gone to the supplier it is a
|
|
27
|
+
# matter of record between two businesses, and is cancelled rather
|
|
28
|
+
# than deleted.
|
|
29
|
+
def destroy
|
|
30
|
+
return super if @resource.draft?
|
|
31
|
+
|
|
32
|
+
render_error(
|
|
33
|
+
code: 'invalid_status',
|
|
34
|
+
message: Spree.t('purchase_order.errors.only_draft_can_be_deleted'),
|
|
35
|
+
status: :unprocessable_content
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# PATCH /api/v3/admin/purchase_orders/:id/mark_ordered
|
|
40
|
+
def mark_ordered
|
|
41
|
+
result = Spree.purchase_order_mark_ordered_workflow.call(purchase_order: @resource)
|
|
42
|
+
return render_result_error(result) unless result.success?
|
|
43
|
+
|
|
44
|
+
render json: serialize_resource(result.value)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# PATCH /api/v3/admin/purchase_orders/:id/receive
|
|
48
|
+
# PATCH /api/v3/admin/purchase_orders/:id/mark_draft
|
|
49
|
+
def mark_draft
|
|
50
|
+
result = Spree.purchase_order_mark_draft_workflow.call(purchase_order: @resource)
|
|
51
|
+
return render_result_error(result) unless result.success?
|
|
52
|
+
|
|
53
|
+
render json: serialize_resource(result.value)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# PATCH /api/v3/admin/purchase_orders/:id/close
|
|
57
|
+
#
|
|
58
|
+
# Deliveries are recorded through the nested stock receipts; this is
|
|
59
|
+
# for the balance that is not coming.
|
|
60
|
+
def close
|
|
61
|
+
result = Spree.purchase_order_close_workflow.call(purchase_order: @resource, reason: params[:reason])
|
|
62
|
+
return render_result_error(result) unless result.success?
|
|
63
|
+
|
|
64
|
+
render json: serialize_resource(result.value)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# PATCH /api/v3/admin/purchase_orders/:id/cancel
|
|
68
|
+
def cancel
|
|
69
|
+
result = Spree.purchase_order_cancel_workflow.call(
|
|
70
|
+
purchase_order: @resource,
|
|
71
|
+
reason: params[:reason],
|
|
72
|
+
canceler: try_spree_current_user
|
|
73
|
+
)
|
|
74
|
+
return render_result_error(result) unless result.success?
|
|
75
|
+
|
|
76
|
+
render json: serialize_resource(result.value)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
protected
|
|
80
|
+
|
|
81
|
+
def model_class
|
|
82
|
+
Spree::PurchaseOrder
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def serializer_class
|
|
86
|
+
Spree.api.admin_purchase_order_serializer
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def collection_includes
|
|
90
|
+
[:supplier, :destination_location, line_includes]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def create_workflow
|
|
94
|
+
Spree.purchase_order_create_workflow
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def update_workflow
|
|
98
|
+
Spree.purchase_order_update_workflow
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def create_workflow_arguments
|
|
102
|
+
{
|
|
103
|
+
store: current_store,
|
|
104
|
+
supplier: supplier_from_params,
|
|
105
|
+
destination_location: stock_location_from(:destination_location_id),
|
|
106
|
+
items: items_from_params(:quantity_ordered, :unit_cost) || [],
|
|
107
|
+
currency: params[:currency],
|
|
108
|
+
expected_at: params[:expected_at],
|
|
109
|
+
cancel_by: params[:cancel_by],
|
|
110
|
+
reference: params[:reference],
|
|
111
|
+
notes: params[:notes],
|
|
112
|
+
created_by: try_spree_current_user
|
|
113
|
+
}
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def update_workflow_arguments
|
|
117
|
+
{
|
|
118
|
+
purchase_order: @resource,
|
|
119
|
+
attributes: editable_attributes,
|
|
120
|
+
items: items_from_params(:quantity_ordered, :unit_cost)
|
|
121
|
+
}
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# The supplier and the warehouse are resolved through the store
|
|
125
|
+
# instead, since an id the payload names has to be proved to belong
|
|
126
|
+
# here.
|
|
127
|
+
def resource_permitted_attributes
|
|
128
|
+
[:currency, :expected_at, :cancel_by, :reference, :notes, { metadata: {} }]
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def editable_attributes
|
|
132
|
+
attributes = permitted_params.to_h.symbolize_keys
|
|
133
|
+
attributes[:supplier] = supplier_from_params if params.key?(:supplier_id)
|
|
134
|
+
if params.key?(:destination_location_id)
|
|
135
|
+
attributes[:destination_location] = stock_location_from(:destination_location_id)
|
|
136
|
+
end
|
|
137
|
+
attributes
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def scope_includes
|
|
141
|
+
[line_includes]
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
private
|
|
145
|
+
|
|
146
|
+
# Read through `current_store` rather than the model constant: a
|
|
147
|
+
# supplier id belonging to another store must 404, which no ability
|
|
148
|
+
# check would catch.
|
|
149
|
+
#
|
|
150
|
+
# @return [Spree::Supplier, nil]
|
|
151
|
+
def supplier_from_params
|
|
152
|
+
return nil if params[:supplier_id].blank?
|
|
153
|
+
|
|
154
|
+
current_store.suppliers.accessible_by(current_ability, :show).
|
|
155
|
+
find_by_prefix_id!(params[:supplier_id])
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
class RefundReasonsController < ResourceController
|
|
6
|
+
scoped_resource :settings
|
|
7
|
+
|
|
8
|
+
protected
|
|
9
|
+
|
|
10
|
+
def model_class
|
|
11
|
+
Spree::RefundReason
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def serializer_class
|
|
15
|
+
Spree.api.admin_refund_reason_serializer
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def permitted_params
|
|
19
|
+
params.permit(*model_additional_permitted_attributes, :name, :active)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module Reporting
|
|
6
|
+
# Store-wide saved reports (docs/plans/6.0-analytics-semantic-layer.md,
|
|
7
|
+
# Decision 12). Reads ride `read_reports`, mutations `write_reports`;
|
|
8
|
+
# the stored query is validated against the registry on save, and
|
|
9
|
+
# every viewer is re-authorized when the report is executed through
|
|
10
|
+
# the query endpoint.
|
|
11
|
+
class SavedReportsController < ResourceController
|
|
12
|
+
scoped_resource :reports
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
def model_class
|
|
17
|
+
Spree::SavedReport
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def serializer_class
|
|
21
|
+
Spree.api.admin_saved_report_serializer
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def scope_includes
|
|
25
|
+
[:user]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Deliberately NOT routed through `normalize_params`: the stored
|
|
29
|
+
# query carries filter values such as `cust_…`/`ch_…` prefixed ids
|
|
30
|
+
# inside a nested hash, and prefixed-ID resolution recurses into
|
|
31
|
+
# nested hashes — they would be decoded to integers on save and
|
|
32
|
+
# never resolve again. Extension attributes are splatted in.
|
|
33
|
+
def permitted_params
|
|
34
|
+
params.permit(:name, :description, *model_additional_permitted_attributes, query: {})
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def build_resource
|
|
38
|
+
super.tap { |report| report.user = try_spree_current_user }
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|