diff -r 6eede6088d41 -r 3f30adba1c63 src/main/kotlin/de/uapcore/lightpit/entities/Issue.kt --- a/src/main/kotlin/de/uapcore/lightpit/entities/Issue.kt Sun Dec 20 11:06:25 2020 +0100 +++ b/src/main/kotlin/de/uapcore/lightpit/entities/Issue.kt Mon Dec 21 18:29:34 2020 +0100 @@ -25,81 +25,32 @@ package de.uapcore.lightpit.entities +import de.uapcore.lightpit.types.IssueCategory +import de.uapcore.lightpit.types.IssueStatus +import de.uapcore.lightpit.types.IssueStatusPhase import java.sql.Date import java.sql.Timestamp import java.time.Instant -import kotlin.math.roundToInt -data class IssueStatusPhase(val number: Int) { - companion object { - val Open = IssueStatusPhase(0) - val WorkInProgress = IssueStatusPhase(1) - val Done = IssueStatusPhase(2) - } -} - -enum class IssueStatus(val phase: IssueStatusPhase) { - InSpecification(IssueStatusPhase.Open), - ToDo(IssueStatusPhase.Open), - Scheduled(IssueStatusPhase.Open), - InProgress(IssueStatusPhase.WorkInProgress), - InReview(IssueStatusPhase.WorkInProgress), - Done(IssueStatusPhase.Done), - Rejected(IssueStatusPhase.Done), - Withdrawn(IssueStatusPhase.Done), - Duplicate(IssueStatusPhase.Done); -} - -enum class IssueCategory { - Feature, Improvement, Bug, Task, Test -} - -data class Issue(var id: Int) { - - var project: Project? = null - var component: Component? = null +data class Issue(override var id: Int, var project: Project, var component: Component? = null) : Entity { var status = IssueStatus.InSpecification var category = IssueCategory.Feature - var subject: String? = null + var subject: String = "" var description: String? = null var assignee: User? = null - var affectedVersions = emptyList() - var resolvedVersions = emptyList() - var created: Timestamp = Timestamp.from(Instant.now()) var updated: Timestamp = Timestamp.from(Instant.now()) var eta: Date? = null + var affectedVersions = emptyList() + var resolvedVersions = emptyList() + /** * An issue is overdue, if it is not done and the ETA is before the current time. */ val overdue get() = status.phase != IssueStatusPhase.Done && eta?.before(Date(System.currentTimeMillis())) ?: false } -class IssueSummary { - var open = 0 - var active = 0 - var done = 0 - - val total get() = open + active + done - - val openPercent get() = 100 - activePercent - donePercent - val activePercent get() = if (total > 0) (100f * active / total).roundToInt() else 0 - val donePercent get() = if (total > 0) (100f * done / total).roundToInt() else 100 - - /** - * Adds the specified issue to the summary by incrementing the respective counter. - * @param issue the issue - */ - fun add(issue: Issue) { - when (issue.status.phase) { - IssueStatusPhase.Open -> open++ - IssueStatusPhase.WorkInProgress -> active++ - IssueStatusPhase.Done -> done++ - } - } -} -