bewerbung.rb 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. require 'sinatra'
  2. require "pry"
  3. require 'sequel'
  4. # require 'mailgun-ruby'
  5. # require 'envyable'
  6. # env.yml mit den unten verwendeten ENV anleg
  7. # Envyable.load("#{File.dirname(__FILE__)}/config/env.yml")
  8. #
  9. DB = Sequel.connect("sqlite://form.db")
  10. class SchuelerBasisdaten < Sequel::Model(:'SchuelerBasisdaten.dat')
  11. one_to_one :tracker
  12. def volljaehrig?(geburtsdatum)
  13. n = DateTime.now
  14. g = DateTime.parse(geburtsdatum)
  15. g >> 12*18 < n
  16. end
  17. def before_save
  18. self[:"Geburtsdatum"] = Time.parse(self[:"Geburtsdatum"]).strftime("%d.%m.%Y")
  19. self[:"Schulpflicht erf."] ||= volljaehrig?(self[:"Geburtsdatum"]) ? "J" : "N"
  20. super
  21. end
  22. end
  23. class SchuelerZusatzdaten < Sequel::Model(:'SchuelerZusatzdaten.dat')
  24. one_to_one :tracker
  25. end
  26. class SchuelerErzieher < Sequel::Model(:'SchuelerErzieher.dat')
  27. one_to_one :tracker
  28. end
  29. class SchuelerTelefonnummern < Sequel::Model(:'SchuelerTelefonnummern.dat')
  30. one_to_one :tracker
  31. def before_save
  32. self[:"Art"] ||= "Erzieher"
  33. super
  34. end
  35. end
  36. class Tracker < Sequel::Model
  37. one_to_one :schueler, :class => SchuelerBasisdaten, :key => :id
  38. one_to_one :zusatzdaten, :class => SchuelerZusatzdaten, :key => :id
  39. one_to_one :erzieher, :class => SchuelerErzieher, :key => :id
  40. one_to_one :telefon, :class => SchuelerTelefonnummern, :key => :id
  41. end
  42. class BasisApp < Sinatra::Application
  43. configure do
  44. enable :sessions
  45. set :session_secret, (ENV['S_SESSION_SECRET'] || 'your_secret')
  46. end
  47. helpers do
  48. def partial(template, locals = {})
  49. slim template, :layout => false, :locals => locals
  50. end
  51. end
  52. end
  53. class BewerbungApp < BasisApp
  54. get '/' do
  55. slim :form, :locals => {:keys => []}
  56. end
  57. post '/anmeldung' do
  58. p params
  59. keys, entries = [], []
  60. keys << "bildungsgang" if params["bildungsgang"].empty?
  61. keys << "taetigkeit" if params["taetigkeit"].empty?
  62. params.keys.select{|k|k.include? ".dat"}.each do |k|
  63. keys << params[k].keys.select{|kk| params[k][kk].empty?}.map{|kk| k+"["+kk+"]"}
  64. entries << Module.const_get(k.chomp(".dat")).new(params[k])
  65. end
  66. keys.flatten!
  67. if keys.empty?
  68. t = Tracker.create(:bildungsgang => params[:bildungsgang], :taetigkeit => params[:taetigkeit])
  69. entries.each do |e|
  70. e[:Vorname] ||= params["SchuelerBasisdaten.dat"]["Vorname"]
  71. e[:Nachname] ||= params["SchuelerBasisdaten.dat"]["Nachname"]
  72. e[:Geburtsdatum]||= params["SchuelerBasisdaten.dat"]["Geburtsdatum"]
  73. e.save
  74. e.tracker = t
  75. end
  76. if entries.find{|e| e[:"Schulpflicht erf."] == "J"}
  77. t.valid = true
  78. slim :fertig, :locals => {:t => t}
  79. else
  80. t.valid = false
  81. slim :form2, :locals => {:keys => [], :tid => t[:id]}
  82. end
  83. else
  84. slim :form, :locals => {:keys => keys}
  85. end
  86. end
  87. post '/anmeldung_erzieher' do
  88. t = Tracker[params[:tid].to_i]
  89. p params
  90. keys, entries = [], []
  91. params.keys.select{|k|k.include? ".dat"}.each do |k|
  92. keys << params[k].keys.select{|kk| params[k][kk].empty? && !kk.include?("2.Person")}.map{|kk| k+"["+kk+"]"}
  93. entries << Module.const_get(k.chomp(".dat")).new(params[k])
  94. end
  95. keys.flatten!
  96. # binding.pry
  97. if keys.empty?
  98. entries.each do |e|
  99. e[:Vorname] = t.schueler[:"Vorname"]
  100. e[:Nachname] = t.schueler[:"Nachname"]
  101. e[:Geburtsdatum]= t.schueler[:"Geburtsdatum"]
  102. e.save
  103. e.tracker = t
  104. end
  105. t.valid = true
  106. slim :fertig, :locals => {:t => t}
  107. else
  108. t.valid = false
  109. slim :form2, :locals => {:keys => keys, :tid => t[:id]}
  110. end
  111. end
  112. end