eye candy

This commit is contained in:
Jottyfan 2022-10-15 19:02:56 +02:00
parent cde060559e
commit be5b28e120
4 changed files with 92 additions and 53 deletions

View File

@ -13,7 +13,7 @@ import de.jottyfan.camporganizer.db.jooq.enums.EnumSex;
*
*/
public class BookingBean implements Serializable {
private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 2L;
private Integer pk;
private String forename;
@ -38,6 +38,7 @@ public class BookingBean implements Serializable {
private String url;
private Boolean isOver;
private String campName;
private String registrator;
/**
* @return the forename
@ -349,4 +350,12 @@ public class BookingBean implements Serializable {
this.campName = campName;
}
public String getRegistrator() {
return registrator;
}
public void setRegistrator(String registrator) {
this.registrator = registrator;
}
}

View File

@ -14,10 +14,12 @@ import org.jooq.Condition;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.SelectConditionStep;
import org.jooq.impl.DSL;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import de.jottyfan.camporganizer.db.jooq.tables.TProfile;
import de.jottyfan.camporganizer.db.jooq.tables.records.VCampRecord;
/**
@ -40,6 +42,7 @@ public class IndexGateway {
}
public List<BookingBean> getAllBookings(String username) {
TProfile REGISTRATOR = TProfile.T_PROFILE.as("registrator");
SelectConditionStep<Record> sql = jooq
// @formatter:off
.select(T_PERSON.PK,
@ -56,6 +59,8 @@ public class IndexGateway {
T_PERSON.CREATED,
T_PERSON.EMAIL,
T_PERSON.SEX,
REGISTRATOR.FORENAME,
REGISTRATOR.SURNAME,
V_CAMP.NAME,
V_CAMP.LOCATION_NAME,
V_CAMP.PRICE,
@ -67,6 +72,7 @@ public class IndexGateway {
V_CAMP.IS_OVER)
.from(T_PROFILE)
.leftJoin(T_PERSON).on(T_PERSON.FK_PROFILE.eq(T_PROFILE.PK))
.leftJoin(REGISTRATOR).on(REGISTRATOR.PK.eq(T_PERSON.FK_REGISTRATOR))
.leftJoin(V_CAMP).on(V_CAMP.PK.eq(T_PERSON.FK_CAMP))
.where(T_PROFILE.USERNAME.eq(username));
// @formatter:on
@ -97,6 +103,14 @@ public class IndexGateway {
bean.setUrl(r.get(V_CAMP.URL));
bean.setIsOver(r.get(V_CAMP.IS_OVER));
bean.setCampName(r.get(V_CAMP.NAME));
StringBuilder buf = new StringBuilder();
String forename = r.get(REGISTRATOR.FORENAME);
String surname = r.get(REGISTRATOR.SURNAME);
if (forename != null) {
buf.append(forename).append(" ");
}
buf.append(surname != null ? surname : "");
bean.setRegistrator(buf.toString());
list.add(bean);
}
return list;

View File

@ -167,6 +167,10 @@ body {
background-color: rgba(255, 255, 255, 0.8) !important;
}
.nomaxwidth {
max-width: none !important;
}
.mytoggle_collapsed {
display: none;
}

View File

@ -14,61 +14,73 @@
</header>
<content>
<div class="mainpage">
<div class="card usercard" th:each="b : ${mybookings}">
<div class="card-header">
<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}"
target="_blank" th:text="${b.locationName}"></a><button class="btn btn-dropdown" style="right: 2px; top: 2px; position: absolute" th:onclick="$('#body_' + [[${b.pk}]]).toggle()"><i class="fas fa-caret-down"></i></button>
</div>
<div th:id="${'body_' + b.pk}" class="card-body">
<div class="container">
<div class="row">
<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 class="container nomaxwidth">
<div class="row">
<div class="col-xs-6 col-sm-4 col-lg-3">
<div class="card usercard" th:each="b : ${mybookings}">
<div class="card-header">
<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}"
target="_blank" th:text="${b.locationName}"></a>
<button class="btn btn-dropdown" style="right: 2px; top: 2px; position: absolute" th:onclick="$('#body_' + [[${b.pk}]]).toggle()">
<i class="fas fa-caret-down"></i>
</button>
</div>
<div th:id="${'body_' + b.pk}" class="card-body" style="display: none">
<div class="container">
<div class="row">
<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>
<hr />
<div class="container">
<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>
<div class="card-footer">
<div th:if="${b.created != null}">
angemeldet am <span th:text="${#temporals.format(b.created, 'dd.MM.yyyy')}"></span>
</div>
<div th:if="${!#strings.isEmpty(b.registrator)}">
bearbeitet von <span th:text="${b.registrator}"></span>
</div>
<span th:if="${b.isOver}">Die Freizeit ist bereits vorbei.</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>
<hr />
<div class="container">
<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>
<div class="card-footer">
<div>
angemeldet am <span th:text="${#temporals.format(b.created, 'dd.MM.yyyy')}" th:if="${b.created != null}"></span>
</div>
<span th:if="${b.isOver}">Die Freizeit ist bereits vorbei.</span>
</div>
</div>
</div>