Skip to content

Commit 50d6738

Browse files
authored
add new totals calculation logic
1 parent 8c67624 commit 50d6738

File tree

6 files changed

+48
-11
lines changed

6 files changed

+48
-11
lines changed

src/interfaces/IProjectData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface IProjectData {
77
doneOrDeployIssues: ICardWithIssue[];
88
allPlannedIssues: ICardWithIssue[];
99
issuesToSolve: ICardWithIssue[];
10+
backlogUnassignedIssues: ICardWithIssue[];
1011
// raw:
1112
backlogIssues: ICardWithIssue[];
1213
committedIssues: ICardWithIssue[];

src/utils/filterPlannedProjectData.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,29 @@
11
import { IProjectData } from '../interfaces/IProjectData';
22
import { ICardWithIssue } from '../interfaces/ICardWithIssue';
33

4+
// const filterUnplannedCards = (cardsWithIssue: ICardWithIssue[]): ICardWithIssue[] => {
5+
// const cards = filterNewCards(cardsWithIssue);
6+
// return filterUnassignedIssues(cards);
7+
// };
8+
9+
export const filterUnassignedIssues = (cardsWithIssue: ICardWithIssue[]): ICardWithIssue[] => {
10+
const cards = cardsWithIssue.filter(({ issue }) => {
11+
if (!issue) {
12+
return true;
13+
}
14+
15+
return (issue.assignees.length > 0);
16+
});
17+
18+
return cards;
19+
};
20+
421
const filterNewCards = (cardsWithIssue: ICardWithIssue[]): ICardWithIssue[] => {
5-
return cardsWithIssue.filter((card) => {
22+
const cards = cardsWithIssue.filter((card) => {
623
return !card.isNew;
724
});
25+
26+
return cards;
827
};
928

1029
export const filterPlannedProjectData = (data: IProjectData): IProjectData => {

src/utils/getProjectData.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { TColumnTypes } from '../interfaces/TColumnTypes';
55
import { IProjectData } from '../interfaces/IProjectData';
66
import { IProjectWithConfig } from '../interfaces/IProjectWithConfig';
77
import { IConfig } from '../interfaces/IConfig';
8+
import { filterUnassignedIssues } from './filterPlannedProjectData';
89

910
export const getProjectData = async (
1011
projectKit: ProjectsOctoKit,
@@ -89,6 +90,7 @@ export const getProjectData = async (
8990
const inWorkIssues = [...progressIssues, ...inReviewIssues];
9091
const doneOrDeployIssues = [...waitingToDeployIssues, ...doneIssues];
9192
const allPlannedIssues = [...blockedIssues, ...committedIssues, ...inWorkIssues, ...doneOrDeployIssues];
93+
const backlogUnassignedIssues = filterUnassignedIssues([...blockedIssues, ...committedIssues]);
9294
const toSolveIssues = [...inWorkIssues, ...blockedIssues, ...committedIssues];
9395

9496
return {
@@ -98,6 +100,7 @@ export const getProjectData = async (
98100
doneOrDeployIssues,
99101
allPlannedIssues,
100102
issuesToSolve: toSolveIssues,
103+
backlogUnassignedIssues,
101104
// plain
102105
backlogIssues,
103106
committedIssues,

src/utils/getProjectStats.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import { IConfig } from '../interfaces/IConfig';
22
import { IProjectData } from '../interfaces/IProjectData';
33
import { IProjectStats } from '../interfaces/IProjectStats';
4-
import { IWrappedIssue } from '../interfaces/IWrappedIssue';
5-
import { TRepoIssue } from '../interfaces/TRepoIssue';
64
import { getWorkDays } from '../views/renderDaysLeft';
75
import { arrayUnique } from './arrayUnique';
86
import { flattenArray } from './flatternArray';
97
import { notEmpty } from './functional/notEmpty';
108
import { pluck } from './functional/pluck';
119
import { ICardWithIssue } from '../interfaces/ICardWithIssue';
1210
import { IProjectWithConfig } from '../interfaces/IProjectWithConfig';
11+
import { filterUnassignedIssues } from './filterPlannedProjectData';
1312

1413
const getDevelopers = (
1514
cardsWithIssue: ICardWithIssue[],
@@ -98,15 +97,17 @@ export const getProjectStats = (
9897
} = data;
9998

10099
const daysLeft = getWorkDays(config);
100+
const plannedIssuesWithoutUnasigned = filterUnassignedIssues(allPlannedIssues);
101+
const plannedIssuesToSolve = filterUnassignedIssues(toSolveIssues);
101102

102-
const doneRate = doneOrDeployIssues.length / allPlannedIssues.length;
103-
const inWorkRate = inWorkIssues.length / allPlannedIssues.length;
104-
const committedRate = committedIssues.length / allPlannedIssues.length;
103+
const doneRate = doneOrDeployIssues.length / plannedIssuesWithoutUnasigned.length;
104+
const inWorkRate = inWorkIssues.length / plannedIssuesWithoutUnasigned.length;
105+
const committedRate = filterUnassignedIssues(committedIssues).length / plannedIssuesWithoutUnasigned.length;
105106

106107
const developers = getDevelopers(allPlannedIssues, data.project);
107108

108109
const issuesDeveloperLeftRatio = toSolveIssues.length / developers.length;
109-
const issuesDeveloperRatio = allPlannedIssues.length / developers.length;
110+
const issuesDeveloperRatio = toSolveIssues.length / developers.length;
110111

111112
const issuesDayLeftRatio = daysLeft
112113
? toSolveIssues.length / Math.max(daysLeft.businessDaysLeft, 1)

src/views/renderProjectTitle.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const renderProjectTitle = (
2020
const { allPlannedIssues: plannedAllPlannedIssues } = plannedData;
2121

2222
const surgeRate = (allPlannedIssues.length - plannedAllPlannedIssues.length) / plannedAllPlannedIssues.length;
23-
const surgeEmoji = (surgeRate >= .075)
23+
const surgeEmoji = (surgeRate >= .1)
2424
? '💥'
2525
: '';
2626

@@ -30,6 +30,6 @@ export const renderProjectTitle = (
3030

3131
const suffix = addTitle('Items added after sprint start date', surgeString);
3232

33-
const projectTitle = `## 🎃 ${project.name} - ${rateToPercent(doneRate)} done${suffix}`;
33+
const projectTitle = `## ${project.name} - ${rateToPercent(doneRate)} done${suffix}`;
3434
return projectTitle;
3535
};

testConfig2.json

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,29 @@
44
"sprintDuration": 21,
55
"sprintNumberHolidays": 0,
66
"sprintStartDate": "2020-10-19",
7-
"boardIssue": "https://github.com/legomushroom/codespaces-board/issues/29",
7+
"boardIssue": "https://github.com/legomushroom/codespaces-board-action-runner/issues/1",
88
"repos": [
99
{
1010
"owner": "microsoft",
1111
"repo": "vssaas-planning",
1212
"projects": [
1313
{
1414
"id": 6,
15-
"trackLabels": ["port-forwarding", "workbench", "serverless", "performance"],
15+
"trackLabels": [
16+
"port-forwarding",
17+
"workbench",
18+
"serverless",
19+
"performance"
20+
],
1621
"priorityLabels": ["p0", "p1"],
22+
"developers": [
23+
"legomushroom",
24+
"plisy",
25+
"GideonCheruiyot",
26+
"VincentDondain",
27+
"wachaudh",
28+
"klvnraju"
29+
],
1730
"isCheckListItems": true
1831
}
1932
]

0 commit comments

Comments
 (0)