spree_core 6.0.0.rc2 → 6.0.0.rc4

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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/app/mailers/spree/email_template_mailer.rb +5 -2
  3. data/app/models/concerns/spree/has_external_references.rb +7 -6
  4. data/app/models/concerns/spree/preference_schema/json_schema.rb +8 -1
  5. data/app/models/concerns/spree/purchase/taxation.rb +44 -3
  6. data/app/models/concerns/spree/translatable_resource.rb +49 -0
  7. data/app/models/spree/cart.rb +1 -0
  8. data/app/models/spree/delivery_rate.rb +12 -4
  9. data/app/models/spree/delivery_rate_provider/base.rb +1 -1
  10. data/app/models/spree/delivery_rate_provider/estimate.rb +5 -4
  11. data/app/models/spree/fulfillment.rb +1 -0
  12. data/app/models/spree/gateway/bogus.rb +7 -0
  13. data/app/models/spree/line_item.rb +3 -8
  14. data/app/models/spree/oauth_access_grant.rb +11 -0
  15. data/app/models/spree/oauth_access_token.rb +16 -0
  16. data/app/models/spree/oauth_application.rb +97 -0
  17. data/app/models/spree/oauth_consent_request.rb +23 -0
  18. data/app/models/spree/oauth_protected_resource.rb +21 -0
  19. data/app/models/spree/oauth_redirect.rb +12 -0
  20. data/app/models/spree/option_type.rb +5 -0
  21. data/app/models/spree/option_value.rb +5 -0
  22. data/app/models/spree/order.rb +5 -1
  23. data/app/models/spree/payment.rb +14 -2
  24. data/app/models/spree/payment_capture_event.rb +2 -0
  25. data/app/models/spree/policy.rb +6 -0
  26. data/app/models/spree/price.rb +16 -33
  27. data/app/models/spree/price_rule.rb +3 -16
  28. data/app/models/spree/price_rules/market_rule.rb +0 -6
  29. data/app/models/spree/pricing_provider/base.rb +1 -1
  30. data/app/models/spree/product.rb +1 -1
  31. data/app/models/spree/purchase_order_item.rb +1 -1
  32. data/app/models/spree/return.rb +1 -0
  33. data/app/models/spree/search_provider/database.rb +1 -1
  34. data/app/models/spree/stock/estimator.rb +4 -20
  35. data/app/models/spree/store.rb +8 -0
  36. data/app/models/spree/tax_exemption/item_override.rb +14 -0
  37. data/app/models/spree/tax_exemption.rb +26 -0
  38. data/app/models/spree/tax_exemption_certificate.rb +13 -2
  39. data/app/models/spree/tax_exemption_reason.rb +62 -0
  40. data/app/models/spree/tax_provider/base.rb +24 -4
  41. data/app/models/spree/tax_provider/internal.rb +36 -29
  42. data/app/models/spree/tax_rate.rb +9 -35
  43. data/app/models/spree/translations/batch.rb +14 -4
  44. data/app/services/spree/carts/price_items.rb +2 -8
  45. data/app/services/spree/carts/split_by_seller.rb +6 -1
  46. data/app/services/spree/carts/update.rb +34 -7
  47. data/app/services/spree/email_templates/preview.rb +24 -3
  48. data/app/services/spree/seeds/store_resources.rb +1 -0
  49. data/app/services/spree/seeds/tax_exemption_reasons.rb +28 -0
  50. data/app/services/spree/tax/resolve_exemptions.rb +11 -2
  51. data/app/services/spree/update_check.rb +8 -1
  52. data/app/tools/spree/agent_tools/create_export.rb +116 -0
  53. data/app/tools/spree/agent_tools/create_import.rb +117 -0
  54. data/app/tools/spree/agent_tools/create_media.rb +81 -0
  55. data/app/tools/spree/agent_tools/create_resource.rb +36 -0
  56. data/app/tools/spree/agent_tools/curate_products.rb +90 -0
  57. data/app/tools/spree/agent_tools/delete_resource.rb +28 -0
  58. data/app/tools/spree/agent_tools/describe_import_mapping.rb +73 -0
  59. data/app/tools/spree/agent_tools/describe_reporting.rb +39 -0
  60. data/app/tools/spree/agent_tools/describe_resource.rb +81 -0
  61. data/app/tools/spree/agent_tools/get_import_status.rb +71 -0
  62. data/app/tools/spree/agent_tools/get_resource.rb +97 -0
  63. data/app/tools/spree/agent_tools/import_tool.rb +80 -0
  64. data/app/tools/spree/agent_tools/propose_import_mapping.rb +138 -0
  65. data/app/tools/spree/agent_tools/query_report.rb +124 -0
  66. data/app/tools/spree/agent_tools/resource_write.rb +99 -0
  67. data/app/tools/spree/agent_tools/search_resources.rb +155 -0
  68. data/app/tools/spree/agent_tools/set_stock.rb +52 -0
  69. data/app/tools/spree/agent_tools/update_resource.rb +42 -0
  70. data/app/tools/spree/agent_tools/upload_file.rb +104 -0
  71. data/app/workflows/spree/carts/complete.rb +115 -2
  72. data/app/workflows/spree/catalogs/set_price_list.rb +2 -2
  73. data/app/workflows/spree/orders/cancel.rb +8 -0
  74. data/app/workflows/spree/orders/complete.rb +8 -0
  75. data/app/{services → workflows}/spree/orders/create.rb +9 -9
  76. data/app/workflows/spree/purchase_orders/create.rb +3 -0
  77. data/app/workflows/spree/returns/refund.rb +4 -0
  78. data/app/{services → workflows}/spree/stock_levels/bulk_upsert.rb +49 -7
  79. data/app/workflows/spree/variants/create.rb +7 -4
  80. data/config/locales/en.yml +14 -0
  81. data/db/migrate/20250902143122_fix_policies_store_association.rb +6 -4
  82. data/db/migrate/20260515000001_add_store_id_to_spree_newsletter_subscribers.rb +11 -2
  83. data/db/migrate/20260904100001_add_applied_tax_exemptions_to_spree_orders.rb +16 -0
  84. data/db/migrate/20260914230000_add_store_to_spree_option_types.rb +12 -2
  85. data/db/migrate/20261005120000_create_spree_oauth_tables.rb +67 -0
  86. data/db/migrate/20261016000001_remove_default_from_spree_tax_rates_included_in_price.rb +9 -0
  87. data/db/migrate/20261016100001_create_spree_tax_exemption_reasons.rb +21 -0
  88. data/db/migrate/20261017100001_add_tax_exemption_reason_to_spree_tax_exemption_certificates.rb +9 -0
  89. data/db/sample_data/orders.rb +1 -1
  90. data/lib/spree/agent_tool.rb +188 -0
  91. data/lib/spree/agent_tools/api_dispatch.rb +204 -0
  92. data/lib/spree/agent_tools/context.rb +191 -0
  93. data/lib/spree/agent_tools/default_catalog.rb +180 -0
  94. data/lib/spree/agent_tools/membership_map.rb +61 -0
  95. data/lib/spree/agent_tools/record_summary.rb +219 -0
  96. data/lib/spree/agent_tools/registry.rb +131 -0
  97. data/lib/spree/agent_tools/resource_map.rb +352 -0
  98. data/lib/spree/agent_tools/workflow_endpoints.rb +88 -0
  99. data/lib/spree/agent_tools/workflow_schema.rb +279 -0
  100. data/lib/spree/agent_tools/workflow_tool.rb +654 -0
  101. data/lib/spree/agent_tools.rb +24 -0
  102. data/lib/spree/core/configuration.rb +1 -1
  103. data/lib/spree/core/controller_helpers/store.rb +3 -13
  104. data/lib/spree/core/dependencies.rb +9 -0
  105. data/lib/spree/core/engine.rb +35 -1
  106. data/lib/spree/core/model_extensions.rb +111 -0
  107. data/lib/spree/core/permissions/default_catalog.rb +6 -1
  108. data/lib/spree/core/pricing/price_resolution.rb +4 -4
  109. data/lib/spree/core/version.rb +1 -1
  110. data/lib/spree/core.rb +27 -2
  111. data/lib/spree/service_module.rb +11 -0
  112. data/lib/spree/testing_support/factories/tax_exemption_certificate_factory.rb +13 -1
  113. data/lib/spree/testing_support/factories/tax_exemption_reason_factory.rb +8 -0
  114. data/lib/spree/upgrades/5_6_to_6_0/manifest.yml +38 -0
  115. data/lib/tasks/markets.rake +47 -0
  116. data/lib/tasks/tax_exemption_reasons.rake +48 -0
  117. metadata +67 -7
  118. data/app/models/concerns/spree/vat_price_calculation.rb +0 -99
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0.rc2
4
+ version: 6.0.0.rc4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2026-10-13 00:00:00.000000000 Z
13
+ date: 2026-10-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: i18n-tasks
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: doorkeeper
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 6.0.0.rc2
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 6.0.0.rc2
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: friendly_id
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -863,7 +877,6 @@ files:
863
877
  - app/models/concerns/spree/user_reporting.rb
864
878
  - app/models/concerns/spree/user_roles.rb
865
879
  - app/models/concerns/spree/validates_store_uniqueness.rb
866
- - app/models/concerns/spree/vat_price_calculation.rb
867
880
  - app/models/concerns/spree/webhook_payload_redaction.rb
868
881
  - app/models/spree/ability.rb
869
882
  - app/models/spree/address.rb
@@ -1062,6 +1075,12 @@ files:
1062
1075
  - app/models/spree/number_generators/random.rb
1063
1076
  - app/models/spree/number_generators/sequential.rb
1064
1077
  - app/models/spree/number_sequence.rb
1078
+ - app/models/spree/oauth_access_grant.rb
1079
+ - app/models/spree/oauth_access_token.rb
1080
+ - app/models/spree/oauth_application.rb
1081
+ - app/models/spree/oauth_consent_request.rb
1082
+ - app/models/spree/oauth_protected_resource.rb
1083
+ - app/models/spree/oauth_redirect.rb
1065
1084
  - app/models/spree/option_type.rb
1066
1085
  - app/models/spree/option_type_product_type.rb
1067
1086
  - app/models/spree/option_value.rb
@@ -1252,6 +1271,7 @@ files:
1252
1271
  - app/models/spree/tax_exemption.rb
1253
1272
  - app/models/spree/tax_exemption/item_override.rb
1254
1273
  - app/models/spree/tax_exemption_certificate.rb
1274
+ - app/models/spree/tax_exemption_reason.rb
1255
1275
  - app/models/spree/tax_identifier.rb
1256
1276
  - app/models/spree/tax_identifiers/validation_result.rb
1257
1277
  - app/models/spree/tax_identifiers/validator/base.rb
@@ -1374,7 +1394,6 @@ files:
1374
1394
  - app/services/spree/order_groups/allocate_payments.rb
1375
1395
  - app/services/spree/orders/approve.rb
1376
1396
  - app/services/spree/orders/build_fulfillments.rb
1377
- - app/services/spree/orders/create.rb
1378
1397
  - app/services/spree/orders/create_from_cart.rb
1379
1398
  - app/services/spree/orders/create_user_account.rb
1380
1399
  - app/services/spree/orders/discounts/create.rb
@@ -1422,11 +1441,11 @@ files:
1422
1441
  - app/services/spree/seeds/store_scoped.rb
1423
1442
  - app/services/spree/seeds/stores.rb
1424
1443
  - app/services/spree/seeds/tax_categories.rb
1444
+ - app/services/spree/seeds/tax_exemption_reasons.rb
1425
1445
  - app/services/spree/sellers/requirements.rb
1426
1446
  - app/services/spree/shipments/update.rb
1427
1447
  - app/services/spree/shipping_labels/confirm_refund.rb
1428
1448
  - app/services/spree/shipping_labels/store_file.rb
1429
- - app/services/spree/stock_levels/bulk_upsert.rb
1430
1449
  - app/services/spree/stock_levels/correct.rb
1431
1450
  - app/services/spree/stock_levels/recount.rb
1432
1451
  - app/services/spree/stock_locations/stock_items/create.rb
@@ -1465,6 +1484,25 @@ files:
1465
1484
  - app/subscribers/spree/seller_transfer_subscriber.rb
1466
1485
  - app/subscribers/spree/seller_user_email_subscriber.rb
1467
1486
  - app/subscribers/spree/tax_identifier_validation_subscriber.rb
1487
+ - app/tools/spree/agent_tools/create_export.rb
1488
+ - app/tools/spree/agent_tools/create_import.rb
1489
+ - app/tools/spree/agent_tools/create_media.rb
1490
+ - app/tools/spree/agent_tools/create_resource.rb
1491
+ - app/tools/spree/agent_tools/curate_products.rb
1492
+ - app/tools/spree/agent_tools/delete_resource.rb
1493
+ - app/tools/spree/agent_tools/describe_import_mapping.rb
1494
+ - app/tools/spree/agent_tools/describe_reporting.rb
1495
+ - app/tools/spree/agent_tools/describe_resource.rb
1496
+ - app/tools/spree/agent_tools/get_import_status.rb
1497
+ - app/tools/spree/agent_tools/get_resource.rb
1498
+ - app/tools/spree/agent_tools/import_tool.rb
1499
+ - app/tools/spree/agent_tools/propose_import_mapping.rb
1500
+ - app/tools/spree/agent_tools/query_report.rb
1501
+ - app/tools/spree/agent_tools/resource_write.rb
1502
+ - app/tools/spree/agent_tools/search_resources.rb
1503
+ - app/tools/spree/agent_tools/set_stock.rb
1504
+ - app/tools/spree/agent_tools/update_resource.rb
1505
+ - app/tools/spree/agent_tools/upload_file.rb
1468
1506
  - app/validators/email_validator.rb
1469
1507
  - app/validators/spree/addresses/phone_validator.rb
1470
1508
  - app/validators/spree/attachment_content_type_validator.rb
@@ -1531,6 +1569,7 @@ files:
1531
1569
  - app/workflows/spree/orders/add_item.rb
1532
1570
  - app/workflows/spree/orders/cancel.rb
1533
1571
  - app/workflows/spree/orders/complete.rb
1572
+ - app/workflows/spree/orders/create.rb
1534
1573
  - app/workflows/spree/orders/recalculate.rb
1535
1574
  - app/workflows/spree/orders/recalculate_totals.rb
1536
1575
  - app/workflows/spree/orders/upsert_items.rb
@@ -1595,6 +1634,7 @@ files:
1595
1634
  - app/workflows/spree/shipping_labels/purchase.rb
1596
1635
  - app/workflows/spree/shipping_labels/record.rb
1597
1636
  - app/workflows/spree/shipping_labels/refund.rb
1637
+ - app/workflows/spree/stock_levels/bulk_upsert.rb
1598
1638
  - app/workflows/spree/stock_receipts/recording.rb
1599
1639
  - app/workflows/spree/stock_transfers/cancel.rb
1600
1640
  - app/workflows/spree/stock_transfers/close.rb
@@ -1935,6 +1975,7 @@ files:
1935
1975
  - db/migrate/20260903000001_create_spree_shipping_labels_and_deliveries.rb
1936
1976
  - db/migrate/20260903120000_create_spree_saved_reports.rb
1937
1977
  - db/migrate/20260904000001_add_returns_enabled_to_stock_locations.rb
1978
+ - db/migrate/20260904100001_add_applied_tax_exemptions_to_spree_orders.rb
1938
1979
  - db/migrate/20260906000001_add_commission_total_to_orders.rb
1939
1980
  - db/migrate/20260907000001_add_inventory_operations.rb
1940
1981
  - db/migrate/20260907000001_add_min_quantity_to_spree_prices.rb
@@ -1954,8 +1995,12 @@ files:
1954
1995
  - db/migrate/20261001000001_add_post_sale_tax.rb
1955
1996
  - db/migrate/20261001000001_convert_preferences_to_json.rb
1956
1997
  - db/migrate/20261001000001_create_spree_email_templates.rb
1998
+ - db/migrate/20261005120000_create_spree_oauth_tables.rb
1957
1999
  - db/migrate/20261009000001_change_money_columns_to_decimal_19_4.rb
1958
2000
  - db/migrate/20261010000001_add_store_id_to_active_storage_blobs.rb
2001
+ - db/migrate/20261016000001_remove_default_from_spree_tax_rates_included_in_price.rb
2002
+ - db/migrate/20261016100001_create_spree_tax_exemption_reasons.rb
2003
+ - db/migrate/20261017100001_add_tax_exemption_reason_to_spree_tax_exemption_certificates.rb
1959
2004
  - db/sample_data/channels.rb
1960
2005
  - db/sample_data/collections.rb
1961
2006
  - db/sample_data/custom_field_definitions.rb
@@ -2008,6 +2053,18 @@ files:
2008
2053
  - lib/generators/spree/subscriber/templates/subscriber.rb.tt
2009
2054
  - lib/generators/spree/subscriber/templates/subscriber_spec.rb.tt
2010
2055
  - lib/mobility/plugins/store_based_fallbacks.rb
2056
+ - lib/spree/agent_tool.rb
2057
+ - lib/spree/agent_tools.rb
2058
+ - lib/spree/agent_tools/api_dispatch.rb
2059
+ - lib/spree/agent_tools/context.rb
2060
+ - lib/spree/agent_tools/default_catalog.rb
2061
+ - lib/spree/agent_tools/membership_map.rb
2062
+ - lib/spree/agent_tools/record_summary.rb
2063
+ - lib/spree/agent_tools/registry.rb
2064
+ - lib/spree/agent_tools/resource_map.rb
2065
+ - lib/spree/agent_tools/workflow_endpoints.rb
2066
+ - lib/spree/agent_tools/workflow_schema.rb
2067
+ - lib/spree/agent_tools/workflow_tool.rb
2011
2068
  - lib/spree/category_permalink_deduplicator.rb
2012
2069
  - lib/spree/checkout/default_requirements.rb
2013
2070
  - lib/spree/checkout/registry.rb
@@ -2021,6 +2078,7 @@ files:
2021
2078
  - lib/spree/core/dependencies_helper.rb
2022
2079
  - lib/spree/core/emails/escaped_output.rb
2023
2080
  - lib/spree/core/engine.rb
2081
+ - lib/spree/core/model_extensions.rb
2024
2082
  - lib/spree/core/number_generator.rb
2025
2083
  - lib/spree/core/permission_configuration.rb
2026
2084
  - lib/spree/core/permissions/default_catalog.rb
@@ -2194,6 +2252,7 @@ files:
2194
2252
  - lib/spree/testing_support/factories/supplier_factory.rb
2195
2253
  - lib/spree/testing_support/factories/tax_category_factory.rb
2196
2254
  - lib/spree/testing_support/factories/tax_exemption_certificate_factory.rb
2255
+ - lib/spree/testing_support/factories/tax_exemption_reason_factory.rb
2197
2256
  - lib/spree/testing_support/factories/tax_identifier_factory.rb
2198
2257
  - lib/spree/testing_support/factories/tax_line_factory.rb
2199
2258
  - lib/spree/testing_support/factories/tax_rate_factory.rb
@@ -2282,6 +2341,7 @@ files:
2282
2341
  - lib/tasks/stock.rake
2283
2342
  - lib/tasks/store_binding_migration.rake
2284
2343
  - lib/tasks/store_settings.rake
2344
+ - lib/tasks/tax_exemption_reasons.rake
2285
2345
  - lib/tasks/tax_zones_migration.rake
2286
2346
  - lib/tasks/taxons.rake
2287
2347
  - lib/tasks/typed_adjustments_migration.rake
@@ -2309,9 +2369,9 @@ licenses:
2309
2369
  - BSD-3-Clause
2310
2370
  metadata:
2311
2371
  bug_tracker_uri: https://github.com/spree/spree/issues
2312
- changelog_uri: https://github.com/spree/spree/releases/tag/v6.0.0.rc2
2372
+ changelog_uri: https://github.com/spree/spree/releases/tag/v6.0.0.rc4
2313
2373
  documentation_uri: https://docs.spreecommerce.org/
2314
- source_code_uri: https://github.com/spree/spree/tree/v6.0.0.rc2
2374
+ source_code_uri: https://github.com/spree/spree/tree/v6.0.0.rc4
2315
2375
  post_install_message:
2316
2376
  rdoc_options: []
2317
2377
  require_paths:
@@ -1,99 +0,0 @@
1
- module Spree
2
- # Restates a VAT-inclusive price for a customer in another country: the
3
- # home-country VAT comes out, the destination's goes on.
4
- #
5
- # The including class answers +currency+, which the restated amount is
6
- # rounded to.
7
- module VatPriceCalculation
8
- # Cheapest test first: a domestic sale needs no restatement whatever the
9
- # provider is, so the provider lookup (a constantize and an instantiation) is
10
- # skipped for every home-country price — and a market pointing at a provider
11
- # class that is no longer loadable keeps failing only where tax is computed,
12
- # not on every price read.
13
- def gross_amount(amount, price_options)
14
- return amount if amount.nil? || !outside_default_vat_zone?(price_options)
15
- return amount unless restatement_available?(price_options)
16
-
17
- Spree::Money::Rounding.to_currency(add_foreign_vat_for(amount, price_options), currency)
18
- end
19
-
20
- private
21
-
22
- # Restatement reads nothing but TaxRate rows, for both halves of the sum, so
23
- # it only means anything where those rows are the whole truth — the Internal
24
- # provider. Elsewhere an absent row is ambiguous: it reads as "no tax is due
25
- # here" and deducts the home VAT, when it may only mean "this market's tax is
26
- # computed by an engine that keeps no rows here". A market on such an engine
27
- # would see every foreign destination treated as a zero-rated export. It
28
- # states its destination prices through a geo-scoped price list instead.
29
- def restatement_available?(price_options)
30
- market = price_options[:market] || Spree::Current.market
31
- provider = market&.tax_provider_instance || Spree.default_tax_provider.new
32
-
33
- provider.is_a?(Spree::TaxProvider::Internal)
34
- end
35
-
36
- def add_foreign_vat_for(amount, price_options)
37
- amount = net_amount(amount, price_options[:tax_category])
38
- amount_with_foreign_vat(amount, price_options)
39
- end
40
-
41
- def net_amount(amount, tax_category)
42
- amount / (1 + default_vat(tax_category))
43
- end
44
-
45
- def default_vat(tax_category)
46
- included_tax_amount(country: default_tax_country, tax_category: tax_category)
47
- end
48
-
49
- def foreign_vat(price_options)
50
- included_tax_amount(price_options)
51
- end
52
-
53
- def amount_with_foreign_vat(amount, price_options)
54
- amount * (1 + foreign_vat(price_options))
55
- end
56
-
57
- # Whether the price has to be restated at all.
58
- def outside_default_vat_zone?(price_options)
59
- country = country_from(price_options)
60
-
61
- country.present? && default_tax_country.present? && country != default_tax_country
62
- end
63
-
64
- def included_tax_amount(price_options)
65
- lookup = { tax_category: price_options[:tax_category] }
66
- if price_options[:address]
67
- lookup[:address] = price_options[:address]
68
- else
69
- lookup[:country] = country_from(price_options)
70
- end
71
-
72
- Spree::TaxRate.included_tax_amount_for(lookup).to_d
73
- end
74
-
75
- # +current_price_options+ is documented as an override point, so an app may
76
- # still be handing us the pre-6.0 zone. Say so instead of quietly reporting
77
- # no country, which would leave a foreign customer looking at home VAT.
78
- def country_from(price_options)
79
- if price_options[:tax_zone].present? && price_options[:country].blank? && price_options[:address].blank?
80
- Spree::Deprecation.warn(
81
- 'Passing tax_zone: in price options no longer determines tax and is ignored. ' \
82
- 'Pass country: (a Spree::Country) or address: instead.'
83
- )
84
- end
85
-
86
- price_options[:country] || price_options[:address]&.country
87
- end
88
-
89
- # The country whose VAT the catalogue prices already include. Deliberately
90
- # the store's own country and NOT Spree::Current.market, which follows the
91
- # buyer: reading the destination here would make every sale look domestic
92
- # and the restatement would never fire.
93
- def default_tax_country
94
- return @default_tax_country if defined?(@default_tax_country)
95
-
96
- @default_tax_country = Spree::Current.store&.default_country
97
- end
98
- end
99
- end