Browse Source

sort by year

main
Christoph Marzell 1 month ago
parent
commit
33eaec44e0
  1. 51
      app/models/entry.rb

51
app/models/entry.rb

@ -2,7 +2,6 @@ class Entry < ApplicationRecord
require 'csv' require 'csv'
belongs_to :user belongs_to :user
validates :date, :hours, :minutes, presence: true validates :date, :hours, :minutes, presence: true
@ -29,28 +28,60 @@ class Entry < ApplicationRecord
distance_km * 0.42 distance_km * 0.42
end 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) def self.total_fortbildungskosten_by_year(user)
where(user: user, entry_art: 'Fortbildung') 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 end
def self.total_selbsterfahrungskosten_by_year(user) def self.total_selbsterfahrungskosten_by_year(user)
where(user: user, entry_art: 'Selbsterfahrung') 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 end
def self.total_supervision_by_year(user) def self.total_supervision_by_year(user)
where(user: user, entry_art: 'Supervision') 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 end
def self.total_semesterkosten_by_year(user) def self.total_semesterkosten_by_year(user)
where(user: 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 end
def jahr def jahr
@ -60,6 +91,7 @@ class Entry < ApplicationRecord
def total_minutes def total_minutes
hours * 60 + minutes hours * 60 + minutes
end end
def self.to_csv def self.to_csv
CSV.generate(headers: true, col_sep: ";") do |csv| CSV.generate(headers: true, col_sep: ";") do |csv|
csv << %w[Datum Stunden Minuten Typ Art Kilometer User] csv << %w[Datum Stunden Minuten Typ Art Kilometer User]
@ -79,6 +111,7 @@ class Entry < ApplicationRecord
end end
end end
end end
private private
def normalize_time def normalize_time

Loading…
Cancel
Save