show free beds, see #2

This commit is contained in:
Jottyfan 2024-02-23 01:24:53 +01:00
parent 5a365b1a37
commit 8f69320505
5 changed files with 128 additions and 14 deletions

View File

@ -8,7 +8,7 @@ plugins {
}
group = 'de.jottyfan.camporganizer'
version = '0.6.8'
version = '0.6.9'
description = """CampOrganizer2"""
@ -42,7 +42,7 @@ war {
dependencies {
implementation 'org.jooq:jooq:3.19.1'
implementation 'de.jottyfan:COJooq:2023.12.1'
implementation 'de.jottyfan:COJooq:2024.02.23'
implementation 'org.apache.logging.log4j:log4j-api:2.22.0'
implementation 'org.apache.logging.log4j:log4j-core:2.22.0'

View File

@ -13,12 +13,10 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import jakarta.validation.Valid;
import java.util.Iterator;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jooq.Condition;
@ -27,7 +25,7 @@ import org.jooq.DeleteConditionStep;
import org.jooq.Field;
import org.jooq.InsertResultStep;
import org.jooq.InsertReturningStep;
import org.jooq.InsertValuesStep11;
import org.jooq.InsertValuesStep15;
import org.jooq.InsertValuesStep3;
import org.jooq.Record4;
import org.jooq.Record5;
@ -61,6 +59,7 @@ import de.jottyfan.camporganizer.module.admin.model.LocationBean;
import de.jottyfan.camporganizer.module.admin.model.PrivilegesContainerBean;
import de.jottyfan.camporganizer.module.admin.model.ProfileBean;
import de.jottyfan.camporganizer.module.camplist.model.LambdaResultWrapper;
import jakarta.validation.Valid;
/**
*
@ -439,7 +438,7 @@ public class AdminRepository {
LocalDateTime arrive = arriveDate == null ? null : arriveDate.atStartOfDay();
LocalDateTime depart = departDate == null ? null : departDate.atStartOfDay();
if (bean.getPk() == null) {
InsertValuesStep11<TCampRecord, LocalDateTime, String, LocalDateTime, Integer, Integer, Integer, Boolean, Integer, Integer, String, String> sql = DSL
InsertValuesStep15<TCampRecord, LocalDateTime, String, LocalDateTime, Integer, Integer, Integer, Boolean, Integer, Integer, String, String, Integer, Integer, Integer, Integer> sql = DSL
.using(t)
// @formatter:off
.insertInto(T_CAMP,
@ -453,9 +452,14 @@ public class AdminRepository {
T_CAMP.MAX_AGE,
T_CAMP.MIN_AGE,
T_CAMP.NAME,
T_CAMP.PRICE)
T_CAMP.PRICE,
T_CAMP.BEDS_FEMALE,
T_CAMP.BEDS_MALE,
T_CAMP.BLOCKED_BEDS_FEMALE,
T_CAMP.BLOCKED_BEDS_MALE)
.values(arrive, bean.getCountries(), depart, bean.getFkDocument(), bean.getFkLocation(), bean.getFkProfile(),
bean.getLockSales() != null ? bean.getLockSales() : false, bean.getMaxAge(), bean.getMinAge(), bean.getName(), bean.getPrice());
bean.getLockSales() != null ? bean.getLockSales() : false, bean.getMaxAge(), bean.getMinAge(), bean.getName(), bean.getPrice(),
bean.getBedsFemale(), bean.getBedsMale(), bean.getBlockedBedsFemale(), bean.getBlockedBedsMale());
// @formatter:on
LOGGER.debug(sql.toString());
sql.execute();
@ -474,6 +478,10 @@ public class AdminRepository {
.set(T_CAMP.MIN_AGE, bean.getMinAge())
.set(T_CAMP.NAME, bean.getName())
.set(T_CAMP.PRICE, bean.getPrice())
.set(T_CAMP.BEDS_FEMALE, bean.getBedsFemale())
.set(T_CAMP.BEDS_MALE, bean.getBedsMale())
.set(T_CAMP.BLOCKED_BEDS_FEMALE, bean.getBlockedBedsFemale())
.set(T_CAMP.BLOCKED_BEDS_MALE, bean.getBlockedBedsMale())
.where(T_CAMP.PK.eq(bean.getPk()));
// @formatter:on
LOGGER.debug(sql.toString());

View File

@ -7,12 +7,12 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.springframework.format.annotation.DateTimeFormat;
import de.jottyfan.camporganizer.db.jooq.tables.records.TCampRecord;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
/**
*
@ -45,6 +45,18 @@ public class CampBean implements Serializable {
private String countries;
@NotNull
private String price;
@NotNull
@Min(value = 0)
private Integer bedsFemale;
@NotNull
@Min(value = 0)
private Integer bedsMale;
@NotNull
@Min(value = 0)
private Integer blockedBedsFemale;
@NotNull
@Min(value = 0)
private Integer blockedBedsMale;
/**
* generate a camp bean out of r
@ -71,6 +83,10 @@ public class CampBean implements Serializable {
bean.setName(r.getName());
bean.setPk(r.getPk());
bean.setPrice(r.getPrice());
bean.setBedsFemale(r.getBedsFemale());
bean.setBedsMale(r.getBedsMale());
bean.setBlockedBedsFemale(r.getBlockedBedsFemale());
bean.setBlockedBedsMale(r.getBlockedBedsMale());
return bean;
}
@ -272,4 +288,60 @@ public class CampBean implements Serializable {
}
this.countries = buf.toString();
}
/**
* @return the bedsFemale
*/
public Integer getBedsFemale() {
return bedsFemale;
}
/**
* @param bedsFemale the bedsFemale to set
*/
public void setBedsFemale(Integer bedsFemale) {
this.bedsFemale = bedsFemale;
}
/**
* @return the bedsMale
*/
public Integer getBedsMale() {
return bedsMale;
}
/**
* @param bedsMale the bedsMale to set
*/
public void setBedsMale(Integer bedsMale) {
this.bedsMale = bedsMale;
}
/**
* @return the blockedBedsFemale
*/
public Integer getBlockedBedsFemale() {
return blockedBedsFemale;
}
/**
* @param blockedBedsFemale the blockedBedsFemale to set
*/
public void setBlockedBedsFemale(Integer blockedBedsFemale) {
this.blockedBedsFemale = blockedBedsFemale;
}
/**
* @return the blockedBedsMale
*/
public Integer getBlockedBedsMale() {
return blockedBedsMale;
}
/**
* @param blockedBedsMale the blockedBedsMale to set
*/
public void setBlockedBedsMale(Integer blockedBedsMale) {
this.blockedBedsMale = blockedBedsMale;
}
}

View File

@ -119,6 +119,34 @@
</script>
</div>
</div>
<div class="row mb-2">
<label for="inputBedsFemale" class="col-sm-2 col-form-label">Anzahl Betten für Mädchen</label>
<div class="col-sm-10">
<span class="error" th:each="error : ${#fields.errors('bedsFemale')}">[[${error}]]<br /></span>
<input type="number" class="form-control" th:field="*{bedsFemale}" />
</div>
</div>
<div class="row mb-2">
<label for="inputBedsMale" class="col-sm-2 col-form-label">Anzahl Betten für Jungen</label>
<div class="col-sm-10">
<span class="error" th:each="error : ${#fields.errors('bedsMale')}">[[${error}]]<br /></span>
<input type="number" class="form-control" th:field="*{bedsMale}" />
</div>
</div>
<div class="row mb-2">
<label for="inputBlockedBedsFemale" class="col-sm-2 col-form-label">Reservierte Betten für Mädchen</label>
<div class="col-sm-10">
<span class="error" th:each="error : ${#fields.errors('blockedBedsFemale')}">[[${error}]]<br /></span>
<input type="number" class="form-control" th:field="*{blockedBedsFemale}" />
</div>
</div>
<div class="row mb-2">
<label for="inputBlockedBedsMale" class="col-sm-2 col-form-label">Reservierte Betten für Jungen</label>
<div class="col-sm-10">
<span class="error" th:each="error : ${#fields.errors('blockedBedsMale')}">[[${error}]]<br /></span>
<input type="number" class="form-control" th:field="*{blockedBedsMale}" />
</div>
</div>
<div class="row mb-2">
<label for="inputLockSales" class="col-sm-2 col-form-label">Kassenschluss</label>
<div class="col-sm-10">

View File

@ -14,8 +14,8 @@
<div class="accordion-body">
<table style="width: 100%">
<tr>
<td rowspan="4"><img th:src="@{/images/Icon_Stern.svg}" width="36px" height="36px" style="margin-left: 24px" /></td>
<td rowspan="4">
<td rowspan="5"><img th:src="@{/images/Icon_Stern.svg}" width="36px" height="36px" style="margin-left: 24px" /></td>
<td rowspan="5">
<div>
Biblische Geschichten<br /> Nachtwanderung<br /> Gruppenspiele<br /> Ausflüge<br /> Überraschungen
</div>
@ -38,6 +38,12 @@
<p th:text="${c.price}"></p>
</div></td>
</tr>
<tr th:if="${c.bedsFemale + c.bedsMale > 0}">
<td><img th:src="@{/images/Icon_Bett.svg}" width="36px" height="36px" style="margin-top: 24px" /></td>
<td><div style="margin-top: 24px">
<p style="width: 200px" th:utext="${'es sind nur noch <br />' + (c.bedsFemale - c.blockedBedsFemale - c.usedBedsFemale) + ' Mädchen- und ' + (c.bedsMale - c.blockedBedsMale - c.usedBedsMale) + ' Jungs-<br />von ' + (c.bedsFemale + c.bedsMale) + ' Betten frei'}"></p>
</div></td>
</tr>
</table>
<div style="text-align: center; margin-top: 64px">
<a class="btn btn-linda buttonfont" th:href="@{/registration/{id}(id=${c.pk})}">jetzt anmelden</a>