From a6dfbb87382265557fbbe0b51bb1d5d59a3e3cd5 Mon Sep 17 00:00:00 2001 From: Christoph Marzell Date: Tue, 18 Nov 2025 09:29:10 +0100 Subject: [PATCH] add flag to count as fortbildung --- app/controllers/entries_controller.rb | 3 ++- app/models/entry.rb | 16 ++++++----- app/views/entries/_form.html.erb | 9 +++++++ app/views/entries/index.html.erb | 5 +++- ...3_add_zaehlt_als_fortbildung_to_entries.rb | 5 ++++ db/schema.rb | 3 ++- test_mail.rb | 27 +++++++++++++++++++ 7 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 db/migrate/20251118081233_add_zaehlt_als_fortbildung_to_entries.rb create mode 100644 test_mail.rb diff --git a/app/controllers/entries_controller.rb b/app/controllers/entries_controller.rb index e1ee5f6..1e6fb76 100644 --- a/app/controllers/entries_controller.rb +++ b/app/controllers/entries_controller.rb @@ -174,7 +174,8 @@ class EntriesController < ApplicationController :entry_art, :distance_km, :beschreibung, - :kosten + :kosten, + :zaehlt_als_fortbildung ) end diff --git a/app/models/entry.rb b/app/models/entry.rb index ef6abb6..2210eb4 100644 --- a/app/models/entry.rb +++ b/app/models/entry.rb @@ -40,12 +40,16 @@ class Entry < ApplicationRecord end def self.total_fortbildungskosten_by_year(user) - where(user: user, entry_art: 'Fortbildung') - .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 + where(user: user) + .where.not(kosten: nil) + .where( + Entry.arel_table[:entry_art].eq('Fortbildung') + .or(Entry.arel_table[:zaehlt_als_fortbildung].eq(true)) + ) + .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) diff --git a/app/views/entries/_form.html.erb b/app/views/entries/_form.html.erb index b94d96f..8e9ca66 100644 --- a/app/views/entries/_form.html.erb +++ b/app/views/entries/_form.html.erb @@ -122,6 +122,15 @@ <%= form.label :kosten, 'Kosten (z. B. Teilnahmegebühr)', class: 'form-label' %> <%= form.number_field :kosten, class: 'form-control', min: 0, step: 0.01 %> +
+
+
+ <%= form.check_box :zaehlt_als_fortbildung, class: "form-check-input" %> + <%= form.label :zaehlt_als_fortbildung, "Zählt als Fortbildung", class: "form-check-label" %> +
+
+
+ diff --git a/app/views/entries/index.html.erb b/app/views/entries/index.html.erb index a940dac..149e801 100644 --- a/app/views/entries/index.html.erb +++ b/app/views/entries/index.html.erb @@ -182,6 +182,7 @@ Kilometer Pauschale Kosten + Zählt als Fortbildung Aktionen @@ -209,7 +210,9 @@ <%= number_to_currency(entry.kosten, unit: "€", separator: ",", delimiter: ".") %> - + + <%= check_box_tag "fortbildung_#{entry.id}", '1', entry.zaehlt_als_fortbildung, disabled: true %> +
<%= link_to 'Bearbeiten', edit_entry_path(entry), class: 'btn btn-sm btn-outline-primary' %> diff --git a/db/migrate/20251118081233_add_zaehlt_als_fortbildung_to_entries.rb b/db/migrate/20251118081233_add_zaehlt_als_fortbildung_to_entries.rb new file mode 100644 index 0000000..0489bbd --- /dev/null +++ b/db/migrate/20251118081233_add_zaehlt_als_fortbildung_to_entries.rb @@ -0,0 +1,5 @@ +class AddZaehltAlsFortbildungToEntries < ActiveRecord::Migration[7.1] + def change + add_column :entries, :zaehlt_als_fortbildung, :boolean, default: false, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index a7847db..976d247 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2025_11_18_075147) do +ActiveRecord::Schema[7.1].define(version: 2025_11_18_081233) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -29,6 +29,7 @@ ActiveRecord::Schema[7.1].define(version: 2025_11_18_075147) do t.datetime "start_time" t.datetime "end_time" t.integer "lunch_break_minutes", default: 0 + t.boolean "zaehlt_als_fortbildung", default: false, null: false t.index ["user_id"], name: "index_entries_on_user_id" end diff --git a/test_mail.rb b/test_mail.rb new file mode 100644 index 0000000..c9b9d73 --- /dev/null +++ b/test_mail.rb @@ -0,0 +1,27 @@ +require 'mail' + +Mail.defaults do + delivery_method :smtp, { + address: "smtp.ionos.de", + port: 587, + domain: "marzell.net", + :user_name => 'praktikum@marzell.net', + :password => 'CSSABXGRhSzUFK9', + authentication: "plain", + enable_starttls_auto: true + } +end + +mail = Mail.new do + from 'praktikum@marzell.net' + to 'christoph@marzell.net' + subject 'Testmail von Ruby SMTP' + body 'Hallo! Dies ist ein SMTP-Test direkt aus Ruby.' +end + +begin + mail.deliver! + puts "✅ Mail wurde erfolgreich gesendet!" +rescue => e + puts "❌ Fehler beim Senden: #{e.message}" +end