Browse Source

add flag to count as fortbildung

main
Christoph Marzell 3 weeks ago
parent
commit
a6dfbb8738
  1. 3
      app/controllers/entries_controller.rb
  2. 16
      app/models/entry.rb
  3. 9
      app/views/entries/_form.html.erb
  4. 5
      app/views/entries/index.html.erb
  5. 5
      db/migrate/20251118081233_add_zaehlt_als_fortbildung_to_entries.rb
  6. 3
      db/schema.rb
  7. 27
      test_mail.rb

3
app/controllers/entries_controller.rb

@ -174,7 +174,8 @@ class EntriesController < ApplicationController
:entry_art,
:distance_km,
:beschreibung,
:kosten
:kosten,
:zaehlt_als_fortbildung
)
end

16
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)

9
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 %>
</div>
<div class="col-12 col-md-4">
<div class="col-12 mt-2 d-flex justify-content-center">
<div class="form-check mt-4">
<%= form.check_box :zaehlt_als_fortbildung, class: "form-check-input" %>
<%= form.label :zaehlt_als_fortbildung, "Zählt als Fortbildung", class: "form-check-label" %>
</div>
</div>
</div>
</div>

5
app/views/entries/index.html.erb

@ -182,6 +182,7 @@
<th data-sort-index="5" class="sortable">Kilometer</th>
<th data-sort-index="6" class="sortable">Pauschale</th>
<th data-sort-index="7" class="sortable">Kosten</th>
<th data-sort-index="8" class="sortable">Zählt als Fortbildung</th>
<th>Aktionen</th>
</tr>
</thead>
@ -209,7 +210,9 @@
<td>
<%= number_to_currency(entry.kosten, unit: "€", separator: ",", delimiter: ".") %>
</td>
<td class="text-center">
<%= check_box_tag "fortbildung_#{entry.id}", '1', entry.zaehlt_als_fortbildung, disabled: true %>
</td>
<td class="text-end">
<div class="d-flex justify-content-between">
<%= link_to 'Bearbeiten', edit_entry_path(entry), class: 'btn btn-sm btn-outline-primary' %>

5
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

3
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

27
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
Loading…
Cancel
Save