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&#038;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>