Added a series of files so that elections can be created and edited and
[selectricity] / app / controllers / elections_controller.rb
index 2b1f282bbd8f519eb24da5af71a9fc7dd69beb17..696028e1287baabe6f3431ea12c337bcee0e4238 100644 (file)
@@ -1,4 +1,8 @@
 class ElectionsController < ApplicationController
+  model :raw_voter_list, :voter, :vote, :candidate
+
+
+  # general methods for dealing with elections
   def index
     list
     render :action => 'list'
@@ -8,6 +12,8 @@ class ElectionsController < ApplicationController
     @election_pages, @elections = paginate :elections, :per_page => 10
   end
 
+  # methods for displaying, creating, and manipulating election overview
+  # data
   def show
     @election = Election.find(params[:id])
   end
@@ -15,6 +21,10 @@ class ElectionsController < ApplicationController
   def new
     @election = Election.new
   end
+  
+  def edit
+    @election = Election.find(params[:id])
+  end
 
   def create_election
     @election = Election.new(params[:election])
@@ -26,6 +36,23 @@ class ElectionsController < ApplicationController
     end
   end
 
+  def update
+    @election = Election.find(params[:id])
+    if @election.update_attributes(params[:election])
+      flash[:notice] = 'Election was successfully updated.'
+      redirect_to :action => 'show', :id => @election
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    election = Election.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+
+  # methods fod display, adding, deleting, and manipulating candidate
+  # information for elections
   def new_candidates
     @election = Election.find( params[:id] )
   end
@@ -44,30 +71,60 @@ class ElectionsController < ApplicationController
     candidate.destroy
   end
 
-  def edit
-    @election = Election.find(params[:id])
+  def edit_candidates
+    @election = Election.find( params[:id] )
   end
 
-  def edit_candidates
+  # methods for displaying, adding, deleting, and manipulating voters
+  # for a particular election
+  def new_voters
     @election = Election.find( params[:id] )
+    if params.has_key?[:raw_voter_list]
+      process_incoming_voters( params[:raw_voter_list] )
+    end
+    @raw_voter_list = RawVoterList.new
+
   end
   
   def edit_voters
     @election = Election.find( params[:id] )
+    if params.has_key?( :raw_voter_list )
+      process_incoming_voters( params[:raw_voter_list] )
+    end
+
+    @raw_voter_list = RawVoterList.new
   end
   
-  def update
-    @election = Election.find(params[:id])
-    if @election.update_attributes(params[:election])
-      flash[:notice] = 'Election was successfully updated.'
-      redirect_to :action => 'show', :id => @election
-    else
-      render :action => 'edit'
-    end
+  def delete_voter
+    voter = Voter.find( params[:id] )
+    voter.destroy
   end
+  
+  private
 
-  def destroy
-    election = Election.find(params[:id]).destroy
-    redirect_to :action => 'list'
-  end
+    def process_incoming_voters(raw_voter_list)
+      incoming_voters = RawVoterList.new( raw_voter_list )
+
+      unless incoming_voters.entries.empty?
+        incoming_voters.each do |new_voter|
+
+          if incoming_voters.email == 0
+            new_voter.contacted = 1
+         elsif incoming_voters.email == 1
+           email_voter( new_voter )
+           new_voter.contacted = 1
+         else
+           new_voter.contacted = 0
+         end
+       
+          # the new voter should be in good shape. save add to the election
+         new_voter.save
+          @election.voters << new_voter
+        end
+      end
+      # reset the next time to have a the same default value for emailing
+      @raw_voter_list = RawVoterList.new
+      @raw_voter_list.email = incoming_voters.email
+    end
 end

Benjamin Mako Hill || Want to submit a patch?