spree_exactor 1.1.4.20130729 → 1.1.5.20130731

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 51f5bfa0c8da069c380831843a08103da78df42e
4
- data.tar.gz: 15c9eebf445ddea087d443b8f67c960838b88567
3
+ metadata.gz: a0f00d92c091463778e6980f170f498afefc09e4
4
+ data.tar.gz: 357356a22904958b90db1590392cac48f651aecc
5
5
  SHA512:
6
- metadata.gz: f2be701bf8b97295cbcebf6d02cf0ee13c2cd1d2358b323554734e22c4bf43bf2a78db29d647676d32c8805764db627fa3cf098ff5165d1aaf171e4cba5f813f
7
- data.tar.gz: efe8c4b847e04bb070f9646714014e784e451cecf4e1ef53a44aae27f126cd89b8b498807985012c194433d93573a6692812f6fc9105038e1c07d7461a6dc440
6
+ metadata.gz: effe15c9dea6eac0de075d1584084450db437a45be19be2979dc844a58f05ba1b1193a875a3c973878eedad7f508c115767219ea67cd9fc7563637ab7b41c1ff
7
+ data.tar.gz: 360f65ff9dbedb539a3bae5a471010aad150d66221a1b98f3494037196ed0b3cdcc0abdcd1707e989f5a7c08c81d12aac5fa7b455a1ed59581118a13293372c4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- spree_exactor (1.1.4.20130729)
4
+ spree_exactor (1.1.5.20130731)
5
5
  rspec
6
6
  spree_core (>= 2.0.0)
7
7
  sqlite3
@@ -4,7 +4,7 @@ require 'bigdecimal/util'
4
4
 
5
5
  module SpreeExactorConnector
6
6
  class SpreeExactorConnector
7
- PLUGIN_VERSION = "20130729"
7
+ PLUGIN_VERSION = "20130731"
8
8
  TEST_TRANSACTION_NAME = "Spree Test Transaction"
9
9
  TEST_ITEM_DESRIPTION = "Exactor Account Verification. Plug-in version:"
10
10
  PLUGIN_NAME = "SpreeCommerce"
@@ -115,6 +115,7 @@ module SpreeExactorConnector
115
115
  if (response.is_valid)
116
116
  order.update_column(:exactor_invoice_transaction, nil)
117
117
  order.update_column(:exactor_commit_transaction, response.commit_id)
118
+ order.update_column(:exactor_commit_option, @settings.commit_option)
118
119
  else
119
120
  order.errors[:base]<<"Tax calculation failure: #{response.error_code}:#{response.error_description}"
120
121
  end
@@ -122,7 +123,9 @@ module SpreeExactorConnector
122
123
  end
123
124
 
124
125
  def do_cancel!(order)
125
- if can_be_handled?(Spree::ExactorSetting::COMMIT_OPTIONS::TRANSACTION_STATE, order) or can_be_handled?(Spree::ExactorSetting::COMMIT_OPTIONS::SHIPMENT_STATE, order)
126
+ if can_be_handled?(Spree::ExactorSetting::COMMIT_OPTIONS::TRANSACTION_STATE, order) or
127
+ can_be_handled?(Spree::ExactorSetting::COMMIT_OPTIONS::PAYMENT_STATE, order)
128
+ can_be_handled?(Spree::ExactorSetting::COMMIT_OPTIONS::SHIPMENT_STATE, order)
126
129
  if !order.exactor_commit_transaction.nil?
127
130
  response = refund_transaction(order)
128
131
  if (response.is_valid)
@@ -154,13 +157,19 @@ module SpreeExactorConnector
154
157
  if (can_be_handled?(Spree::ExactorSetting::COMMIT_OPTIONS::PAYMENT_STATE, order))
155
158
  update_tax_if_needed(order)
156
159
  resp = nil
160
+
161
+ # Check a case: transaction has been committed on transaction state, then user changed commit option to payment state and paid for the order.
162
+ if order.exactor_commit_transaction and order.exactor_commit_option != Spree::ExactorSetting::COMMIT_OPTIONS::TRANSACTION_STATE
163
+ return
164
+ end
165
+
157
166
  if order.exactor_commit_transaction
158
167
  resp = refund_transaction(order)
159
168
  end
160
- if (!resp or resp.is_valid)
169
+ if !resp or resp.is_valid
161
170
  resp = do_commit!(order)
162
171
  end
163
- if (!resp.is_valid)
172
+ if !resp.is_valid
164
173
  order.current_payment.errors[:base]<<"Tax synchronization failure: #{resp.error_code}:#{resp.error_description}" unless order.current_payment.nil?
165
174
  end
166
175
  end
@@ -13,6 +13,10 @@ class Spree::Calculator::ExactorTaxCalculator < Spree::Calculator
13
13
  # don't try to calculate hash for partially formed order
14
14
  return false unless is_full?(computable)
15
15
 
16
+ return false if !computable.updated_shipment_count.nil? and !computable.is_last_shipment_updated?
17
+
18
+ computable.updated_shipment_count_reset
19
+
16
20
  order_hash = exactor.calculate_hash(computable)
17
21
  current_order_hash = Spree::Order.find(computable.id).exactor_order_hash_sum
18
22
  result = order_hash!=current_order_hash
@@ -68,7 +68,7 @@ module Spree
68
68
  end
69
69
 
70
70
  Order.class_eval do
71
- attr_accessible :exactor_invoice_transaction, :exactor_commit_transaction, :exactor_order_hash_sum, :exactor_is_edit
71
+ attr_accessible :exactor_invoice_transaction, :exactor_commit_transaction, :exactor_order_hash_sum, :exactor_is_edit, :exactor_commit_option
72
72
  after_save :on_saved
73
73
  attr_accessor :current_payment
74
74
 
@@ -93,5 +93,33 @@ module Spree
93
93
  on_update
94
94
  update_column(:exactor_is_edit, nil);
95
95
  end
96
+
97
+ # WORKAROUND BEGIN
98
+ # Reloading or submitting of delivery page leads to shipment recreation every time.
99
+ # The problem appears if user changes shipping methods for more than one packages.
100
+ # Spree invoke tax recalculation for each change. We count updated shipments.
101
+ # And if last update took a place then invoke tax recalculation.
102
+
103
+ @@updated_shipment_counter = Hash.new(nil)
104
+
105
+ def updated_shipment_count
106
+ return nil if @@updated_shipment_counter.nil?
107
+ return @@updated_shipment_counter[self.id]
108
+ end
109
+
110
+ def is_last_shipment_updated?
111
+ self.updated_shipment_count >= self.shipments.size
112
+ end
113
+
114
+ def updated_shipment_count_reset
115
+ @@updated_shipment_counter[self.id] = nil
116
+ end
117
+
118
+ def updated_shipment_count_inc
119
+ @@updated_shipment_counter[self.id] = 0 if self.updated_shipment_count.nil?
120
+
121
+ @@updated_shipment_counter[self.id] += 1
122
+ end
123
+ # WORKAROUND END
96
124
  end
97
125
  end
@@ -0,0 +1,17 @@
1
+ module Spree
2
+
3
+ Shipment.class_eval do
4
+
5
+ end
6
+
7
+ class Shipment
8
+ alias :super_selected_shipping_rate_id= :selected_shipping_rate_id=
9
+
10
+ def selected_shipping_rate_id=(id)
11
+ self.order.updated_shipment_count_inc
12
+
13
+ self.super_selected_shipping_rate_id=id
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ class AddCommitOptionToOrder < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_orders, :exactor_commit_option, :string
4
+ end
5
+ end
@@ -12,6 +12,7 @@ module SpreeExactor
12
12
  supported_versions '1.1.2.20130723'=>['2.0.*']
13
13
  supported_versions '1.1.3.20130726'=>['2.0.*']
14
14
  supported_versions '1.1.4.20130729'=>['2.0.*']
15
+ supported_versions '1.1.5.20130731'=>['2.0.*']
15
16
  unless @supported_versions.include? _plugin_version
16
17
  puts "Unknown plug-in version. Try any of those: "+ @supported_versions.keys.to_s
17
18
  exit(0)
@@ -2,7 +2,7 @@
2
2
  Gem::Specification.new do |s|
3
3
  s.platform = Gem::Platform::RUBY
4
4
  s.name = 'spree_exactor'
5
- s.version = '1.1.4.20130729'
5
+ s.version = '1.1.5.20130731'
6
6
  s.summary = 'Exactor sales tax compliance module for SpreeCommerce'
7
7
  s.description = 'Sales tax compliance module for (i) calculating sales tax with SpreeCommerce; and (ii) generating and filing sales tax returns in all US jurisdictions (state and local).'
8
8
  s.required_ruby_version = '>= 2.0.0'
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  "db/migrate/20120713152512_modify_dependent_entities.rb",
26
26
  "db/migrate/20120813124740_extend_user.rb",
27
27
  "db/migrate/20120815104739_add_exactor_tor_inline_tax.rb",
28
+ "db/migrate/20130731110400_add_commit_option_to_order.rb",
28
29
  "config/routes.rb",
29
30
  "config/locales/en.yml",
30
31
  ".rspec",
@@ -45,6 +46,7 @@ Gem::Specification.new do |s|
45
46
  "app/models/spree/line_item_decorator.rb",
46
47
  "app/models/spree/order_decorator.rb",
47
48
  "app/models/spree/order_updater_decorator.rb",
49
+ "app/models/spree/shipment_decorator.rb",
48
50
  "app/models/spree/tax_rate_decorator.rb",
49
51
  "app/models/spree/adjustment_decorator.rb",
50
52
  "app/models/spree/payment_decorator.rb",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_exactor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4.20130729
4
+ version: 1.1.5.20130731
5
5
  platform: ruby
6
6
  authors:
7
7
  - Exactor, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-29 00:00:00.000000000 Z
11
+ date: 2013-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -87,6 +87,7 @@ files:
87
87
  - db/migrate/20120713152512_modify_dependent_entities.rb
88
88
  - db/migrate/20120813124740_extend_user.rb
89
89
  - db/migrate/20120815104739_add_exactor_tor_inline_tax.rb
90
+ - db/migrate/20130731110400_add_commit_option_to_order.rb
90
91
  - config/routes.rb
91
92
  - config/locales/en.yml
92
93
  - .rspec
@@ -107,6 +108,7 @@ files:
107
108
  - app/models/spree/line_item_decorator.rb
108
109
  - app/models/spree/order_decorator.rb
109
110
  - app/models/spree/order_updater_decorator.rb
111
+ - app/models/spree/shipment_decorator.rb
110
112
  - app/models/spree/tax_rate_decorator.rb
111
113
  - app/models/spree/adjustment_decorator.rb
112
114
  - app/models/spree/payment_decorator.rb