From e401ac2074d4c710768a6f7021dcbcc69a0c6145 Mon Sep 17 00:00:00 2001 From: Christoph Marzell Date: Sun, 9 Nov 2025 10:05:27 +0100 Subject: [PATCH] add infos --- app/controllers/entries_controller.rb | 3 +- app/models/entry.rb | 20 +++++- app/views/entries/index.html.erb | 92 ++++++++++++++++++++------- 3 files changed, 90 insertions(+), 25 deletions(-) diff --git a/app/controllers/entries_controller.rb b/app/controllers/entries_controller.rb index b18c4a4..825ed12 100644 --- a/app/controllers/entries_controller.rb +++ b/app/controllers/entries_controller.rb @@ -37,8 +37,9 @@ class EntriesController < ApplicationController 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| diff --git a/app/models/entry.rb b/app/models/entry.rb index 419df05..531f54a 100644 --- a/app/models/entry.rb +++ b/app/models/entry.rb @@ -12,12 +12,18 @@ class Entry < ApplicationRecord before_save :normalize_time PRAKTIKUMSTYPEN = %w[propädeutikum fachspezifikum] - ENTRY_ARTEN = %w[Praktikum Selbsterfahrung Supervision Fortbildung] + ENTRY_ARTEN = %w[Praktikum Selbsterfahrung Supervision Fortbildung Semesterkosten] 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 } + after_initialize :set_default_date, if: :new_record? + + def set_default_date + self.date ||= Date.today + end + def kilometer_pauschale return 0 unless distance_km.present? distance_km * 0.42 @@ -35,6 +41,18 @@ class Entry < ApplicationRecord .transform_values { |entries| entries.sum { |e| e.kosten.to_f } } 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 } } + 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 } } + end + def jahr date.year end diff --git a/app/views/entries/index.html.erb b/app/views/entries/index.html.erb index 382f982..9c61a0e 100644 --- a/app/views/entries/index.html.erb +++ b/app/views/entries/index.html.erb @@ -1,32 +1,65 @@
- - -

Meine Einträge

-
🚗 Fahrtkosten (Kilometergeld)
- <% @total_kilometer_costs_by_year.each do |year, sum| %> -

<%= year %>: - <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %> -

- <% end %> +
+ +
+
🚗 Fahrtkosten (Kilometergeld)
+ <% @total_kilometer_costs_by_year.each do |year, sum| %> +

<%= year %>: + <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %> +

+ <% end %> +
+ + +
+
💶 Fortbildungskosten
+ <% @fortbildungskosten_by_year.each do |year, sum| %> +

<%= year %>: + <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %> +

+ <% end %> +
+ +
+
🧠 Selbsterfahrungskosten
+ <% @selbsterfahrungskosten_by_year.each do |year, sum| %> +

<%= year %>: + <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %> +

+ <% end %> +
-
💶 Fortbildungskosten
- <% @fortbildungskosten_by_year.each do |year, sum| %> -

<%= year %>: <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %>

- <% end %> +
+
👨‍🏫 Supervision
+ <% @selbstsupervision_by_year.each do |year, sum| %> +

<%= year %>: + <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %> +

+ <% end %> +
-
💭 Selbsterfahrungskosten
- <% @selbsterfahrungskosten_by_year.each do |year, sum| %> -

<%= year %>: <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %>

- <% end %> +
+
📊 Gesamtkosten
+ <% @allekosten_by_year.each do |year, sum| %> +

<%= year %>: + <%= number_to_currency(sum, unit: "€", separator: ",", delimiter: ".", precision: 2) %> +

+ <% end %> +
+
+
🕒 Gesamtzeit
+

<%= @total_minutes / 60 %> h <%= @total_minutes % 60 %> min

+
-

Gesamtzeit: <%= @total_minutes / 60 %> h <%= @total_minutes % 60 %> min

+
+

📊 Übersicht je Kombination

@@ -75,7 +108,7 @@
-
+

📋 Einträge

@@ -86,7 +119,7 @@ - + @@ -96,16 +129,29 @@ - + + <% end %>
Typ Art KilometerPauschale
Pauschale
Kosten
Aktionen
<%= entry.date.strftime('%d.%m.%Y') %> <%= entry.hours.to_i %>h <%= entry.minutes.to_i %>min - <%= entry.entry_art == "Fortbildung" ? "Fortbildung" : entry.praktikums_typ.capitalize %> + <%= ["Fortbildung", "Semesterkosten"].include?(entry.entry_art) ? entry.entry_art : entry.praktikums_typ.capitalize %> - <%= entry.entry_art == "Fortbildung" ? entry.beschreibung : entry.entry_art.capitalize %> + <%= ["Fortbildung", "Semesterkosten"].include?(entry.entry_art) ? entry.beschreibung : entry.entry_art.capitalize %> <%= entry.distance_km.to_f %> km<%= number_to_currency(entry.kilometer_pauschale, unit: "€", separator: ",", delimiter: ".") %> +
+ <% if entry.kilometer_pauschale.present? %> +
<%= number_to_currency(entry.kilometer_pauschale, unit: "€", separator: ",", delimiter: ".") %>
+ <% end %> + + <% if entry.kosten.present? %> +
<%= number_to_currency(entry.kosten, unit: "€", separator: ",", delimiter: ".") %>
+ <% end %> +
+
+
<%= link_to 'Bearbeiten', edit_entry_path(entry), class: 'btn btn-sm btn-outline-primary' %> <%= link_to 'Löschen', entry_path(entry), class: 'btn btn-sm btn-outline-danger open-delete-modal' %> +