|
@@ -1,12 +1,17 @@
|
|
|
require 'sinatra'
|
|
|
require "pry"
|
|
|
require 'sequel'
|
|
|
+require 'spreadsheet'
|
|
|
# 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")
|
|
|
+STATKUE = Sequel.connect("sqlite://statkue.db")
|
|
|
+
|
|
|
+Sequel::Model.strict_param_setting = false
|
|
|
+Sequel::Model.plugin :csv_serializer
|
|
|
|
|
|
class SchuelerBasisdaten < Sequel::Model(:'SchuelerBasisdaten.dat')
|
|
|
one_to_one :tracker
|
|
@@ -18,8 +23,15 @@ class SchuelerBasisdaten < Sequel::Model(:'SchuelerBasisdaten.dat')
|
|
|
end
|
|
|
|
|
|
def before_save
|
|
|
- self[:"Geburtsdatum"] = Time.parse(self[:"Geburtsdatum"]).strftime("%d.%m.%Y")
|
|
|
+ begin
|
|
|
+ self[:"Geburtsdatum"] = Time.parse(self[:"Geburtsdatum"]).strftime("%d.%m.%Y")
|
|
|
+ rescue
|
|
|
+ self[:"Geburtsdatum"] = Time.strptime(self[:"Geburtsdatum"], "%m/%d/%Y").strftime("%d.%m.%Y")
|
|
|
+ end
|
|
|
self[:"Schulpflicht erf."] ||= volljaehrig?(self[:"Geburtsdatum"]) ? "J" : "N"
|
|
|
+ self[:"Verpflichtung Sprachförderkurs"] ||= "N"
|
|
|
+ self[:"Teilnahme Sprachförderkurs"] ||= "N"
|
|
|
+ self[:"Autist"] ||= "N"
|
|
|
super
|
|
|
end
|
|
|
end
|
|
@@ -29,9 +41,19 @@ class SchuelerZusatzdaten < Sequel::Model(:'SchuelerZusatzdaten.dat')
|
|
|
end
|
|
|
class SchuelerErzieher < Sequel::Model(:'SchuelerErzieher.dat')
|
|
|
one_to_one :tracker
|
|
|
+
|
|
|
+ def before_save
|
|
|
+ self[:"Vorname 1.Person"] ||= ""
|
|
|
+ self[:"Nachname1.Person"] ||= ""
|
|
|
+ self[:"Anrede 1.Person"] ||= ""
|
|
|
+ self[:"Erzieherart"] ||= ""
|
|
|
+ self[:"Straße"] ||= ""
|
|
|
+ self[:"PLZ"] ||= ""
|
|
|
+ self[:"Ort"] ||= ""
|
|
|
+ end
|
|
|
end
|
|
|
class SchuelerTelefonnummern < Sequel::Model(:'SchuelerTelefonnummern.dat')
|
|
|
- one_to_one :tracker
|
|
|
+ many_to_one :tracker
|
|
|
|
|
|
def before_save
|
|
|
self[:"Art"] ||= "Erzieher"
|
|
@@ -42,7 +64,7 @@ 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
|
|
|
+ one_to_many :telefon, :class => SchuelerTelefonnummern, :key => :id
|
|
|
end
|
|
|
|
|
|
class BasisApp < Sinatra::Application
|
|
@@ -55,6 +77,18 @@ class BasisApp < Sinatra::Application
|
|
|
def partial(template, locals = {})
|
|
|
slim template, :layout => false, :locals => locals
|
|
|
end
|
|
|
+
|
|
|
+ def get_bildungsgang(fachklasse)
|
|
|
+ a=fachklasse.split("-")
|
|
|
+ STATKUE[:Fachklasse].where(Flag: a.shift[0], FKS: a.shift, AP: a.shift).first[:Beschreibung_MW]
|
|
|
+ end
|
|
|
+
|
|
|
+ def import_daten
|
|
|
+ # Dir[File.dirname(__FILE__)+"/views/*"]
|
|
|
+ files = Dir["/home/zorro/temp/schild-docker/shared/*"]
|
|
|
+ .reject{|f| File.directory?(f) || !f[".dat"]}
|
|
|
+ files.insert(0, files.delete(files.select{|f|f.include? 'SchuelerBasisdaten'}.join))
|
|
|
+ end
|
|
|
end
|
|
|
end
|
|
|
|
|
@@ -103,7 +137,7 @@ class BewerbungApp < BasisApp
|
|
|
entries << Module.const_get(k.chomp(".dat")).new(params[k])
|
|
|
end
|
|
|
keys.flatten!
|
|
|
- # binding.pry
|
|
|
+ # binding.pry
|
|
|
if keys.empty?
|
|
|
entries.each do |e|
|
|
|
e[:Vorname] = t.schueler[:"Vorname"]
|
|
@@ -120,3 +154,58 @@ class BewerbungApp < BasisApp
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
+
|
|
|
+class BewerbungAdminApp < BasisApp
|
|
|
+ configure do
|
|
|
+ if ENV['S_AUTH'] != "false"
|
|
|
+ use Rack::Auth::Basic, "Bitte anmelden" do |username, password|
|
|
|
+ username == "test" && password == "test"
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ get '/out' do
|
|
|
+ book = Spreadsheet::Workbook.new
|
|
|
+ bewerber = Tracker.all
|
|
|
+ bewerber.group_by{|b| b[:bildungsgang]}.each_pair do |key,value|
|
|
|
+ sheet = book.create_worksheet :name => key.tr('[]*?:/\\','_')
|
|
|
+ sheet.row(0).concat (%w{Name Vorname m/w Geb.-Dat Geb.-Ort Straße\ und\ Hausnr. PLZ\ Wohnort Telefon Mail})
|
|
|
+ value.each_with_index do |v,i|
|
|
|
+ sheet.update_row i+1, v.schueler[:Nachname],
|
|
|
+ v.schueler[:Vorname],
|
|
|
+ v.schueler.Geschlecht,
|
|
|
+ v.schueler.Geburtsdatum,
|
|
|
+ v.zusatzdaten.Geburtsort,
|
|
|
+ v.schueler.Straße,
|
|
|
+ v.schueler.PLZ+" "+v.schueler.Ort,
|
|
|
+ v.zusatzdaten[:"Telefon-Nr."],
|
|
|
+ v.zusatzdaten[:"E-Mail"]
|
|
|
+ end
|
|
|
+ end
|
|
|
+ book.write 'out.xls'
|
|
|
+ file = File.path('out.xls')
|
|
|
+ send_file(file, :disposition => 'attachment')
|
|
|
+ end
|
|
|
+
|
|
|
+ get '/in' do
|
|
|
+ import_daten.each do |f|
|
|
|
+ p f
|
|
|
+ csv=CSV.read(f, {col_sep: "|", headers: true, encoding: "bom|utf-8"})
|
|
|
+ csv.each do |row|
|
|
|
+ Module.const_get(File.basename(f).chomp(".dat")).create(row)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ SchuelerBasisdaten.each do |s|
|
|
|
+ if s.tracker.nil?
|
|
|
+ t =Tracker.create(schueler_basisdaten_id: s.id,
|
|
|
+ schueler_zusatzdaten_id: SchuelerZusatzdaten.where(Vorname: s.Vorname, Nachname: s.Nachname).first.id,
|
|
|
+ schueler_erzieher_id: SchuelerErzieher.where(Vorname: s.Vorname, Nachname: s.Nachname).first.id,
|
|
|
+ # schueler_telefonnummern_id: SchuelerTelefonnummern.where(Vorname: s.Vorname, Nachname: s.Nachname).all.map{|t|t.id},
|
|
|
+ valid: true,
|
|
|
+ bildungsgang: get_bildungsgang(s.Fachklasse))
|
|
|
+ SchuelerTelefonnummern.where(Vorname: s.Vorname, Nachname: s.Nachname).each{|fon| fon.tracker_id = t.id}
|
|
|
+ end
|
|
|
+ end
|
|
|
+ "alles drin"
|
|
|
+ end
|
|
|
+end
|