Created
October 13, 2008 17:55
-
-
Save matschaffer/16569 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html> | |
<head> | |
<link type="text/css" rel="stylesheet" href="__SERVER_URL__/css/toolkit/renderer.css" /> | |
<link type="text/css" rel="stylesheet" href="__SERVER_URL__/css/toolkit/grid.css" /> | |
<link type="text/css" rel="stylesheet" href="__SERVER_URL__/css/toolkit/editor.css" /> | |
<link type="text/css" rel="stylesheet" href="__SERVER_URL__/css/toolkit/toolkit.css" /> | |
<link type="text/css" rel="stylesheet" href="__SERVER_URL__/css/toolkit/toolkit.css" /> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/yui.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/toolkit.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/modal.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/html.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/connection.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/datasource.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/grid.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/renderer/renderer.js"></script> | |
<script type="text/javascript" src="__SERVER_URL__/js/toolkit/editor.js"></script> | |
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script> | |
<script type="text/javascript" charset="utf-8"> | |
//<![CDATA[ | |
var returnedModel; | |
YAHOO.util.Event.addListener(window, 'load', function() { | |
var schemaConfig = { 'properties':{ 'iteration': {}, 'date': {}, | |
'iterations':{ 'properties':{ 'oid':{}, 'name':{} } } } }; | |
var dataSource = new RALLY.toolkit.IterationDataSource(schemaConfig); | |
dataSource.get({}, function(model) { | |
var iterations = model.items[0].iterations; | |
for (i = 0, len = iterations.length; i < len; i++) { | |
$('iterations').options[$('iterations').options.length] = new Option(iterations[i].name, iterations[i].oid); | |
if (iterations[i].name == model.items[0].iteration) { | |
$('iterations').selectedIndex = i; | |
} | |
} | |
$('date').innerHTML = model.items[0].date; | |
}); | |
}); | |
function run() { | |
tables = document.getElementsByTagName('table'); | |
for (i = 0; i < tables.length; i++) { | |
document.body.removeChild(tables[i]); | |
} | |
var schemaConfig = { | |
'properties':{ | |
'tasks':{ 'properties':{ | |
'rank':{}, 'oid':{}, 'name':{}, 'version':{}, 'formattedID':{}, | |
'state':{}, 'blocked':{}, 'estimate':{}, 'actual':{}, 'remaining':{}, | |
'owner':{ 'properties': { 'oid':{}, 'name': {}, 'displayString': {} } }, | |
'workProduct': { 'properties':{ 'oid':{}, 'state':{} } } } } } }; | |
var dataSource = new RALLY.toolkit.IterationDataSource(schemaConfig); | |
var iterationOid = $('iterations').options[$('iterations').selectedIndex].value; | |
dataSource.get({'iterationOid':iterationOid}, function(model) { | |
returnedModel = model; | |
var table = document.createElement('table'); | |
var tbody = document.createElement('tbody'); | |
table.appendChild(tbody); | |
var row = document.createElement("tr"); | |
["Name", "Actual Hours", "ToDo Hours", "Hours Per Day", "Velocity"].each(function(label) { | |
var th = document.createElement("th"); | |
th.appendChild(document.createTextNode(label)); | |
row.appendChild(th); | |
}) | |
tbody.appendChild(row); | |
table.appendChild(tbody); | |
document.body.appendChild(table); | |
var actualHours = {}; | |
var remainingHours = {}; | |
var userNames = {}; | |
model.items[0].tasks.each(function(task) { | |
var oid = task.owner.oid; | |
if (remainingHours[oid]) { | |
actualHours[oid] += task.actual; | |
remainingHours[oid] += task.remaining; | |
} else { | |
userNames[oid] = task.owner.displayString; | |
actualHours[oid] = task.actual; | |
remainingHours[oid] = task.remaining; | |
} | |
}); | |
for (oid in remainingHours) { | |
var row = document.createElement("tr") | |
row.insertData = function(data) { | |
var td = document.createElement("td"); | |
td.appendChild(document.createTextNode(data)); | |
this.appendChild(td); | |
} | |
row.insertData(userNames[oid]); | |
row.insertData(actualHours[oid]); | |
row.insertData(remainingHours[oid]); | |
row.insertData((remainingHours[oid] / $('daysLeft').value).toFixed(2)); | |
row.insertData((actualHours[oid] / (15 - $('daysLeft').value)).toFixed(2)); | |
tbody.appendChild(row); | |
} | |
}); | |
} | |
//]]> | |
</script> | |
<style type="text/css" media="screen"> | |
body { | |
font-family: Arial, sans-serif; | |
background: white; | |
} | |
table { | |
font-weight: bold; | |
} | |
th { | |
background: gray; | |
} | |
td { | |
text-align: center; | |
color: green; | |
} | |
</style> | |
</head> | |
<body> | |
<p><label for="iterations">Current iteration: </label><select id="iterations" size="1"></select></p> | |
<p>Today is <span id="date"></span></p> | |
<p><label for="daysLeft">Days left in sprint</label> | |
<input type="text" id="daysLeft" name="daysLeft" /> | |
<input type="submit" value="Calculate" onclick="run(); return false;" /></p> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment