# HG changeset patch # User Mike Becker # Date 1747567137 -7200 # Node ID 3795a72e2f16d856bd4fee9ad8da9f5f3ca2e3fb # Parent ec919d255757588f1e05e864216d9ae195cf275b add resolve-button to issue view - resolves #658 diff -r ec919d255757 -r 3795a72e2f16 src/main/kotlin/de/uapcore/lightpit/Constants.kt --- a/src/main/kotlin/de/uapcore/lightpit/Constants.kt Sun May 18 12:49:17 2025 +0200 +++ b/src/main/kotlin/de/uapcore/lightpit/Constants.kt Sun May 18 13:18:57 2025 +0200 @@ -26,7 +26,7 @@ package de.uapcore.lightpit object Constants { - const val VERSION_DATE = "2025-05-17" + const val VERSION_DATE = "2025-05-18" /** * The path where the JSP files reside. diff -r ec919d255757 -r 3795a72e2f16 src/main/kotlin/de/uapcore/lightpit/logic/IssueLogic.kt --- a/src/main/kotlin/de/uapcore/lightpit/logic/IssueLogic.kt Sun May 18 12:49:17 2025 +0200 +++ b/src/main/kotlin/de/uapcore/lightpit/logic/IssueLogic.kt Sun May 18 13:18:57 2025 +0200 @@ -6,6 +6,7 @@ import de.uapcore.lightpit.entities.* import de.uapcore.lightpit.types.IssueCategory import de.uapcore.lightpit.types.IssueStatus +import de.uapcore.lightpit.types.IssueStatusPhase import de.uapcore.lightpit.types.RelationType import de.uapcore.lightpit.viewmodel.IssueDetailView import de.uapcore.lightpit.viewmodel.PathInfos @@ -138,6 +139,19 @@ return true } +fun issueQuickResolve(dao: DataAccessObject, issue: Issue) { + if (issue.status.phase == IssueStatusPhase.Done) return + if (issue.isTrackingVariantStatus) { + issue.variantStatus.filter { it.value.phase != IssueStatusPhase.Done }.keys.forEach { + issue.variantStatus[it] = IssueStatus.Done + } + } else { + issue.status = IssueStatus.Done + } + issue.updateStatusFromVariants() + dao.updateIssue(issue) +} + fun renderIssueView( http: HttpRequest, dao: DataAccessObject, diff -r ec919d255757 -r 3795a72e2f16 src/main/kotlin/de/uapcore/lightpit/servlet/IssuesServlet.kt --- a/src/main/kotlin/de/uapcore/lightpit/servlet/IssuesServlet.kt Sun May 18 12:49:17 2025 +0200 +++ b/src/main/kotlin/de/uapcore/lightpit/servlet/IssuesServlet.kt Sun May 18 13:18:57 2025 +0200 @@ -19,6 +19,7 @@ get("/search", this::issueSearch) get("/%issue", this::issue) get("/%issue/edit", this::issueForm) + get("/%issue/resolve", this::issueResolve) post("/%issue/comment", this::issueComment) post("/%issue/relation", this::issueRelation) get("/%issue/removeRelation", this::issueRemoveRelation) @@ -56,6 +57,16 @@ renderIssueView(http, dao, issue, pathInfos) } + private fun issueResolve(http: HttpRequest, dao: DataAccessObject) { + val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue) + if (issue == null) { + http.response.sendError(404) + return + } + issueQuickResolve(dao, issue) + http.renderCommit("${pathInfos.issuesHref}${issue.id}") + } + private fun issueSearch(http: HttpRequest, dao: DataAccessObject) { val query = http.param("q") if (query.isNullOrBlank()) { diff -r ec919d255757 -r 3795a72e2f16 src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt --- a/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt Sun May 18 12:49:17 2025 +0200 +++ b/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt Sun May 18 13:18:57 2025 +0200 @@ -63,6 +63,7 @@ get("/%project/issues/%version/%component/%variant/%issue", this::issue) get("/%project/issues/%version/%component/%variant/%issue/edit", this::issueForm) + get("/%project/issues/%version/%component/%variant/%issue/resolve", this::issueResolve) post("/%project/issues/%version/%component/%variant/%issue/comment", this::issueComment) post("/%project/issues/%version/%component/%variant/%issue/relation", this::issueRelation) get("/%project/issues/%version/%component/%variant/%issue/removeRelation", this::issueRemoveRelation) @@ -395,6 +396,18 @@ } } + private fun issueResolve(http: HttpRequest, dao: DataAccessObject) { + val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue) + if (issue == null) { + http.response.sendError(404) + return + } + issueQuickResolve(dao, issue) + withPathInfo(http, dao)?.let { path -> + http.renderCommit("${path.issuesHref}${issue.id}") + } + } + private fun issueForm(http: HttpRequest, dao: DataAccessObject) { withPathInfo(http, dao)?.let { path -> val issue = http.pathParams["issue"]?.toIntOrNull()?.let(dao::findIssue) ?: Issue( diff -r ec919d255757 -r 3795a72e2f16 src/main/resources/localization/strings.properties --- a/src/main/resources/localization/strings.properties Sun May 18 12:49:17 2025 +0200 +++ b/src/main/resources/localization/strings.properties Sun May 18 13:18:57 2025 +0200 @@ -37,6 +37,7 @@ button.issue.create.another=Create another Issue button.issue.create=New Issue button.issue.edit=Edit +button.issue.resolve=Resolve button.okay=OK button.project.create=New Project button.project.edit=Edit Project diff -r ec919d255757 -r 3795a72e2f16 src/main/resources/localization/strings_de.properties --- a/src/main/resources/localization/strings_de.properties Sun May 18 12:49:17 2025 +0200 +++ b/src/main/resources/localization/strings_de.properties Sun May 18 13:18:57 2025 +0200 @@ -37,6 +37,7 @@ button.issue.create.another=Weiteren Vorgang erstellen button.issue.create=Neuer Vorgang button.issue.edit=Bearbeiten +button.issue.resolve=Erledigt button.okay=OK button.project.create=Neues Projekt button.project.edit=Projekt Bearbeiten diff -r ec919d255757 -r 3795a72e2f16 src/main/webapp/WEB-INF/changelogs/changelog-de.jspf --- a/src/main/webapp/WEB-INF/changelogs/changelog-de.jspf Sun May 18 12:49:17 2025 +0200 +++ b/src/main/webapp/WEB-INF/changelogs/changelog-de.jspf Sun May 18 13:18:57 2025 +0200 @@ -28,6 +28,7 @@ diff -r ec919d255757 -r 3795a72e2f16 src/main/webapp/WEB-INF/changelogs/changelog.jspf --- a/src/main/webapp/WEB-INF/changelogs/changelog.jspf Sun May 18 12:49:17 2025 +0200 +++ b/src/main/webapp/WEB-INF/changelogs/changelog.jspf Sun May 18 13:18:57 2025 +0200 @@ -28,6 +28,7 @@ diff -r ec919d255757 -r 3795a72e2f16 src/main/webapp/WEB-INF/jsp/issue-view.jsp --- a/src/main/webapp/WEB-INF/jsp/issue-view.jsp Sun May 18 12:49:17 2025 +0200 +++ b/src/main/webapp/WEB-INF/jsp/issue-view.jsp Sun May 18 13:18:57 2025 +0200 @@ -28,6 +28,7 @@ <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@page import="de.uapcore.lightpit.types.IssueStatusPhase" %> @@ -176,6 +177,11 @@ + + + + +