Skip to content

Instantly share code, notes, and snippets.

@matschaffer
Created October 13, 2008 17:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matschaffer/16569 to your computer and use it in GitHub Desktop.
Save matschaffer/16569 to your computer and use it in GitHub Desktop.
<!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