finetuning

This commit is contained in:
Jottyfan 2022-10-20 21:44:57 +02:00
parent 8344186ad2
commit 230cbc5d00
14 changed files with 216 additions and 108 deletions

View File

@ -18,7 +18,7 @@ apply plugin: 'war'
apply plugin: 'application' apply plugin: 'application'
group = 'de.jottyfan.camporganizer' group = 'de.jottyfan.camporganizer'
version = '0.0.6' version = '0.0.7'
sourceCompatibility = 17 sourceCompatibility = 17
mainClassName = "de.jottyfan.camporganizer.Main" mainClassName = "de.jottyfan.camporganizer.Main"

View File

@ -21,6 +21,7 @@ public class BookerBean implements Serializable {
private BigDecimal paid; private BigDecimal paid;
private String camp; private String camp;
private String price; private String price;
private Integer campId;
/** /**
* @return the accept * @return the accept
@ -117,4 +118,12 @@ public class BookerBean implements Serializable {
public void setPrice(String price) { public void setPrice(String price) {
this.price = price; this.price = price;
} }
public Integer getCampId() {
return campId;
}
public void setCampId(Integer campId) {
this.campId = campId;
}
} }

View File

@ -15,7 +15,7 @@ import org.apache.logging.log4j.Logger;
import org.jooq.DSLContext; import org.jooq.DSLContext;
import org.jooq.Record; import org.jooq.Record;
import org.jooq.Record10; import org.jooq.Record10;
import org.jooq.Record11; import org.jooq.Record12;
import org.jooq.SelectConditionStep; import org.jooq.SelectConditionStep;
import org.jooq.SelectSeekStep4; import org.jooq.SelectSeekStep4;
import org.jooq.UpdateConditionStep; import org.jooq.UpdateConditionStep;
@ -89,9 +89,9 @@ public class BookingsGateway {
* @return the booker bean or null * @return the booker bean or null
*/ */
public BookerBean getBooking(Integer id, String username) { public BookerBean getBooking(Integer id, String username) {
SelectConditionStep<Record11<Integer, Boolean, BigDecimal, String, String, EnumCamprole, EnumSex, LocalDateTime, String, Double, String>> sql = jooq SelectConditionStep<Record12<Integer, Boolean, BigDecimal, String, String, EnumCamprole, EnumSex, LocalDateTime, String, Double, String, Integer>> sql = jooq
// @formatter:off // @formatter:off
.select(T_PERSON.PK, T_PERSON.ACCEPT, T_PERSON.PAID, T_PERSON.FORENAME, T_PERSON.SURNAME, T_PERSON.CAMPROLE, T_PERSON.SEX, T_PERSON.CREATED, V_CAMP.NAME, V_CAMP.YEAR, V_CAMP.PRICE) .select(T_PERSON.PK, T_PERSON.ACCEPT, T_PERSON.PAID, T_PERSON.FORENAME, T_PERSON.SURNAME, T_PERSON.CAMPROLE, T_PERSON.SEX, T_PERSON.CREATED, V_CAMP.NAME, V_CAMP.YEAR, V_CAMP.PRICE, V_CAMP.PK)
.from(T_PERSON) .from(T_PERSON)
.leftJoin(V_CAMP).on(V_CAMP.PK.eq(T_PERSON.FK_CAMP)) .leftJoin(V_CAMP).on(V_CAMP.PK.eq(T_PERSON.FK_CAMP))
.leftJoin(T_SALESPROFILE).on(T_SALESPROFILE.FK_CAMP.eq(T_PERSON.FK_CAMP)) .leftJoin(T_SALESPROFILE).on(T_SALESPROFILE.FK_CAMP.eq(T_PERSON.FK_CAMP))
@ -110,6 +110,7 @@ public class BookingsGateway {
EnumSex sex = r.get(T_PERSON.SEX); EnumSex sex = r.get(T_PERSON.SEX);
String campName = r.get(V_CAMP.NAME); String campName = r.get(V_CAMP.NAME);
Double campYear = r.get(V_CAMP.YEAR); Double campYear = r.get(V_CAMP.YEAR);
Integer campId = r.get(V_CAMP.PK);
BookerBean bean = new BookerBean(); BookerBean bean = new BookerBean();
bean.setPk(r.get(T_PERSON.PK)); bean.setPk(r.get(T_PERSON.PK));
bean.setName(String.format("%s %s", forename, surname)); bean.setName(String.format("%s %s", forename, surname));
@ -119,6 +120,7 @@ public class BookingsGateway {
bean.setAccept(r.get(T_PERSON.ACCEPT)); bean.setAccept(r.get(T_PERSON.ACCEPT));
bean.setPaid(r.get(T_PERSON.PAID)); bean.setPaid(r.get(T_PERSON.PAID));
bean.setCamp(String.format("%s %4.0f", campName, campYear)); bean.setCamp(String.format("%s %4.0f", campName, campYear));
bean.setCampId(campId);
bean.setPrice(r.get(V_CAMP.PRICE)); bean.setPrice(r.get(V_CAMP.PRICE));
return bean; return bean;
} }

View File

@ -18,6 +18,10 @@ public class ProfileBean implements Serializable {
private String username; private String username;
private LocalDateTime duedate; private LocalDateTime duedate;
public String getFullname() {
return new StringBuilder().append(forename).append(" ").append(surname).toString();
}
public String dropdown() { public String dropdown() {
StringBuilder buf = new StringBuilder(); StringBuilder buf = new StringBuilder();
buf.append(forename).append(" "); buf.append(forename).append(" ");

File diff suppressed because one or more lines are too long

View File

@ -21,8 +21,8 @@ body {
} }
.versionlink { .versionlink {
color: #333; color: #333;
text-decoration: none; text-decoration: none;
} }
.mainpage { .mainpage {
@ -57,10 +57,14 @@ body {
top: 8px; top: 8px;
} }
.middled {
vertical-align: middle;
}
.tablelink { .tablelink {
cursor: pointer; cursor: pointer;
text-decoration: none; text-decoration: none;
color: black; color: rgb(26, 95, 180);
} }
.tablelink:hover { .tablelink:hover {
@ -117,6 +121,21 @@ body {
background: rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.5);
} }
.silver-to-gray-gradient {
background-image: linear-gradient(to bottom right, lightgray, silver)
!important;
}
.menu-danger {
color: darkred;
font-weight: bolder;
}
.menu-danger:hover {
color: white;
background: red;
}
.badgetodo { .badgetodo {
border-radius: 8px; border-radius: 8px;
border: 1px solid black; border: 1px solid black;
@ -162,9 +181,27 @@ body {
cursor: not-allowed; cursor: not-allowed;
} }
.usercard { .framed {
width: 640px; padding: 8px;
background-color: rgba(255, 255, 255, 0.8) !important; margin-right: 12px;
border-radius: 6px;
min-width: 32px;
text-align: center;
}
.framed-green {
background: linear-gradient(to bottom right, lime, darkgreen);
color: white;
}
.framed-red {
background: linear-gradient(to bottom right, red, darkred);
color: white;
}
.framed-orange {
background: linear-gradient(to bottom right, orange, #bf6c06);
color: white;
} }
.nomaxwidth { .nomaxwidth {

View File

@ -7,10 +7,10 @@
</head> </head>
<body> <body>
<header> <header>
<a th:href="@{/}" class="btn btn-secondary btn-icon-silent" title="zur Hauptseite"><i class="fas fa-home"></i></a> <a th:href="@{/}" class="btn btn-secondary btn-icon-silent" title="zur Hauptseite"><i class="fas fa-home"></i></a> <a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent"
<a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent" title="zur Finanzübersicht"><i class="far fa-money-bill-alt"></i></a> title="zur Finanzübersicht"><i class="far fa-money-bill-alt"></i></a> <a th:href="@{/business/bookings}" class="btn btn-secondary btn-icon-silent" title="Buchungsübersicht"
<a th:href="@{/business/bookings}" class="btn btn-secondary btn-icon-silent" title="Buchungsübersicht" sec:authorize="hasRole('business_booking')"><i class="fas fa-users"></i></a> sec:authorize="hasRole('business_booking')"><i class="fas fa-users"></i></a> <a th:href="@{'/business/bookings/' + ${booker.pk}}" class="btn btn-secondary btn-icon-silent"
<a th:href="@{'/business/bookings/' + ${booker.pk}}" class="btn btn-secondary btn-icon-silent" title="aktualisieren"><i class="fas fa-sync"></i></a> title="aktualisieren"><i class="fas fa-sync"></i></a>
</header> </header>
<content> <content>
<div class="mainpage"> <div class="mainpage">
@ -20,7 +20,7 @@
<div class="card" style="width: 480px" sec:authorize="hasRole('business_booking')"> <div class="card" style="width: 480px" sec:authorize="hasRole('business_booking')">
<div class="card-header">Angemeldete Person</div> <div class="card-header">Angemeldete Person</div>
<div class="card-body"> <div class="card-body">
<table class="table"> <table class="table table-striped">
<tbody> <tbody>
<tr> <tr>
<th>Name</th> <th>Name</th>
@ -32,7 +32,7 @@
</tr> </tr>
<tr> <tr>
<th>Freizeit</th> <th>Freizeit</th>
<td th:text="${booker.camp}"></td> <td><a class="tablelink" th:href="@{/business/camp/{id}(id=${booker.campId})}" th:text="${booker.camp}"></a></td>
</tr> </tr>
<tr> <tr>
<th>Rolle</th> <th>Rolle</th>
@ -63,8 +63,21 @@
<div class="card" style="width: 480px" sec:authorize="hasRole('business_booking')"> <div class="card" style="width: 480px" sec:authorize="hasRole('business_booking')">
<div class="card-header">Einzahlung</div> <div class="card-header">Einzahlung</div>
<div class="card-body"> <div class="card-body">
<div class="alert alert-primary alert-dismissible fade show" role="alert">
Ein negativer Betrag kommt einer Auszahlung gleich.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Schließen"></button>
</div>
<form action="#" th:action="@{'/business/bookings/payment/' + ${booker.pk}}" th:object="${addBean}" method="post"> <form action="#" th:action="@{'/business/bookings/payment/' + ${booker.pk}}" th:object="${addBean}" method="post">
<input type="number" step="0.01" th:field="*{payment}"> <input type="submit" style="padding: 4px" value="einzahlen"> <div class="container">
<div class="row">
<div class="col-sm-8">
<input type="number" class="form-control" step="0.01" th:field="*{payment}" />
</div>
<div class="col-sm-4">
<input type="submit" class="btn btn-outline-primary" value="einzahlen">
</div>
</div>
</div>
</form> </form>
</div> </div>
</div> </div>

View File

@ -16,7 +16,7 @@
<div class="card" sec:authorize="hasRole('business_booking')"> <div class="card" sec:authorize="hasRole('business_booking')">
<div class="card-header">Angemeldete Personen</div> <div class="card-header">Angemeldete Personen</div>
<div class="card-body"> <div class="card-body">
<table id="bookers" class="table"> <table id="bookers" class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
@ -31,16 +31,29 @@
<tbody> <tbody>
<th:block th:each="b : ${bookers}"> <th:block th:each="b : ${bookers}">
<tr> <tr>
<td><a class="btn btn-icon-silent" th:href="@{/business/bookings/{id}(id=${b.pk})}" title="bearbeiten" th:text="${b.name}"></a></td> <td class="middled"><a class="tablelink" th:href="@{/business/bookings/{id}(id=${b.pk})}" title="bearbeiten" th:text="${b.name}"></a></td>
<td th:text="${b.sex}"></td> <td class="middled" th:text="${b.sex}"></td>
<td th:text="${b.camp}"></td> <td class="middled" th:text="${b.camp}"></td>
<td th:text="${b.role}"></td> <td class="middled" th:text="${b.role}"></td>
<td><span th:text="${#numbers.formatDecimal(b.paid, 1, 2) + ' €'}" th:if="${b.paid != null}"></span> <td class="middled">
<form action="#" th:action="@{'/business/bookings/payment/' + ${b.pk}}" th:object="${addBean}" method="post"> <form action="#" th:action="@{'/business/bookings/payment/' + ${b.pk}}" th:object="${addBean}" method="post">
<input type="number" step="0.01" th:field="*{payment}"> <input type="submit" style="padding: 4px" value="einzahlen"> <div class="container">
</form></td> <div class="row">
<td th:text="${#temporals.format(b.bookingDate, 'dd.MM.yyyy')}"></td> <div class="col-sm-4" style="text-align: right">
<td th:text="${b.accept == null ? '' : (b.accept ? 'Ja' : 'abgelehnt')}"></td> <span th:text="${#numbers.formatDecimal(b.paid, 1, 2) + ' €'}" style="font-size: x-large" th:if="${b.paid != null}"></span>
</div>
<div class="col-sm-4">
<input type="number" step="0.01" class="form-control" th:field="*{payment}" />
</div>
<div class="col-sm-4">
<input type="submit" class="btn btn-outline-primary" style="padding: 4px" value="einzahlen" />
</div>
</div>
</div>
</form>
</td>
<td class="middled" th:text="${#temporals.format(b.bookingDate, 'dd.MM.yyyy')}"></td>
<td class="middled" th:text="${b.accept == null ? '' : (b.accept ? 'Ja' : 'abgelehnt')}"></td>
</tr> </tr>
</th:block> </th:block>
</tbody> </tbody>

View File

@ -14,10 +14,10 @@
</header> </header>
<content> <content>
<div class="mainpage"> <div class="mainpage">
<div class="card" style="width: 500px"> <div class="card" style="width: 640px">
<div class="card-header">Finanzübersicht über alle Freizeiten</div> <div class="card-header">Finanzübersicht über alle Freizeiten</div>
<div class="card-body"> <div class="card-body">
<table class="table"> <table id="camps" class="table table-striped">
<thead> <thead>
<tr> <tr>
<th scope="col">Jahr</th> <th scope="col">Jahr</th>
@ -35,6 +35,13 @@
</th:block> </th:block>
</tbody> </tbody>
</table> </table>
<script>
$(document).ready(function() {
$("#camps").DataTable({
language: locale_de
});
});
</script>
</div> </div>
</div> </div>
</div> </div>

View File

@ -21,7 +21,7 @@
<span th:text="${camp.name}"></span> von <span th:text="${#numbers.formatInteger(camp.year, 0)}"></span> <span th:text="${camp.name}"></span> von <span th:text="${#numbers.formatInteger(camp.year, 0)}"></span>
</div> </div>
<div class="card-body"> <div class="card-body">
<table class="table"> <table class="table table-striped">
<tbody> <tbody>
<tr> <tr>
<td>Freizeitname</td> <td>Freizeitname</td>
@ -62,7 +62,7 @@
<div class="card"> <div class="card">
<div class="card-header">Angemeldete Personen</div> <div class="card-header">Angemeldete Personen</div>
<div class="card-body"> <div class="card-body">
<table id="bookers" class="table"> <table id="bookers" class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
@ -76,7 +76,7 @@
<tbody> <tbody>
<th:block th:each="b : ${bookers}"> <th:block th:each="b : ${bookers}">
<tr> <tr>
<td><a class="btn btn-icon-silent" th:href="@{/business/bookings/{id}(id=${b.pk})}" title="bearbeiten" th:text="${b.name}"></a></td> <td><a class="tablelink" th:href="@{/business/bookings/{id}(id=${b.pk})}" title="bearbeiten" th:text="${b.name}"></a></td>
<td th:text="${b.sex}"></td> <td th:text="${b.sex}"></td>
<td th:text="${b.role}"></td> <td th:text="${b.role}"></td>
<td><span th:text="${#numbers.formatDecimal(b.paid, 1, 2) + ' €'}" th:if="${b.paid != null}"></span></td> <td><span th:text="${#numbers.formatDecimal(b.paid, 1, 2) + ' €'}" th:if="${b.paid != null}"></span></td>

View File

@ -8,16 +8,16 @@
</head> </head>
<body> <body>
<header> <header>
<a th:href="@{/}" class="btn btn-secondary btn-icon-silent" title="zur Hauptseite"><i class="fas fa-home"></i></a> <a th:href="@{/}" class="btn btn-secondary btn-icon-silent" title="zur Hauptseite"><i class="fas fa-home"></i></a> <a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent"
<a th:href="@{/business/}" class="btn btn-secondary btn-icon-silent" title="zur Finanzübersicht"><i class="far fa-money-bill-alt"></i></a> title="zur Finanzübersicht"><i class="far fa-money-bill-alt"></i></a> <a th:href="@{/business/privileges}" class="btn btn-secondary btn-icon-silent" title="aktualisieren"><i
<a th:href="@{/business/privileges}" class="btn btn-secondary btn-icon-silent" title="aktualisieren"><i class="fas fa-sync"></i></a> class="fas fa-sync"></i></a>
</header> </header>
<content> <content>
<div class="mainpage"> <div class="mainpage">
<div class="card"> <div class="card">
<div class="card-header">Nutzerverwaltung für die Abrechnung von Freizeiten</div> <div class="card-header">Nutzerverwaltung für die Abrechnung von Freizeiten</div>
<div class="card-body"> <div class="card-body">
<table id="privs"> <table id="privs" class="table table-striped">
<thead> <thead>
<tr> <tr>
<th scope="col">Freizeit</th> <th scope="col">Freizeit</th>
@ -28,13 +28,13 @@
<tbody> <tbody>
<th:block th:each="e : ${privileges.entrySet()}" sec:authorize="hasRole('admin')"> <th:block th:each="e : ${privileges.entrySet()}" sec:authorize="hasRole('admin')">
<tr> <tr>
<td><span th:text="${e.value.name}"></span>&nbsp;<span th:text="${#numbers.formatDecimal(e.value.year, 1, 0)}"></span></td> <td class="middled"><span th:text="${e.value.name}"></span>&nbsp;<span th:text="${#numbers.formatDecimal(e.value.year, 1, 0)}"></span></td>
<td><th:block th:each="p : ${e.value.profiles}"> <td><th:block th:each="p : ${e.value.profiles}">
<div class="dropdown" style="display: inline" th:if="${p.pk != null}"> <div class="dropdown" style="display: inline" th:if="${p.pk != null}">
<button class="btn dropdown-toggle" style="border: 1px solid silver" type="button" th:id="'btn_' + ${e.key} + '_' + ${p.pk}" data-bs-toggle="dropdown" aria-expanded="false"> <button class="btn dropdown-toggle" style="border: 1px solid silver" type="button" th:id="'btn_' + ${e.key} + '_' + ${p.pk}" data-bs-toggle="dropdown" aria-expanded="false">
<span th:text="${p.forename} + ' ' + ${p.surname}"></span> <span th:text="${p.forename} + ' ' + ${p.surname}"></span>
</button> </button>
<ul class="dropdown-menu" style="background-image: linear-gradient(to bottom right, #defac0, #9ef542) !important;" th:aria-labelledby="'btn_' + ${e.key} + '_' + ${p.pk}"> <ul class="dropdown-menu silver-to-gray-gradient" th:aria-labelledby="'btn_' + ${e.key} + '_' + ${p.pk}">
<li><div style="padding: 8px"> <li><div style="padding: 8px">
Login: <span th:text="${p.username}"></span> Login: <span th:text="${p.username}"></span>
</div></li> </div></li>
@ -42,22 +42,33 @@
Ablaufdatum: <span th:text="${#temporals.format(p.duedate, 'dd.MM.yyyy')}"></span> Ablaufdatum: <span th:text="${#temporals.format(p.duedate, 'dd.MM.yyyy')}"></span>
</div></li> </div></li>
<li><hr class="dropdown-divider" th:if="${p.username != currentUser}"></li> <li><hr class="dropdown-divider" th:if="${p.username != currentUser}"></li>
<li><a class="dropdown-item" th:if="${p.username != currentUser}" th:href="@{/business/privileges/delete?fkCamp={c}&fkProfile={r}(c=${e.key},r=${p.pk})}">Recht entziehen</a></li> <li><a class="dropdown-item menu-danger" th:if="${p.username != currentUser}" th:href="@{/business/privileges/delete?fkCamp={c}&fkProfile={r}(c=${e.key},r=${p.pk})}">Recht
entziehen</a></li>
</ul> </ul>
</div> </div>
</th:block></td> </th:block></td>
<td> <td>
<form action="#" th:action="@{/business/privileges/add?fkCamp={cid}(cid=${e.key})}" th:object="${bean}" method="post"> <form action="#" th:action="@{/business/privileges/add?fkCamp={cid}(cid=${e.key})}" th:object="${bean}" method="post">
<span class="btn-group"> <select th:id="${e.value.pk}" class="form-control select2-single" th:field="*{fkProfile}"> <div class="container">
<option value="">Auswählen</option> <div class="row">
<th:block th:each="u : ${profiles}"> <div class="col-sm-9">
<option th:if="${u != null}" th:value="${u.pk}" th:text="${u.dropdown()}" /> <select th:id="${e.value.pk}" class="form-control select2-single" th:field="*{fkProfile}">
</th:block> <option value="">Auswählen</option>
</select> <input type="submit" style="padding: 4px" value="Recht erteilen"> <th:block th:each="u : ${profiles}">
</span> <option th:if="${u != null}" th:value="${u.pk}" th:text="${u.fullname}" th:title="${u.dropdown()}" />
</th:block>
</select>
</div>
<div class="col-sm-3">
<input type="submit" class="btn btn-outline-primary" value="Recht erteilen">
</div>
</div>
</div>
<script> <script>
var id = "[[${e.value.pk}]]"; var id = "[[${e.value.pk}]]";
$("#" + id).select2(); $("#" + id).select2({
theme: 'bootstrap-5',
});
</script> </script>
</form> </form>
</td> </td>
@ -68,7 +79,7 @@
<script> <script>
$(document).ready(function() { $(document).ready(function() {
$("#privs").DataTable({ $("#privs").DataTable({
language: locale_de language : locale_de
}); });
}); });
</script> </script>

View File

@ -14,71 +14,79 @@
</header> </header>
<content> <content>
<div class="mainpage"> <div class="mainpage">
<div class="container nomaxwidth"> <div class="accordion" id="acc">
<div class="row"> <div class="accordion-item" th:each="b : ${mybookings}">
<div class="col-xs-6 col-sm-4 col-lg-3"> <h2 class="accordion-header" th:id="'acc-head-' + ${b.pk}">
<div class="card usercard" th:each="b : ${mybookings}"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" th:data-bs-target="'#acc-body-' + ${b.pk}" aria-expanded="true"
<div class="card-header"> th:aria-controls="'#acc-body-' + ${b.pk}">
<span th:text="${b.forename + ' ' + b.surname + ' an ' + b.campName + ' ' + #numbers.formatInteger(b.year, 4)}" style="font-weight: bolder"></span>&nbsp;in&nbsp;<a th:href="${b.url}" <i class="fas fa-check framed framed-green" th:if="${b.accept}"></i>
target="_blank" th:text="${b.locationName}"></a> <i class="fas fa-ban framed framed-red" th:if="${b.accept} == false"></i>
<button class="btn btn-dropdown" style="right: 2px; top: 2px; position: absolute" th:onclick="$('#body_' + [[${b.pk}]]).toggle()"> <i class="fas fa-question framed framed-orange" th:if="${b.accept} == null"></i>
<i class="fas fa-caret-down"></i> <span th:text="${b.forename + ' ' + b.surname + ' an ' + b.campName + ' ' + #numbers.formatInteger(b.year, 4)}" style="font-weight: bolder"></span>&nbsp;in&nbsp;<span
</button> th:text="${b.locationName}"></span>
</div> </button>
<div th:id="${'body_' + b.pk}" class="card-body" style="display: none"> </h2>
<div class="container"> <div th:id="'acc-body-' + ${b.pk}" class="accordion-collapse collapse" th:aria-labelledby="'acc-head-' + ${b.pk}">
<div class="row"> <div class="accordion-body">
<div class="col-sm-4">Zeit:</div> <div class="container">
<div class="col-sm-8"> <div class="row">
<span th:text="${#temporals.format(b.arrive, 'dd.MM.') + ' - ' + #temporals.format(b.depart, 'dd.MM.yyyy')}" th:if="${b.arrive != null and b.depart != null}"></span> <div class="col-sm-12">
</div> <h3>Freizeitdaten</h3>
<div class="col-sm-4">Preis:</div>
<div class="col-sm-8" th:text="${b.price} + ' €'"></div>
<div class="col-sm-4">Ferien:</div>
<div class="col-sm-8" th:text="${b.countries}"></div>
</div> </div>
</div> <div class="col-sm-4">Ort:</div>
<hr /> <div class="col-sm-8">
<div class="container"> <a th:href="${b.url}" target="_blank" th:text="${b.locationName}"></a>
<div class="row">
<div class="col-sm-4">Rolle:</div>
<span class="col-sm-8" th:text="${b.camprole}"></span>
<div class="col-sm-4">ID:</div>
<span class="col-sm-8" th:text="${b.pk}"></span>
<div class="col-sm-4">Vorname:</div>
<span class="col-sm-8" th:text="${b.forename}"></span>
<div class="col-sm-4">Nachname:</div>
<span class="col-sm-8" th:text="${b.surname}"></span>
<div class="col-sm-4">Straße:</div>
<span class="col-sm-8" th:text="${b.street}"></span>
<div class="col-sm-4">PLZ:</div>
<span class="col-sm-8" th:text="${b.zip}"></span>
<div class="col-sm-4">Ort:</div>
<span class="col-sm-8" th:text="${b.city}"></span>
<div class="col-sm-4">Telefon:</div>
<span class="col-sm-8" th:text="${b.phone}"></span>
<div class="col-sm-4">Geburtstag:</div>
<span class="col-sm-8" th:text="${#temporals.format(b.birthdate, 'dd.MM.yyyy')}"></span>
<div class="col-sm-4">E-Mail:</div>
<span class="col-sm-8" th:text="${b.email}"></span>
<div class="col-sm-4">Geschlecht:</div>
<span class="col-sm-8" th:text="${b.sex}"></span>
<div class="col-sm-4">Foto-Einverständnis:</div>
<span class="col-sm-8" th:text="${b.consentCatalogPhoto}"></span>
<div class="col-sm-4">Kommentar:</div>
<span class="col-sm-8" th:text="${b.comment}"></span>
</div> </div>
<div class="col-sm-4">Zeit:</div>
<div class="col-sm-8">
<span th:text="${#temporals.format(b.arrive, 'dd.MM.') + ' - ' + #temporals.format(b.depart, 'dd.MM.yyyy')}" th:if="${b.arrive != null and b.depart != null}"></span>
</div>
<div class="col-sm-4">Preis:</div>
<div class="col-sm-8" th:text="${b.price} + ' €'"></div>
<div class="col-sm-4">Ferien:</div>
<div class="col-sm-8" th:text="${b.countries}"></div>
</div> </div>
</div> </div>
<div class="card-footer"> <div class="container">
<div th:if="${b.created != null}"> <div class="row">
angemeldet am <span th:text="${#temporals.format(b.created, 'dd.MM.yyyy')}"></span> von <span th:text="${b.subscriber}"></span> <div class="col-sm-12">
<h3>Teilnehmerdaten</h3>
</div>
<div class="col-sm-4">Rolle:</div>
<span class="col-sm-8" th:text="${b.camprole}"></span>
<div class="col-sm-4">ID:</div>
<span class="col-sm-8" th:text="${b.pk}"></span>
<div class="col-sm-4">Vorname:</div>
<span class="col-sm-8" th:text="${b.forename}"></span>
<div class="col-sm-4">Nachname:</div>
<span class="col-sm-8" th:text="${b.surname}"></span>
<div class="col-sm-4">Straße:</div>
<span class="col-sm-8" th:text="${b.street}"></span>
<div class="col-sm-4">PLZ:</div>
<span class="col-sm-8" th:text="${b.zip}"></span>
<div class="col-sm-4">Ort:</div>
<span class="col-sm-8" th:text="${b.city}"></span>
<div class="col-sm-4">Telefon:</div>
<span class="col-sm-8" th:text="${b.phone}"></span>
<div class="col-sm-4">Geburtstag:</div>
<span class="col-sm-8" th:text="${#temporals.format(b.birthdate, 'dd.MM.yyyy')}"></span>
<div class="col-sm-4">E-Mail:</div>
<span class="col-sm-8" th:text="${b.email}"></span>
<div class="col-sm-4">Geschlecht:</div>
<span class="col-sm-8" th:text="${b.sex}"></span>
<div class="col-sm-4">Foto-Einverständnis:</div>
<span class="col-sm-8" th:text="${b.consentCatalogPhoto}"></span>
<div class="col-sm-4">Kommentar:</div>
<span class="col-sm-8" th:text="${b.comment}"></span>
</div> </div>
<div th:if="${b.accept != null}">
<span th:text="${b.accept ? 'bestätigt' : 'abgelehnt'}"></span> von <span th:text="${b.registrator}"></span>
</div>
<span th:if="${b.isOver}">Die Freizeit ist bereits vorbei.</span>
</div> </div>
<div class="alert alert-primary" th:if="${b.created != null}">
angemeldet am <span th:text="${#temporals.format(b.created, 'dd.MM.yyyy')}"></span> von <span th:text="${b.subscriber}"></span>
</div>
<div th:class="'alert ' + ${b.accept ? 'alert-success' : 'alert-danger'}" th:if="${b.accept != null}">
<span th:text="${b.accept ? 'bestätigt' : 'abgelehnt'}"></span> von <span th:text="${b.registrator}"></span>
</div>
<div class="alert alert-warning" th:if="${b.isOver}">Die Freizeit ist bereits vorbei.</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -49,7 +49,7 @@
<div class="row"> <div class="row">
<div class="col-sm-3"></div> <div class="col-sm-3"></div>
<div class="col-sm-9"> <div class="col-sm-9">
<button class="btn btn-primary">jetzt anmelden</button> <a class="btn btn-primary" href="http://anmeldung.onkelwernerfreizeiten.de">jetzt anmelden</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -8,6 +8,7 @@
<link th:rel="stylesheet" type="text/css" media="all" th:href="@{/webjars/datatables/1.11.4/css/jquery.dataTables.min.css}" /> <link th:rel="stylesheet" type="text/css" media="all" th:href="@{/webjars/datatables/1.11.4/css/jquery.dataTables.min.css}" />
<link th:rel="stylesheet" type="text/css" media="all" th:href="@{/webjars/select2/4.0.13/css/select2.min.css}" /> <link th:rel="stylesheet" type="text/css" media="all" th:href="@{/webjars/select2/4.0.13/css/select2.min.css}" />
<link th:rel="stylesheet" type="text/css" media="all" th:href="@{/css/style.css}" /> <link th:rel="stylesheet" type="text/css" media="all" th:href="@{/css/style.css}" />
<link th:rel="stylesheet" type="text/css" media="all" th:href="@{/css/select2-bootstrap-5-theme.min.css}" />
<script th:src="@{/webjars/jquery/3.6.0/jquery.min.js}"></script> <script th:src="@{/webjars/jquery/3.6.0/jquery.min.js}"></script>
<script th:src="@{/webjars/bootstrap/5.2.0/js/bootstrap.bundle.min.js}"></script> <script th:src="@{/webjars/bootstrap/5.2.0/js/bootstrap.bundle.min.js}"></script>
<script th:src="@{/webjars/datatables/1.11.4/js/jquery.dataTables.min.js}"></script> <script th:src="@{/webjars/datatables/1.11.4/js/jquery.dataTables.min.js}"></script>