1.1 --- a/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Tue Jan 03 18:25:51 2023 +0100 1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Sun Jan 08 17:07:26 2023 +0100 1.3 @@ -27,6 +27,7 @@ 1.4 1.5 import de.uapcore.lightpit.entities.* 1.6 import de.uapcore.lightpit.types.IssueHistoryType 1.7 +import de.uapcore.lightpit.types.RelationType 1.8 import de.uapcore.lightpit.types.WebColor 1.9 import de.uapcore.lightpit.viewmodel.ComponentSummary 1.10 import de.uapcore.lightpit.viewmodel.IssueSummary 1.11 @@ -480,11 +481,12 @@ 1.12 select issueid, 1.13 i.project, p.name as projectname, p.node as projectnode, 1.14 component, c.name as componentname, c.node as componentnode, 1.15 - status, category, subject, i.description, 1.16 + status, phase, category, subject, i.description, 1.17 userid, username, givenname, lastname, mail, 1.18 created, updated, eta, affected, resolved 1.19 from lpit_issue i 1.20 join lpit_project p on i.project = projectid 1.21 + join lpit_issue_phases using (status) 1.22 left join lpit_component c on component = c.id 1.23 left join lpit_user on userid = assignee 1.24 """.trimIndent() 1.25 @@ -534,15 +536,17 @@ 1.26 return i 1.27 } 1.28 1.29 - override fun listIssues(project: Project): List<Issue> = 1.30 - withStatement("$issueQuery where i.project = ?") { 1.31 + override fun listIssues(project: Project, includeDone: Boolean): List<Issue> = 1.32 + withStatement("$issueQuery where i.project = ? and (? or phase < 2)") { 1.33 setInt(1, project.id) 1.34 + setBoolean(2, includeDone) 1.35 queryAll { it.extractIssue() } 1.36 } 1.37 1.38 - override fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> = 1.39 + override fun listIssues(project: Project, includeDone: Boolean, version: Version?, component: Component?): List<Issue> = 1.40 withStatement( 1.41 - """$issueQuery where i.project = ? and 1.42 + """$issueQuery where i.project = ? and 1.43 + (? or phase < 2) and 1.44 (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and 1.45 (not ? or component = ?) and (not ? or component is null) 1.46 """.trimIndent() 1.47 @@ -559,8 +563,9 @@ 1.48 } 1.49 } 1.50 setInt(1, project.id) 1.51 - applyFilter(version, 2, 4, 3) 1.52 - applyFilter(component, 5, 7, 6) 1.53 + setBoolean(2, includeDone) 1.54 + applyFilter(version, 3, 5, 4) 1.55 + applyFilter(component, 6, 8, 7) 1.56 1.57 queryAll { it.extractIssue() } 1.58 } 1.59 @@ -678,6 +683,21 @@ 1.60 queryAll { IssueRelation(issue, findIssue(it.getInt("from_issue"))!!, it.getEnum("type"), true) } 1.61 }.forEach(this::add) 1.62 } 1.63 + 1.64 + override fun getIssueRelationMap(project: Project, includeDone: Boolean): IssueRelationMap = 1.65 + withStatement( 1.66 + """ 1.67 + select r.from_issue, r.to_issue, r.type 1.68 + from lpit_issue_relation r 1.69 + join lpit_issue i on i.issueid = r.from_issue 1.70 + join lpit_issue_phases p on i.status = p.status 1.71 + where i.project = ? and (? or p.phase < 2) 1.72 + """.trimIndent() 1.73 + ) { 1.74 + setInt(1, project.id) 1.75 + setBoolean(2, includeDone) 1.76 + queryAll { Pair(it.getInt("from_issue"), Pair(it.getInt("to_issue"), it.getEnum<RelationType>("type"))) } 1.77 + }.groupBy({it.first},{it.second}) 1.78 //</editor-fold> 1.79 1.80 //<editor-fold desc="IssueComment">