show workpackage info for list of projects
This commit is contained in:
@@ -12,9 +12,12 @@ import java.util.Map;
|
||||
import org.jooq.DSLContext;
|
||||
import org.jooq.DeleteConditionStep;
|
||||
import org.jooq.InsertValuesStep2;
|
||||
import org.jooq.Name;
|
||||
import org.jooq.Record1;
|
||||
import org.jooq.Record7;
|
||||
import org.jooq.Record8;
|
||||
import org.jooq.SelectConditionStep;
|
||||
import org.jooq.SelectHavingStep;
|
||||
import org.jooq.impl.DSL;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
@@ -31,7 +34,7 @@ import de.jottyfan.timetrack.modules.projectmanagement.model.WorkpackageBean;
|
||||
*/
|
||||
@Repository
|
||||
public class AppRepository {
|
||||
|
||||
|
||||
@Autowired
|
||||
private DSLContext jooq;
|
||||
|
||||
@@ -42,7 +45,8 @@ public class AppRepository {
|
||||
* @return the list of app beans; an empty list at least
|
||||
*/
|
||||
public List<AppBean> getAllAppBeans(Integer fkWorkpackage) {
|
||||
SelectConditionStep<Record7<Integer, Integer, String, String, String, Integer, String>> sql = jooq
|
||||
Name WORKPACKAGES = DSL.name("workpackages");
|
||||
SelectHavingStep<Record8<Integer, Integer, String, String, String, Integer, String, String[]>> sql = jooq
|
||||
// @formatter:off
|
||||
.select(T_APP.PK_APP,
|
||||
T_APP.FK_BUNDLE,
|
||||
@@ -50,10 +54,19 @@ public class AppRepository {
|
||||
T_APP.NAME,
|
||||
T_APP.DESCRIPTION,
|
||||
T_APP.FK_REPLACED_BY_APP,
|
||||
T_APP.REPOSITORY_URL)
|
||||
T_APP.REPOSITORY_URL,
|
||||
DSL.arrayAgg(T_WORKPACKAGE.NAME).as(WORKPACKAGES))
|
||||
.from(T_APP)
|
||||
.leftJoin(T_WORKPACKAGE_APP).on(T_WORKPACKAGE_APP.FK_APP.eq(T_APP.PK_APP))
|
||||
.where(fkWorkpackage == null ? DSL.trueCondition() : T_WORKPACKAGE_APP.FK_WORKPACKAGE.eq(fkWorkpackage));
|
||||
.leftJoin(T_WORKPACKAGE).on(T_WORKPACKAGE.PK_WORKPACKAGE.eq(T_WORKPACKAGE_APP.FK_WORKPACKAGE))
|
||||
.where(fkWorkpackage == null ? DSL.trueCondition() : T_WORKPACKAGE_APP.FK_WORKPACKAGE.eq(fkWorkpackage))
|
||||
.groupBy(T_APP.PK_APP,
|
||||
T_APP.FK_BUNDLE,
|
||||
T_APP.BASIC_FUNCTIONALITY,
|
||||
T_APP.NAME,
|
||||
T_APP.DESCRIPTION,
|
||||
T_APP.FK_REPLACED_BY_APP,
|
||||
T_APP.REPOSITORY_URL);
|
||||
// @formatter:on
|
||||
return sql.fetchInto(AppBean.class);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,17 @@ public class AppBean implements Serializable {
|
||||
private String description;
|
||||
private Integer fkReplacedByApp;
|
||||
private String repositoryUrl;
|
||||
private String[] workpackages;
|
||||
|
||||
public String workpackagesString() {
|
||||
String result = null;
|
||||
if (workpackages != null) {
|
||||
for (String s : workpackages) {
|
||||
result = result == null ? s : String.format("%s, %s", result, s);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the pkApp
|
||||
@@ -115,4 +126,18 @@ public class AppBean implements Serializable {
|
||||
public void setRepositoryUrl(String repositoryUrl) {
|
||||
this.repositoryUrl = repositoryUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the workpackages
|
||||
*/
|
||||
public String[] getWorkpackages() {
|
||||
return workpackages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param workpackages the workpackages to set
|
||||
*/
|
||||
public void setWorkpackages(String[] workpackages) {
|
||||
this.workpackages = workpackages;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-2">Name</div>
|
||||
<div class="col-10" th:text="${app.name}"></div>
|
||||
<div class="col-10 fw-bold" th:text="${app.name}"></div>
|
||||
<div class="col-2">Beschreibung</div>
|
||||
<div class="col-10" th:text="${app.description}"></div>
|
||||
<div class="col-2">Basisfunktion</div>
|
||||
<div class="col-10" th:text="${app.basicFunctionality}"></div>
|
||||
<div class="col-2">URL der Entwicklung</div>
|
||||
<div class="col-10" th:text="${app.repositoryUrl}"></div>
|
||||
<div class="col-10"><a th:href="${app.repositoryUrl}" target="_blank" th:text="${app.repositoryUrl}"></a></div>
|
||||
<div class="col-2" th:if="${app.fkReplacedByApp}">Ersetzt durch andere App</div>
|
||||
<div class="col-10" th:if="${app.fkReplacedByApp}">
|
||||
<a th:href="@{/projectmanagement/app/{id}/assign(id=${app.fkReplacedByApp})}" th:text="${app.fkReplacedByApp}"></a>
|
||||
@@ -28,7 +28,7 @@
|
||||
<th:block th:with="b=${bundleMap.get(app.fkBundle)}">
|
||||
<div th:text="${b.name}"></div>
|
||||
<div th:text="${b.description}"></div>
|
||||
</h:block>
|
||||
</th:block>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<td th:text="${b.name}"></td>
|
||||
<td th:text="${b.description}"></td>
|
||||
<td><a th:href="${b.repositoryUrl}" target="_blank">gitlab</a></td>
|
||||
<td><a th:href="@{/projectmanagement/app/{id}/assign(id=${b.pkApp})}">zuordnen</a></td>
|
||||
<td><a th:href="@{/projectmanagement/app/{id}/assign(id=${b.pkApp})}">zuordnen</a><span th:text="' (' + ${b.workpackagesString} + ')'" th:if="${b.workpackagesString}"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
Reference in New Issue
Block a user