first pass at csv import functionality for tracks

This commit is contained in:
Darren Cato 2013-07-21 13:37:35 -04:00
parent d093ba39bd
commit 3450c22e97
9 changed files with 144 additions and 4 deletions

View file

@ -137,6 +137,22 @@ class Project < ActiveRecord::Base
@age_in_days ||= (Date.today - created_at.to_date + 1).to_i
end
def self.import params, user
count = 0
CSV.foreach(params[:file], headers: true) do |row|
unless find_by_name_and_user_id row[params[:name].to_i], user.id
project = new
project.name = row[params[:name].to_i]
project.user = user
project.description = row[params[:description].to_i] if row[params[:description].to_i].present?
project.state = 'active'
project.save!
count += 1
end
end
count
end
end
class NullProject

View file

@ -1,5 +1,8 @@
class Todo < ActiveRecord::Base
MAX_DESC_LENGTH = 300
MAX_NOTES_LENGTH = 60000
before_save :render_note
after_save :save_predecessors
@ -106,8 +109,8 @@ class Todo < ActiveRecord::Base
# Description field can't be empty, and must be < 100 bytes Notes must be <
# 60,000 bytes (65,000 actually, but I'm being cautious)
validates_presence_of :description
validates_length_of :description, :maximum => 100
validates_length_of :notes, :maximum => 60000, :allow_nil => true
validates_length_of :description, :maximum => MAX_DESC_LENGTH
validates_length_of :notes, :maximum => MAX_NOTES_LENGTH, :allow_nil => true
validates_presence_of :show_from, :if => :deferred?
validates_presence_of :context
validate :check_show_from_in_future
@ -431,4 +434,27 @@ class Todo < ActiveRecord::Base
end
end
def self.import params, user
default_context = Context.where(:user_id=>user.id).order('id').first
count = 0
CSV.foreach(params[:file], headers: true) do |row|
unless find_by_description_and_user_id row[params[:description].to_i], user.id
todo = new
todo.user = user
todo.description = row[params[:description].to_i].truncate MAX_DESC_LENGTH
todo.context = Context.find_by_name_and_user_id(row[params[:context].to_i], user.id) || default_context
todo.project = Project.find_by_name_and_user_id(row[params[:project].to_i], user.id) if row[params[:project].to_i].present?
todo.state = row[params[:completed_at].to_i].present? ? 'completed' : 'active'
todo.notes = row[params[:notes].to_i].truncate MAX_NOTES_LENGTH if row[params[:notes].to_i].present?
todo.created_at = row[params[:created_at].to_i] if row[params[:created_at].to_i].present?
todo.due = row[params[:due].to_i]
todo.completed_at = row[params[:completed_at].to_i] if row[params[:completed_at].to_i].present?
todo.save!
count += 1
end
end
count
end
end