spree_api 5.6.1 → 6.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +28 -0
  3. data/Rakefile +1 -1
  4. data/app/controllers/concerns/spree/api/v3/address_params.rb +17 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/product_listing.rb +46 -0
  6. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +110 -0
  7. data/app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb +68 -0
  8. data/app/controllers/concerns/spree/api/v3/admin/reporting_authorization.rb +27 -0
  9. data/app/controllers/concerns/spree/api/v3/admin/role_grant_guard.rb +69 -33
  10. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +86 -0
  11. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +97 -0
  12. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +12 -6
  13. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +91 -0
  14. data/app/controllers/concerns/spree/api/v3/admin_authentication.rb +9 -5
  15. data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +41 -5
  16. data/app/controllers/concerns/spree/api/v3/authentication_strategies.rb +48 -0
  17. data/app/controllers/concerns/spree/api/v3/bulk_operations.rb +4 -6
  18. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +52 -16
  19. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +37 -0
  20. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +41 -0
  21. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +35 -0
  22. data/app/controllers/concerns/spree/api/v3/error_handler.rb +53 -11
  23. data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -4
  24. data/app/controllers/concerns/spree/api/v3/items_payload.rb +54 -0
  25. data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +23 -3
  26. data/app/controllers/concerns/spree/api/v3/key_store_context.rb +31 -0
  27. data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +3 -3
  28. data/app/controllers/concerns/spree/api/v3/order_lock.rb +22 -3
  29. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +112 -0
  30. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +105 -0
  31. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +117 -0
  32. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +157 -0
  33. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +76 -0
  34. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +116 -0
  35. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +128 -0
  36. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +7 -4
  37. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +42 -0
  38. data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +40 -6
  39. data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +80 -26
  40. data/app/controllers/concerns/spree/api/v3/seller/auth_cookies.rb +62 -0
  41. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +127 -0
  42. data/app/controllers/concerns/spree/api/v3/seller_authentication.rb +40 -0
  43. data/app/controllers/concerns/spree/api/v3/storefront_access.rb +38 -0
  44. data/app/controllers/concerns/spree/api/v3/streams_shipping_label.rb +37 -0
  45. data/app/controllers/concerns/spree/api/v3/tax_identifier_validation.rb +41 -0
  46. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +11 -14
  47. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +1 -1
  48. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -7
  49. data/app/controllers/spree/api/v3/admin/auth_controller.rb +138 -22
  50. data/app/controllers/spree/api/v3/admin/base_controller.rb +2 -0
  51. data/app/controllers/spree/api/v3/admin/catalog_assignments_controller.rb +27 -0
  52. data/app/controllers/spree/api/v3/admin/catalogs/base_controller.rb +29 -0
  53. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +40 -0
  54. data/app/controllers/spree/api/v3/admin/catalogs/products_controller.rb +107 -0
  55. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +75 -0
  56. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +191 -0
  57. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +28 -41
  58. data/app/controllers/spree/api/v3/admin/categories_controller.rb +16 -7
  59. data/app/controllers/spree/api/v3/admin/channels_controller.rb +50 -2
  60. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +25 -0
  61. data/app/controllers/spree/api/v3/admin/claims_controller.rb +31 -0
  62. data/app/controllers/spree/api/v3/admin/collection_rules_controller.rb +40 -0
  63. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +101 -0
  64. data/app/controllers/spree/api/v3/admin/collections_controller.rb +56 -0
  65. data/app/controllers/spree/api/v3/admin/commission_lines_controller.rb +39 -0
  66. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +174 -0
  67. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +65 -0
  68. data/app/controllers/spree/api/v3/admin/companies/base_controller.rb +29 -0
  69. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +56 -0
  70. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +66 -0
  71. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +137 -0
  72. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +46 -0
  73. data/app/controllers/spree/api/v3/admin/companies_controller.rb +59 -0
  74. data/app/controllers/spree/api/v3/admin/concerns/external_references.rb +166 -0
  75. data/app/controllers/spree/api/v3/admin/consent_records_controller.rb +31 -0
  76. data/app/controllers/spree/api/v3/admin/countries_controller.rb +12 -4
  77. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +19 -4
  78. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +5 -5
  79. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +1 -1
  80. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -4
  81. data/app/controllers/spree/api/v3/admin/customers/base_controller.rb +1 -1
  82. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +2 -3
  83. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +43 -0
  84. data/app/controllers/spree/api/v3/admin/customers_controller.rb +190 -11
  85. data/app/controllers/spree/api/v3/admin/dashboard_controller.rb +24 -20
  86. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +60 -0
  87. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +54 -0
  88. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +114 -0
  89. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +243 -0
  90. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +80 -0
  91. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +107 -0
  92. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +116 -0
  93. data/app/controllers/spree/api/v3/admin/digital_links_controller.rb +48 -0
  94. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +17 -3
  95. data/app/controllers/spree/api/v3/admin/exchanges_controller.rb +31 -0
  96. data/app/controllers/spree/api/v3/admin/exports_controller.rb +2 -2
  97. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +1 -1
  98. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +3 -2
  99. data/app/controllers/spree/api/v3/admin/imports_controller.rb +71 -8
  100. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +67 -0
  101. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +5 -5
  102. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +5 -1
  103. data/app/controllers/spree/api/v3/admin/locales_controller.rb +3 -1
  104. data/app/controllers/spree/api/v3/admin/markets_controller.rb +9 -5
  105. data/app/controllers/spree/api/v3/admin/me_controller.rb +4 -30
  106. data/app/controllers/spree/api/v3/admin/media_controller.rb +88 -38
  107. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +156 -0
  108. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +1 -0
  109. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +25 -0
  110. data/app/controllers/spree/api/v3/admin/order_groups_controller.rb +43 -0
  111. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +1 -1
  112. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +56 -0
  113. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +66 -0
  114. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +86 -0
  115. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +99 -0
  116. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +62 -0
  117. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +83 -0
  118. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +45 -67
  119. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +40 -22
  120. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +75 -0
  121. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +36 -18
  122. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +39 -18
  123. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +70 -0
  124. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +2 -2
  125. data/app/controllers/spree/api/v3/admin/orders/tax_identifiers_controller.rb +41 -0
  126. data/app/controllers/spree/api/v3/admin/orders/tax_lines_controller.rb +32 -0
  127. data/app/controllers/spree/api/v3/admin/orders_controller.rb +157 -32
  128. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +39 -0
  129. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +1 -1
  130. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +15 -4
  131. data/app/controllers/spree/api/v3/admin/payout_providers_controller.rb +27 -0
  132. data/app/controllers/spree/api/v3/admin/permissions_controller.rb +30 -0
  133. data/app/controllers/spree/api/v3/admin/policies_controller.rb +42 -0
  134. data/app/controllers/spree/api/v3/admin/price_lists/products_controller.rb +93 -0
  135. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +43 -29
  136. data/app/controllers/spree/api/v3/admin/prices_controller.rb +41 -4
  137. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +93 -0
  138. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +148 -0
  139. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +24 -3
  140. data/app/controllers/spree/api/v3/admin/products_controller.rb +149 -33
  141. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +6 -2
  142. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +1 -1
  143. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +1 -5
  144. data/app/controllers/spree/api/v3/admin/purchase_orders/stock_receipts_controller.rb +32 -0
  145. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +161 -0
  146. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +25 -0
  147. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +45 -0
  148. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +95 -0
  149. data/app/controllers/spree/api/v3/admin/resource_controller.rb +27 -10
  150. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +25 -0
  151. data/app/controllers/spree/api/v3/admin/returns_controller.rb +31 -0
  152. data/app/controllers/spree/api/v3/admin/roles_controller.rb +50 -6
  153. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +83 -0
  154. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +139 -0
  155. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +115 -0
  156. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +36 -0
  157. data/app/controllers/spree/api/v3/admin/sellers/balances_controller.rb +44 -0
  158. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +77 -0
  159. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +107 -0
  160. data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +64 -0
  161. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +197 -0
  162. data/app/controllers/spree/api/v3/admin/setup_controller.rb +231 -0
  163. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +172 -0
  164. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +3 -2
  165. data/app/controllers/spree/api/v3/admin/stock_movements_controller.rb +37 -0
  166. data/app/controllers/spree/api/v3/admin/stock_reservations_controller.rb +1 -1
  167. data/app/controllers/spree/api/v3/admin/stock_transfers/stock_receipts_controller.rb +31 -0
  168. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +134 -38
  169. data/app/controllers/spree/api/v3/admin/store_controller.rb +65 -0
  170. data/app/controllers/spree/api/v3/admin/store_credits/events_controller.rb +47 -0
  171. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +87 -0
  172. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +30 -0
  173. data/app/controllers/spree/api/v3/admin/tags_controller.rb +2 -2
  174. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +4 -0
  175. data/app/controllers/spree/api/v3/admin/tax_providers_controller.rb +25 -0
  176. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +33 -0
  177. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +33 -0
  178. data/app/controllers/spree/api/v3/admin/translatable_resources_controller.rb +37 -9
  179. data/app/controllers/spree/api/v3/admin/translations_controller.rb +10 -5
  180. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +150 -0
  181. data/app/controllers/spree/api/v3/admin/variants_controller.rb +11 -4
  182. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +1 -1
  183. data/app/controllers/spree/api/v3/base_controller.rb +59 -16
  184. data/app/controllers/spree/api/v3/resource_controller.rb +154 -38
  185. data/app/controllers/spree/api/v3/seller/auth_controller.rb +169 -0
  186. data/app/controllers/spree/api/v3/seller/balances_controller.rb +35 -0
  187. data/app/controllers/spree/api/v3/seller/base_controller.rb +25 -0
  188. data/app/controllers/spree/api/v3/seller/claim_reasons_controller.rb +20 -0
  189. data/app/controllers/spree/api/v3/seller/countries_controller.rb +38 -0
  190. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +265 -0
  191. data/app/controllers/spree/api/v3/seller/delivery_profiles_controller.rb +65 -0
  192. data/app/controllers/spree/api/v3/seller/delivery_zones_controller.rb +41 -0
  193. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +21 -0
  194. data/app/controllers/spree/api/v3/seller/exports_controller.rb +195 -0
  195. data/app/controllers/spree/api/v3/seller/import_rows_controller.rb +49 -0
  196. data/app/controllers/spree/api/v3/seller/imports_controller.rb +317 -0
  197. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +152 -0
  198. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +71 -0
  199. data/app/controllers/spree/api/v3/seller/me_controller.rb +72 -0
  200. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +111 -0
  201. data/app/controllers/spree/api/v3/seller/order_cancellation_reasons_controller.rb +25 -0
  202. data/app/controllers/spree/api/v3/seller/orders/base_controller.rb +44 -0
  203. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +45 -0
  204. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +38 -0
  205. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +50 -0
  206. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +79 -0
  207. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +55 -0
  208. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +82 -0
  209. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +44 -0
  210. data/app/controllers/spree/api/v3/seller/orders_controller.rb +199 -0
  211. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +100 -0
  212. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +155 -0
  213. data/app/controllers/spree/api/v3/seller/payouts_controller.rb +47 -0
  214. data/app/controllers/spree/api/v3/seller/policies_controller.rb +57 -0
  215. data/app/controllers/spree/api/v3/seller/product_types_controller.rb +35 -0
  216. data/app/controllers/spree/api/v3/seller/products_controller.rb +394 -0
  217. data/app/controllers/spree/api/v3/seller/profile_controller.rb +137 -0
  218. data/app/controllers/spree/api/v3/seller/reasons_controller.rb +45 -0
  219. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +95 -0
  220. data/app/controllers/spree/api/v3/seller/resource_controller.rb +75 -0
  221. data/app/controllers/spree/api/v3/seller/return_reasons_controller.rb +20 -0
  222. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +56 -0
  223. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +48 -0
  224. data/app/controllers/spree/api/v3/seller/team_controller.rb +103 -0
  225. data/app/controllers/spree/api/v3/seller/tracking_carriers_controller.rb +35 -0
  226. data/app/controllers/spree/api/v3/seller/transfers_controller.rb +43 -0
  227. data/app/controllers/spree/api/v3/store/account/companies_controller.rb +42 -0
  228. data/app/controllers/spree/api/v3/store/auth_controller.rb +21 -34
  229. data/app/controllers/spree/api/v3/store/base_controller.rb +4 -0
  230. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +24 -2
  231. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +41 -15
  232. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +53 -20
  233. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +36 -20
  234. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +111 -0
  235. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -2
  236. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +96 -0
  237. data/app/controllers/spree/api/v3/store/carts_controller.rb +57 -12
  238. data/app/controllers/spree/api/v3/store/categories_controller.rb +6 -3
  239. data/app/controllers/spree/api/v3/store/collections/products_controller.rb +59 -0
  240. data/app/controllers/spree/api/v3/store/collections_controller.rb +36 -0
  241. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +81 -0
  242. data/app/controllers/spree/api/v3/store/companies/base_controller.rb +24 -0
  243. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +50 -0
  244. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +66 -0
  245. data/app/controllers/spree/api/v3/store/companies/orders_controller.rb +28 -0
  246. data/app/controllers/spree/api/v3/store/companies_controller.rb +47 -0
  247. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +90 -0
  248. data/app/controllers/spree/api/v3/store/countries_controller.rb +8 -6
  249. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +3 -1
  250. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +78 -0
  251. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
  252. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
  253. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
  254. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
  255. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
  256. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
  257. data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
  258. data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
  259. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
  260. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
  261. data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
  262. data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
  263. data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
  264. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
  265. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
  266. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
  267. data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
  268. data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
  269. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +10 -3
  270. data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
  271. data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
  272. data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
  273. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
  274. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
  275. data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
  276. data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
  277. data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
  278. data/app/models/spree/api/data_request_urls.rb +25 -0
  279. data/app/models/spree/api/digital_link_urls.rb +26 -0
  280. data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
  281. data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
  282. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
  283. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
  284. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
  285. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
  286. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
  287. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
  288. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
  289. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
  290. data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
  291. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
  292. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
  293. data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
  294. data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
  295. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
  296. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
  297. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
  298. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +29 -0
  299. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
  300. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
  301. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
  302. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
  303. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
  304. data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
  305. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
  306. data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
  307. data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
  308. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
  309. data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
  310. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
  311. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
  312. data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
  313. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
  314. data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
  315. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
  316. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
  317. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
  318. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
  319. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
  320. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
  321. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
  322. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
  323. data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
  324. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
  325. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
  326. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
  327. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
  328. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +35 -0
  329. data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
  330. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
  331. data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
  332. data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
  333. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
  334. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
  335. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
  336. data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
  337. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
  338. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
  339. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +19 -5
  340. data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
  341. data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
  342. data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
  343. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
  344. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
  345. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  346. data/app/serializers/spree/api/v3/admin/order_serializer.rb +131 -19
  347. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
  348. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
  349. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
  350. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
  351. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
  352. data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
  353. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
  354. data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
  355. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
  356. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
  357. data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
  358. data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
  359. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
  360. data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
  361. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
  362. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
  363. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
  364. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
  365. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
  366. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
  367. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +0 -5
  368. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
  369. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
  370. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
  371. data/app/serializers/spree/api/v3/admin/return_serializer.rb +59 -0
  372. data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
  373. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -0
  374. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
  375. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
  376. data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
  377. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
  378. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
  379. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
  380. data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
  381. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
  382. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
  383. data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
  384. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
  385. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
  386. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
  387. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
  388. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +49 -0
  389. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
  390. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
  391. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
  392. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
  393. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
  394. data/app/serializers/spree/api/v3/admin/store_serializer.rb +63 -1
  395. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
  396. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
  397. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
  398. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
  399. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
  400. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
  401. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
  402. data/app/serializers/spree/api/v3/base_serializer.rb +39 -2
  403. data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
  404. data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
  405. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
  406. data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
  407. data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
  408. data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
  409. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
  410. data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
  411. data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
  412. data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
  413. data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
  414. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
  415. data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
  416. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
  417. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
  418. data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
  419. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
  420. data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
  421. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
  422. data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
  423. data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
  424. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
  425. data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
  426. data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
  427. data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
  428. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
  429. data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
  430. data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
  431. data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
  432. data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
  433. data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
  434. data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
  435. data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
  436. data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
  437. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
  438. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  439. data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
  440. data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
  441. data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
  442. data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
  443. data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
  444. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  445. data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
  446. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  447. data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
  448. data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
  449. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
  450. data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
  451. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
  452. data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
  453. data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
  454. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
  455. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
  456. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
  457. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
  458. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
  459. data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
  460. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
  461. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
  462. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
  463. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
  464. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
  465. data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
  466. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
  467. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
  468. data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
  469. data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
  470. data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
  471. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
  472. data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
  473. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
  474. data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
  475. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
  476. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
  477. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
  478. data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
  479. data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
  480. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
  481. data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
  482. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
  483. data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
  484. data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
  485. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
  486. data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
  487. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
  488. data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
  489. data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
  490. data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
  491. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
  492. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
  493. data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
  494. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
  495. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
  496. data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
  497. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
  498. data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
  499. data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
  500. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
  501. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
  502. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
  503. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
  504. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
  505. data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
  506. data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
  507. data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
  508. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
  509. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  510. data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
  511. data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
  512. data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
  513. data/config/brakeman.ignore +1 -1
  514. data/config/initializers/typelizer.rb +51 -4
  515. data/config/locales/en.yml +5 -0
  516. data/config/routes.rb +730 -22
  517. data/lib/spree/api/configuration.rb +2 -7
  518. data/lib/spree/api/dependencies.rb +173 -227
  519. data/lib/spree/api/openapi/schema_helper.rb +179 -13
  520. data/lib/spree/api/testing_support/v3/base.rb +45 -15
  521. data/lib/spree/api.rb +10 -4
  522. data/lib/typelizer/open_enums.rb +35 -0
  523. metadata +341 -27
  524. data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
  525. data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
  526. data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
  527. data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
  528. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
  529. data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
  530. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
  531. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
  532. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
  533. data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
  534. data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
  535. data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
  536. data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
  537. data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
  538. data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
  539. data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
  540. data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
@@ -6,6 +6,7 @@ module Spree
6
6
  typelize name: :string, url: :string, code: :string, api_url: :string,
7
7
  preferred_storefront_url: [:string, nullable: true],
8
8
  default_currency: :string, default_locale: :string,
9
+ default_country_code: [:string, nullable: true],
9
10
  supported_currencies: [:string, multi: true],
10
11
  supported_locales: [:string, multi: true],
11
12
  available_locales: [:string, multi: true],
@@ -17,11 +18,38 @@ module Spree
17
18
  preferred_send_consumer_transactional_emails: :boolean,
18
19
  preferred_admin_locale: [:string, nullable: true],
19
20
  preferred_timezone: :string,
20
- preferred_weight_unit: :string,
21
+ preferred_weight_unit: [:string, enum: Spree::Variant::WEIGHT_UNITS],
21
22
  preferred_unit_system: :string,
22
23
  preferred_storefront_access: :string,
23
24
  preferred_guest_checkout: :boolean,
25
+ preferred_company_field_enabled: :boolean,
26
+ preferred_address_requires_company: :boolean,
27
+ preferred_address_requires_phone: :boolean,
28
+ preferred_capture_method: :string,
29
+ preferred_track_inventory_levels: :boolean,
30
+ preferred_stock_reservations_enabled: :boolean,
31
+ preferred_low_stock_threshold: :number,
32
+ preferred_tax_using_ship_address: :boolean,
33
+ preferred_track_price_history: :boolean,
34
+ preferred_show_products_without_price: :boolean,
35
+ preferred_disable_sku_validation: :boolean,
24
36
  preferred_order_routing_strategy: :string,
37
+ preferred_pricing_provider: :string,
38
+ preferred_inventory_provider: :string,
39
+ preferred_pricing_provider_failure_policy: :string,
40
+ preferred_inventory_provider_failure_policy: :string,
41
+ preferred_payout_provider: 'string | null',
42
+ preferred_default_payouts_schedule_interval: :string,
43
+ preferred_default_minimum_payout_amount: :number,
44
+ preferred_document_number_format: :string,
45
+ preferred_order_number_prefix: :string,
46
+ preferred_order_number_suffix: :string,
47
+ preferred_order_number_sequence_start: :number,
48
+ order_number_sequence_started: :boolean,
49
+ preferred_limit_digital_download_count: :boolean,
50
+ preferred_digital_asset_authorized_clicks: :number,
51
+ preferred_limit_digital_download_days: :boolean,
52
+ preferred_digital_asset_authorized_days: :number,
25
53
  metadata: 'Record<string, unknown>'
26
54
 
27
55
  attributes :metadata,
@@ -30,6 +58,7 @@ module Spree
30
58
  :preferred_storefront_url,
31
59
  :default_currency,
32
60
  :default_locale,
61
+ :default_country_code,
33
62
  :mail_from_address,
34
63
  :customer_support_email,
35
64
  :new_order_notifications_email,
@@ -40,9 +69,42 @@ module Spree
40
69
  :preferred_unit_system,
41
70
  :preferred_storefront_access,
42
71
  :preferred_guest_checkout,
72
+ :preferred_company_field_enabled,
73
+ :preferred_address_requires_company,
74
+ :preferred_address_requires_phone,
75
+ :preferred_capture_method,
76
+ :preferred_track_inventory_levels,
77
+ :preferred_stock_reservations_enabled,
78
+ :preferred_low_stock_threshold,
79
+ :preferred_tax_using_ship_address,
80
+ :preferred_track_price_history,
81
+ :preferred_show_products_without_price,
82
+ :preferred_disable_sku_validation,
43
83
  :preferred_order_routing_strategy,
84
+ :preferred_pricing_provider,
85
+ :preferred_inventory_provider,
86
+ :preferred_pricing_provider_failure_policy,
87
+ :preferred_inventory_provider_failure_policy,
88
+ :preferred_payout_provider,
89
+ :preferred_default_payouts_schedule_interval,
90
+ :preferred_default_minimum_payout_amount,
91
+ :preferred_document_number_format,
92
+ :preferred_order_number_prefix,
93
+ :preferred_order_number_suffix,
94
+ :preferred_order_number_sequence_start,
95
+ :preferred_limit_digital_download_count,
96
+ :preferred_digital_asset_authorized_clicks,
97
+ :preferred_limit_digital_download_days,
98
+ :preferred_digital_asset_authorized_days,
44
99
  created_at: :iso8601, updated_at: :iso8601
45
100
 
101
+ # Once the counter has issued a number the starting value no longer
102
+ # applies, so the settings page can say that instead of accepting a
103
+ # value that does nothing.
104
+ attribute :order_number_sequence_started do |store|
105
+ Spree::NumberSequence.started?(store: store)
106
+ end
107
+
46
108
  attribute :url, &:storefront_url
47
109
 
48
110
  # The backend's own public URL — what a headless client sets as its
@@ -0,0 +1,39 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin-only: who the merchant buys from is never a storefront
6
+ # concern.
7
+ class SupplierSerializer < V3::BaseSerializer
8
+ typelize name: :string,
9
+ contact_name: 'string | null',
10
+ email: 'string | null',
11
+ phone: 'string | null',
12
+ notes: 'string | null',
13
+ address1: 'string | null',
14
+ address2: 'string | null',
15
+ city: 'string | null',
16
+ state_name: 'string | null',
17
+ state_code: 'string | null',
18
+ country_code: 'string | null',
19
+ postal_code: 'string | null',
20
+ purchase_orders_count: :number,
21
+ can_be_deleted: :boolean,
22
+ deleted_at: 'string | null',
23
+ metadata: 'Record<string, unknown>'
24
+
25
+ attributes :name, :contact_name, :email, :phone, :notes,
26
+ :address1, :address2, :city, :state_name, :state_code,
27
+ :country_code, :postal_code, :purchase_orders_count, :metadata,
28
+ created_at: :iso8601, updated_at: :iso8601, deleted_at: :iso8601
29
+
30
+ # Lets the dashboard hide the delete control rather than offer one
31
+ # the model will refuse.
32
+ attribute :can_be_deleted do |supplier|
33
+ supplier.can_be_deleted?
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,67 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin-only: certificates are back-office evidence with no storefront
6
+ # surface, so there is no store serializer to extend.
7
+ class TaxExemptionCertificateSerializer < V3::BaseSerializer
8
+ typelize certificate_number: :string, reason_code: :string, status: [:string, enum: Spree::TaxExemptionCertificate.statuses, enum_type_name: 'TaxExemptionCertificateStatus'],
9
+ issuing_authority: [:string, nullable: true],
10
+ company_id: :string,
11
+ country_code: [:string, nullable: true], state_code: [:string, nullable: true],
12
+ active: :boolean, lapsed: :boolean, can_be_deleted: :boolean,
13
+ document_filename: [:string, nullable: true],
14
+ document_byte_size: ['number | null'],
15
+ document_url: [:string, nullable: true],
16
+ metadata: 'Record<string, unknown> | null'
17
+
18
+ attributes :certificate_number, :reason_code, :status, :issuing_authority, :metadata,
19
+ issued_at: :iso8601, expires_at: :iso8601, verified_at: :iso8601,
20
+ created_at: :iso8601, updated_at: :iso8601
21
+
22
+ attribute :company_id do |certificate|
23
+ certificate.company&.prefixed_id
24
+ end
25
+
26
+ # The jurisdiction the certificate holds in, in the same vocabulary the
27
+ # tax lines use.
28
+ attributes :country_code, :state_code
29
+
30
+ # Whether it counts right now — the status alone can't say, since a
31
+ # verified certificate stops counting once its date passes.
32
+ attribute :active do |certificate|
33
+ certificate.verified? && !certificate.lapsed?
34
+ end
35
+
36
+ attribute :lapsed do |certificate|
37
+ certificate.lapsed?
38
+ end
39
+
40
+ # Lets the dashboard hide a delete the model will refuse.
41
+ attribute :can_be_deleted do |certificate|
42
+ certificate.can_be_deleted?
43
+ end
44
+
45
+ attribute :document_filename do |certificate|
46
+ certificate.document.blob&.filename&.to_s if certificate.document.attached?
47
+ end
48
+
49
+ attribute :document_byte_size do |certificate|
50
+ certificate.document.blob&.byte_size if certificate.document.attached?
51
+ end
52
+
53
+ # Our own endpoint rather than a pre-signed URL: the controller streams
54
+ # the bytes, so admin auth runs on every download of a confidential
55
+ # document.
56
+ attribute :document_url do |certificate|
57
+ next nil unless certificate.document.attached?
58
+
59
+ Spree::Core::Engine.routes.url_helpers.download_api_v3_admin_company_tax_exemption_certificate_path(
60
+ company_id: certificate.company.prefixed_id, id: certificate.prefixed_id
61
+ )
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,43 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class TaxIdentifierSerializer < V3::TaxIdentifierSerializer
6
+ typelize validation_status: [:string, nullable: true, enum: Spree::TaxIdentifier::VALIDATION_STATUSES],
7
+ validated_at: [:string, nullable: true],
8
+ validation_evidence: ['Record<string, unknown>', nullable: true],
9
+ source: [:string, nullable: true, enum: Spree::TaxIdentifier::SOURCES],
10
+ validatable: :boolean,
11
+ customer_id: [:string, nullable: true],
12
+ cart_id: [:string, nullable: true],
13
+ order_id: [:string, nullable: true]
14
+
15
+ attributes :validation_status, :validation_evidence, :source,
16
+ validated_at: :iso8601, created_at: :iso8601, updated_at: :iso8601
17
+
18
+ # Whether this installation can check a number of this kind at all —
19
+ # what tells a nil verdict "not checked yet" apart from "nothing here
20
+ # knows how to ask".
21
+ attribute :validatable do |tax_identifier|
22
+ tax_identifier.validatable?
23
+ end
24
+
25
+ # The owner, reported under the name of what it is, so a client can
26
+ # tell a customer's durable registration from a cart override or an
27
+ # order's snapshot without reading a type string.
28
+ attribute :customer_id do |tax_identifier|
29
+ tax_identifier.owner&.prefixed_id if tax_identifier.owner.is_a?(Spree.customer_class)
30
+ end
31
+
32
+ attribute :cart_id do |tax_identifier|
33
+ tax_identifier.owner&.prefixed_id if tax_identifier.owner.is_a?(Spree::Cart)
34
+ end
35
+
36
+ attribute :order_id do |tax_identifier|
37
+ tax_identifier.owner&.prefixed_id if tax_identifier.owner.is_a?(Spree::Order)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ class TaxLineSerializer < V3::TaxLineSerializer
6
+ typelize amount: [:string, nullable: false], display_amount: [:string, nullable: false],
7
+ 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
+
11
+ # The treatment and its jurisdiction stay admin-only: no surveyed
12
+ # platform shows a buyer a machine-readable tax reason, and `label`
13
+ # already covers what they need. `data` carries the provider's own
14
+ # breakdown, which is what an e-invoicing integration reads.
15
+ attributes :provider_id, :metadata, :taxability_reason, :country_code, :state_code, :data,
16
+ created_at: :iso8601, updated_at: :iso8601
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,49 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # Admin-only: tax rates are the internal provider's configuration, never
6
+ # customer-facing. What the customer sees is the label on a tax line.
7
+ class TaxRateSerializer < V3::BaseSerializer
8
+ typelize name: :string,
9
+ amount: :string,
10
+ amount_percentage: [:number, nullable: true],
11
+ included_in_price: :boolean,
12
+ show_rate_in_label: :boolean,
13
+ tax_category_id: [:string, nullable: true],
14
+ store_id: [:string, nullable: true],
15
+ country_code: [:string, nullable: true],
16
+ state_code: [:string, nullable: true],
17
+ metadata: ['Record<string, unknown>', nullable: true],
18
+ deleted_at: [:string, nullable: true]
19
+
20
+ attributes :name, :included_in_price, :show_rate_in_label, :metadata,
21
+ created_at: :iso8601, updated_at: :iso8601, deleted_at: :iso8601
22
+
23
+ attribute :amount do |tax_rate|
24
+ tax_rate.amount&.to_s
25
+ end
26
+
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
40
+
41
+ # The jurisdiction the rate taxes, as codes: a null country means every
42
+ # country, and a country with no state means the whole country. Read
43
+ # and written under the same two names.
44
+ attributes :country_code, :state_code
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -5,21 +5,38 @@ module Spree
5
5
  # Admin API Variant Serializer
6
6
  # Full variant data including admin-only fields
7
7
  class VariantSerializer < V3::VariantSerializer
8
+ include Concerns::ExternalReferencesAttribute
9
+
8
10
 
9
11
  typelize product_name: :string,
10
12
  position: :number, tax_category_id: [:string, nullable: true],
11
13
  cost_price: [:string, nullable: true], cost_currency: [:string, nullable: true],
12
14
  barcode: [:string, nullable: true],
13
- weight_unit: [:string, nullable: true], dimensions_unit: [:string, nullable: true],
14
15
  available_stock: [:number, nullable: true],
15
16
  reserved_quantity: :number, total_on_hand: [:number, nullable: true],
16
17
  preorderable: :boolean, preorder_ships_at: [:string, nullable: true],
17
18
  backorder_limit: [:number, nullable: true],
19
+ hs_code: [:string, nullable: true],
20
+ country_of_origin: [:string, nullable: true],
21
+ customs_description: [:string, nullable: true],
18
22
  deleted_at: [:string, nullable: true],
23
+ delivery_profile_id: [:string, nullable: true],
24
+ minimum_order_quantity: ['number | null'], order_multiple: ['number | null'],
25
+ purchase_unit: [:string, nullable: true, enum: Spree::Variant::PURCHASE_UNITS],
26
+ carton_package_type_id: [:string, nullable: true],
27
+ carton_weight: [:string, nullable: true],
28
+ cartons_per_pallet: ['number | null'],
29
+ units_per_pallet: ['number | null'],
19
30
  metadata: 'Record<string, unknown>'
20
31
 
32
+ # The last three override the store serializer's buyer-resolved
33
+ # values with the variant's OWN: a merchant edits what is stored on
34
+ # the row, not what some catalog resolves to for a buyer they are not.
21
35
  attributes :metadata, :position, :cost_price, :cost_currency,
22
- :barcode, :weight_unit, :dimensions_unit, :backorder_limit,
36
+ :barcode, :backorder_limit,
37
+ :hs_code, :country_of_origin, :customs_description,
38
+ :minimum_order_quantity, :order_multiple, :purchase_unit,
39
+ :carton_weight, :cartons_per_pallet,
23
40
  preorder_ships_at: :iso8601, deleted_at: :iso8601,
24
41
  created_at: :iso8601, updated_at: :iso8601
25
42
 
@@ -31,8 +48,18 @@ module Spree
31
48
  variant.tax_category&.prefixed_id
32
49
  end
33
50
 
51
+ # Encoded from the foreign key: loading the carton row just to
52
+ # re-encode its id is a query per variant on the product listing.
53
+ attribute :carton_package_type_id do |variant|
54
+ Spree::PackageType.prefixed_id_for(variant.carton_package_type_id)
55
+ end
56
+
57
+ # How many units a full pallet holds — the far end of the packing
58
+ # chain, derived so a merchant sees it without doing the arithmetic.
59
+ attribute :units_per_pallet, &:units_per_pallet
60
+
34
61
  # Physical pool minus already-allocated units. In 5.5 allocated_count
35
- # is always 0, so this equals SUM(stock_items.count_on_hand).
62
+ # is always 0, so this equals SUM(stock_levels.count_on_hand).
36
63
  attribute :available_stock do |variant|
37
64
  variant.available_stock.to_i if variant.should_track_inventory?
38
65
  end
@@ -50,6 +77,21 @@ module Spree
50
77
  variant.product&.name
51
78
  end
52
79
 
80
+ # How this variant ships — one answer, resolved on the model the same
81
+ # way the seller is. Writable: on a master product it names how this
82
+ # seller's row ships; on an owned product the write is a no-op, since
83
+ # every variant ships as the product does. The dashboard need not
84
+ # know which.
85
+ attribute :delivery_profile_id do |variant|
86
+ variant.resolved_delivery_profile&.prefixed_id
87
+ end
88
+
89
+ one :seller,
90
+ resource: proc { Spree.api.admin_seller_serializer },
91
+ if: proc { expand?('seller') } do |variant|
92
+ variant.resolved_seller
93
+ end
94
+
53
95
  # Override inherited associations to use admin serializers
54
96
  one :primary_media,
55
97
  resource: proc { Spree.api.admin_media_serializer },
@@ -67,14 +109,13 @@ module Spree
67
109
  resource: proc { Spree.api.admin_price_serializer },
68
110
  if: proc { expand?('prices') }
69
111
 
70
- many :metafields,
71
- key: :custom_fields,
112
+ many :custom_fields,
72
113
  resource: proc { Spree.api.admin_custom_field_serializer },
73
114
  if: proc { expand?('custom_fields') }
74
115
 
75
- many :stock_items,
76
- resource: proc { Spree.api.admin_stock_item_serializer },
77
- if: proc { expand?('stock_items') }
116
+ many :stock_levels,
117
+ resource: proc { Spree.api.admin_stock_level_serializer },
118
+ if: proc { expand?('stock_levels') }
78
119
  end
79
120
  end
80
121
  end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ # Summary of promotions applied to a Cart or Order (serves the embedded
5
+ # `discounts` key). Distinct from DiscountSerializer, which serializes
6
+ # the typed Spree::Discount money rows.
7
+ class AppliedPromotionSerializer < BaseSerializer
8
+ typelize name: :string, description: [:string, nullable: true], code: [:string, nullable: true],
9
+ amount: [:string, nullable: true], display_amount: [:string, nullable: true], promotion_id: :string
10
+
11
+ attribute :promotion_id do |record|
12
+ record.promotion&.prefixed_id
13
+ end
14
+
15
+ attributes :name, :description, :code
16
+
17
+ # Nulled for gated (prices_hidden) guests so an applied discount can't
18
+ # leak the amount the cart/order totals already withhold.
19
+ money_attributes :amount, :display_amount
20
+ end
21
+ end
22
+ end
23
+ end
@@ -27,6 +27,17 @@ module Spree
27
27
  end
28
28
  end
29
29
 
30
+ # Plain decimal notation. BigDecimal renders 0.06 as "0.6e-1", which
31
+ # is what a client would otherwise print beside a unit.
32
+ #
33
+ # @param value [BigDecimal, Numeric, nil]
34
+ # @return [String, nil]
35
+ def decimal_string(value)
36
+ return if value.nil?
37
+
38
+ BigDecimal(value.to_s).to_s('F')
39
+ end
40
+
30
41
  # Context accessors
31
42
  def current_store
32
43
  params[:store]
@@ -83,6 +94,13 @@ module Spree
83
94
  end
84
95
  end
85
96
 
97
+ # The variant a product leads with in the request's currency: the buy
98
+ # box winner, else the default variant. Resolved in the same currency
99
+ # `price_for` prices in, so the two never describe different rows.
100
+ def featured_variant(product)
101
+ product.featured_variant(currency: current_currency)
102
+ end
103
+
86
104
  # Returns price for a variant using full Price List resolution
87
105
  # This may return a price from a price list if applicable
88
106
  # Memoized per variant to avoid duplicate queries
@@ -102,6 +120,25 @@ module Spree
102
120
  )
103
121
  end
104
122
 
123
+ # The buyer's effective purchasing rules for a variant — their
124
+ # catalogs' commercial terms resolved over the variant's own base
125
+ # rules. Read from the request context the same way price_for does,
126
+ # so a storefront gets the stepper matching the price it is quoted.
127
+ #
128
+ # The resolver is request-scoped, not instance-scoped: Alba builds a
129
+ # fresh serializer for every element of a collection, so a memo held
130
+ # here would reload each catalog's override rows once per row on the
131
+ # page. Resolving without the buyer's company would also answer from
132
+ # a different agreement than the one pricing the same page.
133
+ def quantity_rule_for(variant)
134
+ return Spree::QuantityRule.new if current_store.nil?
135
+
136
+ Spree::Current.quantity_rules_resolver_for(
137
+ company: Spree::Current.standing_company_for(current_user),
138
+ user: current_user
139
+ ).call(variant)
140
+ end
141
+
105
142
  # Returns the base price for a variant without Price List resolution
106
143
  # This is the "original" price before any price list discounts
107
144
  # Memoized per variant to avoid duplicate queries
@@ -119,9 +156,9 @@ module Spree
119
156
  return nil if image.nil?
120
157
  return nil unless image.respond_to?(:attached?) && image.attached?
121
158
 
122
- # Handle Spree::Asset models (like Spree::Image) which have attachment inside
159
+ # Handle Spree::Media rows, which keep the file in `attachment`
123
160
  # vs direct ActiveStorage attachments (like taxon.image)
124
- attachment = image.is_a?(Spree::Asset) ? image.attachment : image
161
+ attachment = image.is_a?(Spree::Media) ? image.attachment : image
125
162
  Rails.application.routes.url_helpers.cdn_image_url(attachment)
126
163
  end
127
164
  end
@@ -7,7 +7,16 @@ module Spree
7
7
  typelize number: :string, current_step: :string, completed_steps: 'string[]', token: :string, email: [:string, nullable: true],
8
8
  customer_note: [:string, nullable: true], market_id: [:string, nullable: true], channel_id: [:string, nullable: true],
9
9
  currency: :string, locale: [:string, nullable: true], total_quantity: :number,
10
- requirements: 'Array<{step: string, field: string, message: string}>',
10
+ coupon_code: [:string, nullable: true],
11
+ preferred_stock_location_id: [:string, nullable: true],
12
+ company_id: [:string, nullable: true], company_name: [:string, nullable: true],
13
+ po_number: [:string, nullable: true], po_number_required: :boolean,
14
+ po_document_filename: [:string, nullable: true],
15
+ po_document_byte_size: ['number | null'],
16
+ order_minimum: ['number | null'], order_minimum_shortfall: ['number | null'],
17
+ below_order_minimum: ['boolean | null'],
18
+ freight_summary: [:FreightSummary, nullable: true],
19
+ requirements: 'Array<{step: string, field: string, code: string, message: string}>',
11
20
  item_total: [:string, nullable: true], display_item_total: [:string, nullable: true],
12
21
  delivery_total: [:string, nullable: true], display_delivery_total: [:string, nullable: true],
13
22
  adjustment_total: [:string, nullable: true], display_adjustment_total: [:string, nullable: true],
@@ -15,21 +24,17 @@ module Spree
15
24
  tax_total: [:string, nullable: true], display_tax_total: [:string, nullable: true],
16
25
  included_tax_total: [:string, nullable: true], display_included_tax_total: [:string, nullable: true],
17
26
  additional_tax_total: [:string, nullable: true], display_additional_tax_total: [:string, nullable: true],
27
+ fee_total: [:string, nullable: true], display_fee_total: [:string, nullable: true],
18
28
  store_credit_total: [:string, nullable: true], display_store_credit_total: [:string, nullable: true],
19
29
  gift_card_total: [:string, nullable: true], display_gift_card_total: [:string, nullable: true],
20
30
  covered_by_store_credit: :boolean,
21
31
  total: [:string, nullable: true], display_total: [:string, nullable: true],
22
32
  amount_due: [:string, nullable: true], display_amount_due: [:string, nullable: true],
23
33
  shipping_eq_billing_address: :boolean,
24
- warnings: 'Array<{code: string, message: string, line_item_id?: string, variant_id?: string}>',
34
+ warnings: 'Array<{code: string, message: string, line_item_id?: string, variant_id?: string, item_index?: number}>',
25
35
  billing_address: { nullable: true }, shipping_address: { nullable: true },
26
36
  gift_card: { nullable: true }, market: { nullable: true }
27
37
 
28
- # Override ID to use cart_ prefix
29
- attribute :id do |order|
30
- "cart_#{Spree::PrefixedId::SQIDS.encode([order.id])}"
31
- end
32
-
33
38
  attribute :market_id do |order|
34
39
  order.market&.prefixed_id
35
40
  end
@@ -41,8 +46,40 @@ module Spree
41
46
  order.channel&.prefixed_id
42
47
  end
43
48
 
44
- attributes :number, :token, :email, :customer_note,
45
- :currency, :locale, :total_quantity, :warnings
49
+ # Pickup selection mirrors the writable param on cart update.
50
+ attribute :preferred_stock_location_id do |cart|
51
+ cart.preferred_stock_location&.prefixed_id
52
+ end
53
+
54
+ # Which company node the purchase is for — mirrors the writable
55
+ # `company_id` param. Read from the column, never re-resolved.
56
+ attribute :company_id do |cart|
57
+ cart.company&.prefixed_id
58
+ end
59
+
60
+ attribute :company_name do |cart|
61
+ cart.company&.name
62
+ end
63
+
64
+ # The buyer's own purchase-order reference, and whether their company
65
+ # demands one — the storefront marks the field required from this
66
+ # rather than fetching the company to ask.
67
+ attribute :po_number_required do |cart|
68
+ cart.po_number_required?
69
+ end
70
+
71
+ attribute :po_document_filename do |cart|
72
+ cart.po_document.blob&.filename&.to_s if cart.po_document.attached?
73
+ end
74
+
75
+ attribute :po_document_byte_size do |cart|
76
+ cart.po_document.blob&.byte_size if cart.po_document.attached?
77
+ end
78
+
79
+ # @deprecated `number` mirrors `id` (carts have no order-style
80
+ # number) — kept one release for 5.x clients; removed in 6.1.
81
+ attributes :number, :token, :email, :customer_note, :po_number,
82
+ :currency, :locale, :total_quantity, :warnings, :coupon_code
46
83
 
47
84
  # Nulled for gated (prices_hidden) guests so the cart can't leak the
48
85
  # prices that product/variant serializers already withhold.
@@ -53,7 +90,8 @@ module Spree
53
90
  :additional_tax_total, :display_additional_tax_total, :total, :display_total,
54
91
  :gift_card_total, :display_gift_card_total,
55
92
  :amount_due, :display_amount_due,
56
- :delivery_total, :display_delivery_total
93
+ :delivery_total, :display_delivery_total,
94
+ :fee_total, :display_fee_total
57
95
 
58
96
  attribute :store_credit_total do |order|
59
97
  order.total_applied_store_credit.to_s unless params[:hide_prices]
@@ -75,15 +113,55 @@ module Spree
75
113
  order.completed_checkout_steps
76
114
  end
77
115
 
116
+ # The order-minimum requirement names both amounts in its message, so
117
+ # it is dropped rather than redacted for a gated guest: a requirement
118
+ # with its numbers stripped tells them nothing they can act on.
78
119
  attribute :requirements do |order|
79
- Spree::Checkout::Requirements.new(order).call
120
+ requirements = Spree::Checkout::Requirements.new(order).call
121
+ next requirements unless params[:hide_prices]
122
+
123
+ requirements.reject { |requirement| requirement[:code] == 'order_minimum_not_met' }
124
+ end
125
+
126
+ # The order minimum in force for this buyer, or nil when their
127
+ # agreements state none. Exposed alongside the shortfall so a
128
+ # storefront can render "$180 to reach the $500 minimum" without
129
+ # doing the arithmetic or knowing where the number came from.
130
+ #
131
+ # Gated with the rest of the price surface: a threshold and a
132
+ # shortfall are amounts, and a storefront that hides prices from
133
+ # guests must not hand them "$180 short of $500" instead.
134
+ attribute :order_minimum do |order|
135
+ order.order_minimum_amount&.to_f unless params[:hide_prices]
80
136
  end
81
137
 
138
+ attribute :order_minimum_shortfall do |order|
139
+ order.order_minimum_shortfall&.to_f unless params[:hide_prices]
140
+ end
141
+
142
+ attribute :below_order_minimum do |order|
143
+ order.below_order_minimum? unless params[:hide_prices]
144
+ end
145
+
146
+ # The shipment as a freight forwarder reads it: cartons, pallets,
147
+ # cubic meters, gross weight. Null for anything the store never
148
+ # measured that way, which is every retail cart.
149
+ #
150
+ # The totals are logistics rather than amounts, so they survive a
151
+ # storefront that hides prices; the per-line SKU and product name do
152
+ # not, being the catalog identity such a storefront exists to
153
+ # withhold.
154
+ one :freight_summary, resource: proc { Spree.api.freight_summary_serializer }
155
+
82
156
  attribute :shipping_eq_billing_address do |order|
83
157
  order.shipping_eq_billing_address?
84
158
  end
85
159
 
86
- many :discounts, resource: proc { Spree.api.discount_serializer }
160
+ many :order_promotions, key: :discounts, resource: proc { Spree.api.applied_promotion_serializer }
161
+ # Itemized charges (duties, surcharges, COD, handling). Storefronts
162
+ # group and label these themselves — cross-border duty in particular
163
+ # has to be shown broken out rather than folded into a total.
164
+ many :fees, resource: proc { Spree.api.fee_serializer }
87
165
  many :line_items, key: :items, resource: proc { Spree.api.line_item_serializer }
88
166
  many :fulfillments, resource: proc { Spree.api.fulfillment_serializer }
89
167
  many :payments, resource: proc { Spree.api.payment_serializer }