finetuning
This commit is contained in:
parent
8344186ad2
commit
230cbc5d00
@ -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"
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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(" ");
|
||||||
|
3
src/main/resources/static/css/select2-bootstrap-5-theme.min.css
vendored
Normal file
3
src/main/resources/static/css/select2-bootstrap-5-theme.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -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 {
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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> <span th:text="${#numbers.formatDecimal(e.value.year, 1, 0)}"></span></td>
|
<td class="middled"><span th:text="${e.value.name}"></span> <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>
|
||||||
|
@ -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> in <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> in <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>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user