project management
This commit is contained in:
@@ -13,15 +13,21 @@
|
||||
<main layout:fragment="content">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-4 col-lg-2 card dashboardcard" th:each="p : ${projects}">
|
||||
<div class="card-header" th:text="${p.name}"></div>
|
||||
<div class="card-body">
|
||||
<div th:each="w : ${p.workpackages}">
|
||||
<a th:href="@{/projectmanagement/workpackage/{id}(id=${w.pkWorkpackage})}" th:text="${w.name}"></a>
|
||||
<div class="col-sm-12 col-md-3 col-lg-2 dashboardcard" th:each="p : ${projects}">
|
||||
<div class="card">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<span th:text="${p.funderName}"></span>:
|
||||
<span class="fw-bold ms-auto" th:text="${p.name}"></span>
|
||||
<a th:href="@{/projectmanagement/project/{p}/edit(p=${p.pkProject})}" class="btn btn-link ms-auto" title="bearbeiten">edit</a>
|
||||
</div>
|
||||
<a th:href="@{/projectmanagement/project/{id}/addWorkpackage(id=${p.pkProject})}" class="btn btn-outline-secondary">Workpackage anlegen</a>
|
||||
<div class="card-body">
|
||||
<div th:each="w : ${p.workpackages}">
|
||||
<a th:href="@{/projectmanagement/workpackage/{id}(id=${w.pkWorkpackage})}" th:text="${w.name}"></a>
|
||||
</div>
|
||||
<a th:href="@{/projectmanagement/project/{id}/addWorkpackage(id=${p.pkProject})}" class="btn btn-outline-secondary">Workpackage anlegen</a>
|
||||
</div>
|
||||
<div class="card-footer" th:text="${p.description}"></div>
|
||||
</div>
|
||||
<div class="card-footer" th:text="${p.description}"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:sec="http://www.thymeleaf.org/extras/spring-security" layout:decorate="~{layout/main.html}">
|
||||
<head>
|
||||
<title>Projektmanagement</title>
|
||||
</head>
|
||||
<body>
|
||||
<font layout:fragment="title">Projekt</font>
|
||||
<ul layout:fragment="menu">
|
||||
<li class="nav-item" sec:authorize="hasRole('timetrack_user')">
|
||||
<a class="nav-link btn btn-success btn-white-text" th:href="@{/projectmanagement}">abbrechen</a>
|
||||
</li>
|
||||
</ul>
|
||||
<main layout:fragment="content">
|
||||
<div class="container">
|
||||
TODO: Maske zum Anlegen eines neuen Projektes
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:sec="http://www.thymeleaf.org/extras/spring-security" layout:decorate="~{layout/main.html}">
|
||||
<head>
|
||||
<title>Projektmanagement</title>
|
||||
</head>
|
||||
<body>
|
||||
<font layout:fragment="title">Projekt</font>
|
||||
<ul layout:fragment="menu">
|
||||
<li class="nav-item" sec:authorize="hasRole('timetrack_user')">
|
||||
<a class="nav-link btn btn-secondary btn-white-text" th:href="@{/projectmanagement}">abbrechen</a>
|
||||
</li>
|
||||
</ul>
|
||||
<main layout:fragment="content">
|
||||
<div class="container">
|
||||
<div class="alert alert-danger" th:if="${error}" th:text="${error}"></div>
|
||||
<form th:action="@{/projectmanagement/upsert}" method="post" th:object="${bean}">
|
||||
<div class="container m-2">
|
||||
<div class="row g-2">
|
||||
<div class="col-2" th:if="${bean.pkProject}">ID</div>
|
||||
<div class="col-10" th:if="${bean.pkProject}">
|
||||
<input type="text" class="form-control" th:field="*{pkProject}" readonly="readonly" />
|
||||
</div>
|
||||
<div class="col-2">Name</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{name}" />
|
||||
</div>
|
||||
<div class="col-2">Beschreibung</div>
|
||||
<div class="col-10">
|
||||
<textarea class="form-control" th:field="*{description}"></textarea>
|
||||
</div>
|
||||
<div class="col-2">Geldgeber</div>
|
||||
<div class="col-10">
|
||||
<select th:field="*{fkFunder}" class="select-field">
|
||||
<option value="" label="--- bitte wählen ---" />
|
||||
<option th:each="f : ${funders}" th:label="${f.name}" th:value="${f.pkFunder}" />
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-2"></div>
|
||||
<div class="col-5">
|
||||
<input type="submit" class="btn btn-primary" value="Speichern">
|
||||
</div>
|
||||
<div class="col-5" th:if="${bean.pkProject}">
|
||||
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">Löschen</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="deleteModalLabel">Bestätigung für Löschvorgang</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Schließen"></button>
|
||||
</div>
|
||||
<div class="modal-body">Bist du sicher, dass du dieses Element löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Abbrechen</button>
|
||||
<a th:href="@{/projectmanagement/{p}/delete(p=${bean.pkProject})}" class="btn btn-danger">Löschen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -7,49 +7,63 @@
|
||||
<font layout:fragment="title">Workpackage</font>
|
||||
<ul layout:fragment="menu">
|
||||
<li class="nav-item" sec:authorize="hasRole('timetrack_user')">
|
||||
<a class="nav-link btn btn-success btn-white-text" th:href="@{/projectmanagement}">abbrechen</a>
|
||||
<a class="nav-link btn btn-secondary btn-white-text" th:href="@{/projectmanagement}">abbrechen</a>
|
||||
</li>
|
||||
</ul>
|
||||
<main layout:fragment="content">
|
||||
<div class="container">
|
||||
<div th:unless="${bean.pkWorkpackage}">
|
||||
TODO: Maske zum Anlegen eines neuen Workpackages für Projekt <span th:text="${bean.fkProject}"></span>
|
||||
</div>
|
||||
<div th:if="${bean.pkWorkpackage}">
|
||||
<form th:action="@{/projectmanagement/project/{p}/update(p=${bean.fkProject})}" method="post" th:object="${bean}">
|
||||
<div class="container m-2">
|
||||
<div class="row g-2">
|
||||
<div class="col-2">ID</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{pkWorkpackage}" readonly="readonly" />
|
||||
</div>
|
||||
<div class="col-2">Name</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{name}" />
|
||||
</div>
|
||||
<div class="col-2">Beschreibung</div>
|
||||
<div class="col-10">
|
||||
<textarea class="form-control" th:field="*{description}"></textarea>
|
||||
</div>
|
||||
<div class="col-2">Milestone-URL</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{milestoneUrl}" />
|
||||
</div>
|
||||
<div class="col-2">Auftragsdokument</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{contractUrl}" />
|
||||
</div>
|
||||
<div class="col-2">geplante Fertigstellung</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{plannedDuedate}" />
|
||||
</div>
|
||||
<div class="col-2"></div>
|
||||
<div class="col-10">
|
||||
<input type="submit" class="btn btn-primary" value="Speichern">
|
||||
</div>
|
||||
<div class="alert alert-danger" th:if="${error}" th:text="${error}"></div>
|
||||
<form th:action="@{/projectmanagement/project/{p}/upsert(p=${bean.fkProject})}" method="post" th:object="${bean}">
|
||||
<div class="container m-2">
|
||||
<div class="row g-2">
|
||||
<div class="col-2" th:if="${bean.pkWorkpackage}">ID</div>
|
||||
<div class="col-10" th:if="${bean.pkWorkpackage}">
|
||||
<input type="text" class="form-control" th:field="*{pkWorkpackage}" readonly="readonly" />
|
||||
</div>
|
||||
<div class="col-2">Name</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{name}" />
|
||||
</div>
|
||||
<div class="col-2">Beschreibung</div>
|
||||
<div class="col-10">
|
||||
<textarea class="form-control" th:field="*{description}"></textarea>
|
||||
</div>
|
||||
<div class="col-2">Milestone-URL</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{milestoneUrl}" />
|
||||
</div>
|
||||
<div class="col-2">Auftragsdokument</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{contractUrl}" />
|
||||
</div>
|
||||
<div class="col-2">geplante Fertigstellung</div>
|
||||
<div class="col-10">
|
||||
<input type="text" class="form-control" th:field="*{plannedDuedate}" />
|
||||
</div>
|
||||
<div class="col-2"></div>
|
||||
<div class="col-5">
|
||||
<input type="submit" class="btn btn-primary" value="Speichern">
|
||||
</div>
|
||||
<div class="col-5" th:if="${bean.pkWorkpackage}">
|
||||
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">Löschen</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="deleteModalLabel">Bestätigung für Löschvorgang</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Schließen"></button>
|
||||
</div>
|
||||
<div class="modal-body">Bist du sicher, dass du dieses Element löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Abbrechen</button>
|
||||
<a th:href="@{/projectmanagement/workpackage/{p}/delete(p=${bean.pkWorkpackage})}" class="btn btn-danger">Löschen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
@@ -1,44 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
xmlns:sec="http://www.thymeleaf.org/extras/spring-security" layout:decorate="~{layout/main.html}">
|
||||
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:sec="http://www.thymeleaf.org/extras/spring-security" layout:decorate="~{layout/main.html}">
|
||||
|
||||
<head>
|
||||
<title>Timetrack</title>
|
||||
<title>Timetrack</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<ul layout:fragment="menu">
|
||||
</ul>
|
||||
<main layout:fragment="content">
|
||||
<div class="card dashboardcard">
|
||||
<div class="card-header"><a class="btn btn-seondary btn-bordered btn-secondaryhover" style="width: 100%"
|
||||
th:href="@{/done/list}">heutige Arbeitszeiten</a></div>
|
||||
<div class="card-body">
|
||||
<div class="container">
|
||||
<div class="container">
|
||||
<div class="card dashboardcard">
|
||||
<div class="card-header">
|
||||
<a class="btn btn-seondary btn-bordered btn-secondaryhover" style="width: 100%" th:href="@{/done/list}">heutige Arbeitszeiten</a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-8"><span class="spanlabel">Start:</span></div>
|
||||
<div class="col-4"><span class="emphgreen round-border border-frame" th:text="${sum.start}"></span></div>
|
||||
<div class="col-8"><span class="spanlabel">Ende:</span></div>
|
||||
<div class="col-4"><span class="emphgreen round-border border-frame" th:text="${sum.end}"></span></div>
|
||||
<div class="col-8"><span class="spanlabel">Arbeitszeit total:</span></div>
|
||||
<div class="col-4"><span class="emphblue round-border border-frame" th:text="${sum.total}"></span></div>
|
||||
<div class="col-8"><span class="spanlabel">Pausezeit total:</span></div>
|
||||
<div class="col-4"><span class="emphorange round-border border-frame" th:text="${sum.pause}"></span></div>
|
||||
<div class="col-8"><span class="spanlabel">Überstunden:</span></div>
|
||||
<div class="col-4"><span class="emphred round-border border-frame" th:text="${sum.overdue}"></span></div>
|
||||
<div class="col-8">
|
||||
<span class="spanlabel">Start:</span>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="emphgreen round-border border-frame" th:text="${sum.start}"></span>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<span class="spanlabel">Ende:</span>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="emphgreen round-border border-frame" th:text="${sum.end}"></span>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<span class="spanlabel">Arbeitszeit total:</span>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="emphblue round-border border-frame" th:text="${sum.total}"></span>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<span class="spanlabel">Pausezeit total:</span>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="emphorange round-border border-frame" th:text="${sum.pause}"></span>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<span class="spanlabel">Überstunden:</span>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="emphred round-border border-frame" th:text="${sum.overdue}"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<span th:if="${sum.getBillingTime('WP2') != '0,0 h'}"><span class="billing WP2">WP2</span><span
|
||||
th:text="${sum.getBillingTime('WP2')}" class="distfat"></span></span> <span
|
||||
th:if="${sum.getBillingTime('WP4') != '0,0 h'}"><span class="billing WP4">WP4</span><span
|
||||
th:text="${sum.getBillingTime('WP4')}" class="distfat"></span></span> <span
|
||||
th:if="${sum.getBillingTime('WP5') != '0,0 h'}"><span class="billing WP5">WP5</span><span
|
||||
th:text="${sum.getBillingTime('WP5')}" class="distfat"></span></span> <span
|
||||
th:if="${sum.getBillingTime('TA3') != '0,0 h'}"><span class="billing TA3">TA3</span><span
|
||||
th:text="${sum.getBillingTime('TA3')}" class="distfat"></span></span> <span class="billing">X</span><span
|
||||
th:text="${sum.getBillingTime(null)}" class="distfat"></span>
|
||||
<div class="card-footer">
|
||||
<span th:if="${sum.getBillingTime('WP2') != '0,0 h'}"><span class="billing WP2">WP2</span><span th:text="${sum.getBillingTime('WP2')}" class="distfat"></span></span> <span
|
||||
th:if="${sum.getBillingTime('WP4') != '0,0 h'}"><span class="billing WP4">WP4</span><span th:text="${sum.getBillingTime('WP4')}" class="distfat"></span></span> <span
|
||||
th:if="${sum.getBillingTime('WP5') != '0,0 h'}"><span class="billing WP5">WP5</span><span th:text="${sum.getBillingTime('WP5')}" class="distfat"></span></span> <span
|
||||
th:if="${sum.getBillingTime('TA3') != '0,0 h'}"><span class="billing TA3">TA3</span><span th:text="${sum.getBillingTime('TA3')}" class="distfat"></span></span> <span class="billing">X</span><span
|
||||
th:text="${sum.getBillingTime(null)}" class="distfat"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
Reference in New Issue
Block a user