Browse Source

ergebnisse live

hmt 8 years ago
parent
commit
6fe16a5e42
3 changed files with 65 additions and 14 deletions
  1. 23 3
      specs/route_spec.rb
  2. 34 11
      sv.rb
  3. 8 0
      views/ergebnis.slim

+ 23 - 3
specs/route_spec.rb

@@ -225,10 +225,10 @@ describe "verlauf schüler" do
   describe "nach der Wahl" do
     before do
       Schueler.create(:hashid => "a", :vorname => "A", :klasse => "A1", :schuko => true, :sprecher => true)
-      Sprecher.create(:sprecher_id => "a")
-      Sprecher.create(:sprecher_id => "a")
+      Sprecher.create(:schueler_id => "a")
+      Sprecher.create(:schueler_id => "a")
       Schueler.create(:hashid => "b", :vorname => "B", :klasse => "B1", :schuko => true, :sprecher => true)
-      Schuko.create(:schuko_id => "b")
+      Schuko.create(:schueler_id => "b")
       Verbindungslehrer.create(:lehrer_id => 1)
       Verbindungslehrer.create(:lehrer_id => 1)
     end
@@ -243,5 +243,25 @@ describe "verlauf schüler" do
       b.sprecher_stimmen.count.must_equal 0
       b.schuko_stimmen.count.must_equal 1
     end
+
+    it "startseite wird umgeleitet auf ergebnis" do
+      Time.stub :now, Time.parse("Oct 3, 2016, 19:00") do
+        get "/"
+        follow_redirect!
+        last_response.body.must_include "Wahlbeteiligung"
+      end
+    end
+
+    it "hashcheck erfolgreich" do
+      Time.stub :now, Time.parse("Oct 3, 2016, 17:00") do
+        post "/a", params={:sprecher => ["b"], :schuko => ["b"], :lehrer => [2]}
+        stimm_hash = session[:stimm_hash]
+        post "/hashcheck", params={:stimm_hash => stimm_hash}
+        last_response.body.must_include "B1"
+        last_response.body.wont_include "A1"
+        last_response.body.must_include "Maier"
+        last_response.body.wont_include "Müller"
+      end
+    end
   end
 end

+ 34 - 11
sv.rb

@@ -1,8 +1,8 @@
 require "sequel"
 require "sinatra"
-require 'newrelic_rpm'
+require 'newrelic_rpm' unless development? || testing?
 require "slim"
-require "pry"
+require "pry" unless production?
 require "envyable"
 require "hashids"
 require "set"
@@ -14,16 +14,27 @@ if ENV['RACK_ENV'] != "test"
 end
 
 class Schueler < Sequel::Model(:schueler)
-  one_to_many :sprecher_stimmen, :key => :sprecher_id, :class => :Sprecher
-  one_to_many :schuko_stimmen, :key => :schuko_id, :class => :Schuko
+  one_to_many :sprecher_stimmen, :class => :Sprecher
+  one_to_many :schuko_stimmen, :class => :Schuko
 end
+
 class Lehrer < Sequel::Model(:lehrer)
-  one_to_many :lehrer_stimmen, :key => :lehrer_id, :class => :Verbindungslehrer
+  one_to_many :lehrer_stimmen, :class => :Verbindungslehrer
 end
+
 class Info < Sequel::Model(:infos);end
-class Sprecher < Sequel::Model(:sprecher);end
-class Schuko < Sequel::Model(:schuko);end
-class Verbindungslehrer < Sequel::Model(:verbindungslehrer);end
+
+class Sprecher < Sequel::Model(:sprecher)
+  many_to_one :schueler, :class => :Schueler
+end
+
+class Schuko < Sequel::Model(:schuko)
+  many_to_one :schueler, :class => :Schueler
+end
+
+class Verbindungslehrer < Sequel::Model(:verbindungslehrer)
+  many_to_one :lehrer, :key => :lehrer_id, :class => :Lehrer
+end
 
 class SV < Sinatra::Application
   configure do
@@ -66,6 +77,9 @@ class SV < Sinatra::Application
   end
 
   get '/' do
+    if Time.now > time_for('Oct 3, 2016, 18:00')
+      redirect to("/ergebnis")
+    end
     infos = Info.all
     slim :home, :locals => {:infos => infos}
   end
@@ -111,7 +125,7 @@ class SV < Sinatra::Application
   end
 
   get '/ergebnis' do
-    protected!
+    protected! if Time.now < time_for('Oct 3, 2016, 18:00')
     sprecher, schuko, lehrer, waehler = [], [], [], 0
     DB.transaction do
       sprecher = Schueler.where(:sprecher => true).all
@@ -122,6 +136,15 @@ class SV < Sinatra::Application
     slim :ergebnis, :locals => {:sprecher => sprecher, :schuko => schuko, :lehrer => lehrer, :waehler => waehler}
   end
 
+  post "/hashcheck" do
+    redirect back if params[:stimm_hash].nil?
+    arrays = params[:stimm_hash].split("l").map{|a| hashids.decode a}
+    sprecher = Sprecher.where(:id => arrays[0])
+    schuko = Schuko.where(:id => arrays[1])
+    lehrer = Verbindungslehrer.where(:id => arrays[2])
+    slim :hashcheck, :locals => {:sprecher => sprecher, :schuko => schuko, :lehrer => lehrer}
+  end
+
   post "/hashid" do
     redirect to("/#{params[:hashid]}")
   end
@@ -168,7 +191,7 @@ class SV < Sinatra::Application
     stimmabgabe = DB.transaction do
       sprecher && sprecher.to_set.each do |s|
         if Schueler[s].sprecher
-          sprecher_ids << DB[:sprecher].insert(:sprecher_id => s)
+          sprecher_ids << DB[:sprecher].insert(:schueler_id => s)
         else
           raise Sequel::Rollback
           session[:flash] = [0, "Es wurde ein nichtaufgestellter Sprecher gewählt"]
@@ -177,7 +200,7 @@ class SV < Sinatra::Application
       end
       schuko && schuko.to_set.each do |s|
         if Schueler[s].schuko
-          schuko_ids << DB[:schuko].insert(:schuko_id => s)
+          schuko_ids << DB[:schuko].insert(:schueler_id => s)
         else
           raise Sequel::Rollback
           session[:flash] = [0, "Es wurde ein nichtaufgestellter Vertreter zur Schulkonferenz gewählt"]

+ 8 - 0
views/ergebnis.slim

@@ -30,3 +30,11 @@ dl.dl-horizontal
     dt =l.name
     dd =l.lehrer_stimmen.count
 
+h2 Eigene Stimme prüfen
+form method="post" action=url("/hashcheck")
+  .row
+    .col-xs-6.col-sm-4.col-lg-4
+      .form-group.form-group-lg
+        input.form-control type="text" placeholder="Wahlcode eingeben" name="stimm_hash"
+    .col-xs-6.col-sm-3.col-lg-2
+      button type="submit" class="btn btn-primary btn-lg" Wahl prüfen