class Entry < ApplicationRecord require 'csv' belongs_to :user validates :date, :hours, :minutes, presence: true validates :hours, numericality: { only_integer: true, greater_than_or_equal_to: 0 } validates :minutes, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than: 60 } before_save :normalize_time PRAKTIKUMSTYPEN = %w[propädeutikum fachspezifikum] ENTRY_ARTEN = %w[Praktikum Selbsterfahrung Supervision] validates :praktikums_typ, inclusion: { in: PRAKTIKUMSTYPEN } validates :entry_art, inclusion: { in: ENTRY_ARTEN } validates :distance_km, numericality: { only_integer: true, greater_than_or_equal_to: 0 } def kilometer_pauschale return 0 unless distance_km.present? distance_km * 0.42 end def jahr date.year end def total_minutes hours * 60 + minutes end def self.to_csv CSV.generate(headers: true, col_sep: ";") do |csv| csv << %w[Datum Stunden Minuten Typ Art Kilometer User] all.each do |entry| csv << [ entry.date, entry.hours, entry.minutes, entry.praktikums_typ, entry.entry_art, entry.distance_km, entry.user.email ] end end end private def normalize_time self.hours += minutes / 60 self.minutes = minutes % 60 end end