123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- require 'sinatra'
- require "pry"
- require 'sequel'
- # require 'mailgun-ruby'
- # require 'envyable'
- # env.yml mit den unten verwendeten ENV anleg
- # Envyable.load("#{File.dirname(__FILE__)}/config/env.yml")
- #
- DB = Sequel.connect("sqlite://form.db")
- class SchuelerBasisdaten < Sequel::Model(:'SchuelerBasisdaten.dat')
- one_to_one :tracker
- def volljaehrig?(geburtsdatum)
- n = DateTime.now
- g = DateTime.parse(geburtsdatum)
- g >> 12*18 < n
- end
- def before_save
- self[:"Geburtsdatum"] = Time.parse(self[:"Geburtsdatum"]).strftime("%d.%m.%Y")
- self[:"Schulpflicht erf."] ||= volljaehrig?(self[:"Geburtsdatum"]) ? "J" : "N"
- super
- end
- end
- class SchuelerZusatzdaten < Sequel::Model(:'SchuelerZusatzdaten.dat')
- one_to_one :tracker
- end
- class SchuelerErzieher < Sequel::Model(:'SchuelerErzieher.dat')
- one_to_one :tracker
- end
- class SchuelerTelefonnummern < Sequel::Model(:'SchuelerTelefonnummern.dat')
- one_to_one :tracker
- def before_save
- self[:"Art"] ||= "Erzieher"
- super
- end
- end
- class Tracker < Sequel::Model
- one_to_one :schueler, :class => SchuelerBasisdaten, :key => :id
- one_to_one :zusatzdaten, :class => SchuelerZusatzdaten, :key => :id
- one_to_one :erzieher, :class => SchuelerErzieher, :key => :id
- one_to_one :telefon, :class => SchuelerTelefonnummern, :key => :id
- end
- class BasisApp < Sinatra::Application
- configure do
- enable :sessions
- set :session_secret, (ENV['S_SESSION_SECRET'] || 'your_secret')
- end
- helpers do
- def partial(template, locals = {})
- slim template, :layout => false, :locals => locals
- end
- end
- end
- class BewerbungApp < BasisApp
- get '/' do
- slim :form, :locals => {:keys => []}
- end
- post '/anmeldung' do
- p params
- keys, entries = [], []
- keys << "bildungsgang" if params["bildungsgang"].empty?
- keys << "taetigkeit" if params["taetigkeit"].empty?
- params.keys.select{|k|k.include? ".dat"}.each do |k|
- keys << params[k].keys.select{|kk| params[k][kk].empty?}.map{|kk| k+"["+kk+"]"}
- entries << Module.const_get(k.chomp(".dat")).new(params[k])
- end
- keys.flatten!
- if keys.empty?
- t = Tracker.create(:bildungsgang => params[:bildungsgang], :taetigkeit => params[:taetigkeit])
- entries.each do |e|
- e[:Vorname] ||= params["SchuelerBasisdaten.dat"]["Vorname"]
- e[:Nachname] ||= params["SchuelerBasisdaten.dat"]["Nachname"]
- e[:Geburtsdatum]||= params["SchuelerBasisdaten.dat"]["Geburtsdatum"]
- e.save
- e.tracker = t
- end
- if entries.find{|e| e[:"Schulpflicht erf."] == "J"}
- t.valid = true
- slim :fertig, :locals => {:t => t}
- else
- t.valid = false
- slim :form2, :locals => {:keys => [], :tid => t[:id]}
- end
- else
- slim :form, :locals => {:keys => keys}
- end
- end
- post '/anmeldung_erzieher' do
- t = Tracker[params[:tid].to_i]
- p params
- keys, entries = [], []
- params.keys.select{|k|k.include? ".dat"}.each do |k|
- keys << params[k].keys.select{|kk| params[k][kk].empty? && !kk.include?("2.Person")}.map{|kk| k+"["+kk+"]"}
- entries << Module.const_get(k.chomp(".dat")).new(params[k])
- end
- keys.flatten!
- # binding.pry
- if keys.empty?
- entries.each do |e|
- e[:Vorname] = t.schueler[:"Vorname"]
- e[:Nachname] = t.schueler[:"Nachname"]
- e[:Geburtsdatum]= t.schueler[:"Geburtsdatum"]
- e.save
- e.tracker = t
- end
- t.valid = true
- slim :fertig, :locals => {:t => t}
- else
- t.valid = false
- slim :form2, :locals => {:keys => keys, :tid => t[:id]}
- end
- end
- end
|