|
|
@@ -0,0 +1,65 @@ |
|
|
|
require_relative '../models' |
|
|
|
require 'csv' |
|
|
|
require 'pp' |
|
|
|
# $ ruby scripts/import-candidates-csv.rb [ELECTION ID] [CSV FILENAME] |
|
|
|
|
|
|
|
# Import a CSV file of election candidates for a specified election |
|
|
|
# The election for which you're importing data must already exist in the elections table |
|
|
|
|
|
|
|
@election = Election.get(ARGV.shift) |
|
|
|
pp @election |
|
|
|
|
|
|
|
candidates_matched = 0 |
|
|
|
|
|
|
|
CSV.foreach(ARGV.shift) do |line| |
|
|
|
# pp line |
|
|
|
|
|
|
|
district_name, candidate_surname, candidate_forenames, party = line |
|
|
|
|
|
|
|
# District |
|
|
|
@district = District.first(:name => district_name) |
|
|
|
|
|
|
|
# pp @district |
|
|
|
|
|
|
|
# Candidate |
|
|
|
@candidate = Candidate.first_or_create(:forenames => candidate_forenames, :surname => candidate_surname) |
|
|
|
|
|
|
|
if @candidate |
|
|
|
pp @candidate |
|
|
|
candidates_matched += 1 |
|
|
|
end |
|
|
|
|
|
|
|
unless @candidate.saved? |
|
|
|
$stderr.puts "Couldn't save candidate #{@candidate}" |
|
|
|
exit 1 |
|
|
|
end |
|
|
|
|
|
|
|
# Party |
|
|
|
@party = Party.first_or_create(:name => party) |
|
|
|
|
|
|
|
puts @party.name |
|
|
|
unless @party.saved? |
|
|
|
$stderr.puts "Couldn't save party #{@party}" |
|
|
|
exit 1 |
|
|
|
end |
|
|
|
|
|
|
|
# Candidacy |
|
|
|
@candidacy = Candidacy.create( |
|
|
|
:election => @election, |
|
|
|
:candidate => @candidate, |
|
|
|
:party => @party, |
|
|
|
:district => @district, |
|
|
|
:votes => nil |
|
|
|
) |
|
|
|
|
|
|
|
unless @candidacy.saved? |
|
|
|
$stderr.puts "Couldn't save candidacy #{@candidacy}" |
|
|
|
exit 1 |
|
|
|
end |
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
puts "Candidates: #{Candidate.count}" |
|
|
|
puts "Candidacies: #{Candidacy.count}" |
|
|
|
puts candidates_matched |
|
|
|
|