|
|
|
@ -2,7 +2,6 @@ class Entry < ApplicationRecord |
|
|
|
|
|
|
|
require 'csv' |
|
|
|
|
|
|
|
|
|
|
|
belongs_to :user |
|
|
|
|
|
|
|
validates :date, :hours, :minutes, presence: true |
|
|
|
@ -29,28 +28,60 @@ class Entry < ApplicationRecord |
|
|
|
distance_km * 0.42 |
|
|
|
end |
|
|
|
|
|
|
|
def self.total_kilometer_cost_by_year(user) |
|
|
|
where(user: user) |
|
|
|
.where.not(distance_km: nil) |
|
|
|
.group(Arel.sql("DATE_PART('year', date)")) |
|
|
|
.order(Arel.sql("DATE_PART('year', date) DESC")) |
|
|
|
.pluck( |
|
|
|
Arel.sql("DATE_PART('year', date)::int"), |
|
|
|
Arel.sql("SUM(distance_km * 2 * 0.42)") |
|
|
|
).to_h |
|
|
|
end |
|
|
|
|
|
|
|
def self.total_fortbildungskosten_by_year(user) |
|
|
|
where(user: user, entry_art: 'Fortbildung') |
|
|
|
.group_by { |e| e.date.year } |
|
|
|
.transform_values { |entries| entries.sum { |e| e.kosten.to_f } } |
|
|
|
.where.not(kosten: nil) |
|
|
|
.group(Arel.sql("DATE_PART('year', date)")) |
|
|
|
.order(Arel.sql("DATE_PART('year', date) DESC")) |
|
|
|
.pluck(Arel.sql("DATE_PART('year', date)::int"), Arel.sql("SUM(kosten)")) |
|
|
|
.to_h |
|
|
|
end |
|
|
|
|
|
|
|
def self.total_selbsterfahrungskosten_by_year(user) |
|
|
|
where(user: user, entry_art: 'Selbsterfahrung') |
|
|
|
.where.not(kosten: nil) |
|
|
|
.group(Arel.sql("DATE_PART('year', date)")) |
|
|
|
.order(Arel.sql("DATE_PART('year', date) DESC")) |
|
|
|
.pluck(Arel.sql("DATE_PART('year', date)::int"), Arel.sql("SUM(kosten)")) |
|
|
|
.to_h |
|
|
|
end |
|
|
|
|
|
|
|
def self.total_selbsterfahrungskosten_by_year(user) |
|
|
|
where(user: user, entry_art: 'Selbsterfahrung') |
|
|
|
.group_by { |e| e.date.year } |
|
|
|
.transform_values { |entries| entries.sum { |e| e.kosten.to_f } } |
|
|
|
.where.not(kosten: nil) |
|
|
|
.group(Arel.sql("DATE_PART('year', date)")) |
|
|
|
.order(Arel.sql("DATE_PART('year', date) DESC")) |
|
|
|
.pluck(Arel.sql("DATE_PART('year', date)::int"), Arel.sql("SUM(kosten)")) |
|
|
|
.to_h |
|
|
|
end |
|
|
|
|
|
|
|
def self.total_supervision_by_year(user) |
|
|
|
where(user: user, entry_art: 'Supervision') |
|
|
|
.group_by { |e| e.date.year } |
|
|
|
.transform_values { |entries| entries.sum { |e| e.kosten.to_f } } |
|
|
|
.where.not(kosten: nil) |
|
|
|
.group(Arel.sql("DATE_PART('year', date)")) |
|
|
|
.order(Arel.sql("DATE_PART('year', date) DESC")) |
|
|
|
.pluck(Arel.sql("DATE_PART('year', date)::int"), Arel.sql("SUM(kosten)")) |
|
|
|
.to_h |
|
|
|
end |
|
|
|
|
|
|
|
def self.total_semesterkosten_by_year(user) |
|
|
|
where(user: user) |
|
|
|
.group_by { |e| e.date.year } |
|
|
|
.transform_values { |entries| entries.sum { |e| e.kosten.to_f } } |
|
|
|
.where.not(kosten: nil) |
|
|
|
.group(Arel.sql("DATE_PART('year', date)")) |
|
|
|
.order(Arel.sql("DATE_PART('year', date) DESC")) |
|
|
|
.pluck(Arel.sql("DATE_PART('year', date)::int"), Arel.sql("SUM(kosten)")) |
|
|
|
.to_h |
|
|
|
end |
|
|
|
|
|
|
|
def jahr |
|
|
|
@ -60,6 +91,7 @@ class Entry < ApplicationRecord |
|
|
|
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] |
|
|
|
@ -79,6 +111,7 @@ class Entry < ApplicationRecord |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
private |
|
|
|
|
|
|
|
def normalize_time |
|
|
|
|