Browse Source

sort by year

main
Christoph Marzell 1 month ago
parent
commit
b759cd8bc3
  1. 231
      app/controllers/entries_controller.rb

231
app/controllers/entries_controller.rb

@ -1,121 +1,116 @@
class EntriesController < ApplicationController
before_action :authenticate_user!
before_action :set_entry, only: %i[edit update destroy]
def index
@entries = current_user.entries.order(date: :desc)
# Gesamtzeit in Minuten
@total_minutes = @entries.sum { |e| e.hours.to_i * 60 + e.minutes.to_i }
# Gesamtbetrag der Kilometerpauschale
@total_kilometer_pauschale = @entries.sum(&:kilometer_pauschale)
# Zeitverbrauch je Kombination (typ + art)
@time_by_typ_art = @entries.group_by(&:praktikums_typ).transform_values do |group|
group.group_by(&:entry_art).transform_values do |entries|
entries.sum { |e| e.hours.to_i * 60 + e.minutes.to_i }
end
end
# Verbleibende Minuten je Kombination
@remaining_minutes_matrix = {}
@time_by_typ_art.each do |typ, arts|
@remaining_minutes_matrix[typ] ||= {}
arts.each do |art, spent_minutes|
target = current_user.required_hours_matrix.dig(typ, art).to_i * 60
remaining = [target - spent_minutes, 0].max
@remaining_minutes_matrix[typ][art] = remaining
end
end
@total_kilometer_costs_by_year = current_user.entries
.group_by { |e| e.date.year }
.transform_values do |entries|
entries.sum(&:kilometer_pauschale)
end
@fortbildungskosten_by_year = Entry.total_fortbildungskosten_by_year(current_user)
@selbstsupervision_by_year = Entry.total_selbsterfahrungskosten_by_year(current_user)
@selbsterfahrungskosten_by_year = Entry.total_selbsterfahrungskosten_by_year(current_user)
@allekosten_by_year = Entry.total_semesterkosten_by_year(current_user)
# Voraussichtliches Ende je Kombination basierend auf weekly_target_matrix
@estimated_end_by_typ_art = {}
@remaining_minutes_matrix.each do |typ, arts|
@estimated_end_by_typ_art[typ] ||= {}
arts.each do |art, remaining_minutes|
hours_remaining = remaining_minutes / 60.0
weekly_hours = current_user.weekly_target_matrix.dig(typ, art).to_f
if weekly_hours > 0
weeks_remaining = (hours_remaining / weekly_hours).ceil
@estimated_end_by_typ_art[typ][art] = Date.today + weeks_remaining.weeks
else
@estimated_end_by_typ_art[typ][art] = nil
end
end
end
end
def new
@entry = current_user.entries.build
end
def create
@entry = current_user.entries.build(entry_params)
if @entry.save
redirect_to entries_path, notice: "Eintrag gespeichert"
else
render :new
end
end
def edit;
@entry
end
def update
if @entry.update(entry_params)
redirect_to entries_path, notice: "Eintrag aktualisiert"
else
render :edit
end
end
def destroy
@entry.destroy
redirect_to entries_path, notice: "Eintrag gelöscht"
end
def export_csv
@entries = current_user.entries.order(date: :desc)
respond_to do |format|
format.csv { send_data @entries.to_csv, filename: "eintraege-#{Date.today}.csv" }
end
end
private
def set_entry
@entry = current_user.entries.find(params[:id])
end
def entry_params
params.require(:entry).permit(
:date,
:hours,
:minutes,
:praktikums_typ,
:entry_art,
:distance_km,
:beschreibung,
:kosten
)
end
before_action :authenticate_user!
before_action :set_entry, only: %i[edit update destroy]
def index
@entries = current_user.entries.order(date: :desc)
# Gesamtzeit in Minuten
@total_minutes = @entries.sum { |e| e.hours.to_i * 60 + e.minutes.to_i }
# Gesamtbetrag der Kilometerpauschale
@total_kilometer_pauschale = @entries.sum(&:kilometer_pauschale)
# Zeitverbrauch je Kombination (typ + art)
@time_by_typ_art = @entries.group_by(&:praktikums_typ).transform_values do |group|
group.group_by(&:entry_art).transform_values do |entries|
entries.sum { |e| e.hours.to_i * 60 + e.minutes.to_i }
end
end
# Verbleibende Minuten je Kombination
@remaining_minutes_matrix = {}
@time_by_typ_art.each do |typ, arts|
@remaining_minutes_matrix[typ] ||= {}
arts.each do |art, spent_minutes|
target = current_user.required_hours_matrix.dig(typ, art).to_i * 60
remaining = [target - spent_minutes, 0].max
@remaining_minutes_matrix[typ][art] = remaining
end
end
@total_kilometer_costs_by_year = Entry.total_kilometer_cost_by_year(current_user)
@fortbildungskosten_by_year = Entry.total_fortbildungskosten_by_year(current_user)
@selbstsupervision_by_year = Entry.total_selbsterfahrungskosten_by_year(current_user)
@selbsterfahrungskosten_by_year = Entry.total_selbsterfahrungskosten_by_year(current_user)
@allekosten_by_year = Entry.total_semesterkosten_by_year(current_user)
# Voraussichtliches Ende je Kombination basierend auf weekly_target_matrix
#
@estimated_end_by_typ_art = {}
@remaining_minutes_matrix.each do |typ, arts|
@estimated_end_by_typ_art[typ] ||= {}
arts.each do |art, remaining_minutes|
hours_remaining = remaining_minutes / 60.0
weekly_hours = current_user.weekly_target_matrix.dig(typ, art).to_f
if weekly_hours > 0
weeks_remaining = (hours_remaining / weekly_hours).ceil
@estimated_end_by_typ_art[typ][art] = Date.today + weeks_remaining.weeks
else
@estimated_end_by_typ_art[typ][art] = nil
end
end
end
end
def new
@entry = current_user.entries.build
end
def create
@entry = current_user.entries.build(entry_params)
if @entry.save
redirect_to entries_path, notice: "Eintrag gespeichert"
else
render :new
end
end
def edit
@entry
end
def update
if @entry.update(entry_params)
redirect_to entries_path, notice: "Eintrag aktualisiert"
else
render :edit
end
end
def destroy
@entry.destroy
redirect_to entries_path, notice: "Eintrag gelöscht"
end
def export_csv
@entries = current_user.entries.order(date: :desc)
respond_to do |format|
format.csv { send_data @entries.to_csv, filename: "eintraege-#{Date.today}.csv" }
end
end
private
def set_entry
@entry = current_user.entries.find(params[:id])
end
def entry_params
params.require(:entry).permit(
:date,
:hours,
:minutes,
:praktikums_typ,
:entry_art,
:distance_km,
:beschreibung,
:kosten
)
end
end
Loading…
Cancel
Save