90 lines
3.3 KiB
Ruby
Executable File
90 lines
3.3 KiB
Ruby
Executable File
# -*- coding: utf-8 -*-
|
|
# == Schema Information
|
|
#
|
|
# Table name: lvas
|
|
#
|
|
# id :integer not null, primary key
|
|
# name :string(255)
|
|
# desc :text
|
|
# ects :decimal(, )
|
|
# lvanr :string(255)
|
|
# stunden :decimal(, )
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# modul_id :integer
|
|
# semester_id :integer
|
|
# pruefungsinformation :text
|
|
# lernaufwand :text
|
|
# typ :string(255)
|
|
#
|
|
|
|
# == Schema Information
|
|
#
|
|
# Table name: lvas
|
|
#
|
|
# id :integer not null, primary key
|
|
# name :string(255)
|
|
# desc :text
|
|
# ects :decimal(, )
|
|
# lvanr :string(255)
|
|
# stunden :decimal(, )
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# modul_id :integer
|
|
# semester_id :integer
|
|
#
|
|
|
|
class Lva < ActiveRecord::Base
|
|
ERLAUBTE_TYPEN = ['VO', 'UE', 'VU', 'LU', 'SE', 'andere'];
|
|
has_paper_trail # Versionsverfolgung
|
|
attr_accessible :desc, :ects, :lvanr, :name, :stunden, :modul_ids, :semester_ids, :pruefungsinformation, :lernaufwand, :typ, :lecturer_ids
|
|
has_and_belongs_to_many :modul # Gehört zu einem Modul
|
|
has_and_belongs_to_many :semester
|
|
#Gehört zu einem Semester( derzeit nicht implementiert)
|
|
has_many :beispiele , :class_name => "Beispiel"
|
|
has_and_belongs_to_many :lecturers
|
|
translates :desc, :fallbacks_for_empty_translations => true
|
|
|
|
validates :lvanr,:format=>{ :with => /^[0-9][0-9][0-9]\.[0-9][0-9][0-9]$/}, :presence=>true, :uniqueness=>true # , :uniqueness=>true # LVA-Nummer muss das Format 000.000 besitzen (uniqueness?) oder 000 für nicht
|
|
validates_presence_of :ects # ECTS vorhanden?
|
|
validates :name, :presence=>true, :uniqueness=>true# Name Eingetragen?
|
|
validates :typ, :presence=>true, :inclusion=> ERLAUBTE_TYPEN
|
|
validates_presence_of :stunden # Stunden Eingetragen?
|
|
validates_presence_of :modul # Zugehöriges Modul eingetragen? (zumindest eines)
|
|
def add_semesters
|
|
# Diese Methode fügt die Instanz automatisch zu allen Studien als "Ohne Semesterempfehlung" (Semester 0) zu, bei denen die Instanz im Studium noch nicht vorkommt.
|
|
for m in self.modul
|
|
for mg in m.modulgruppen # Über alle Module und alle Modulgruppen iterieren
|
|
hits = mg.studium.semester.all.map{|x| x.lvas}.map{|x| x.find_by_id(self.id)}.compact # Alle einträge in allen semestern mit gleicher LVa-ID suchen und alle nils entfernen
|
|
|
|
if hits.empty? # wurde gar kein eintrag gefunden ?
|
|
self.semester << mg.studium.semester.where(:nummer => 0) # auf nummer null eintragen
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
private
|
|
|
|
##
|
|
# Lade Daten aus TISS und füge diese in die Datenbank ein.
|
|
def load_tissdata
|
|
url= "https://tiss.tuwien.ac.at/api/course/"+ self.lvanr.to_s+"-2012W"
|
|
begin
|
|
@hash=Hash.from_xml(open(url).read)["tuvienna"]
|
|
@person=[]
|
|
if @hash["course"]["lecturers"]["oid"].is_a? String
|
|
@person = @hash["course"]["lecturers"]["oid"]
|
|
else
|
|
@hash["course"]["lecturers"]["oid"].each do |pid|
|
|
@person << Hash.from_xml(open("https://tiss.tuwien.ac.at/adressbuch/adressbuch/person_via_oid/" + pid.to_s + ".xml").read)["tuvienna"]["person"]
|
|
end
|
|
end
|
|
rescue OpenURI::HTTPError => e
|
|
end
|
|
end
|
|
|
|
|
|
|
|
end
|