spree_api 6.0.0.beta4 → 6.0.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -48
  3. data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
  6. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
  7. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
  8. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
  10. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
  11. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
  12. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
  13. data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
  14. data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
  15. data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
  16. data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
  17. data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
  18. data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
  19. data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
  20. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
  21. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
  22. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
  23. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
  24. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
  25. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
  26. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
  27. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
  28. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
  29. data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
  30. data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
  31. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
  32. data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
  33. data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
  34. data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
  35. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
  36. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
  37. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
  38. data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
  39. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
  40. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
  41. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
  42. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
  43. data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
  44. data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
  45. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
  46. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
  47. data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
  48. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
  49. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
  50. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
  51. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
  52. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
  53. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
  54. data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
  55. data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
  56. data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
  57. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
  58. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
  59. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
  60. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
  61. data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
  62. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
  63. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
  64. data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
  65. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
  66. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
  67. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
  68. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
  69. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
  70. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
  71. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
  72. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
  73. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
  74. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
  75. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
  76. data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
  77. data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
  78. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
  79. data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
  80. data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
  81. data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
  82. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
  83. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
  84. data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
  85. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
  86. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
  87. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
  88. data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
  89. data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
  90. data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
  91. data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
  92. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
  93. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
  94. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
  95. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
  96. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
  97. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
  98. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
  99. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
  100. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
  101. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
  102. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
  103. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
  104. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
  105. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
  106. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
  107. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
  108. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
  109. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
  110. data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
  111. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
  112. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
  113. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
  114. data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
  115. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
  116. data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
  117. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
  118. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
  119. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
  120. data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
  121. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
  122. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
  123. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
  124. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
  125. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
  126. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
  127. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
  128. data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
  129. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
  130. data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
  131. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
  132. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
  133. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
  134. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
  135. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
  136. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
  137. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
  138. data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
  139. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
  140. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
  141. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
  142. data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
  143. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
  144. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
  145. data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
  146. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
  147. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
  148. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
  149. data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
  150. data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
  151. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
  152. data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
  153. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
  154. data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
  155. data/app/controllers/spree/api/v3/base_controller.rb +12 -0
  156. data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
  157. data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
  158. data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
  159. data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
  160. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
  161. data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
  162. data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
  163. data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
  164. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
  165. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
  166. data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
  167. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
  168. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
  169. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
  170. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
  171. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
  172. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
  173. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
  174. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
  175. data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
  176. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
  177. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
  178. data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
  179. data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
  180. data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
  181. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
  182. data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
  183. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
  184. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
  185. data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
  186. data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
  187. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
  188. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
  189. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
  190. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
  191. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
  192. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
  193. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
  194. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
  195. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
  196. data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
  197. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
  198. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
  199. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
  200. data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
  201. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
  202. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
  203. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
  204. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
  205. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
  206. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
  207. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
  208. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
  209. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
  210. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
  211. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
  212. data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
  213. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
  214. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
  215. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
  216. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
  217. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
  218. data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
  219. data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
  220. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
  221. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
  222. data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
  223. data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
  224. data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
  225. data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
  226. data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
  227. data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
  228. data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
  229. data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
  230. data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
  231. data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
  232. data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
  233. data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
  234. data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
  235. data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
  236. data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
  237. data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
  238. data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
  239. data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
  240. data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
  241. data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
  242. data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
  243. data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
  244. data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
  245. data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
  246. data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
  247. data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
  248. data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
  249. data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
  250. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
  251. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
  252. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
  253. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
  254. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
  255. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
  256. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
  257. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
  258. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
  259. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
  260. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
  261. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
  262. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
  263. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
  264. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
  265. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
  266. data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
  267. data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
  268. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
  269. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
  270. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
  271. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
  272. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
  273. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
  274. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
  275. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
  276. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
  277. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
  278. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
  279. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
  280. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
  281. data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
  282. data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
  283. data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
  284. data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
  285. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
  286. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
  287. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
  288. data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
  289. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
  290. data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
  291. data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
  292. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
  293. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
  294. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
  295. data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
  296. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
  297. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
  298. data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
  299. data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
  300. data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
  301. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
  302. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
  303. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  304. data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
  305. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
  306. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
  307. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
  308. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
  309. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
  310. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
  311. data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
  312. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
  313. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
  314. data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
  315. data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
  316. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
  317. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
  318. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
  319. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
  320. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
  321. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
  322. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
  323. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
  324. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
  325. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
  326. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
  327. data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
  328. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
  329. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
  330. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
  331. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
  332. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
  333. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
  334. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
  335. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
  336. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
  337. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
  338. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
  339. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
  340. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
  341. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
  342. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
  343. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
  344. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
  345. data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
  346. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
  347. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
  348. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
  349. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
  350. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
  351. data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
  352. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
  353. data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
  354. data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
  355. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
  356. data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
  357. data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
  358. data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
  359. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
  360. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
  361. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
  362. data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
  363. data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
  364. data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
  365. data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
  366. data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
  367. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
  368. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
  369. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
  370. data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
  371. data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
  372. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
  373. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
  374. data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
  375. data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
  376. data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
  377. data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
  378. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
  379. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
  380. data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
  381. data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
  382. data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
  383. data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
  384. data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
  385. data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
  386. data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
  387. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
  388. data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
  389. data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
  390. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
  391. data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
  392. data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
  393. data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
  394. data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
  395. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
  396. data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
  397. data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
  398. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
  399. data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
  400. data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
  401. data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
  402. data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
  403. data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
  404. data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
  405. data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
  406. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
  407. data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
  408. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
  409. data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
  410. data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
  411. data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
  412. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
  413. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
  414. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
  415. data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
  416. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
  417. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
  418. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
  419. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
  420. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
  421. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
  422. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
  423. data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
  424. data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
  425. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
  426. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
  427. data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
  428. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
  429. data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
  430. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
  431. data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
  432. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
  433. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
  434. data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
  435. data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
  436. data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
  437. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
  438. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
  439. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
  440. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
  441. data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
  442. data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
  443. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
  444. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
  445. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
  446. data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
  447. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
  448. data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
  449. data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
  450. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
  451. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
  452. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
  453. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
  454. data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
  455. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
  456. data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
  457. data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
  458. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
  459. data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
  460. data/app/services/spree/api/v3/filter_predicates.rb +29 -0
  461. data/app/services/spree/api/v3/filter_table.rb +337 -0
  462. data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
  463. data/app/services/spree/api/v3/request_schema.rb +430 -0
  464. data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
  465. data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
  466. data/config/initializers/pagy.rb +1 -1
  467. data/config/initializers/typelizer.rb +7 -9
  468. data/config/locales/ar.yml +15 -0
  469. data/config/locales/be.yml +15 -0
  470. data/config/locales/bg.yml +15 -0
  471. data/config/locales/ca.yml +15 -0
  472. data/config/locales/cs.yml +15 -0
  473. data/config/locales/da.yml +15 -0
  474. data/config/locales/de-CH.yml +11 -0
  475. data/config/locales/de.yml +15 -0
  476. data/config/locales/el.yml +15 -0
  477. data/config/locales/en.yml +5 -40
  478. data/config/locales/es-CL.yml +10 -0
  479. data/config/locales/es-EC.yml +11 -0
  480. data/config/locales/es-MX.yml +12 -0
  481. data/config/locales/es.yml +15 -0
  482. data/config/locales/et.yml +15 -0
  483. data/config/locales/fa.yml +15 -0
  484. data/config/locales/fi.yml +15 -0
  485. data/config/locales/fr.yml +15 -0
  486. data/config/locales/hu.yml +15 -0
  487. data/config/locales/id.yml +15 -0
  488. data/config/locales/it.yml +15 -0
  489. data/config/locales/ja.yml +15 -0
  490. data/config/locales/km.yml +15 -0
  491. data/config/locales/ko.yml +15 -0
  492. data/config/locales/ku.yml +15 -0
  493. data/config/locales/lt.yml +15 -0
  494. data/config/locales/lv.yml +15 -0
  495. data/config/locales/nb.yml +15 -0
  496. data/config/locales/ne.yml +15 -0
  497. data/config/locales/nl.yml +15 -0
  498. data/config/locales/pl.yml +15 -0
  499. data/config/locales/pt-BR.yml +13 -0
  500. data/config/locales/pt.yml +15 -0
  501. data/config/locales/ro.yml +15 -0
  502. data/config/locales/ru.yml +15 -0
  503. data/config/locales/sk.yml +15 -0
  504. data/config/locales/sl-SI.yml +15 -0
  505. data/config/locales/sv.yml +15 -0
  506. data/config/locales/th.yml +15 -0
  507. data/config/locales/tr.yml +15 -0
  508. data/config/locales/uk.yml +15 -0
  509. data/config/locales/vi.yml +15 -0
  510. data/config/locales/zh-CN.yml +15 -0
  511. data/config/locales/zh-TW.yml +15 -0
  512. data/config/routes.rb +54 -102
  513. data/lib/spree/api/configuration.rb +5 -0
  514. data/lib/spree/api/dependencies.rb +54 -274
  515. data/lib/spree/api/middleware/request_size_limit.rb +24 -3
  516. data/lib/spree/api/openapi/filter_documentation.rb +136 -0
  517. data/lib/spree/api/openapi/schema_helper.rb +127 -81
  518. data/lib/spree/api/preference_families.rb +46 -0
  519. data/lib/spree/api/preference_types.rb +138 -0
  520. data/lib/spree/api/typelizer_generation.rb +39 -0
  521. data/lib/spree/api/webhook_event_types.rb +140 -0
  522. data/lib/spree/api.rb +0 -2
  523. data/lib/tasks/filters.rake +12 -0
  524. data/lib/typelizer/open_enums.rb +10 -0
  525. metadata +125 -40
  526. data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
  527. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
  528. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
  529. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
  530. data/config/i18n-tasks.yml +0 -40
  531. data/config/initializers/alba.rb +0 -5
@@ -37,26 +37,22 @@ module Spree
37
37
  # response.
38
38
  _attributes.delete(:policies)
39
39
 
40
+ # Stored without a currency, so it is shown as stored rather than
41
+ # rounded to the store's: a rounded figure would be saved back.
40
42
  attribute :minimum_payout_amount do |seller|
41
- seller.minimum_payout_amount&.to_s
43
+ Spree::Money::Rounding.format(seller.minimum_payout_amount, (current_store || Spree::Current.store)&.default_currency, unit_price: true)
42
44
  end
43
45
 
44
46
  # Approved but away still cannot sell, and the list has to say so
45
47
  # without the dashboard re-deriving the rule.
46
- attribute :on_holiday do |seller|
47
- seller.on_holiday?
48
- end
48
+ attribute :on_holiday, &:on_holiday?
49
49
 
50
- attribute :sellable do |seller|
51
- seller.sellable?
52
- end
50
+ attribute :sellable, &:sellable?
53
51
 
54
52
  # Saves the dashboard a request per row for the two counts its list
55
53
  # and header show. Read off the seller, which memoizes the SQL count
56
54
  # so the minimum-products requirement asks the same question free.
57
- attribute :products_count do |seller|
58
- seller.products_count
59
- end
55
+ attributes :products_count
60
56
 
61
57
  attribute :users_count do |seller|
62
58
  seller.users.size
@@ -67,13 +63,9 @@ module Spree
67
63
  # requirements themselves, with their submissions, stay on the
68
64
  # heavier `onboarding` action; a list of sellers needs the number,
69
65
  # not the rows behind it.
70
- attribute :onboarding_progress do |seller|
71
- seller.onboarding_progress
72
- end
66
+ attributes :onboarding_progress
73
67
 
74
- attribute :onboarding_complete do |seller|
75
- seller.onboarding_complete?
76
- end
68
+ attribute :onboarding_complete, &:onboarding_complete?
77
69
 
78
70
  attribute :legal_name, &:legal_name
79
71
  attribute :registration_number, &:registration_number
@@ -16,25 +16,24 @@ module Spree
16
16
  order_number: 'string | null',
17
17
  kind: [:string, enum: Spree::SellerTransfer::KINDS],
18
18
  status: [:string, enum: Spree::SellerTransfer.statuses, enum_type_name: 'SellerTransferStatus'],
19
- provider: [:string, comment: 'Payout provider class name. Built-in: Spree::PayoutProvider::System. Provider gems register more.'],
19
+ provider: [:string, comment: 'Payout provider. Built-in: system. Provider gems register more (e.g. stripe).'],
20
20
  amount: :string,
21
- currency: :string,
21
+ currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
22
22
  settled_amount: 'string | null',
23
- settled_currency: 'string | null',
23
+ settled_currency: [:string, nullable: true, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
24
24
  converted: :boolean,
25
- reference: 'string | null',
26
- display_amount: :string
25
+ reference: 'string | null'
27
26
 
28
- attributes :kind, :status, :currency, :provider, :reference, :metadata,
27
+ attributes :kind, :status, :currency, :reference, :metadata,
29
28
  created_at: :iso8601, updated_at: :iso8601
30
29
 
31
- # A string, so the figure a seller is paid round-trips exactly.
32
- attribute(:amount) { |transfer| transfer.amount&.to_s }
33
- attribute(:display_amount) { |transfer| transfer.display_amount.to_s }
30
+ attribute(:amount) { |transfer| Spree::Money::Rounding.format(transfer.amount, transfer.currency) }
34
31
 
35
32
  # What the seller's account received, when the provider converted on
36
33
  # the way in. Null when it settled in the currency of the sale.
37
- attribute(:settled_amount) { |transfer| transfer.settled_amount&.to_s }
34
+ attribute(:settled_amount) do |transfer|
35
+ Spree::Money::Rounding.format(transfer.settled_amount, transfer.settled_currency || transfer.currency)
36
+ end
38
37
  attribute(:settled_currency) { |transfer| transfer.settled_currency }
39
38
  attribute(:converted) { |transfer| transfer.converted? }
40
39
 
@@ -46,6 +45,8 @@ module Spree
46
45
  # by row and these are what identify a row to an operator.
47
46
  attribute(:seller_name) { |transfer| transfer.seller&.name }
48
47
  attribute(:order_number) { |transfer| transfer.order&.number }
48
+
49
+ api_type_attributes :provider
49
50
  end
50
51
  end
51
52
  end
@@ -7,16 +7,14 @@ module Spree
7
7
  # The file is streamed through +download_url+, never linked to storage.
8
8
  class ShippingLabelSerializer < V3::BaseSerializer
9
9
  typelize owner_id: :string,
10
- owner_type: [:string, enum: Spree::ShippingLabel::OWNER_TYPES],
10
+ owner_type: [:string, enum: Spree::ShippingLabel::OWNER_TYPES.map { |type| Spree::Base.polymorphic_api_type(type) }],
11
11
  source: [:string, enum: Spree::ShippingLabel::SOURCES],
12
12
  status: [:string, enum: Spree::ShippingLabel.statuses, enum_type_name: 'ShippingLabelStatus'],
13
13
  carrier: [:string, nullable: true],
14
14
  carrier_name: [:string, nullable: true],
15
15
  service: [:string, nullable: true],
16
16
  tracking_number: [:string, nullable: true],
17
- cost: :string,
18
- currency: [:string, nullable: true],
19
- display_cost: :string,
17
+ currency: [:string, nullable: true, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
20
18
  format: [:string, nullable: true],
21
19
  external_id: [:string, nullable: true],
22
20
  integration_id: [:string, nullable: true],
@@ -28,31 +26,20 @@ module Spree
28
26
  attributes :source, :status, :carrier, :carrier_name, :service, :tracking_number, :currency, :format,
29
27
  :external_id, :metadata, refunded_at: :iso8601, created_at: :iso8601, updated_at: :iso8601
30
28
 
31
- attribute :owner_id do |shipping_label|
32
- shipping_label.owner&.prefixed_id
33
- end
29
+ prefixed_id_attributes :owner
34
30
 
35
31
  attribute :owner_type do |shipping_label|
36
- shipping_label.owner_type == 'Spree::Return' ? 'return' : 'fulfillment'
37
- end
38
-
39
- attribute :cost do |shipping_label|
40
- shipping_label.cost.to_s
32
+ Spree::Base.polymorphic_api_type(shipping_label.owner_type)
41
33
  end
42
34
 
43
- attribute :display_cost do |shipping_label|
44
- shipping_label.display_cost.to_s
45
- end
35
+ money_attributes :cost, currency: ->(label) { label.currency.presence || label.store.default_currency }
36
+ typelize cost: [:string, nullable: false]
46
37
 
47
- attribute :integration_id do |shipping_label|
48
- shipping_label.integration&.prefixed_id
49
- end
38
+ prefixed_id_attributes :integration
50
39
 
51
40
  # Whether the file is still being fetched from the carrier; the
52
41
  # download proxies the provider's copy meanwhile.
53
- attribute :file_pending do |shipping_label|
54
- shipping_label.file_pending?
55
- end
42
+ attribute :file_pending, &:file_pending?
56
43
 
57
44
  # Our own endpoint rather than a storage URL: the controller streams
58
45
  # the bytes, so admin auth runs on every print.
@@ -27,9 +27,7 @@ module Spree
27
27
  stock_level.stock_location&.name
28
28
  end
29
29
 
30
- attribute :product_id do |stock_level|
31
- stock_level.product&.prefixed_id
32
- end
30
+ prefixed_id_attributes :product
33
31
 
34
32
  attribute :options_text do |stock_level|
35
33
  stock_level.variant&.options_text.presence
@@ -3,6 +3,9 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class StockLocationSerializer < V3::StockLocationSerializer
6
+ # The Store API keeps these deprecated names until 6.1.
7
+ %i[country_iso state_abbr].each { |key| _attributes.delete(key) }
8
+
6
9
  include Concerns::ExternalReferencesAttribute
7
10
 
8
11
  typelize seller_id: [:string, nullable: true], seller_name: [:string, nullable: true],
@@ -22,9 +25,7 @@ module Spree
22
25
  :pickup_ready_in_minutes, :pickup_instructions,
23
26
  created_at: :iso8601, updated_at: :iso8601
24
27
 
25
- attribute :seller_id do |stock_location|
26
- stock_location.seller&.prefixed_id
27
- end
28
+ prefixed_id_attributes :seller
28
29
 
29
30
  attribute :seller_name do |stock_location|
30
31
  stock_location.seller&.name
@@ -13,7 +13,6 @@ module Spree
13
13
  stock_transfer_number: [:string, nullable: true],
14
14
  purchase_order_number: [:string, nullable: true],
15
15
  unit_cost: [:string, nullable: true],
16
- display_unit_cost: [:string, nullable: true],
17
16
  stock_location_id: [:string, nullable: true],
18
17
  stock_location_name: [:string, nullable: true],
19
18
  variant_id: [:string, nullable: true],
@@ -68,9 +67,7 @@ module Spree
68
67
  Spree::StockTransfer.prefixed_id_for(movement.stock_transfer_id)
69
68
  end
70
69
 
71
- attribute :stock_receipt_id do |movement|
72
- movement.stock_receipt&.prefixed_id
73
- end
70
+ prefixed_id_attributes :stock_receipt
74
71
 
75
72
  attribute :purchase_order_id do |movement|
76
73
  Spree::PurchaseOrder.prefixed_id_for(movement.purchase_order_id)
@@ -103,11 +100,8 @@ module Spree
103
100
  # purchase. Null on a transfer or a return — moving stock the
104
101
  # merchant already owns is not buying it.
105
102
  attribute :unit_cost do |movement|
106
- movement.unit_cost&.to_s
107
- end
108
-
109
- attribute :display_unit_cost do |movement|
110
- movement.display_unit_cost&.to_s
103
+ currency = movement.purchase_order&.currency || (current_store || Spree::Current.store)&.default_currency
104
+ Spree::Money::Rounding.format(movement.unit_cost, currency, unit_price: true)
111
105
  end
112
106
  end
113
107
  end
@@ -25,13 +25,7 @@ module Spree
25
25
  item.line_type.demodulize.underscore
26
26
  end
27
27
 
28
- attribute :line_id do |item|
29
- item.line&.prefixed_id
30
- end
31
-
32
- attribute :variant_id do |item|
33
- item.variant&.prefixed_id
34
- end
28
+ prefixed_id_attributes :line, :variant
35
29
 
36
30
  # The product the line's variant belongs to, so a delivery's line
37
31
  # can link to the screen where that SKU's stock lives.
@@ -28,9 +28,7 @@ module Spree
28
28
  receipt.receivable_type.demodulize.underscore
29
29
  end
30
30
 
31
- attribute :receivable_id do |receipt|
32
- receipt.receivable&.prefixed_id
33
- end
31
+ prefixed_id_attributes :receivable
34
32
 
35
33
  actor_attributes :received_by
36
34
 
@@ -34,9 +34,7 @@ module Spree
34
34
 
35
35
  attributes :quantity, expires_at: :iso8601
36
36
 
37
- attribute :active do |reservation|
38
- reservation.active?
39
- end
37
+ attribute :active, &:active?
40
38
 
41
39
  attributes created_at: :iso8601, updated_at: :iso8601
42
40
  end
@@ -25,9 +25,7 @@ module Spree
25
25
  Spree::StockTransfer.prefixed_id_for(item.stock_transfer_id)
26
26
  end
27
27
 
28
- attribute :variant_id do |item|
29
- item.variant&.prefixed_id
30
- end
28
+ prefixed_id_attributes :variant
31
29
 
32
30
  # The product the line's variant belongs to, so a line can link
33
31
  # straight to the screen where that SKU's stock lives.
@@ -5,15 +5,18 @@ module Spree
5
5
  # One line of a store credit's ledger: how the balance moved and what
6
6
  # moved it. Read-only — events are written by the credit itself.
7
7
  class StoreCreditEventSerializer < V3::StoreCreditEventSerializer
8
+ without_formatted_money
9
+
10
+ # No guest price gating here, so the inherited money fields are always present.
11
+ typelize amount: [:string, nullable: false]
12
+
8
13
  typelize originator_type: [:string, nullable: true],
9
14
  originator_id: [:string, nullable: true],
10
15
  store_credit_id: :string
11
16
 
12
17
  attributes updated_at: :iso8601
13
18
 
14
- attribute :store_credit_id do |event|
15
- event.store_credit&.prefixed_id
16
- end
19
+ prefixed_id_attributes :store_credit
17
20
 
18
21
  attribute :originator_type do |event|
19
22
  Spree::Base.polymorphic_api_type(event.originator_type)
@@ -3,11 +3,14 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class StoreCreditSerializer < V3::StoreCreditSerializer
6
+ without_formatted_money
7
+
6
8
  typelize customer_id: [:string, nullable: true],
7
9
  created_by_id: [:string, nullable: true],
8
10
  memo: [:string, nullable: true],
9
- amount_authorized: :string,
10
- display_amount_authorized: :string,
11
+ amount: [:string, nullable: false], amount_used: [:string, nullable: false],
12
+ amount_remaining: [:string, nullable: false],
13
+ amount_authorized: [:string, nullable: false],
11
14
  outstanding: :boolean,
12
15
  originator_type: [:string, nullable: true],
13
16
  originator_id: [:string, nullable: true],
@@ -16,27 +19,15 @@ module Spree
16
19
  attributes :memo, :metadata,
17
20
  created_at: :iso8601, updated_at: :iso8601
18
21
 
19
- attribute :amount_authorized do |store_credit|
20
- store_credit.amount_authorized.to_s
21
- end
22
-
22
+ money_attributes :amount_authorized
23
23
  # Answers the same question as the `outstanding` filter, so the row
24
24
  # and the filter cannot disagree.
25
- attribute :outstanding do |store_credit|
26
- store_credit.outstanding?
27
- end
25
+ attribute :outstanding, &:outstanding?
28
26
 
29
- attribute :display_amount_authorized do |store_credit|
30
- store_credit.display_amount_authorized.to_s
31
- end
32
-
33
- attribute :customer_id do |store_credit|
34
- store_credit.customer&.prefixed_id
35
- end
36
-
37
- attribute :created_by_id do |store_credit|
38
- store_credit.created_by&.prefixed_id
39
- end
27
+ # money_attributes types its fields nullable for gated guests; the
28
+ # Admin API never gates prices.
29
+ typelize amount_authorized: [:string, nullable: false]
30
+ prefixed_id_attributes :customer, :created_by
40
31
 
41
32
  # Why the credit exists: the return, exchange, claim or gift card
42
33
  # that issued it, or null when an admin issued it by hand. The type
@@ -4,110 +4,39 @@ module Spree
4
4
  module Admin
5
5
  class StoreSerializer < V3::BaseSerializer
6
6
  typelize name: :string, url: :string, code: :string, api_url: :string,
7
- preferred_storefront_url: [:string, nullable: true],
8
- default_currency: :string, default_locale: :string,
7
+ default_currency: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'], default_locale: [:string, enum: Spree::Locales::ALL, enum_type_name: 'LocaleCode'],
9
8
  default_country_code: [:string, nullable: true],
10
- supported_currencies: [:string, multi: true],
11
- supported_locales: [:string, multi: true],
12
- available_locales: [:string, multi: true],
9
+ supported_currencies: [:string, multi: true, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
10
+ supported_locales: [:string, multi: true, enum: Spree::Locales::ALL, enum_type_name: 'LocaleCode'],
11
+ available_locales: [:string, multi: true, enum: Spree::Locales::ALL, enum_type_name: 'LocaleCode'],
13
12
  logo_url: [:string, nullable: true],
14
13
  mailer_logo_url: [:string, nullable: true],
15
14
  mail_from_address: [:string, nullable: true],
16
15
  customer_support_email: [:string, nullable: true],
17
16
  new_order_notifications_email: [:string, nullable: true],
18
- preferred_send_consumer_transactional_emails: :boolean,
19
- preferred_admin_locale: [:string, nullable: true],
20
- preferred_timezone: :string,
21
- preferred_weight_unit: [:string, enum: Spree::Variant::WEIGHT_UNITS],
22
- preferred_unit_system: :string,
23
- preferred_storefront_access: :string,
24
- preferred_guest_checkout: :boolean,
25
- preferred_always_include_confirm_step: :boolean,
26
- preferred_company_field_enabled: :boolean,
27
- preferred_address_requires_company: :boolean,
28
- preferred_address_requires_phone: :boolean,
29
- preferred_capture_method: :string,
30
- preferred_track_inventory_levels: :boolean,
31
- preferred_stock_reservations_enabled: :boolean,
32
- preferred_low_stock_threshold: :number,
33
- preferred_tax_using_ship_address: :boolean,
34
- preferred_track_price_history: :boolean,
35
- preferred_show_products_without_price: :boolean,
36
- preferred_disable_sku_validation: :boolean,
37
- preferred_order_routing_strategy: :string,
38
- preferred_pricing_provider: :string,
39
- preferred_inventory_provider: :string,
40
- preferred_pricing_provider_failure_policy: :string,
41
- preferred_inventory_provider_failure_policy: :string,
42
- preferred_payout_provider: 'string | null',
43
- preferred_default_payouts_schedule_interval: :string,
44
- preferred_default_minimum_payout_amount: :number,
45
- preferred_auto_approve_sellers: :boolean,
46
- preferred_auto_approve_seller_products: :boolean,
47
- preferred_send_seller_transactional_emails: :boolean,
48
- preferred_default_commission_tax_rate: :number,
49
- preferred_document_number_format: :string,
50
- preferred_order_number_prefix: :string,
51
- preferred_order_number_suffix: :string,
52
- preferred_order_number_sequence_start: :number,
17
+ order_routing_strategy: [:string, comment: 'Order routing strategy. Built-in: rules. Extensions may register more.'],
18
+ payout_provider: [:string, nullable: true, comment: 'Payout provider; null uses the installation default. Built-in: system. Provider gems register more (e.g. stripe).'],
53
19
  order_number_sequence_started: :boolean,
54
- preferred_limit_digital_download_count: :boolean,
55
- preferred_digital_asset_authorized_clicks: :number,
56
- preferred_limit_digital_download_days: :boolean,
57
- preferred_digital_asset_authorized_days: :number,
58
20
  metadata: 'Record<string, unknown>'
59
21
 
60
22
  attributes :metadata,
61
23
  :name,
62
24
  :code,
63
- :preferred_storefront_url,
64
25
  :default_currency,
65
26
  :default_locale,
66
27
  :default_country_code,
67
28
  :mail_from_address,
68
29
  :customer_support_email,
69
30
  :new_order_notifications_email,
70
- :preferred_send_consumer_transactional_emails,
71
- :preferred_admin_locale,
72
- :preferred_timezone,
73
- :preferred_weight_unit,
74
- :preferred_unit_system,
75
- :preferred_storefront_access,
76
- :preferred_guest_checkout,
77
- :preferred_always_include_confirm_step,
78
- :preferred_company_field_enabled,
79
- :preferred_address_requires_company,
80
- :preferred_address_requires_phone,
81
- :preferred_capture_method,
82
- :preferred_track_inventory_levels,
83
- :preferred_stock_reservations_enabled,
84
- :preferred_low_stock_threshold,
85
- :preferred_tax_using_ship_address,
86
- :preferred_track_price_history,
87
- :preferred_show_products_without_price,
88
- :preferred_disable_sku_validation,
89
- :preferred_order_routing_strategy,
90
- :preferred_pricing_provider,
91
- :preferred_inventory_provider,
92
- :preferred_pricing_provider_failure_policy,
93
- :preferred_inventory_provider_failure_policy,
94
- :preferred_payout_provider,
95
- :preferred_default_payouts_schedule_interval,
96
- :preferred_default_minimum_payout_amount,
97
- :preferred_auto_approve_sellers,
98
- :preferred_auto_approve_seller_products,
99
- :preferred_send_seller_transactional_emails,
100
- :preferred_default_commission_tax_rate,
101
- :preferred_document_number_format,
102
- :preferred_order_number_prefix,
103
- :preferred_order_number_suffix,
104
- :preferred_order_number_sequence_start,
105
- :preferred_limit_digital_download_count,
106
- :preferred_digital_asset_authorized_clicks,
107
- :preferred_limit_digital_download_days,
108
- :preferred_digital_asset_authorized_days,
109
31
  created_at: :iso8601, updated_at: :iso8601
110
32
 
33
+ api_type_attributes :order_routing_strategy, :payout_provider
34
+
35
+ # The first two read through `api_type_attributes` above; the money
36
+ # and rate settings are formatted below.
37
+ preference_attributes Spree::Store, except: %i[order_routing_strategy payout_provider
38
+ default_minimum_payout_amount default_commission_tax_rate]
39
+
111
40
  # Once the counter has issued a number the starting value no longer
112
41
  # applies, so the settings page can say that instead of accepting a
113
42
  # value that does nothing.
@@ -115,6 +44,14 @@ module Spree
115
44
  Spree::NumberSequence.started?(store: store)
116
45
  end
117
46
 
47
+ typelize default_minimum_payout_amount: [:string, nullable: true]
48
+
49
+ attribute :default_minimum_payout_amount do |store|
50
+ Spree::Money::Rounding.format(store.preferred_default_minimum_payout_amount, store.default_currency, unit_price: true)
51
+ end
52
+
53
+ rate_attributes :default_commission_tax_rate
54
+
118
55
  attribute :url, &:storefront_url
119
56
 
120
57
  # The backend's own public URL — what a headless client sets as its
@@ -15,7 +15,7 @@ module Spree
15
15
  city: 'string | null',
16
16
  state_name: 'string | null',
17
17
  state_code: 'string | null',
18
- country_code: 'string | null',
18
+ country_code: [:string, nullable: true, enum: Spree::IsoData.country_codes, enum_type_name: 'CountryCode'],
19
19
  postal_code: 'string | null',
20
20
  purchase_orders_count: :number,
21
21
  can_be_deleted: :boolean,
@@ -29,9 +29,7 @@ module Spree
29
29
 
30
30
  # Lets the dashboard hide the delete control rather than offer one
31
31
  # the model will refuse.
32
- attribute :can_be_deleted do |supplier|
33
- supplier.can_be_deleted?
34
- end
32
+ attribute :can_be_deleted, &:can_be_deleted?
35
33
  end
36
34
  end
37
35
  end
@@ -7,8 +7,10 @@ module Spree
7
7
  class TaxExemptionCertificateSerializer < V3::BaseSerializer
8
8
  typelize certificate_number: :string, reason_code: :string, status: [:string, enum: Spree::TaxExemptionCertificate.statuses, enum_type_name: 'TaxExemptionCertificateStatus'],
9
9
  issuing_authority: [:string, nullable: true],
10
+ issued_at: [:string, nullable: true], expires_at: [:string, nullable: true],
11
+ verified_at: [:string, nullable: true],
10
12
  company_id: :string,
11
- country_code: [:string, nullable: true], state_code: [:string, nullable: true],
13
+ country_code: [:string, nullable: true, enum: Spree::IsoData.country_codes, enum_type_name: 'CountryCode'], state_code: [:string, nullable: true],
12
14
  active: :boolean, lapsed: :boolean, can_be_deleted: :boolean,
13
15
  document_filename: [:string, nullable: true],
14
16
  document_byte_size: ['number | null'],
@@ -19,9 +21,7 @@ module Spree
19
21
  issued_at: :iso8601, expires_at: :iso8601, verified_at: :iso8601,
20
22
  created_at: :iso8601, updated_at: :iso8601
21
23
 
22
- attribute :company_id do |certificate|
23
- certificate.company&.prefixed_id
24
- end
24
+ prefixed_id_attributes :company
25
25
 
26
26
  # The jurisdiction the certificate holds in, in the same vocabulary the
27
27
  # tax lines use.
@@ -33,14 +33,10 @@ module Spree
33
33
  certificate.verified? && !certificate.lapsed?
34
34
  end
35
35
 
36
- attribute :lapsed do |certificate|
37
- certificate.lapsed?
38
- end
36
+ attribute :lapsed, &:lapsed?
39
37
 
40
38
  # Lets the dashboard hide a delete the model will refuse.
41
- attribute :can_be_deleted do |certificate|
42
- certificate.can_be_deleted?
43
- end
39
+ attribute :can_be_deleted, &:can_be_deleted?
44
40
 
45
41
  attribute :document_filename do |certificate|
46
42
  certificate.document.blob&.filename&.to_s if certificate.document.attached?
@@ -18,9 +18,7 @@ module Spree
18
18
  # Whether this installation can check a number of this kind at all —
19
19
  # what tells a nil verdict "not checked yet" apart from "nothing here
20
20
  # knows how to ask".
21
- attribute :validatable do |tax_identifier|
22
- tax_identifier.validatable?
23
- end
21
+ attribute :validatable, &:validatable?
24
22
 
25
23
  # The owner, reported under the name of what it is, so a client can
26
24
  # tell a customer's durable registration from a cart override or an
@@ -3,10 +3,13 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  class TaxLineSerializer < V3::TaxLineSerializer
6
- typelize amount: [:string, nullable: false], display_amount: [:string, nullable: false],
6
+ without_formatted_money
7
+
8
+ typelize amount: [:string, nullable: false],
7
9
  provider_id: [:string, nullable: true], metadata: ['Record<string, unknown>', nullable: true],
8
- taxability_reason: [:string, nullable: true], country_code: [:string, nullable: true],
9
- state_code: [:string, nullable: true], data: ['Record<string, unknown>', nullable: true]
10
+ taxability_reason: [:string, nullable: true], country_code: [:string, nullable: true, enum: Spree::IsoData.country_codes, enum_type_name: 'CountryCode'],
11
+ state_code: [:string, nullable: true], data: ['Record<string, unknown>', nullable: true],
12
+ original_tax_line_id: [:string, nullable: true]
10
13
 
11
14
  # The treatment and its jurisdiction stay admin-only: no surveyed
12
15
  # platform shows a buyer a machine-readable tax reason, and `label`
@@ -14,6 +17,9 @@ module Spree
14
17
  # breakdown, which is what an e-invoicing integration reads.
15
18
  attributes :provider_id, :metadata, :taxability_reason, :country_code, :state_code, :data,
16
19
  created_at: :iso8601, updated_at: :iso8601
20
+
21
+ # The sale row a credit gives back.
22
+ prefixed_id_attributes :original_tax_line
17
23
  end
18
24
  end
19
25
  end
@@ -6,13 +6,11 @@ module Spree
6
6
  # customer-facing. What the customer sees is the label on a tax line.
7
7
  class TaxRateSerializer < V3::BaseSerializer
8
8
  typelize name: :string,
9
- amount: :string,
10
- amount_percentage: [:number, nullable: true],
11
9
  included_in_price: :boolean,
12
10
  show_rate_in_label: :boolean,
13
11
  tax_category_id: [:string, nullable: true],
14
12
  store_id: [:string, nullable: true],
15
- country_code: [:string, nullable: true],
13
+ country_code: [:string, nullable: true, enum: Spree::IsoData.country_codes, enum_type_name: 'CountryCode'],
16
14
  state_code: [:string, nullable: true],
17
15
  metadata: ['Record<string, unknown>', nullable: true],
18
16
  deleted_at: [:string, nullable: true]
@@ -20,23 +18,9 @@ module Spree
20
18
  attributes :name, :included_in_price, :show_rate_in_label, :metadata,
21
19
  created_at: :iso8601, updated_at: :iso8601, deleted_at: :iso8601
22
20
 
23
- attribute :amount do |tax_rate|
24
- tax_rate.amount&.to_s
25
- end
21
+ rate_attributes :rate, :rate_percent
26
22
 
27
- # A real number, unlike the money-style `amount` string — this is a
28
- # percentage for display, not an amount to round-trip exactly.
29
- attribute :amount_percentage do |tax_rate|
30
- tax_rate.amount_percentage&.to_f
31
- end
32
-
33
- attribute :tax_category_id do |tax_rate|
34
- tax_rate.tax_category&.prefixed_id
35
- end
36
-
37
- attribute :store_id do |tax_rate|
38
- tax_rate.store&.prefixed_id
39
- end
23
+ prefixed_id_attributes :tax_category, :store
40
24
 
41
25
  # The jurisdiction the rate taxes, as codes: a null country means every
42
26
  # country, and a country with no state means the whole country. Read