diff --git a/README.md b/README.md index 14fb790..e23e8e5 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ You'll need to have a AfterShip account [http://www.aftership.com](http://www.af ###2. Setup the API Key -Log in to AfterShip and copy the consumer key and consumer secret to initializers/aftership.rb +Log in to AfterShip. Go to "Settings" page and select "Profile" tab, then copy the consumer key and consumer to initializers/aftership.rb Spree::Aftership::Config[:consumer_key] = "YOUR_CONSUMER_KEY" Spree::Aftership::Config[:consumer_secret] = "YOUR_CONSUMER_SECRET" diff --git a/app/models/aftership_tracking.rb b/app/models/aftership_tracking.rb new file mode 100644 index 0000000..ee5376a --- /dev/null +++ b/app/models/aftership_tracking.rb @@ -0,0 +1,34 @@ +require 'uri' +require 'net/http' +require 'net/https' +require 'cgi' + +class AftershipTracking < ActiveRecord::Base + attr_accessible :tracking, :email, :order_number, :add_to_aftership + + def self.add_to_aftership + AftershipTracking.where(:add_to_aftership => nil).each do |tracking| + post_data = {"consumer_key" => Spree::Aftership::Config[:consumer_key], "consumer_secret" => Spree::Aftership::Config[:consumer_secret], "tracking_number" => tracking.tracking, "email" => tracking.email, "title" => "Spree Order: #{tracking.order_number}"} + + begin + url = URI.parse("https://www.aftership.com/en/api/add-tracking/") + req = Net::HTTP::Post.new(url.path) + req.set_form_data(post_data) + + sock = Net::HTTP.new(url.host, url.port) + sock.use_ssl = true + res = sock.start { |http| http.request(req) } + + case res + when Net::HTTPOK + tracking.update_attribute(:add_to_aftership, Time.now) + else + logger.error 'Unable to add tracking number to AfterShip!' + end + rescue Exception => e + logger.error "AfterShip error:#{e.message}" + end + end + AftershipTracking.where("add_to_aftership <= ?", 1.month.ago).destroy_all + end +end \ No newline at end of file diff --git a/app/models/spree/shipment_decorator.rb b/app/models/spree/shipment_decorator.rb index bf4cd38..2e57f55 100644 --- a/app/models/spree/shipment_decorator.rb +++ b/app/models/spree/shipment_decorator.rb @@ -1,8 +1,3 @@ -require 'uri' -require 'net/http' -require 'net/https' -require 'cgi' - Spree::Shipment.class_eval do after_save :send_tracking_to_aftership @@ -11,16 +6,8 @@ def send_tracking_to_aftership if tracking && tracking_changed? - post_data = {"consumer_key" => Spree::Aftership::Config[:consumer_key], "consumer_secret" => Spree::Aftership::Config[:consumer_secret], "tracking_number" => tracking, "email"=> order.email, "title" => "#{Spree::Config.site_name} Order: #{order.number}"} - - url = URI.parse("https://www.aftership.com/en/api/add-tracking/") - req = Net::HTTP::Post.new(url.path) - req.set_form_data(post_data) - - sock = Net::HTTP.new(url.host, url.port) - sock.use_ssl = true - res = sock.start {|http| http.request(req) } - + AftershipTracking.create(:tracking => tracking, :email => order.email, :order_number => order.number) + AftershipTracking.add_to_aftership end end diff --git a/db/migrate/20120419031347_create_aftership_trackings.rb b/db/migrate/20120419031347_create_aftership_trackings.rb new file mode 100644 index 0000000..3aaca94 --- /dev/null +++ b/db/migrate/20120419031347_create_aftership_trackings.rb @@ -0,0 +1,12 @@ +class CreateAftershipTrackings < ActiveRecord::Migration + def change + create_table :aftership_trackings do |t| + t.string :tracking + t.string :email + t.string :order_number + t.datetime :add_to_aftership + + t.timestamps + end + end +end diff --git a/lib/generators/spree_aftership/install/install_generator.rb b/lib/generators/spree_aftership/install/install_generator.rb index 2207dc4..8d4fc82 100644 --- a/lib/generators/spree_aftership/install/install_generator.rb +++ b/lib/generators/spree_aftership/install/install_generator.rb @@ -7,6 +7,19 @@ def copy_initializers copy_file "aftership.rb", "config/initializers/aftership.rb" end + def add_migrations + run 'bundle exec rake railties:install:migrations FROM=spree_aftership' + end + + def run_migrations + res = ask "Would you like to run the migrations now? [Y/n]" + if res == "" || res.downcase == "y" + run 'bundle exec rake db:migrate' + else + puts "Skiping rake db:migrate, don't forget to run it!" + end + end + end end end \ No newline at end of file diff --git a/log/development.log b/log/development.log new file mode 100644 index 0000000..08c50eb --- /dev/null +++ b/log/development.log @@ -0,0 +1,2 @@ +  (0.3ms) select owner_id, owner_type, name, value from spree_preferences where `key` is null +SQLite3::SQLException: no such table: spree_preferences: select owner_id, owner_type, name, value from spree_preferences where `key` is null diff --git a/spec/models/aftership_tracking_spec.rb b/spec/models/aftership_tracking_spec.rb new file mode 100644 index 0000000..9a12e65 --- /dev/null +++ b/spec/models/aftership_tracking_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe AftershipTracking do + pending "add some examples to (or delete) #{__FILE__}" +end