spree_api 6.0.0.beta4 → 6.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +4 -31
- data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +7 -0
- data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +2 -2
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +7 -2
- data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +2 -10
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +4 -8
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
- data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +0 -5
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +0 -6
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +1 -2
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +1 -9
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +3 -5
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +1 -6
- data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
- data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +1 -2
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +0 -7
- data/app/controllers/spree/api/v3/admin/me_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +5 -5
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +18 -16
- data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +3 -3
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +2 -10
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +2 -14
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +3 -3
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +9 -7
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +6 -53
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +2 -6
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/products_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +1 -9
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +2 -10
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +2 -10
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +3 -11
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/store_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +17 -12
- data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
- data/app/controllers/spree/api/v3/base_controller.rb +10 -0
- data/app/controllers/spree/api/v3/resource_controller.rb +44 -1
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +2 -2
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +3 -3
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +3 -3
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/me_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +10 -11
- data/app/controllers/spree/api/v3/seller/products_controller.rb +2 -1
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/team_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +3 -11
- data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +5 -3
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +6 -2
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +5 -3
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +2 -2
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -0
- data/app/controllers/spree/api/v3/store/carts_controller.rb +9 -6
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +0 -5
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +8 -6
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +5 -14
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +1 -5
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +1 -5
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +0 -4
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +5 -7
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +5 -6
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +8 -22
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
- data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -1
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +2 -7
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +2 -15
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +2 -15
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +4 -1
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +1 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +6 -19
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +4 -18
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +24 -6
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +5 -1
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +6 -7
- data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/base_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/cart_serializer.rb +17 -45
- data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +11 -26
- data/app/serializers/spree/api/v3/claim_serializer.rb +2 -15
- data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +3 -23
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/discount_serializer.rb +1 -12
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +9 -27
- data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -15
- data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
- data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +5 -17
- data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/import_serializer.rb +3 -14
- data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
- data/app/serializers/spree/api/v3/line_item_serializer.rb +6 -20
- data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/media_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/order_group_serializer.rb +2 -23
- data/app/serializers/spree/api/v3/order_serializer.rb +12 -38
- data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/price_history_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/price_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/product_serializer.rb +7 -21
- data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
- data/app/serializers/spree/api/v3/refund_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +12 -19
- data/app/serializers/spree/api/v3/return_serializer.rb +6 -15
- data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +7 -13
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +4 -25
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +3 -15
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
- data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -11
- data/app/serializers/spree/api/v3/store_credit_serializer.rb +2 -24
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +10 -20
- data/app/serializers/spree/api/v3/variant_serializer.rb +7 -21
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
- data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
- data/config/initializers/pagy.rb +1 -1
- data/config/initializers/typelizer.rb +6 -8
- data/config/locales/ar.yml +15 -0
- data/config/locales/be.yml +15 -0
- data/config/locales/bg.yml +15 -0
- data/config/locales/ca.yml +15 -0
- data/config/locales/cs.yml +15 -0
- data/config/locales/da.yml +15 -0
- data/config/locales/de-CH.yml +11 -0
- data/config/locales/de.yml +15 -0
- data/config/locales/el.yml +15 -0
- data/config/locales/en.yml +5 -40
- data/config/locales/es-CL.yml +10 -0
- data/config/locales/es-EC.yml +11 -0
- data/config/locales/es-MX.yml +12 -0
- data/config/locales/es.yml +15 -0
- data/config/locales/et.yml +15 -0
- data/config/locales/fa.yml +15 -0
- data/config/locales/fi.yml +15 -0
- data/config/locales/fr.yml +15 -0
- data/config/locales/hu.yml +15 -0
- data/config/locales/id.yml +15 -0
- data/config/locales/it.yml +15 -0
- data/config/locales/ja.yml +15 -0
- data/config/locales/km.yml +15 -0
- data/config/locales/ko.yml +15 -0
- data/config/locales/ku.yml +15 -0
- data/config/locales/lt.yml +15 -0
- data/config/locales/lv.yml +15 -0
- data/config/locales/nb.yml +15 -0
- data/config/locales/ne.yml +15 -0
- data/config/locales/nl.yml +15 -0
- data/config/locales/pl.yml +15 -0
- data/config/locales/pt-BR.yml +13 -0
- data/config/locales/pt.yml +15 -0
- data/config/locales/ro.yml +15 -0
- data/config/locales/ru.yml +15 -0
- data/config/locales/sk.yml +15 -0
- data/config/locales/sl-SI.yml +15 -0
- data/config/locales/sv.yml +15 -0
- data/config/locales/th.yml +15 -0
- data/config/locales/tr.yml +15 -0
- data/config/locales/uk.yml +15 -0
- data/config/locales/vi.yml +15 -0
- data/config/locales/zh-CN.yml +15 -0
- data/config/locales/zh-TW.yml +15 -0
- data/config/routes.rb +49 -99
- data/lib/spree/api/dependencies.rb +53 -274
- data/lib/spree/api/openapi/schema_helper.rb +1 -1
- data/lib/spree/api/typelizer_generation.rb +35 -0
- data/lib/spree/api/webhook_event_types.rb +140 -0
- data/lib/spree/api.rb +0 -2
- metadata +71 -36
- data/config/i18n-tasks.yml +0 -40
- data/config/initializers/alba.rb +0 -5
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module EmailTemplates
|
|
6
|
+
class TestEmailsController < Admin::BaseController
|
|
7
|
+
include Spree::Api::V3::Admin::EmailTemplateLookup
|
|
8
|
+
|
|
9
|
+
before_action :authorize_sample_data!
|
|
10
|
+
|
|
11
|
+
# POST /api/v3/admin/email_templates/:email_template_id/test_email
|
|
12
|
+
#
|
|
13
|
+
# Sends the template, rendered as the preview renders it, to the
|
|
14
|
+
# signed-in admin. Never to another address: the sample data comes
|
|
15
|
+
# from a real customer's records.
|
|
16
|
+
def create
|
|
17
|
+
authorize! :update, Spree::EmailTemplate
|
|
18
|
+
return render_no_recipient unless current_user
|
|
19
|
+
|
|
20
|
+
build_preview.call
|
|
21
|
+
Spree::EmailTemplateMailer.test_email(current_store, current_user.email, email_template.key, **preview_arguments).deliver_later
|
|
22
|
+
|
|
23
|
+
render json: { sent_to: current_user.email }, status: :accepted
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def render_no_recipient
|
|
29
|
+
render_error(
|
|
30
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:invalid_request],
|
|
31
|
+
message: I18n.t('spree.email_templates.test_email_needs_admin'),
|
|
32
|
+
status: :unprocessable_content
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# The customer email templates, layout and shared partials merchants
|
|
6
|
+
# may edit, addressed by their key with dots
|
|
7
|
+
# (`spree.order_mailer.confirm_email`). `language` picks the version:
|
|
8
|
+
# a language code, or `any` (the default) for every language.
|
|
9
|
+
class EmailTemplatesController < Admin::BaseController
|
|
10
|
+
include Spree::Api::V3::Admin::EmailTemplateLookup
|
|
11
|
+
|
|
12
|
+
skip_before_action :load_email_template, only: :index
|
|
13
|
+
|
|
14
|
+
# GET /api/v3/admin/email_templates
|
|
15
|
+
def index
|
|
16
|
+
authorize! :read, Spree::EmailTemplate
|
|
17
|
+
|
|
18
|
+
entries = Spree::EmailTemplates::Entry.all(current_store, locale: language)
|
|
19
|
+
render json: { data: serialize_collection(entries), meta: {} }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# GET /api/v3/admin/email_templates/:id
|
|
23
|
+
def show
|
|
24
|
+
authorize! :read, Spree::EmailTemplate
|
|
25
|
+
|
|
26
|
+
render json: serialize_email_template
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# DELETE /api/v3/admin/email_templates/:id
|
|
30
|
+
#
|
|
31
|
+
# Goes back to Spree's default for this language. The store's version
|
|
32
|
+
# and its history are kept, so a revision can still be restored.
|
|
33
|
+
def destroy
|
|
34
|
+
authorize! :update, Spree::EmailTemplate
|
|
35
|
+
|
|
36
|
+
result = Spree.email_template_revert_workflow.call(
|
|
37
|
+
store: current_store, key: email_template.key, locale: language, actor: current_actor,
|
|
38
|
+
lock_version: params[:lock_version].presence
|
|
39
|
+
)
|
|
40
|
+
render_email_template_result(result)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -312,8 +312,7 @@ module Spree
|
|
|
312
312
|
|
|
313
313
|
render_error(
|
|
314
314
|
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
315
|
-
message:
|
|
316
|
-
default: "This import belongs to a seller. It can be viewed here, but only the seller can retry or delete it."),
|
|
315
|
+
message: I18n.t('spree.api.cannot_modify_seller_import'),
|
|
317
316
|
status: :unprocessable_content
|
|
318
317
|
)
|
|
319
318
|
true
|
|
@@ -34,13 +34,6 @@ module Spree
|
|
|
34
34
|
render json: serialize_resource(@resource)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
# Invitations are immutable post-create — UI calls `resend` for
|
|
38
|
-
# token rotation, `destroy` to revoke. Clearing the action set
|
|
39
|
-
# keeps the surface honest if a client ever fires PATCH directly.
|
|
40
|
-
def update
|
|
41
|
-
head :method_not_allowed
|
|
42
|
-
end
|
|
43
|
-
|
|
44
37
|
protected
|
|
45
38
|
|
|
46
39
|
def model_class
|
|
@@ -39,8 +39,8 @@ module Spree
|
|
|
39
39
|
unless detach_requested?
|
|
40
40
|
return render_error(
|
|
41
41
|
code: ERROR_CODES[:resource_invalid],
|
|
42
|
-
message:
|
|
43
|
-
'api.errors.media_in_use',
|
|
42
|
+
message: I18n.t(
|
|
43
|
+
'spree.api.errors.media_in_use',
|
|
44
44
|
places: references.filter_map(&:name).uniq.first(5).to_sentence
|
|
45
45
|
),
|
|
46
46
|
status: :unprocessable_content,
|
|
@@ -55,7 +55,7 @@ module Spree
|
|
|
55
55
|
# render_service_error would produce an empty message.
|
|
56
56
|
render_error(
|
|
57
57
|
code: ERROR_CODES[:processing_error],
|
|
58
|
-
message:
|
|
58
|
+
message: I18n.t('spree.api.errors.media_not_deleted'),
|
|
59
59
|
status: :unprocessable_content
|
|
60
60
|
)
|
|
61
61
|
end
|
|
@@ -79,7 +79,7 @@ module Spree
|
|
|
79
79
|
{
|
|
80
80
|
kind: reference.kind,
|
|
81
81
|
name: reference.name,
|
|
82
|
-
owner_type: reference.owner_type,
|
|
82
|
+
owner_type: Spree::Base.polymorphic_api_type(reference.owner_type),
|
|
83
83
|
owner_id: reference.owner_id,
|
|
84
84
|
field: reference.field
|
|
85
85
|
}
|
|
@@ -145,7 +145,7 @@ module Spree
|
|
|
145
145
|
def create_from_url
|
|
146
146
|
render_error(
|
|
147
147
|
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:resource_invalid],
|
|
148
|
-
message:
|
|
148
|
+
message: I18n.t('spree.api.errors.media_url_import_requires_product'),
|
|
149
149
|
status: :unprocessable_content
|
|
150
150
|
)
|
|
151
151
|
end
|
|
@@ -27,11 +27,7 @@ module Spree
|
|
|
27
27
|
notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
|
|
28
28
|
)
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
render json: serialize_resource(result.value)
|
|
32
|
-
else
|
|
33
|
-
render_result_error(result)
|
|
34
|
-
end
|
|
30
|
+
render_result(result)
|
|
35
31
|
end
|
|
36
32
|
end
|
|
37
33
|
|
|
@@ -70,7 +70,7 @@ module Spree
|
|
|
70
70
|
def render_completed_order_error
|
|
71
71
|
render_error(
|
|
72
72
|
code: ERROR_CODES[:discount_not_editable],
|
|
73
|
-
message:
|
|
73
|
+
message: I18n.t('spree.errors.messages.coupon_code_frozen_after_completion'),
|
|
74
74
|
status: :unprocessable_content
|
|
75
75
|
)
|
|
76
76
|
end
|
|
@@ -87,7 +87,7 @@ module Spree
|
|
|
87
87
|
def render_promotion_row_error
|
|
88
88
|
render_error(
|
|
89
89
|
code: ERROR_CODES[:discount_not_editable],
|
|
90
|
-
message:
|
|
90
|
+
message: I18n.t('spree.errors.messages.promotion_discount_not_editable'),
|
|
91
91
|
status: :unprocessable_entity
|
|
92
92
|
)
|
|
93
93
|
end
|
|
@@ -21,17 +21,21 @@ module Spree
|
|
|
21
21
|
# Manually registers a fulfillment on a completed order (external
|
|
22
22
|
# carrier / 3PL sync), bypassing order routing. Moves the requested
|
|
23
23
|
# line item quantities out of their routed fulfillments; when
|
|
24
|
-
# `items` is omitted, everything not yet shipped is moved.
|
|
25
|
-
#
|
|
26
|
-
#
|
|
24
|
+
# `items` is omitted, everything not yet shipped is moved. Exchange
|
|
25
|
+
# and claim replacements are moved only out of a named
|
|
26
|
+
# `source_fulfillment_id`, which is how a canceled replacement is
|
|
27
|
+
# sent again. An explicit `cost` persists only with
|
|
28
|
+
# `status: 'shipped'` — pending fulfillments are re-priced by the
|
|
29
|
+
# rate engine.
|
|
27
30
|
def create
|
|
28
|
-
authorize!(:create, Spree::
|
|
31
|
+
authorize!(:create, Spree::Fulfillment)
|
|
29
32
|
|
|
30
33
|
with_order_lock do
|
|
31
34
|
result = Spree.fulfillment_create_workflow.call(
|
|
32
35
|
order: @order,
|
|
33
36
|
stock_location: stock_location_for_create,
|
|
34
37
|
items: items_for_create,
|
|
38
|
+
source_fulfillment: source_fulfillment_for_create,
|
|
35
39
|
tracking: create_params[:tracking],
|
|
36
40
|
delivery_method: delivery_method_for_create,
|
|
37
41
|
cost: create_params[:cost],
|
|
@@ -39,11 +43,7 @@ module Spree
|
|
|
39
43
|
metadata: create_params[:metadata]&.to_h
|
|
40
44
|
)
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
render json: serialize_resource(result.value), status: :created
|
|
44
|
-
else
|
|
45
|
-
render_result_error(result)
|
|
46
|
-
end
|
|
46
|
+
render_result(result, status: :created)
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
|
|
@@ -59,11 +59,7 @@ module Spree
|
|
|
59
59
|
notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
|
|
60
60
|
)
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
render json: serialize_resource(result.value)
|
|
64
|
-
else
|
|
65
|
-
render_result_error(result)
|
|
66
|
-
end
|
|
62
|
+
render_result(result)
|
|
67
63
|
end
|
|
68
64
|
end
|
|
69
65
|
|
|
@@ -105,7 +101,7 @@ module Spree
|
|
|
105
101
|
end
|
|
106
102
|
|
|
107
103
|
def create_params
|
|
108
|
-
@create_params ||= params.permit(:stock_location_id, :tracking, :delivery_method_id, :cost, :status, metadata: {}, items: [:item_id, :quantity])
|
|
104
|
+
@create_params ||= params.permit(:stock_location_id, :source_fulfillment_id, :tracking, :delivery_method_id, :cost, :status, metadata: {}, items: [:item_id, :quantity])
|
|
109
105
|
end
|
|
110
106
|
|
|
111
107
|
def mark_delivered_params
|
|
@@ -123,7 +119,13 @@ module Spree
|
|
|
123
119
|
def delivery_method_for_create
|
|
124
120
|
return if create_params[:delivery_method_id].blank?
|
|
125
121
|
|
|
126
|
-
Spree::
|
|
122
|
+
Spree::DeliveryMethod.accessible_by(current_ability, :show).find_by_prefix_id!(create_params[:delivery_method_id])
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def source_fulfillment_for_create
|
|
126
|
+
return if create_params[:source_fulfillment_id].blank?
|
|
127
|
+
|
|
128
|
+
@order.fulfillments.find_by_prefix_id!(create_params[:source_fulfillment_id])
|
|
127
129
|
end
|
|
128
130
|
|
|
129
131
|
def items_for_create
|
|
@@ -53,17 +53,17 @@ module Spree
|
|
|
53
53
|
gift_card = current_store.gift_cards.find_by(code: params[:code]&.downcase)
|
|
54
54
|
|
|
55
55
|
if gift_card.nil?
|
|
56
|
-
render_error(code: ERROR_CODES[:gift_card_not_found], message:
|
|
56
|
+
render_error(code: ERROR_CODES[:gift_card_not_found], message: I18n.t('spree.gift_card_not_found'), status: :not_found)
|
|
57
57
|
return
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
if gift_card.expired?
|
|
61
|
-
render_error(code: ERROR_CODES[:gift_card_expired], message:
|
|
61
|
+
render_error(code: ERROR_CODES[:gift_card_expired], message: I18n.t('spree.gift_card_expired'), status: :unprocessable_content)
|
|
62
62
|
return
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
if gift_card.redeemed?
|
|
66
|
-
render_error(code: ERROR_CODES[:gift_card_already_redeemed], message:
|
|
66
|
+
render_error(code: ERROR_CODES[:gift_card_already_redeemed], message: I18n.t('spree.gift_card_already_redeemed'), status: :unprocessable_content)
|
|
67
67
|
return
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -25,11 +25,7 @@ module Spree
|
|
|
25
25
|
with_order_lock do
|
|
26
26
|
result = Spree.shipping_label_purchase_workflow.call(owner: @parent)
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
render json: serialize_resource(result.value), status: :created
|
|
30
|
-
else
|
|
31
|
-
render_result_error(result)
|
|
32
|
-
end
|
|
28
|
+
render_result(result, status: :created)
|
|
33
29
|
end
|
|
34
30
|
end
|
|
35
31
|
|
|
@@ -38,11 +34,7 @@ module Spree
|
|
|
38
34
|
with_order_lock do
|
|
39
35
|
result = Spree.shipping_label_refund_workflow.call(shipping_label: @resource)
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
render json: serialize_resource(result.value)
|
|
43
|
-
else
|
|
44
|
-
render_result_error(result)
|
|
45
|
-
end
|
|
37
|
+
render_result(result)
|
|
46
38
|
end
|
|
47
39
|
end
|
|
48
40
|
|
|
@@ -56,22 +56,14 @@ module Spree
|
|
|
56
56
|
|
|
57
57
|
result = Spree.payment_capture_workflow.call(payment: @resource, amount: amount)
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
render json: serialize_resource(result.value)
|
|
61
|
-
else
|
|
62
|
-
render_result_error(result)
|
|
63
|
-
end
|
|
59
|
+
render_result(result)
|
|
64
60
|
end
|
|
65
61
|
|
|
66
62
|
# PATCH /api/v3/admin/orders/:order_id/payments/:id/void
|
|
67
63
|
def void
|
|
68
64
|
result = Spree.payment_void_workflow.call(payment: @resource)
|
|
69
65
|
|
|
70
|
-
|
|
71
|
-
render json: serialize_resource(result.value)
|
|
72
|
-
else
|
|
73
|
-
render_result_error(result)
|
|
74
|
-
end
|
|
66
|
+
render_result(result)
|
|
75
67
|
end
|
|
76
68
|
|
|
77
69
|
protected
|
|
@@ -84,10 +76,6 @@ module Spree
|
|
|
84
76
|
Spree.api.admin_payment_serializer
|
|
85
77
|
end
|
|
86
78
|
|
|
87
|
-
def parent_association
|
|
88
|
-
:payments
|
|
89
|
-
end
|
|
90
|
-
|
|
91
79
|
def permitted_params
|
|
92
80
|
params.permit(:amount, :payment_method_id, :source_id)
|
|
93
81
|
end
|
|
@@ -58,7 +58,7 @@ module Spree
|
|
|
58
58
|
# are nested inside it.
|
|
59
59
|
def complete
|
|
60
60
|
with_order_lock do
|
|
61
|
-
result = Spree.
|
|
61
|
+
result = Spree.order_complete_workflow.call(
|
|
62
62
|
order: @resource,
|
|
63
63
|
payment_pending: params[:payment_pending].to_b,
|
|
64
64
|
notify_customer: ActiveModel::Type::Boolean.new.cast(params[:notify_customer])
|
|
@@ -121,7 +121,7 @@ module Spree
|
|
|
121
121
|
unless @resource.po_document.attached?
|
|
122
122
|
return render_error(
|
|
123
123
|
code: ERROR_CODES[:validation_error],
|
|
124
|
-
message:
|
|
124
|
+
message: I18n.t('spree.po_document_missing'),
|
|
125
125
|
status: :unprocessable_content
|
|
126
126
|
)
|
|
127
127
|
end
|
|
@@ -247,7 +247,7 @@ module Spree
|
|
|
247
247
|
def render_invalid_po_document
|
|
248
248
|
render_error(
|
|
249
249
|
code: ERROR_CODES[:validation_error],
|
|
250
|
-
message:
|
|
250
|
+
message: I18n.t('spree.po_document_invalid_signed_id'),
|
|
251
251
|
status: :unprocessable_content
|
|
252
252
|
)
|
|
253
253
|
end
|
|
@@ -20,15 +20,17 @@ module Spree
|
|
|
20
20
|
user = Spree.admin_user_class.find_by(email: params[:email])
|
|
21
21
|
|
|
22
22
|
if user
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
event_name = 'admin_user.password_reset_requested'
|
|
24
|
+
payload = user.event_payload_for(
|
|
25
|
+
event_name,
|
|
26
|
+
reset_token: user.generate_token_for(:password_reset), store: current_store,
|
|
27
|
+
redirect_url: trusted_redirect_url(user).presence
|
|
28
|
+
)
|
|
29
|
+
user.publish_event(event_name, payload)
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
# Always return 202 to prevent email enumeration
|
|
31
|
-
render json: { message:
|
|
33
|
+
render json: { message: I18n.t('spree.api.password_reset_requested') }, status: :accepted
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
# PATCH /api/v3/admin/password_resets/:id
|
|
@@ -38,7 +40,7 @@ module Spree
|
|
|
38
40
|
unless user
|
|
39
41
|
return render_error(
|
|
40
42
|
code: ERROR_CODES[:password_reset_token_invalid],
|
|
41
|
-
message:
|
|
43
|
+
message: I18n.t('spree.api.password_reset_token_invalid'),
|
|
42
44
|
status: :unprocessable_content
|
|
43
45
|
)
|
|
44
46
|
end
|
|
@@ -3,8 +3,7 @@ module Spree
|
|
|
3
3
|
module V3
|
|
4
4
|
module Admin
|
|
5
5
|
# Admin CRUD for `Spree::PriceList`, plus the lifecycle transitions
|
|
6
|
-
# (`activate` / `deactivate`)
|
|
7
|
-
# (`prices`).
|
|
6
|
+
# (`activate` / `deactivate`).
|
|
8
7
|
#
|
|
9
8
|
# Everything writable on the list itself — name, schedule, match
|
|
10
9
|
# policy, nested rules (`rules: [...]`), and individual price
|
|
@@ -25,7 +24,7 @@ module Spree
|
|
|
25
24
|
# before_actions by method name, so this would otherwise
|
|
26
25
|
# *replace* the parent's narrower filter and break the standard
|
|
27
26
|
# actions. Wrapping it under a different name keeps both.
|
|
28
|
-
before_action :load_member_resource, only: [:activate, :deactivate
|
|
27
|
+
before_action :load_member_resource, only: [:activate, :deactivate]
|
|
29
28
|
|
|
30
29
|
# GET /api/v3/admin/price_lists/price_rule_types
|
|
31
30
|
#
|
|
@@ -69,29 +68,6 @@ module Spree
|
|
|
69
68
|
end
|
|
70
69
|
end
|
|
71
70
|
|
|
72
|
-
# GET /api/v3/admin/price_lists/:id/prices
|
|
73
|
-
#
|
|
74
|
-
# The spreadsheet editor's data source. Returns every Price row
|
|
75
|
-
# in this list (filtered by `?currency=`), eager-loading
|
|
76
|
-
# `variant.product` + option values so each cell can render
|
|
77
|
-
# product name, variant options and SKU without N+1.
|
|
78
|
-
def prices
|
|
79
|
-
authorize! :read, @resource
|
|
80
|
-
currency = params[:currency].presence || current_store.default_currency
|
|
81
|
-
prices = @resource.prices
|
|
82
|
-
.includes(variant: [:product, { option_values: :option_type }])
|
|
83
|
-
.where(currency: currency)
|
|
84
|
-
.joins(variant: :product)
|
|
85
|
-
.order(Arel.sql("#{Spree::Product.table_name}.name ASC"))
|
|
86
|
-
.order(Arel.sql("#{Spree::Variant.table_name}.position ASC"))
|
|
87
|
-
.order(min_quantity: :asc)
|
|
88
|
-
|
|
89
|
-
render json: {
|
|
90
|
-
data: prices.map { |p| serialize_price(p) },
|
|
91
|
-
meta: { currency: currency, count: prices.size }
|
|
92
|
-
}
|
|
93
|
-
end
|
|
94
|
-
|
|
95
71
|
protected
|
|
96
72
|
|
|
97
73
|
def model_class
|
|
@@ -124,6 +100,7 @@ module Spree
|
|
|
124
100
|
def permitted_params
|
|
125
101
|
normalize_params(
|
|
126
102
|
params.permit(
|
|
103
|
+
*model_additional_permitted_attributes,
|
|
127
104
|
:name, :description, :position,
|
|
128
105
|
:starts_at, :ends_at, :match_policy,
|
|
129
106
|
:price_adjustment_percentage, :adjust_compare_at,
|
|
@@ -138,36 +115,12 @@ module Spree
|
|
|
138
115
|
|
|
139
116
|
# Loads the record without the action-derived authorization
|
|
140
117
|
# `set_resource` runs (which would check `:activate` /
|
|
141
|
-
# `:deactivate`
|
|
142
|
-
#
|
|
143
|
-
#
|
|
144
|
-
# actually mention (`:update` / `:read`).
|
|
118
|
+
# `:deactivate` — actions that abilities don't grant). The
|
|
119
|
+
# per-action methods explicitly call `authorize!` with
|
|
120
|
+
# `:update`, which ability rules actually mention.
|
|
145
121
|
def load_member_resource
|
|
146
122
|
@resource = find_resource
|
|
147
123
|
end
|
|
148
|
-
|
|
149
|
-
# Hand-rolled flat shape for the spreadsheet — keeps the payload
|
|
150
|
-
# narrow (no nested variant/product/option_value objects) and
|
|
151
|
-
# avoids paying for the admin Price serializer when we only need
|
|
152
|
-
# ~6 fields per row. The grouping the UI does (rows → product
|
|
153
|
-
# header) is driven entirely off `product_id`/`product_name`.
|
|
154
|
-
def serialize_price(price)
|
|
155
|
-
variant = price.variant
|
|
156
|
-
product = variant.product
|
|
157
|
-
{
|
|
158
|
-
id: price.prefixed_id,
|
|
159
|
-
variant_id: variant.prefixed_id,
|
|
160
|
-
product_id: product.prefixed_id,
|
|
161
|
-
product_name: product.name,
|
|
162
|
-
variant_label: variant.options_text.presence,
|
|
163
|
-
sku: variant.sku,
|
|
164
|
-
currency: price.currency,
|
|
165
|
-
min_quantity: price.min_quantity,
|
|
166
|
-
amount: price.amount&.to_s,
|
|
167
|
-
compare_at_amount: price.compare_at_amount&.to_s
|
|
168
|
-
}
|
|
169
|
-
end
|
|
170
|
-
|
|
171
124
|
end
|
|
172
125
|
end
|
|
173
126
|
end
|
|
@@ -58,10 +58,6 @@ module Spree
|
|
|
58
58
|
# validations (docs/plans/6.0-volume-pricing.md). Each branch is
|
|
59
59
|
# guarded on the key its own failure carries, so a failure mode the
|
|
60
60
|
# service grows later is not reported under one of these names.
|
|
61
|
-
#
|
|
62
|
-
# `I18n.t` rather than `Spree.t` for these: the models raise them
|
|
63
|
-
# under `activerecord.errors`, and `Spree.t` would scope the lookup
|
|
64
|
-
# to `spree.` and miss the key.
|
|
65
61
|
if (invalid = result.error&.value.try(:[], :invalid_quantities))
|
|
66
62
|
return render_error(
|
|
67
63
|
code: 'invalid_min_quantity',
|
|
@@ -45,7 +45,7 @@ module Spree
|
|
|
45
45
|
|
|
46
46
|
data = Spree.digital_asset_providers.map do |provider_class|
|
|
47
47
|
{
|
|
48
|
-
type: provider_class.
|
|
48
|
+
type: provider_class.api_type,
|
|
49
49
|
name: provider_class.provider_name,
|
|
50
50
|
requires_attachment: provider_class.requires_attachment?,
|
|
51
51
|
settings_schema: provider_class.settings_schema
|
|
@@ -70,10 +70,6 @@ module Spree
|
|
|
70
70
|
authorize!(:show, @parent)
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
def parent_association
|
|
74
|
-
:digital_assets
|
|
75
|
-
end
|
|
76
|
-
|
|
77
73
|
# The parent association reaches assets through `variants`, which
|
|
78
74
|
# carries an ORDER BY on the variants table. Combined with the
|
|
79
75
|
# collection's DISTINCT, PostgreSQL rejects the query outright
|
|
@@ -138,7 +134,7 @@ module Spree
|
|
|
138
134
|
end
|
|
139
135
|
|
|
140
136
|
def render_private_storage_error
|
|
141
|
-
render_validation_error(
|
|
137
|
+
render_validation_error(I18n.t('spree.digital_assets_attachment_must_be_private'))
|
|
142
138
|
end
|
|
143
139
|
end
|
|
144
140
|
end
|
|
@@ -54,7 +54,7 @@ module Spree
|
|
|
54
54
|
unless Spree::Product::STATUSES.include?(params[:status].to_s)
|
|
55
55
|
return render_error(
|
|
56
56
|
code: 'invalid_status',
|
|
57
|
-
message:
|
|
57
|
+
message: I18n.t('spree.errors.messages.invalid_status'),
|
|
58
58
|
status: :unprocessable_content
|
|
59
59
|
)
|
|
60
60
|
end
|
|
@@ -84,7 +84,7 @@ module Spree
|
|
|
84
84
|
def render_invalid_position
|
|
85
85
|
render_error(
|
|
86
86
|
code: ERROR_CODES[:validation_error],
|
|
87
|
-
message:
|
|
87
|
+
message: I18n.t('spree.api.errors.invalid_position'),
|
|
88
88
|
status: :unprocessable_content
|
|
89
89
|
)
|
|
90
90
|
end
|