#62 Ajoute d'une configuration pour les status à considérer comme terminé

Signed-off-by: Gato <cedric@goutailler-olivier.fr>
This commit is contained in:
2026-05-30 14:43:06 +02:00
parent 43b275b064
commit 401da09f8f
21 changed files with 251 additions and 53 deletions
+8 -5
View File
@@ -2,6 +2,7 @@ import { Component, computed, inject } from '@angular/core';
import { Router } from '@angular/router';
import { IssueEntity, IssuesStore } from '../issues/issues.store';
import { MilestoneEntity, MilestonesStore } from '../milestones/milestones.store';
import { StatusesStore } from '../statuses/statuses.store';
@Component({
selector: 'app-dashboard',
@@ -13,6 +14,7 @@ export class Dashboard {
private readonly router = inject(Router);
private readonly issuesStore = inject(IssuesStore);
private readonly milestonesStore = inject(MilestonesStore);
private readonly statusesStore = inject(StatusesStore);
constructor() {
this.issuesStore.load();
@@ -31,7 +33,8 @@ export class Dashboard {
protected readonly completionRate = computed(() => {
const total = this.totalIssues();
if (total === 0) return 0;
return Math.round((this.statusCounts().done / total) * 100);
const done = this.issuesStore.issues().filter((i) => this.statusesStore.isCompleted(i.status)).length;
return Math.round((done / total) * 100);
});
protected readonly totalMilestones = computed(() => this.milestonesStore.milestones().length);
@@ -57,7 +60,7 @@ export class Dashboard {
protected readonly highPriorityIssues = computed(() =>
this.issuesStore
.issues()
.filter((i) => (i.priority === 'HAUTE' || i.priority === 'TRES_HAUTE') && i.status !== 'done')
.filter((i) => (i.priority === 'HAUTE' || i.priority === 'TRES_HAUTE') && !this.statusesStore.isCompleted(i.status))
.slice(0, 6),
);
@@ -75,7 +78,7 @@ export class Dashboard {
return this.issuesStore
.issues()
.filter((i) => {
if (!i.dueDate || i.status === 'done') return false;
if (!i.dueDate || this.statusesStore.isCompleted(i.status)) return false;
const due = new Date(i.dueDate);
return due >= now && due <= twoWeeks;
})
@@ -86,7 +89,7 @@ export class Dashboard {
protected readonly overdueCount = computed(() => {
const now = new Date();
return this.issuesStore.issues().filter((i) => {
if (!i.dueDate || i.status === 'done') return false;
if (!i.dueDate || this.statusesStore.isCompleted(i.status)) return false;
return new Date(i.dueDate) < now;
}).length;
});
@@ -95,7 +98,7 @@ export class Dashboard {
if (milestone.issueIds.length === 0) return 0;
const linked = this.issuesStore.issues().filter((i) => milestone.issueIds.includes(i.id));
if (linked.length === 0) return 0;
return Math.round((linked.filter((i) => i.status === 'done').length / linked.length) * 100);
return Math.round((linked.filter((i) => this.statusesStore.isCompleted(i.status)).length / linked.length) * 100);
}
protected formatDate(iso: string): string {