diff options
author | Jared Norman <jared@super.gd> | 2019-05-28 16:01:19 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-28 16:01:19 -0700 |
commit | 858bed3f5bec55b8e2257073aa566764da16f1f8 (patch) | |
tree | 9b11db6a25bb98eb7296c61a9426f0697e045277 | |
parent | c3e66f3b548ef7e829b97ccebf5e45ce9d25f04d (diff) | |
parent | 830da4ff9acfd3ff91fbefb2658418555295abbc (diff) |
Merge pull request #13 from SuperGoodSoft/feature/order-matters
Taxable Order Check
-rw-r--r-- | CHANGELOG.md | 5 | ||||
-rw-r--r-- | lib/super_good/solidus_taxjar.rb | 2 | ||||
-rw-r--r-- | lib/super_good/solidus_taxjar/tax_calculator.rb | 5 | ||||
-rw-r--r-- | spec/super_good/solidus_taxjar/tax_calculator_spec.rb | 14 | ||||
-rw-r--r-- | spec/super_good/solidus_taxjar_spec.rb | 8 |
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 } |