diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb new file mode 100644 index 0000000..aa8f360 --- /dev/null +++ b/app/controllers/dashboards_controller.rb @@ -0,0 +1,29 @@ +# app/controllers/dashboards_controller.rb +class DashboardsController < ApplicationController + def show + @entries = current_user.entries.order(date: :desc) + + valid_entries = @entries.select { |e| e.date.present? } + + @report = valid_entries.group_by { |e| e.date.beginning_of_month } + .transform_values do |entries| + entries.group_by { |e| [e.praktikums_typ, e.entry_art] } + .transform_values do |subset| + minutes = subset.sum(&:total_minutes) + { hours: minutes / 60, minutes: minutes % 60 } + end + end + + @monthly_minutes_chart_data = @report.transform_keys { |date| date.strftime("%b") } + .transform_values do |groups| + groups.values.sum { |data| data[:hours] * 60 + data[:minutes] } + end + + @monthly_targets = Hash.new(1500) # z.B. 25h im Monat als Ziel → 1500min + + @total_minutes = @entries.sum(&:total_minutes) + @last_entry = @entries.first + @completed_percent = ((@total_minutes.to_f / 10000) * 100).round(1) + @remaining_total = [10000 - @total_minutes, 0].max + end +end diff --git a/app/views/dashboards/_summary_tiles.html.erb b/app/views/dashboards/_summary_tiles.html.erb new file mode 100644 index 0000000..79ca1b8 --- /dev/null +++ b/app/views/dashboards/_summary_tiles.html.erb @@ -0,0 +1,36 @@ + +
<%= @total_minutes / 60 %>h <%= @total_minutes % 60 %>min
+<%= @remaining_total / 60 %>h
+<%= @completed_percent %>%
+<%= l(@last_entry.date, format: :long) if @last_entry %>
+⏱️ <%= total_hours %>h <%= rest_min %>min
+🎯 Ziel: <%= @monthly_targets[month] / 60 %>h
+