You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.2 KiB
124 lines
4.2 KiB
<h1>Meine Einträge</h1>
|
|
|
|
<% if notice %>
|
|
<p class="alert alert-success"><%= notice %></p>
|
|
<% end %>
|
|
|
|
<!-- 🔢 Zusammenfassung -->
|
|
<div class="mb-3">
|
|
<p><strong>Gesamtzeit:</strong> <%= @total_minutes / 60 %> h <%= @total_minutes % 60 %> min</p>
|
|
<p><strong>Fahrtkosten gesamt:</strong>
|
|
<%= number_to_currency(@total_kilometer_pauschale, unit: "€", separator: ",", delimiter: ".") %>
|
|
</p>
|
|
|
|
<hr>
|
|
|
|
<h4 class="mt-4">📊 Übersicht je Kombination</h4>
|
|
|
|
<table class="table table-bordered table-sm table-striped">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th>Typ</th>
|
|
<th>Art</th>
|
|
<th>Verbleibend</th>
|
|
<th>Soll (h)</th>
|
|
<th>Wöchentlich</th>
|
|
<th>Vorauss. Ende</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<% ["propädeutikum", "fachspezifikum"].each do |typ| %>
|
|
<% ["Praktikum", "Selbsterfahrung", "Supervision"].each do |art| %>
|
|
<% remaining = @remaining_minutes_matrix.dig(typ, art) %>
|
|
<% soll = current_user.required_hours_matrix.dig(typ, art) %>
|
|
<% weekly = current_user.weekly_target_matrix.dig(typ, art) %>
|
|
<% ende = @estimated_end_by_typ_art.dig(typ, art) %>
|
|
|
|
<% if remaining.present? || soll.present? || weekly.present? %>
|
|
<tr>
|
|
<td><%= typ.capitalize %></td>
|
|
<td><%= art %></td>
|
|
<td><%= remaining ? "#{remaining / 60} h #{remaining % 60} min" : "—" %></td>
|
|
<td><%= soll || "—" %> h</td>
|
|
<td><%= weekly || "—" %> h/Woche</td>
|
|
<td><%= ende.present? ? ende.strftime("%d.%m.%Y") : "—" %></td>
|
|
</tr>
|
|
<% end %>
|
|
<% end %>
|
|
<% end %>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
|
|
<%= link_to '➕ Neuer Eintrag', new_entry_path, class: 'btn btn-light mt-3' %>
|
|
</div>
|
|
|
|
<!-- 📋 Tabelle -->
|
|
<table class="table table-striped table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Datum</th>
|
|
<th>Zeit</th>
|
|
<th>Typ</th>
|
|
<th>Art</th>
|
|
<th>Kilometer</th>
|
|
<th>Pauschale</th>
|
|
<th>Aktionen</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<% @entries.each do |entry| %>
|
|
<tr>
|
|
<td><%= entry.date.strftime('%d.%m.%Y') %></td>
|
|
<td><%= entry.hours.to_i %>h <%= entry.minutes.to_i %>min</td>
|
|
<td><%= entry.praktikums_typ %></td>
|
|
<td><%= entry.entry_art %></td>
|
|
<td><%= entry.distance_km.to_f %> km</td>
|
|
<td><%= number_to_currency(entry.kilometer_pauschale, unit: "€", separator: ",", delimiter: ".") %></td>
|
|
<td>
|
|
<%= link_to '✏️ Bearbeiten', edit_entry_path(entry), class: 'btn btn-sm btn-primary' %>
|
|
<%= link_to '🗑️ Löschen', entry_path(entry), class: 'btn btn-sm btn-danger open-delete-modal' %>
|
|
</td>
|
|
</tr>
|
|
<% end %>
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- 🔒 Modal zur Bestätigung -->
|
|
<div class="modal fade" id="deleteConfirmModal" tabindex="-1" aria-labelledby="deleteConfirmModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog modal-dialog-centered">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">Löschen bestätigen</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Schließen"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
Bist du sicher, dass du diesen Eintrag löschen möchtest?
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Abbrechen</button>
|
|
<form id="modal-delete-form" method="post">
|
|
<input type="hidden" name="_method" value="delete">
|
|
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
|
|
<button type="submit" class="btn btn-danger">Löschen</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- JS für Modal -->
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
document.querySelectorAll('.open-delete-modal').forEach(button => {
|
|
button.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
const targetUrl = this.getAttribute('href');
|
|
document.getElementById('modal-delete-form').setAttribute('action', targetUrl);
|
|
const modal = new bootstrap.Modal(document.getElementById('deleteConfirmModal'));
|
|
modal.show();
|
|
});
|
|
});
|
|
});
|
|
</script>
|