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