is done and is overdue stats

This commit is contained in:
Radek Stepan 2014-10-23 19:49:03 -07:00
parent 97ffdd4173
commit 134f8dc635
4 changed files with 39 additions and 72 deletions

File diff suppressed because one or more lines are too long

View File

@ -6,24 +6,32 @@ progress = (a, b) -> 100 * (a / (b + a))
# Calculate the stats for a milestone.
# Is it on time? What is the progress?
module.exports = (milestone) ->
isDone = no ; isOnTime = yes ; isOverdue = no
# Progress in points.
points = progress milestone.issues.closed.size, milestone.issues.open.size
isDone = yes if points is 100
# Milestones with no due date are always on track.
return { 'isOnTime': yes, 'progress': { points } } unless milestone.due_on
return { isOverdue, isOnTime, isDone, 'progress': { points } } unless milestone.due_on
a = +new Date milestone.created_at
b = +new Date
c = +new Date milestone.due_on
# Overdue?
isOverdue = yes if b > c
# Progress in time.
time = progress b - a, c - b
# How many days is 1% of the time?
days = (moment(b).diff(moment(a), 'days')) / 100
# Are we on time?
isOnTime = points > time
{
'isOnTime': points > time
isDone, days, isOnTime, isOverdue
'progress': { points, time }
'days': days
}

View File

@ -11,14 +11,14 @@
{{# { p: projects.list[index[0]] } }}
{{#if p.owner == project.owner && p.name == project.name }}
{{# { milestone: project.milestones[index[1]] } }}
<tr>
<tr class="{{#if milestone.stats.isDone}}done{{/if}}">
<td>
<a class="milestone" href="#{{project.owner}}/{{project.name}}/{{milestone.number}}">{{ milestone.title }}</a>
</td>
<td style="width:1%">
<div class="progress">
<span class="percent">{{Math.floor(milestone.stats.progress.points)}}%</span>
<span class="due">{{{ format.due(milestone.due_on) }}}</span>
<span class="due {{#if milestone.stats.isOverdue}}red{{/if}}">{{{ format.due(milestone.due_on) }}}</span>
<div class="outer bar">
<div class="inner bar {{(milestone.stats.isOnTime) ? 'green' : 'red'}}" style="width:{{milestone.stats.progress.points}}%"></div>
</div>

View File

@ -21,7 +21,7 @@
{{# { project: projects.list[index[0]] } }}
{{#with project}}
{{# { milestone: project.milestones[index[1]] } }}
<tr>
<tr class="{{#if milestone.stats.isDone}}done{{/if}}">
<td class="repo">
<a class="project" href="#{{owner}}/{{name}}">{{owner}}/{{name}}</a>
</td>
@ -31,7 +31,7 @@
<td style="width:1%">
<div class="progress">
<span class="percent">{{Math.floor(milestone.stats.progress.points)}}%</span>
<span class="due">{{{ format.due(milestone.due_on) }}}</span>
<span class="due {{#if milestone.stats.isOverdue}}red{{/if}}">{{{ format.due(milestone.due_on) }}}</span>
<div class="outer bar">
<div class="inner bar {{(milestone.stats.isOnTime) ? 'green' : 'red'}}" style="width:{{milestone.stats.progress.points}}%"></div>
</div>
@ -49,59 +49,4 @@
<div class="footer">
<a href="#"><Icons icon="cog"/> Edit</a>
</div>
</div>
<!--
<tr>
<td><a class="repo" href="#">radekstepan/disposable</a></td>
<td><span class="milestone">Milestone 1.0 <span class="icon down-open"></span></td>
<td>
<div class="progress">
<span class="percent">40%</span>
<span class="due">due on Friday</span>
<div class="outer bar">
<div class="inner bar red" style="width:40%"></div>
</div>
</div>
</td>
</tr>
<tr class="done">
<td><a class="repo" href="#">radekstepan/burnchart</a></td>
<td><span class="milestone">Beta Milestone <span class="icon down-open"></span></a></td>
<td>
<div class="progress">
<span class="percent">100%</span>
<span class="due">due tomorrow</span>
<div class="outer bar">
<div class="inner bar green" style="width:100%"></div>
</div>
</div>
</td>
</tr>
<tr>
<td><a class="repo" href="#">intermine/intermine</a></td>
<td><span class="milestone">Emma Release 96 <span class="icon down-open"></span></a></td>
<td>
<div class="progress">
<span class="percent">27%</span>
<span class="due">due in 2 weeks</span>
<div class="outer bar">
<div class="inner bar red" style="width:27%"></div>
</div>
</div>
</td>
</tr>
<tr>
<td><a class="repo" href="#">microsoft/windows</a></td>
<td><span class="milestone">RC 9 <span class="icon down-open"></span></a></td>
<td>
<div class="progress">
<span class="percent">90%</span>
<span class="due red">overdue by a month</span>
<div class="outer bar">
<div class="inner bar red" style="width:90%"></div>
</div>
</div>
</td>
</tr>
-->
</div>