/* * This file contains an example project created by John Poelstra * while borrowing heavily from the TaskJuggler accounting example in * chapter 8 */ # Core project definition project acso "Accounting Software" "1.0" 2007-01-16 2007-04-28 { # Pick a day during the project that will be reported as 'today' in # the project reports. If not specified the current day will be # used, but this will likely be ouside of the project range, so it # can't be seen in the reports. now 2007-03-05-13:00 # Hide the clock time. Only show the date. timeformat "%Y-%m-%d" # The currency for all money values is EUR. currency "USD" # We want to compare the baseline scenario, to one with a slightly # delayed start. scenario plan "Plan" { # Mark all pathes as critical that have less than 10% slack time. minslackrate 10.0 scenario actual "Actual" } } # end project definition # Set the copyright for this file. copyright "© 2007 Poelcat Software, Inc." # The daily default rate/cost of all resources. # This amount is overriden for specific resources. # $50 per hour X 8 hours rate 400 # Register holidays occuring during the project affecting all resources # Note the different formats... if you provide a range, the last value # must be the day work starts again. vacation "Good Friday" 2007-04-26 vacation "Memorial Day" 2007-05-31 vacation "Independence" 2007-07-04 vacation "Labor Day" 2007-09-03 vacation "Thanksgiving" 2007-11-25 + 1d vacation "Christmas Shutdown" 2007-12-24 - 2008-01-02 # This is one way to form teams # not sure what is special about using a macro like this # weird to me that this macro comes beofre the declaration of the developers macro allocate_developers [ allocate blizzard allocate alan { limits { dailymax 4h } } allocate notting ] flags team resource devel "Developers" { resource blizzard "Chris Blizzard" resource alan "Alan Cox" { rate 1000.0 } resource notting "Bill Nottingham" { vacation 2007-03-07 +5d } flags team } resource qe "Quality Engineers" { resource needle "Jeff Needle" { rate 100.0 } resource bpeck "Bill Peck" # note that 2007-02-05 is NOT included resource rousseau "Ed Rousseau" { vacation 2007-02-01 - 2007-02-05 } flags team } resource misc "Misc Resources" { resource manager "Tom Kincaid" { limits { dailymax 6.4h } rate 240.0 } resource docs "Karsten Wade" { rate 280.0 vacation 2007-03-11 - 2007-03-16 } flags team } # In order to do a simple profit and loss analysis of the project we # specify accounts. One for the development costs, one for the # documentation costs and one account to credit the customer payments # to. account devel "Development" cost account qe "Testing" cost account docs "Documentation" cost account rev "Payments" revenue # Now we specify the work packages. The whole project is described as # a task that contains sub tasks. These sub tasks are then broken down # into smaller tasks and so on. The innermost tasks describe the real # work and have resources allocated to them. Many attributes of tasks # are inherited from the enclosing task. This saves you a lot of # writing. task AcSo "Accounting Software (encompases entire project)" { # All work related costs will be booked to this account unless the # sub tasks specifies it differently. account devel task spec "Specification" { # The effort to finish this task is 20 man days. effort 20d # Now we use the above declared macro to allocate the resources # for this task. Since they can work in parallel, this task may be # finshed earlier than 20 working days. ${allocate_developers} # Each task that does not have sub tasks must have a start or end # criteria and a duration. For this task we use a reference to a # further down defined milestone as a start criteria. So this task # cannot start, before the specified milestone has been reached. # # References to other tasks may be relative. Each ! means 'in the # scope of the enclosing task'. To descent into a task the . # together with the id of the tasks have to be specified. depends !deliveries.start } task software "Software Development" { # The software is the most critical task of the project. So we set # the priority of this tasks (and all sub tasks) to 1000, the top # priority. The higher the priority the more likely will the task # get the requested resources. priority 1000 # All subtasks depend on the specification task. depends !spec task database "Database coupling" { effort 20d # This task depends on a task in the scope of the enclosing # tasks enclosing task. So we need 2 ! to get there. allocate blizzard, alan } task gui "Graphical User Interface" { effort 35d # This task has taken 5 man days more than originally planned. # We record this as well, so that we can generate reports that # compare the delayed schedule of the project to the original plan. actual:effort 40d depends !database, !backend allocate blizzard, alan } task backend "Back-End Functions" { effort 30d # This task is behind schedule since it should have been # finished already. To document this we specify that the tasks # is 95% completed. If nothing is specified, TaskJuggler assumes # that the task is on schedule and computes the completion rate # according to the current day and the plan data. complete 95 depends !database allocate blizzard, alan } } task test "Software testing" { task alpha "Alpha Test" { # Efforts can not only be specified as man days, but also man # weeks, man hours, etc. Per default taskjuggler assumes a man # week is 40 man hours or 5 man days. These values can be # changed though. effort 1w depends !!software # the same as saying test.alpha.software.. I think allocate qe, alan note "Hopefully most bugs will be found and fixed here." } task beta "Beta Test" { effort 4w depends !alpha allocate qe, blizzard } } task manual "Manual" { effort 10w depends !deliveries.start allocate docs, devel account docs } task deliveries "Milestones" { # Some milestones have customer payments associated with them. We # credit these payments to the 'rev' account. account rev task start "Projectstart" { # A task that has no duration is a milestone. It only needs a # start or end criteria. All other tasks depend on this task. milestone start 2007-01-16 # For some reason the actual start of the project got delayed. # We record this, so that we can compare the plan run to the # delayed run of the project. actual:start 2007-01-20 # At the begining of this task we receive a payment from the # customer. This is credited to the account assiciated with this # task when the task starts. startcredit 33000.0 } task prev "Technology Preview" { milestone depends !!software.backend startcredit 13000.0 } task beta "Betaversion" { milestone depends !!test.alpha startcredit 13000.0 } task done "Ship Product to customer" { milestone # The next line can be uncommented to trigger a warning about # the project being late. For all tasks limits for the start and # end value can be specified. Those limits are checked after the # project has been scheduled. For all violated limits a warning # is issued. # maxend 2007-04-17 depends !!test.beta, !!manual startcredit 14000.0 } } } # Now the project has been completely specified. Stopping here would # result in a valid TaskJuggler file that could be processed and # scheduled. But no reports would be generated to visualize the # results. # A traditional Gantt Chart for the TaskJugglerUI taskreport "Gantt Chart" { headline "Project Gantt Chart" columns hierarchindex, name, start, end, effort, duration, chart # For this report we like to have the abbreviated weekday in front # of the date. %a is the tag for this. timeformat "%a %Y-%m-%d" loadunit days hideresource 1 } # A list of tasks showing the resources assigned to each task. taskreport "Task Usage" { headline "Task Usage Report" columns hierarchindex, name, start, end, effort { title "Work" }, duration, cost, revenue timeformat "%Y-%m-%d" loadunit days hideresource ~isLeaf() sortresources nameup } # A list of all tasks with the percentage complete for each task taskreport "Tracking Gantt" { headline "Tracking Gantt Chart" columns hierarchindex, name, start, end, effort { title "Work" }, duration, completed, chart, revenue timeformat "%a %Y-%m-%d" loadunit days hideresource 1 } # A graph showing resource allocation. It idengifies whether each # resource is under- or over-allocated for. resourcereport "Resource Graph" { headline "Resource Allocation Graph" columns no, name, rate, utilization, freeload, chart loadunit days hidetask 1 } # A list of all project resources, both human and material resources, # together with the costs for each. resourcereport "Resource Sheet" { headline "Resource Sheet" columns no, name, efficiency, id, maxeffort, rate loadunit days hidetask 1 } # A list of resources and each task associated with each resource. resourcereport "Resource Usage" { headline "Resource Usage Report" columns no, name, utilization, freeload, cost loadunit days hidetask 0 } # This report looks like a regular calendar that shows the tasks by # their dates. htmlweeklycalendar "Calendar.html" { # Only show work days in the calendar. weekdays mon - fri } # This report is a status report for the current week. It also # provides an outlook for the next week. htmlstatusreport "Status-Report.html" { } # A P&L report for the project. htmlaccountreport "Accounting.html" { # Besides the number of the account and the name we have a column # with the total values (at the end of the project) and the values # for each month of the project. columns no, name, scenario, total, monthly headline "P&L for the Project" caption "The table shows the profit and loss analysis as well as the cashflow situation of the Accounting Software Project." # Since this is a cashflow calculation we show accumulated values # per account. accumulate scenarios plan, actual } xmlreport "XML-Report.tjx" { version 2 hidetask 0 hideresource 0 scenarios plan, actual }