diff -r d8ec2d8ffa82 -r ca5501d851fa src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt --- a/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Tue Jan 03 18:25:51 2023 +0100 +++ b/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Sun Jan 08 17:07:26 2023 +0100 @@ -27,6 +27,7 @@ import de.uapcore.lightpit.entities.* import de.uapcore.lightpit.types.IssueHistoryType +import de.uapcore.lightpit.types.RelationType import de.uapcore.lightpit.types.WebColor import de.uapcore.lightpit.viewmodel.ComponentSummary import de.uapcore.lightpit.viewmodel.IssueSummary @@ -480,11 +481,12 @@ select issueid, i.project, p.name as projectname, p.node as projectnode, component, c.name as componentname, c.node as componentnode, - status, category, subject, i.description, + status, phase, category, subject, i.description, userid, username, givenname, lastname, mail, created, updated, eta, affected, resolved from lpit_issue i join lpit_project p on i.project = projectid + join lpit_issue_phases using (status) left join lpit_component c on component = c.id left join lpit_user on userid = assignee """.trimIndent() @@ -534,15 +536,17 @@ return i } - override fun listIssues(project: Project): List = - withStatement("$issueQuery where i.project = ?") { + override fun listIssues(project: Project, includeDone: Boolean): List = + withStatement("$issueQuery where i.project = ? and (? or phase < 2)") { setInt(1, project.id) + setBoolean(2, includeDone) queryAll { it.extractIssue() } } - override fun listIssues(project: Project, version: Version?, component: Component?): List = + override fun listIssues(project: Project, includeDone: Boolean, version: Version?, component: Component?): List = withStatement( - """$issueQuery where i.project = ? and + """$issueQuery where i.project = ? and + (? or phase < 2) and (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and (not ? or component = ?) and (not ? or component is null) """.trimIndent() @@ -559,8 +563,9 @@ } } setInt(1, project.id) - applyFilter(version, 2, 4, 3) - applyFilter(component, 5, 7, 6) + setBoolean(2, includeDone) + applyFilter(version, 3, 5, 4) + applyFilter(component, 6, 8, 7) queryAll { it.extractIssue() } } @@ -678,6 +683,21 @@ queryAll { IssueRelation(issue, findIssue(it.getInt("from_issue"))!!, it.getEnum("type"), true) } }.forEach(this::add) } + + override fun getIssueRelationMap(project: Project, includeDone: Boolean): IssueRelationMap = + withStatement( + """ + select r.from_issue, r.to_issue, r.type + from lpit_issue_relation r + join lpit_issue i on i.issueid = r.from_issue + join lpit_issue_phases p on i.status = p.status + where i.project = ? and (? or p.phase < 2) + """.trimIndent() + ) { + setInt(1, project.id) + setBoolean(2, includeDone) + queryAll { Pair(it.getInt("from_issue"), Pair(it.getInt("to_issue"), it.getEnum("type"))) } + }.groupBy({it.first},{it.second}) // //