src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt

changeset 268
ca5501d851fa
parent 263
aa22103809cd
child 284
671c1c8fbf1c
--- 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<Issue> =
-        withStatement("$issueQuery where i.project = ?") {
+    override fun listIssues(project: Project, includeDone: Boolean): List<Issue> =
+        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<Issue> =
+    override fun listIssues(project: Project, includeDone: Boolean, version: Version?, component: Component?): List<Issue> =
         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<RelationType>("type"))) }
+        }.groupBy({it.first},{it.second})
     //</editor-fold>
 
     //<editor-fold desc="IssueComment">

mercurial