Browse Source

minro stlye fixes

main
Christoph Marzell 1 month ago
parent
commit
aed2b9895e
  1. 153
      app/views/entries/_form.html.erb
  2. 26
      app/views/entries/monthly_report.html.erb

153
app/views/entries/_form.html.erb

@ -1,19 +1,30 @@
<div class="mb-4">
<!-- Zeiteingabe-Karte -->
<div class="card mb-4 shadow-sm">
<div class="card-body">
<h5 class="card-title">⏱️ Zeitberechnung</h5>
<div class="mb-3">
<label for="minute-inputs" class="form-label">Minuteneinträge (z. B. 45, 60, 30):</label> <label for="minute-inputs" class="form-label">Minuteneinträge (z. B. 45, 60, 30):</label>
<textarea id="minute-inputs" class="form-control" rows="3"></textarea>
<button id="sum-button" class="btn btn-primary mt-2">Summieren</button>
<textarea id="minute-inputs" class="form-control" rows="2" placeholder="Trenne mit Komma, Leertaste oder Zeilenumbruch"></textarea>
</div>
<div class="d-flex justify-content-between align-items-center flex-wrap">
<button id="sum-button" class="btn btn-outline-primary">➕ Summieren</button>
<p class="mb-0 mt-2 mt-md-0">
<strong>Gesamt:</strong> <span id="total-time">0h 0min</span> (<span id="total-minutes">0min</span>)
</p>
</div>
</div> </div>
<div class="mb-4">
<p>Gesamtsumme: <strong><span id="total-time">0h 0min</span></strong> (<span id="total-minutes">0min</span>)</p>
</div> </div>
<!-- Rails-Formular als Karte -->
<div class="card shadow-sm">
<div class="card-body">
<h5 class="card-title">📋 Eintrag erstellen</h5>
<%= form_with(model: entry, local: true) do |form| %> <%= form_with(model: entry, local: true) do |form| %>
<% if entry.errors.any? %> <% if entry.errors.any? %>
<div class="alert alert-danger"> <div class="alert alert-danger">
<h4><%= pluralize(entry.errors.count, "Fehler") %> verhinderten das Speichern:</h4>
<h5><%= pluralize(entry.errors.count, "Fehler") %> verhinderten das Speichern:</h5>
<ul> <ul>
<% entry.errors.full_messages.each do |msg| %> <% entry.errors.full_messages.each do |msg| %>
<li><%= msg %></li> <li><%= msg %></li>
@ -22,125 +33,99 @@
</div> </div>
<% end %> <% end %>
<!-- Erste Zeile: Datum, Stunden, Minuten -->
<div class="row g-3 mt-1">
<div class="col-12 col-md-4">
<%= form.label :date, 'Datum', class: 'form-label' %>
<%= form.date_field :date,
class: 'form-control flatpickr',
data: {
enable_time: false,
altInput: true,
altFormat: 'd.m.Y',
dateFormat: 'Y-m-d' # Wichtig: Flatpickr braucht `dateFormat`
},
value: (form.object.date) %>
<div class="row g-3">
<div class="col-md-4">
<%= form.label :date, '📅 Datum', class: 'form-label' %>
<%= form.date_field :date, class: 'form-control flatpickr', data: {
enable_time: false, altInput: true,
altFormat: 'd.m.Y', dateFormat: 'Y-m-d'
}, value: form.object.date %>
</div> </div>
<div class="col-12 col-md-4">
<%= form.label :start_time, 'Beginn (Uhrzeit)', class: 'form-label' %>
<%= form.time_field :start_time, class: 'form-control', step: 60 , discard_month: true, discard_day: true, discard_seconds: true, value: @entry.start_time&.strftime("%H:%M") %>
<div class="col-md-4">
<%= form.label :start_time, '🕒 Beginn', class: 'form-label' %>
<%= form.time_field :start_time, class: 'form-control', step: 60,
value: @entry.start_time&.strftime("%H:%M") %>
</div> </div>
<div class="col-12 col-md-4">
<%= form.label :end_time, 'Ende (Uhrzeit)', class: 'form-label' %>
<%= form.time_field :end_time, class: 'form-control', step: 60 , discard_month: true, discard_day: true, discard_seconds: true, value: @entry.end_time&.strftime("%H:%M") %>
<div class="col-md-4">
<%= form.label :end_time, '🕓 Ende', class: 'form-label' %>
<%= form.time_field :end_time, class: 'form-control', step: 60,
value: @entry.end_time&.strftime("%H:%M") %>
</div> </div>
<div class="col-12 col-md-4">
<%= form.label :hours, 'Stunden', class: 'form-label' %>
<%= form.number_field :hours,
class: 'form-control',
min: 0,
<div class="col-md-4">
<%= form.label :hours, '⏳ Stunden', class: 'form-label' %>
<%= form.number_field :hours, class: 'form-control', min: 0,
value: form.object.hours || 0 %> value: form.object.hours || 0 %>
</div> </div>
<div class="col-12 col-md-4">
<%= form.label :minutes, 'Minuten', class: 'form-label' %>
<%= form.number_field :minutes,
class: 'form-control',
min: 0, max: 59,
<div class="col-md-4">
<%= form.label :minutes, '⏱ Minuten', class: 'form-label' %>
<%= form.number_field :minutes, class: 'form-control', min: 0, max: 59,
value: form.object.minutes || 0 %> value: form.object.minutes || 0 %>
</div> </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">
<div class="col-md-4 d-flex align-items-end">
<div class="form-check">
<%= form.check_box :has_break, { class: 'form-check-input', id: 'entry_has_break' }, true, false %> <%= form.check_box :has_break, { class: 'form-check-input', id: 'entry_has_break' }, true, false %>
<%= form.label :has_break, '30 Min. Mittagspause abziehen', class: 'form-check-label ms-2' %>
<%= form.label :has_break, '🧘 30 Min. Mittagspause abziehen', class: 'form-check-label ms-2' %>
</div> </div>
</div> </div>
</div> </div>
<div class="mt-3">
<p><strong>🧮 Berechnet:</strong> <span id="calculated-total-minutes">0 min</span></p>
</div> </div>
<hr>
<div class="col-12 col-md-4 d-flex align-items-end">
<p class="mb-0"><strong>Gesamt:</strong> <span id="calculated-total-minutes">0 min</span></p>
</div>
<!-- Weitere Felder: Typ, Art, Entfernung -->
<div class="row g-3 mt-1">
<div class="col-12">
<%= form.label :praktikums_typ, 'Praktikumstyp', class: 'form-label' %>
<div class="row g-3 mt-2">
<div class="col-md-6">
<%= form.label :praktikums_typ, '🔧 Praktikumstyp', class: 'form-label' %>
<%= form.select :praktikums_typ, <%= form.select :praktikums_typ,
current_user.praepedeutikum_abgeschlossen? ? current_user.praepedeutikum_abgeschlossen? ?
Entry::PRAKTIKUMSTYPEN.reject { |typ| typ == 'propädeutikum' } : Entry::PRAKTIKUMSTYPEN.reject { |typ| typ == 'propädeutikum' } :
Entry::PRAKTIKUMSTYPEN, Entry::PRAKTIKUMSTYPEN,
{},
class: 'form-select' %>
{}, class: 'form-select' %>
</div> </div>
<div class="col-12">
<%= form.label :entry_art, 'Art', class: 'form-label' %>
<div class="col-md-6">
<%= form.label :entry_art, '📚 Art', class: 'form-label' %>
<%= form.select :entry_art, Entry::ENTRY_ARTEN, {}, class: 'form-select', id: 'entry_art_select' %> <%= form.select :entry_art, Entry::ENTRY_ARTEN, {}, class: 'form-select', id: 'entry_art_select' %>
</div> </div>
<div class="col-12">
<%= form.label :distance_km, 'Entfernung (km) Gesamt', class: 'form-label' %>
<%= form.number_field :distance_km,
class: 'form-control',
min: 0,
value: form.object.distance_km || 0 %>
<div class="col-md-6">
<%= form.label :distance_km, '🚗 Entfernung (km)', class: 'form-label' %>
<%= form.number_field :distance_km, class: 'form-control', min: 0, value: form.object.distance_km || 0 %>
</div> </div>
<div class="col-12 col-md-4">
<%= form.label :beschreibung, 'Beschreibung', class: 'form-label' %>
<div class="col-md-6">
<%= form.label :beschreibung, '📝 Beschreibung', class: 'form-label' %>
<%= form.text_field :beschreibung, class: 'form-control' %> <%= form.text_field :beschreibung, class: 'form-control' %>
</div> </div>
<div class="col-12 col-md-4">
<%= form.label :kosten, 'Kosten (z. B. Teilnahmegebühr)', class: 'form-label' %>
<div class="col-md-6">
<%= form.label :kosten, '💸 Kosten', class: 'form-label' %>
<%= form.number_field :kosten, class: 'form-control', min: 0, step: 0.01 %> <%= form.number_field :kosten, class: 'form-control', min: 0, step: 0.01 %>
</div> </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">
<div class="col-md-6 d-flex align-items-end">
<div class="form-check">
<%= form.check_box :zaehlt_als_fortbildung, class: "form-check-input" %> <%= form.check_box :zaehlt_als_fortbildung, class: "form-check-input" %>
<%= form.label :zaehlt_als_fortbildung, "Zählt als Fortbildung", class: "form-check-label" %>
</div>
<%= form.label :zaehlt_als_fortbildung, "🎓 Zählt als Fortbildung", class: "form-check-label" %>
</div> </div>
</div> </div>
</div> </div>
<!-- Buttons -->
<div class="mt-4">
<%= form.submit 'Speichern', class: 'btn btn-primary' %>
<%= link_to 'Zurück', entries_path, class: 'btn btn-secondary ms-2' %>
<div class="mt-4 text-end">
<%= form.submit '💾 Speichern', class: 'btn btn-success' %>
<%= link_to '🔙 Zurück', entries_path, class: 'btn btn-outline-secondary ms-2' %>
</div> </div>
<% end %> <% end %>
</div>
</div>
<script> <script>
document.addEventListener("DOMContentLoaded", function () { document.addEventListener("DOMContentLoaded", function () {
const entryArtSelect = document.getElementById("entry_art_select"); const entryArtSelect = document.getElementById("entry_art_select");

26
app/views/entries/monthly_report.html.erb

@ -1,18 +1,24 @@
<h1 class="mb‑4">Monats‑Report</h1>
<h1 class="mb-4 display-6">📆 Monats-Report</h1>
<% @report.each do |month, groups| %> <% @report.each do |month, groups| %>
<% is_current_month = month.month == Date.today.month && month.year == Date.today.year %> <% is_current_month = month.month == Date.today.month && month.year == Date.today.year %>
<div class="card mb‑4 mt-4 <%= 'bg-secondary text-white' if is_current_month %> <%= "style=\"opacity:7.0;\"" if is_current_month %>" >
<div class="card-header">
<div class="card shadow-sm mb-4 overflow-hidden <%= 'bg-light border-primary' if is_current_month %>" style="border-radius: .75rem;">
<div class="card-header d-flex justify-content-between align-items-center bg-white" style="border-bottom: 1px solid #dee2e6;">
<strong><%= month.strftime("%B %Y") %></strong> <strong><%= month.strftime("%B %Y") %></strong>
<% if is_current_month %>
<span class="badge bg-primary" title="Aktueller Monat">🌟 Aktuell</span>
<% end %>
</div> </div>
<div class="card-body">
<table class="table table‑sm table‑bordered table-stripe">
<thead>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-hover table-bordered mb-0 text-center align-middle" style="border-radius: 0 !important;">
<thead class="table-light">
<tr> <tr>
<th style="width: 33%">Typ</th>
<th style="width: 33%">Art</th>
<th style="width: 33%">Gesamtzeit</th>
<th style="width: 33%">📌 Typ</th>
<th style="width: 33%">📂 Art</th>
<th style="width: 33%">⏱️ Gesamtzeit</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -27,4 +33,6 @@
</table> </table>
</div> </div>
</div> </div>
</div>
<% end %> <% end %>
Loading…
Cancel
Save