summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJared Norman <jared@super.gd>2019-05-28 16:01:19 -0700
committerGitHub <noreply@github.com>2019-05-28 16:01:19 -0700
commit858bed3f5bec55b8e2257073aa566764da16f1f8 (patch)
tree9b11db6a25bb98eb7296c61a9426f0697e045277
parentc3e66f3b548ef7e829b97ccebf5e45ce9d25f04d (diff)
parent830da4ff9acfd3ff91fbefb2658418555295abbc (diff)
Merge pull request #13 from SuperGoodSoft/feature/order-matters
Taxable Order Check
-rw-r--r--CHANGELOG.md5
-rw-r--r--lib/super_good/solidus_taxjar.rb2
-rw-r--r--lib/super_good/solidus_taxjar/tax_calculator.rb5
-rw-r--r--spec/super_good/solidus_taxjar/tax_calculator_spec.rb14
-rw-r--r--spec/super_good/solidus_taxjar_spec.rb8
5 files changed, 34 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b11ad66..5997526 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
## master
+- Added `SuperGood::SolidusTaxJar.taxable_order_check` option which can be set to a proc that receives the order and will prevent actual tax calculation from occurring if it returns false. If your app has introduced a method like `Spree::Order#complimentary?`, you could avoid trying to compute taxes on complimentary orders by doing the following in an initializer:
+ ```ruby
+ SuperGood::SolidusTaxJar.taxable_order_check = ->(order) { order.complimentary? }
+ ```
+
## v0.13.0
- Report order.user_id as customer_id when calculating taxes and creating transactions. This enables the use of per customer exemptions.
diff --git a/lib/super_good/solidus_taxjar.rb b/lib/super_good/solidus_taxjar.rb
index 6d6c47c..af2c7e8 100644
--- a/lib/super_good/solidus_taxjar.rb
+++ b/lib/super_good/solidus_taxjar.rb
@@ -19,6 +19,7 @@ module SuperGood
attr_accessor :shipping_calculator
attr_accessor :shipping_tax_label_maker
attr_accessor :taxable_address_check
+ attr_accessor :taxable_order_check
attr_accessor :test_mode
end
@@ -32,6 +33,7 @@ module SuperGood
self.shipping_calculator = ->(order) { order.shipment_total }
self.shipping_tax_label_maker = ->(shipment, shipping_tax) { "Sales Tax" }
self.taxable_address_check = ->(address) { true }
+ self.taxable_order_check = ->(order) { true }
self.test_mode = false
end
end
diff --git a/lib/super_good/solidus_taxjar/tax_calculator.rb b/lib/super_good/solidus_taxjar/tax_calculator.rb
index 0ddd50f..c7d44a9 100644
--- a/lib/super_good/solidus_taxjar/tax_calculator.rb
+++ b/lib/super_good/solidus_taxjar/tax_calculator.rb
@@ -13,6 +13,7 @@ module SuperGood
def calculate
return no_tax if SuperGood::SolidusTaxJar.test_mode
return no_tax if incomplete_address?(order.tax_address) || order.line_items.none?
+ return no_tax unless taxable_order? order
return no_tax unless taxable_address? order.tax_address
cache do
@@ -133,6 +134,10 @@ module SuperGood
SuperGood::SolidusTaxJar.exception_handler
end
+ def taxable_order?(order)
+ SuperGood::SolidusTaxJar.taxable_order_check.(order)
+ end
+
def taxable_address?(address)
SuperGood::SolidusTaxJar.taxable_address_check.(address)
end
diff --git a/spec/super_good/solidus_taxjar/tax_calculator_spec.rb b/spec/super_good/solidus_taxjar/tax_calculator_spec.rb
index ee4fee0..c9ecbcd 100644
--- a/spec/super_good/solidus_taxjar/tax_calculator_spec.rb
+++ b/spec/super_good/solidus_taxjar/tax_calculator_spec.rb
@@ -243,6 +243,20 @@ RSpec.describe ::SuperGood::SolidusTaxJar::TaxCalculator do
end
end
+ context "but the taxable order check returns false" do
+ before do
+ allow(SuperGood::SolidusTaxJar.taxable_order_check)
+ .to receive(:call).with(order)
+ .and_return(false)
+ end
+
+ it "returns no taxes" do
+ expect(subject.order_id).to eq order.id
+ expect(subject.shipment_taxes).to be_empty
+ expect(subject.line_item_taxes).to be_empty
+ end
+ end
+
context "when there are shipping taxes" do
let(:shipping_tax_breakdown) do
instance_double ::Taxjar::Shipping, tax_collectable: 10.00
diff --git a/spec/super_good/solidus_taxjar_spec.rb b/spec/super_good/solidus_taxjar_spec.rb
index dafc4fb..efc38b0 100644
--- a/spec/super_good/solidus_taxjar_spec.rb
+++ b/spec/super_good/solidus_taxjar_spec.rb
@@ -37,6 +37,14 @@ RSpec.describe SuperGood::SolidusTaxJar do
it { is_expected.to eq true }
end
+ describe ".taxable_order_check" do
+ subject { described_class.taxable_order_check.(order) }
+
+ let(:order) { Spree::Order.new }
+
+ it { is_expected.to eq true }
+ end
+
describe ".shipping_tax_label_maker" do
subject { described_class.shipping_tax_label_maker.(shipment, shipping_tax) }
let(:shipment) { Spree::Shipment.new }