insilmaril@229: <?xml version="1.0" encoding="ISO-8859-1"?> insilmaril@229: <xsl:stylesheet name="VYM_TaskJuggler" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> insilmaril@229: <xsl:output method="text"/> insilmaril@229: <xsl:template match="node()"> insilmaril@229: <xsl:apply-templates/> insilmaril@229: </xsl:template> insilmaril@229: <xsl:template match="/vymmap/mapcenter"> insilmaril@229: project <xsl:value-of select="translate(heading, ' ', '_')"/> "<xsl:value-of select="heading"/>" "1.0" 2002-01-16 2002-05-28 { insilmaril@229: # Pick a day during the project that will be reported as 'today' in insilmaril@229: # the project reports. If not specified the current day will be insilmaril@229: # used, but this will likely be ouside of the project range, so it insilmaril@229: # can't be seen in the reports. insilmaril@229: now 2002-03-05-13:00 insilmaril@229: # Hide the clock time. Only show the date. insilmaril@229: timeformat "%Y-%m-%d" insilmaril@229: # The currency for all money values is U.S. Dollars. insilmaril@229: currency "USD" insilmaril@229: insilmaril@229: # We want to compare the planned scenario, to one with the actual insilmaril@229: # scenario insilmaril@229: scenario plan "Planned" { insilmaril@229: scenario actual "Actual" insilmaril@229: } insilmaril@229: } insilmaril@229: # The daily default rate of all resources. This can be overriden for each insilmaril@229: # resource. We specify this, so that we can do a good calculation of insilmaril@229: # the costs of the project. insilmaril@229: rate 310.0 insilmaril@229: insilmaril@229: # This is one way to form teams insilmaril@229: macro allocate_developers [ insilmaril@229: allocate dev1 insilmaril@229: allocate dev2 { limits { dailymax 4h } } insilmaril@229: allocate dev3 insilmaril@229: ] insilmaril@229: insilmaril@229: flags team insilmaril@229: insilmaril@229: resource dev "In House" { insilmaril@229: resource dev1 "Some Guy" { rate 330.00 } insilmaril@229: resource dev2 "Some Other Guy" insilmaril@229: resource dev3 "Some Last Guy on Vacation" { vacation 2002-02-01 - 2002-02-05 } insilmaril@229: insilmaril@229: flags team insilmaril@229: } insilmaril@229: insilmaril@229: resource misc "Outsource" { insilmaril@229: resource test "Out Sourcer1" { limits { dailymax 6.4h } rate 240.00 } insilmaril@229: resource doc "Out Source2" { rate 280.00 vacation 2002-03-11 - 2002-03-16 } insilmaril@229: insilmaril@229: flags team insilmaril@229: } insilmaril@229: insilmaril@229: # In order to do a simple profit and loss analysis of the project we insilmaril@229: # specify accounts. One for the development costs, one for the insilmaril@229: # documentation costs and one account to credit the customer payments insilmaril@229: # to. insilmaril@229: account dev "Development" cost insilmaril@229: account doc "Documentation" cost insilmaril@229: account rev "Payments" revenue insilmaril@229: insilmaril@229: # Now we specify the work packages. The whole project is described as insilmaril@229: # a task that contains sub tasks. These sub tasks are then broken down insilmaril@229: # into smaller tasks and so on. The innermost tasks describe the real insilmaril@229: # work and have resources allocated to them. Many attributes of tasks insilmaril@229: # are inherited from the enclosing task. This saves you a lot of insilmaril@229: # writing. insilmaril@229: task <xsl:value-of select="translate(heading, ' ', '_')"/> "<xsl:value-of select="heading"/>" { insilmaril@229: insilmaril@229: # All work related costs will be booked to this account unless the insilmaril@229: # sub tasks specifies it differently. insilmaril@229: account dev insilmaril@229: insilmaril@229: <xsl:call-template name="recursive"/> insilmaril@229: insilmaril@229: } insilmaril@229: insilmaril@229: # This task report is for use with the TaskJuggler GUI insilmaril@229: taskreport "Project Overview" { insilmaril@229: columns start, end, effort, duration, completed, status, note, cost, revenue insilmaril@229: scenario actual insilmaril@229: } insilmaril@229: insilmaril@229: # A resource report for use with the TaskJuggler GUI insilmaril@229: resourcereport "Resource Usage" { insilmaril@229: columns effort, freeload, utilization, rate insilmaril@229: scenario actual insilmaril@229: hideresource 0 insilmaril@229: } insilmaril@229: insilmaril@229: # For conveniance we would like each report to contain links to the insilmaril@229: # other reports. So we declare a macro with a fragment of raw HTML insilmaril@229: # code to be embedded into all the HTML reports. insilmaril@229: macro navbar [ insilmaril@229: rawhead insilmaril@229: '<table align="center" border="2" cellpadding="10" insilmaril@229: style="background-color:#f3ebae; font-size:105%"> insilmaril@229: <tr> insilmaril@229: <td><a href="Tasks-Overview.html">Tasks Overview</a></td> insilmaril@229: <td><a href="Staff-Overview.html">Staff Overview</a></td> insilmaril@229: <td><a href="Accounting.html">Accounting</a></td> insilmaril@229: <td><a href="Calendar.html">Calendar</a></td> insilmaril@229: </tr> insilmaril@229: <tr> insilmaril@229: <td><a href="Tasks-Details.html">Tasks Details</a></td> insilmaril@229: <td><a href="Staff-Details.html">Staff Details</a></td> insilmaril@229: <td><a href="Status-Report.html">Status Report</a></td> insilmaril@229: <td><a href="acso.eps">GANTT Chart (Postscript)</a></td> insilmaril@229: </tr> insilmaril@229: </table> insilmaril@229: <br/>' insilmaril@229: ] insilmaril@229: insilmaril@229: # As the first report, we would like to have a general overview of all insilmaril@229: # tasks with their computed start and end dates. For better insilmaril@229: # readability we include a calendar like column that lists the effort insilmaril@229: # for each week. insilmaril@229: htmltaskreport "Tasks-Overview.html" { insilmaril@229: # This report should contain the navigation bar we have declared insilmaril@229: # above. insilmaril@229: ${navbar} insilmaril@229: # The report should be a table that contains several columns. The insilmaril@229: # task and their information form the rows of the table. Since we insilmaril@229: # don't like the title of the effort column, we change it to "Work". insilmaril@229: columns hierarchindex, name, duration, effort { title "Work"}, insilmaril@229: start, end, weekly insilmaril@229: # For this report we like to have the abbreviated weekday in front insilmaril@229: # of the date. %a is the tag for this. insilmaril@229: timeformat "%a %Y-%m-%d" insilmaril@229: insilmaril@229: # Don't show load values. insilmaril@229: barlabels empty insilmaril@229: # Set a title for the report insilmaril@229: headline "<xsl:value-of select="heading"/> Project" insilmaril@229: # And a short description what this report is about. insilmaril@229: caption "This table presents a management-level overview of the project. The values are days or man-days." insilmaril@229: } insilmaril@229: insilmaril@229: # Now a more detailed report that shows all jobs and the people insilmaril@229: # assigned to the tasks. It also features a comparison of the planned insilmaril@229: # and actual scenario. insilmaril@229: htmltaskreport "Tasks-Details.html" { insilmaril@229: ${navbar} insilmaril@229: # Now we use a daily calendar. insilmaril@229: columns no, name, start, end, scenario, daily insilmaril@229: #start 2002-03-01 insilmaril@229: #end 2002-04-01 insilmaril@229: # Show plan and delayed scenario values. insilmaril@229: scenarios plan, actual insilmaril@229: headline "<xsl:value-of select="heading"/> Project - March 2002" insilmaril@229: caption "This table shows the load of each day for all the tasks. insilmaril@229: Additionally the resources used for each task are listed. Since the insilmaril@229: project start was delayed, the delayed schedule differs significantly insilmaril@229: from the original plan." insilmaril@229: # Don't hide any resources, that is show them all. insilmaril@229: hideresource 0 insilmaril@229: } insilmaril@229: insilmaril@229: # The previous report listed the resources per task. Now we generate a insilmaril@229: # report the lists all resources. insilmaril@229: htmlresourcereport "Staff-Overview.html" { insilmaril@229: ${navbar} insilmaril@229: # Add a column with the total effort per task. insilmaril@229: columns no, name { cellurl "http://www.tj.org" }, scenario, weekly, effort insilmaril@229: scenarios plan, actual insilmaril@229: # Since we want to see the load values as hours per week, we switch insilmaril@229: # the unit that loads are reported in to hours. insilmaril@229: loadunit hours insilmaril@229: headline "Weekly working hours for the <xsl:value-of select="heading"/> Project" insilmaril@229: } insilmaril@229: insilmaril@229: # Now a report similar to the above one but with much more details. insilmaril@229: htmlresourcereport "Staff-Details.html" { insilmaril@229: ${navbar} insilmaril@229: columns name, daily, effort insilmaril@229: # To still keep the report readable we limit it to show only the insilmaril@229: # data for March 2002. insilmaril@229: start 2002-01-16 insilmaril@229: end 2002-04-01 insilmaril@229: hidetask 0 insilmaril@229: # The teams are virtual resources that we don't want to see. Since insilmaril@229: # we have assigned a flag to those virtual resource, we can just insilmaril@229: # hide them. insilmaril@229: hideresource team insilmaril@229: # We also like to have the report sorted alphabetically ascending by insilmaril@229: # resource name. insilmaril@229: sortresources nameup insilmaril@229: loadunit hours insilmaril@229: headline "Daily working hours for the <xsl:value-of select="heading"/> Project - March 2002" insilmaril@229: } insilmaril@229: insilmaril@229: htmlweeklycalendar "Calendar.html" { insilmaril@229: ${navbar} insilmaril@229: headline "Ongoing Tasks - March 2002" insilmaril@229: start 2002-03-01 insilmaril@229: end 2002-04-01 insilmaril@229: } insilmaril@229: insilmaril@229: htmlstatusreport "Status-Report.html" { insilmaril@229: ${navbar} insilmaril@229: } insilmaril@229: insilmaril@229: # To conclude the HTML reports a report that shows how badly the insilmaril@229: # project is calculated is generated. The company won't get rich with insilmaril@229: # this project. Due to the slip, it actually needs some money from the insilmaril@229: # bank to pay the salaries. insilmaril@229: htmlaccountreport "Accounting.html" { insilmaril@229: ${navbar} insilmaril@229: # Besides the number of the account and the name we have a column insilmaril@229: # with the total values (at the end of the project) and the values insilmaril@229: # for each month of the project. insilmaril@229: columns no, name, scenario, total, monthly insilmaril@229: headline "P&L for the Accounting Software Project" insilmaril@229: caption "The table shows the profit and loss insilmaril@229: analysis as well as the cashflow situation of the Accounting insilmaril@229: Software Project." insilmaril@229: # Since this is a cashflow calculation we show accumulated values insilmaril@229: # per account. insilmaril@229: accumulate insilmaril@229: scenarios plan, actual insilmaril@229: } insilmaril@229: insilmaril@229: # Finally we generate an XML report that contains all info about the insilmaril@229: # scheduled project. This will be used by tjx2gantt to create a nice insilmaril@229: # Gantt chart of our project. insilmaril@229: xmlreport "<xsl:value-of select="translate(heading, ' ', '_')"/>.tjx" { insilmaril@229: # version 2 insilmaril@229: } insilmaril@229: </xsl:template> insilmaril@229: <xsl:template name="recursive"> insilmaril@229: <xsl:for-each select="branch"> insilmaril@229: task <xsl:value-of select="translate(heading, ' ', '_')"/> "<xsl:value-of select="heading"/>" { insilmaril@229: # I've included all of the Optional Attributes here. insilmaril@229: # Commented out for your pleasure. insilmaril@229: #account insilmaril@229: #allocate dev1 insilmaril@229: #complete insilmaril@229: #depends insilmaril@229: #duration insilmaril@229: #effort 20d insilmaril@229: #endbuffer insilmaril@229: #endcredit insilmaril@229: #end, flags insilmaril@229: #journalentry insilmaril@229: #length insilmaril@229: #maxend insilmaril@229: #maxstart insilmaril@229: #milestone insilmaril@229: #minend insilmaril@229: #minstart insilmaril@229: #note insilmaril@229: #precedes insilmaril@229: #priority insilmaril@229: #projectid insilmaril@229: #reference insilmaril@229: #responsible insilmaril@229: #scheduled insilmaril@229: #scheduling insilmaril@229: #shift insilmaril@229: #startbuffer insilmaril@229: #startcredit insilmaril@229: plan:start 2002-03-05 insilmaril@229: actual:start 2002-03-05 insilmaril@229: #statusnote insilmaril@229: #supplement insilmaril@229: <xsl:call-template name="recursive"/> insilmaril@229: } insilmaril@229: </xsl:for-each> insilmaril@229: </xsl:template> insilmaril@229: </xsl:stylesheet>