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.
- checksums.yaml +4 -4
- data/app/mailers/spree/email_template_mailer.rb +5 -2
- data/app/models/concerns/spree/has_external_references.rb +7 -6
- data/app/models/concerns/spree/preference_schema/json_schema.rb +8 -1
- data/app/models/concerns/spree/purchase/taxation.rb +44 -3
- data/app/models/concerns/spree/translatable_resource.rb +49 -0
- data/app/models/spree/cart.rb +1 -0
- data/app/models/spree/delivery_rate.rb +12 -4
- data/app/models/spree/delivery_rate_provider/base.rb +1 -1
- data/app/models/spree/delivery_rate_provider/estimate.rb +5 -4
- data/app/models/spree/fulfillment.rb +1 -0
- data/app/models/spree/gateway/bogus.rb +7 -0
- data/app/models/spree/line_item.rb +3 -8
- data/app/models/spree/oauth_access_grant.rb +11 -0
- data/app/models/spree/oauth_access_token.rb +16 -0
- data/app/models/spree/oauth_application.rb +97 -0
- data/app/models/spree/oauth_consent_request.rb +23 -0
- data/app/models/spree/oauth_protected_resource.rb +21 -0
- data/app/models/spree/oauth_redirect.rb +12 -0
- data/app/models/spree/option_type.rb +5 -0
- data/app/models/spree/option_value.rb +5 -0
- data/app/models/spree/order.rb +5 -1
- data/app/models/spree/payment.rb +14 -2
- data/app/models/spree/payment_capture_event.rb +2 -0
- data/app/models/spree/policy.rb +6 -0
- data/app/models/spree/price.rb +16 -33
- data/app/models/spree/price_rule.rb +3 -16
- data/app/models/spree/price_rules/market_rule.rb +0 -6
- data/app/models/spree/pricing_provider/base.rb +1 -1
- data/app/models/spree/product.rb +1 -1
- data/app/models/spree/purchase_order_item.rb +1 -1
- data/app/models/spree/return.rb +1 -0
- data/app/models/spree/search_provider/database.rb +1 -1
- data/app/models/spree/stock/estimator.rb +4 -20
- data/app/models/spree/store.rb +8 -0
- data/app/models/spree/tax_exemption/item_override.rb +14 -0
- data/app/models/spree/tax_exemption.rb +26 -0
- data/app/models/spree/tax_exemption_certificate.rb +13 -2
- data/app/models/spree/tax_exemption_reason.rb +62 -0
- data/app/models/spree/tax_provider/base.rb +24 -4
- data/app/models/spree/tax_provider/internal.rb +36 -29
- data/app/models/spree/tax_rate.rb +9 -35
- data/app/models/spree/translations/batch.rb +14 -4
- data/app/services/spree/carts/price_items.rb +2 -8
- data/app/services/spree/carts/split_by_seller.rb +6 -1
- data/app/services/spree/carts/update.rb +34 -7
- data/app/services/spree/email_templates/preview.rb +24 -3
- data/app/services/spree/seeds/store_resources.rb +1 -0
- data/app/services/spree/seeds/tax_exemption_reasons.rb +28 -0
- data/app/services/spree/tax/resolve_exemptions.rb +11 -2
- data/app/services/spree/update_check.rb +8 -1
- data/app/tools/spree/agent_tools/create_export.rb +116 -0
- data/app/tools/spree/agent_tools/create_import.rb +117 -0
- data/app/tools/spree/agent_tools/create_media.rb +81 -0
- data/app/tools/spree/agent_tools/create_resource.rb +36 -0
- data/app/tools/spree/agent_tools/curate_products.rb +90 -0
- data/app/tools/spree/agent_tools/delete_resource.rb +28 -0
- data/app/tools/spree/agent_tools/describe_import_mapping.rb +73 -0
- data/app/tools/spree/agent_tools/describe_reporting.rb +39 -0
- data/app/tools/spree/agent_tools/describe_resource.rb +81 -0
- data/app/tools/spree/agent_tools/get_import_status.rb +71 -0
- data/app/tools/spree/agent_tools/get_resource.rb +97 -0
- data/app/tools/spree/agent_tools/import_tool.rb +80 -0
- data/app/tools/spree/agent_tools/propose_import_mapping.rb +138 -0
- data/app/tools/spree/agent_tools/query_report.rb +124 -0
- data/app/tools/spree/agent_tools/resource_write.rb +99 -0
- data/app/tools/spree/agent_tools/search_resources.rb +155 -0
- data/app/tools/spree/agent_tools/set_stock.rb +52 -0
- data/app/tools/spree/agent_tools/update_resource.rb +42 -0
- data/app/tools/spree/agent_tools/upload_file.rb +104 -0
- data/app/workflows/spree/carts/complete.rb +115 -2
- data/app/workflows/spree/catalogs/set_price_list.rb +2 -2
- data/app/workflows/spree/orders/cancel.rb +8 -0
- data/app/workflows/spree/orders/complete.rb +8 -0
- data/app/{services → workflows}/spree/orders/create.rb +9 -9
- data/app/workflows/spree/purchase_orders/create.rb +3 -0
- data/app/workflows/spree/returns/refund.rb +4 -0
- data/app/{services → workflows}/spree/stock_levels/bulk_upsert.rb +49 -7
- data/app/workflows/spree/variants/create.rb +7 -4
- data/config/locales/en.yml +14 -0
- data/db/migrate/20250902143122_fix_policies_store_association.rb +6 -4
- data/db/migrate/20260515000001_add_store_id_to_spree_newsletter_subscribers.rb +11 -2
- data/db/migrate/20260904100001_add_applied_tax_exemptions_to_spree_orders.rb +16 -0
- data/db/migrate/20260914230000_add_store_to_spree_option_types.rb +12 -2
- data/db/migrate/20261005120000_create_spree_oauth_tables.rb +67 -0
- data/db/migrate/20261016000001_remove_default_from_spree_tax_rates_included_in_price.rb +9 -0
- data/db/migrate/20261016100001_create_spree_tax_exemption_reasons.rb +21 -0
- data/db/migrate/20261017100001_add_tax_exemption_reason_to_spree_tax_exemption_certificates.rb +9 -0
- data/db/sample_data/orders.rb +1 -1
- data/lib/spree/agent_tool.rb +188 -0
- data/lib/spree/agent_tools/api_dispatch.rb +204 -0
- data/lib/spree/agent_tools/context.rb +191 -0
- data/lib/spree/agent_tools/default_catalog.rb +180 -0
- data/lib/spree/agent_tools/membership_map.rb +61 -0
- data/lib/spree/agent_tools/record_summary.rb +219 -0
- data/lib/spree/agent_tools/registry.rb +131 -0
- data/lib/spree/agent_tools/resource_map.rb +352 -0
- data/lib/spree/agent_tools/workflow_endpoints.rb +88 -0
- data/lib/spree/agent_tools/workflow_schema.rb +279 -0
- data/lib/spree/agent_tools/workflow_tool.rb +654 -0
- data/lib/spree/agent_tools.rb +24 -0
- data/lib/spree/core/configuration.rb +1 -1
- data/lib/spree/core/controller_helpers/store.rb +3 -13
- data/lib/spree/core/dependencies.rb +9 -0
- data/lib/spree/core/engine.rb +35 -1
- data/lib/spree/core/model_extensions.rb +111 -0
- data/lib/spree/core/permissions/default_catalog.rb +6 -1
- data/lib/spree/core/pricing/price_resolution.rb +4 -4
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +27 -2
- data/lib/spree/service_module.rb +11 -0
- data/lib/spree/testing_support/factories/tax_exemption_certificate_factory.rb +13 -1
- data/lib/spree/testing_support/factories/tax_exemption_reason_factory.rb +8 -0
- data/lib/spree/upgrades/5_6_to_6_0/manifest.yml +38 -0
- data/lib/tasks/markets.rake +47 -0
- data/lib/tasks/tax_exemption_reasons.rake +48 -0
- metadata +67 -7
- 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.
|
|
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
|
+
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.
|
|
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.
|
|
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
|