taskjuggler 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +44 -0
- data/bin/tj3webd +4 -0
- data/data/css/tjreport.css +14 -5
- data/data/tjp.vim +22 -7
- data/examples/Fedora-20/reports.tji +2 -4
- data/examples/Scrum/Product Burndown.csv +26 -0
- data/examples/Scrum/Sprint 1 Burndown.csv +26 -0
- data/examples/Scrum/Sprint 2 Burndown.csv +26 -0
- data/examples/Scrum/Sprint 3 Burndown.csv +26 -0
- data/examples/Scrum/scrum.tjp +141 -0
- data/examples/Tutorial/tutorial.tjp +13 -7
- data/lib/taskjuggler/Attributes.rb +2 -3
- data/lib/taskjuggler/HTMLDocument.rb +25 -18
- data/lib/taskjuggler/Journal.rb +85 -65
- data/lib/taskjuggler/KeywordDocumentation.rb +25 -13
- data/lib/taskjuggler/LeaveList.rb +1 -1
- data/lib/taskjuggler/Limits.rb +3 -5
- data/lib/taskjuggler/MessageHandler.rb +173 -19
- data/lib/taskjuggler/Painter.rb +75 -0
- data/lib/taskjuggler/Painter/BasicShapes.rb +76 -0
- data/lib/taskjuggler/Painter/Color.rb +273 -0
- data/lib/taskjuggler/Painter/Element.rb +56 -0
- data/lib/taskjuggler/Painter/FontData.rb +221 -0
- data/lib/taskjuggler/Painter/FontMetrics.rb +125 -0
- data/lib/taskjuggler/Painter/FontMetricsData.rb +151 -0
- data/lib/taskjuggler/Painter/Group.rb +77 -0
- data/lib/taskjuggler/Painter/Points.rb +47 -0
- data/lib/taskjuggler/Painter/Primitives.rb +100 -0
- data/lib/taskjuggler/Painter/SVGSupport.rb +36 -0
- data/lib/taskjuggler/Painter/Text.rb +36 -0
- data/lib/taskjuggler/Project.rb +46 -29
- data/lib/taskjuggler/ProjectFileParser.rb +24 -22
- data/lib/taskjuggler/ProjectFileScanner.rb +2 -2
- data/lib/taskjuggler/PropertyTreeNode.rb +26 -34
- data/lib/taskjuggler/Query.rb +8 -5
- data/lib/taskjuggler/RealFormat.rb +3 -0
- data/lib/taskjuggler/Resource.rb +3 -5
- data/lib/taskjuggler/ResourceScenario.rb +19 -7
- data/lib/taskjuggler/RichText.rb +4 -6
- data/lib/taskjuggler/RichText/FunctionExample.rb +1 -1
- data/lib/taskjuggler/RichText/FunctionHandler.rb +5 -6
- data/lib/taskjuggler/RichText/Parser.rb +4 -6
- data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
- data/lib/taskjuggler/RichText/RTFQuery.rb +2 -3
- data/lib/taskjuggler/RichText/RTFReport.rb +1 -1
- data/lib/taskjuggler/RichText/RTFReportLink.rb +1 -2
- data/lib/taskjuggler/RichText/RTFWithQuerySupport.rb +1 -1
- data/lib/taskjuggler/RichText/Scanner.rb +6 -6
- data/lib/taskjuggler/RichText/Snip.rb +1 -2
- data/lib/taskjuggler/RuntimeConfig.rb +9 -6
- data/lib/taskjuggler/ScenarioData.rb +4 -3
- data/lib/taskjuggler/Scoreboard.rb +6 -0
- data/lib/taskjuggler/SheetHandlerBase.rb +25 -8
- data/lib/taskjuggler/SimpleQueryExpander.rb +14 -5
- data/lib/taskjuggler/SyntaxReference.rb +1 -2
- data/lib/taskjuggler/TableColumnSorter.rb +84 -0
- data/lib/taskjuggler/Task.rb +3 -5
- data/lib/taskjuggler/TaskJuggler.rb +36 -29
- data/lib/taskjuggler/TaskScenario.rb +154 -66
- data/lib/taskjuggler/TextParser.rb +24 -17
- data/lib/taskjuggler/TextParser/Scanner.rb +16 -11
- data/lib/taskjuggler/TextParser/SourceFileInfo.rb +20 -15
- data/lib/taskjuggler/TimeSheets.rb +6 -12
- data/lib/taskjuggler/Tj3AppBase.rb +35 -16
- data/lib/taskjuggler/Tj3Config.rb +1 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +239 -49
- data/lib/taskjuggler/XMLElement.rb +9 -2
- data/lib/taskjuggler/apps/Tj3.rb +43 -37
- data/lib/taskjuggler/apps/Tj3Client.rb +62 -112
- data/lib/taskjuggler/apps/Tj3Daemon.rb +66 -29
- data/lib/taskjuggler/apps/Tj3Man.rb +5 -5
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +10 -13
- data/lib/taskjuggler/apps/Tj3SsSender.rb +13 -16
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +10 -13
- data/lib/taskjuggler/apps/Tj3TsSender.rb +12 -15
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +12 -15
- data/lib/taskjuggler/apps/Tj3WebD.rb +99 -0
- data/lib/taskjuggler/daemon/Daemon.rb +50 -10
- data/lib/taskjuggler/daemon/DaemonConnector.rb +127 -0
- data/lib/taskjuggler/daemon/ProcessIntercom.rb +36 -21
- data/lib/taskjuggler/daemon/ProjectBroker.rb +122 -112
- data/lib/taskjuggler/daemon/ProjectServer.rb +78 -46
- data/lib/taskjuggler/daemon/ReportServer.rb +52 -28
- data/lib/taskjuggler/daemon/ReportServlet.rb +92 -21
- data/lib/taskjuggler/daemon/WebServer.rb +75 -22
- data/lib/taskjuggler/daemon/WelcomePage.rb +1 -0
- data/lib/taskjuggler/reports/AccountListRE.rb +3 -3
- data/lib/taskjuggler/reports/CSVFile.rb +9 -2
- data/lib/taskjuggler/reports/ChartPlotter.rb +453 -0
- data/lib/taskjuggler/reports/Navigator.rb +1 -0
- data/lib/taskjuggler/reports/NikuReport.rb +4 -4
- data/lib/taskjuggler/reports/Report.rb +6 -18
- data/lib/taskjuggler/reports/ReportBase.rb +9 -9
- data/lib/taskjuggler/reports/ReportContext.rb +2 -2
- data/lib/taskjuggler/reports/StatusSheetReport.rb +6 -6
- data/lib/taskjuggler/reports/TableReport.rb +24 -15
- data/lib/taskjuggler/reports/TimeSheetReport.rb +5 -5
- data/lib/taskjuggler/reports/TraceReport.rb +251 -0
- data/lib/tj3webd.rb +17 -0
- data/manual/Day_To_Day_Juggling +10 -3
- data/manual/Installation +38 -19
- data/manual/Software +25 -19
- data/manual/Tutorial +119 -110
- data/manual/html/Day_To_Day_Juggling.html +7 -5
- data/manual/html/Getting_Started.html +4 -4
- data/manual/html/How_To_Contribute.html +4 -4
- data/manual/html/Installation.html +19 -11
- data/manual/html/Intro.html +4 -4
- data/manual/html/Reporting_Bugs.html +4 -4
- data/manual/html/Rich_Text_Attributes.html +4 -4
- data/manual/html/Software.html +15 -11
- data/manual/html/TaskJuggler_2x_Migration.html +4 -4
- data/manual/html/TaskJuggler_Internals.html +4 -4
- data/manual/html/The_TaskJuggler_Syntax.html +4 -4
- data/manual/html/Tutorial.html +41 -32
- data/manual/html/account.html +4 -4
- data/manual/html/account.task.html +4 -4
- data/manual/html/accountprefix.html +4 -4
- data/manual/html/accountreport.html +27 -9
- data/manual/html/accountroot.html +5 -5
- data/manual/html/active.html +4 -4
- data/manual/html/adopt.task.html +4 -4
- data/manual/html/aggregate.html +4 -4
- data/manual/html/alert.html +4 -4
- data/manual/html/alertlevels.html +4 -4
- data/manual/html/allocate.html +5 -5
- data/manual/html/alphabet.html +4 -4
- data/manual/html/alternative.html +4 -4
- data/manual/html/author.html +4 -4
- data/manual/html/balance.html +5 -5
- data/manual/html/booking.resource.html +4 -4
- data/manual/html/booking.task.html +4 -4
- data/manual/html/caption.html +5 -5
- data/manual/html/cellcolor.column.html +43 -8
- data/manual/html/celltext.column.html +4 -4
- data/manual/html/center.html +5 -5
- data/manual/html/charge.html +4 -4
- data/manual/html/chargeset.html +4 -4
- data/manual/html/columnid.html +27 -15
- data/manual/html/columns.html +5 -5
- data/manual/html/complete.html +4 -4
- data/manual/html/copyright.html +4 -4
- data/manual/html/credits.html +4 -4
- data/manual/html/css/tjreport.css +14 -5
- data/manual/html/currency.html +4 -4
- data/manual/html/currencyformat.html +5 -5
- data/manual/html/dailymax.html +5 -5
- data/manual/html/dailymin.html +5 -5
- data/manual/html/dailyworkinghours.html +4 -4
- data/manual/html/date.extend.html +4 -4
- data/manual/html/date.html +5 -5
- data/manual/html/definitions.html +4 -4
- data/manual/html/depends.html +4 -4
- data/manual/html/details.html +4 -4
- data/manual/html/disabled.html +4 -4
- data/manual/html/duration.html +4 -4
- data/manual/html/efficiency.html +4 -4
- data/manual/html/effort.html +4 -4
- data/manual/html/email.html +4 -4
- data/manual/html/enabled.html +4 -4
- data/manual/html/end.column.html +4 -4
- data/manual/html/end.html +4 -4
- data/manual/html/end.limit.html +4 -4
- data/manual/html/end.report.html +5 -5
- data/manual/html/end.timesheet.html +4 -4
- data/manual/html/endcredit.html +4 -4
- data/manual/html/epilog.html +5 -5
- data/manual/html/export.html +4 -4
- data/manual/html/extend.html +4 -4
- data/manual/html/fail.html +43 -8
- data/manual/html/fdl.html +4 -4
- data/manual/html/flags.account.html +4 -4
- data/manual/html/flags.html +4 -4
- data/manual/html/flags.journalentry.html +4 -4
- data/manual/html/flags.report.html +5 -5
- data/manual/html/flags.resource.html +4 -4
- data/manual/html/flags.statussheet.html +4 -4
- data/manual/html/flags.task.html +4 -4
- data/manual/html/flags.timesheet.html +4 -4
- data/manual/html/fontcolor.column.html +43 -8
- data/manual/html/footer.html +5 -5
- data/manual/html/formats.html +5 -5
- data/manual/html/functions.html +4 -4
- data/manual/html/gapduration.html +4 -4
- data/manual/html/gaplength.html +4 -4
- data/manual/html/halign.center.html +4 -4
- data/manual/html/halign.column.html +43 -8
- data/manual/html/halign.left.html +4 -4
- data/manual/html/halign.right.html +4 -4
- data/manual/html/hasalert.html +4 -4
- data/manual/html/header.html +5 -5
- data/manual/html/headline.html +7 -7
- data/manual/html/height.html +72 -0
- data/manual/html/hideaccount.html +46 -11
- data/manual/html/hidejournalentry.html +5 -5
- data/manual/html/hidereport.html +43 -8
- data/manual/html/hideresource.html +44 -9
- data/manual/html/hidetask.html +44 -9
- data/manual/html/icalreport.html +4 -4
- data/manual/html/include.macro.html +4 -4
- data/manual/html/include.project.html +4 -4
- data/manual/html/include.properties.html +4 -4
- data/manual/html/index.html +2 -1
- data/manual/html/inherit.extend.html +4 -4
- data/manual/html/interval1.html +4 -4
- data/manual/html/interval2.html +4 -4
- data/manual/html/interval3.html +4 -4
- data/manual/html/interval4.html +4 -4
- data/manual/html/isactive.html +4 -4
- data/manual/html/ischildof.html +4 -4
- data/manual/html/isdependencyof.html +4 -4
- data/manual/html/isdutyof.html +4 -4
- data/manual/html/isfeatureof.html +4 -4
- data/manual/html/isleaf.html +4 -4
- data/manual/html/ismilestone.html +4 -4
- data/manual/html/isongoing.html +4 -4
- data/manual/html/isresource.html +4 -4
- data/manual/html/isresponsibilityof.html +4 -4
- data/manual/html/istask.html +4 -4
- data/manual/html/journalattributes.html +11 -7
- data/manual/html/journalentry.html +4 -4
- data/manual/html/journalmode.html +5 -5
- data/manual/html/leaveallowance.html +5 -5
- data/manual/html/leaves.html +5 -6
- data/manual/html/left.html +5 -5
- data/manual/html/length.html +4 -4
- data/manual/html/limits.allocate.html +4 -4
- data/manual/html/limits.html +4 -4
- data/manual/html/limits.resource.html +4 -4
- data/manual/html/limits.task.html +4 -4
- data/manual/html/listitem.column.html +4 -4
- data/manual/html/listtype.column.html +4 -4
- data/manual/html/loadunit.html +5 -5
- data/manual/html/logicalexpression.html +8 -44
- data/manual/html/logicalflagexpression.html +4 -4
- data/manual/html/macro.html +4 -4
- data/manual/html/managers.html +4 -4
- data/manual/html/mandatory.html +4 -4
- data/manual/html/maxend.html +4 -4
- data/manual/html/maximum.html +5 -5
- data/manual/html/maxstart.html +4 -4
- data/manual/html/milestone.html +4 -4
- data/manual/html/minend.html +4 -4
- data/manual/html/minimum.html +5 -5
- data/manual/html/minstart.html +4 -4
- data/manual/html/monthlymax.html +5 -5
- data/manual/html/monthlymin.html +5 -5
- data/manual/html/navbar.html +10 -4
- data/manual/html/navigator.html +4 -4
- data/manual/html/newtask.html +4 -4
- data/manual/html/nikureport.html +4 -4
- data/manual/html/note.task.html +4 -4
- data/manual/html/now.html +4 -4
- data/manual/html/numberformat.html +5 -5
- data/manual/html/onend.html +4 -4
- data/manual/html/onstart.html +4 -4
- data/manual/html/opennodes.html +5 -5
- data/manual/html/overtime.booking.html +4 -4
- data/manual/html/period.column.html +4 -4
- data/manual/html/period.limit.html +4 -4
- data/manual/html/period.report.html +5 -5
- data/manual/html/period.task.html +4 -4
- data/manual/html/persistent.html +4 -4
- data/manual/html/precedes.html +4 -4
- data/manual/html/priority.html +4 -4
- data/manual/html/priority.timesheet.html +4 -4
- data/manual/html/project.html +4 -4
- data/manual/html/projectid.html +4 -4
- data/manual/html/projectid.task.html +4 -4
- data/manual/html/projectids.html +4 -4
- data/manual/html/projection.html +5 -7
- data/manual/html/prolog.html +5 -5
- data/manual/html/properties.html +11 -5
- data/manual/html/purge.html +5 -5
- data/manual/html/rate.html +4 -4
- data/manual/html/rate.resource.html +4 -4
- data/manual/html/reference.extend.html +4 -4
- data/manual/html/remaining.html +4 -4
- data/manual/html/replace.html +4 -4
- data/manual/html/reportprefix.html +4 -4
- data/manual/html/resource.html +4 -10
- data/manual/html/resourceattributes.html +4 -4
- data/manual/html/resourceprefix.html +4 -4
- data/manual/html/resourcereport.html +28 -10
- data/manual/html/resourceroot.html +5 -5
- data/manual/html/resources.limit.html +4 -4
- data/manual/html/responsible.html +4 -4
- data/manual/html/richtext.extend.html +4 -4
- data/manual/html/right.html +5 -5
- data/manual/html/rollupaccount.html +44 -9
- data/manual/html/rollupresource.html +44 -9
- data/manual/html/rolluptask.html +44 -9
- data/manual/html/scale.column.html +4 -4
- data/manual/html/scenario.html +4 -22
- data/manual/html/scenario.ical.html +4 -4
- data/manual/html/scenarios.export.html +4 -4
- data/manual/html/scenarios.html +5 -5
- data/manual/html/scenariospecific.extend.html +4 -4
- data/manual/html/scheduled.html +4 -4
- data/manual/html/scheduling.html +4 -4
- data/manual/html/select.html +4 -4
- data/manual/html/selfcontained.html +5 -5
- data/manual/html/shift.allocate.html +4 -4
- data/manual/html/shift.html +4 -4
- data/manual/html/shift.resource.html +5 -5
- data/manual/html/shift.task.html +4 -4
- data/manual/html/shift.timesheet.html +4 -4
- data/manual/html/shifts.allocate.html +4 -4
- data/manual/html/shifts.resource.html +4 -4
- data/manual/html/shifts.task.html +4 -4
- data/manual/html/shorttimeformat.html +4 -4
- data/manual/html/sloppy.booking.html +4 -4
- data/manual/html/sloppy.projection.html +5 -5
- data/manual/html/sortaccounts.html +5 -5
- data/manual/html/sortjournalentries.html +5 -5
- data/manual/html/sortresources.html +5 -5
- data/manual/html/sorttasks.html +5 -5
- data/manual/html/start.column.html +4 -4
- data/manual/html/start.html +4 -4
- data/manual/html/start.limit.html +4 -4
- data/manual/html/start.report.html +5 -5
- data/manual/html/startcredit.html +4 -4
- data/manual/html/status.statussheet.html +4 -4
- data/manual/html/status.timesheet.html +4 -4
- data/manual/html/statussheet.html +4 -4
- data/manual/html/statussheetreport.html +4 -4
- data/manual/html/strict.projection.html +5 -5
- data/manual/html/summary.html +4 -4
- data/manual/html/supplement.html +4 -4
- data/manual/html/supplement.resource.html +4 -10
- data/manual/html/supplement.task.html +4 -28
- data/manual/html/tagfile.html +4 -4
- data/manual/html/task.html +4 -28
- data/manual/html/task.statussheet.html +4 -4
- data/manual/html/task.timesheet.html +4 -4
- data/manual/html/taskattributes.html +4 -4
- data/manual/html/taskprefix.html +4 -4
- data/manual/html/taskreport.html +28 -10
- data/manual/html/taskroot.html +5 -5
- data/manual/html/text.extend.html +4 -4
- data/manual/html/textreport.html +27 -9
- data/manual/html/timeformat.html +5 -5
- data/manual/html/timeoff.nikureport.html +4 -4
- data/manual/html/timesheet.html +4 -4
- data/manual/html/timesheetreport.html +23 -5
- data/manual/html/timezone.export.html +4 -4
- data/manual/html/timezone.html +4 -4
- data/manual/html/timezone.report.html +5 -5
- data/manual/html/timezone.shift.html +4 -4
- data/manual/html/timingresolution.html +4 -4
- data/manual/html/title.column.html +4 -4
- data/manual/html/title.html +5 -5
- data/manual/html/toc.html +207 -179
- data/manual/html/tooltip.column.html +45 -10
- data/manual/html/tracereport.html +405 -0
- data/manual/html/trackingscenario.html +6 -6
- data/manual/html/treelevel.html +4 -4
- data/manual/html/vacation.html +4 -4
- data/manual/html/vacation.resource.html +4 -4
- data/manual/html/vacation.shift.html +4 -4
- data/manual/html/warn.html +43 -8
- data/manual/html/weeklymax.html +5 -5
- data/manual/html/weeklymin.html +5 -5
- data/manual/html/weekstartsmonday.html +4 -4
- data/manual/html/weekstartssunday.html +6 -6
- data/manual/html/width.column.html +6 -6
- data/manual/html/width.html +72 -0
- data/manual/html/work.html +4 -4
- data/manual/html/workinghours.project.html +4 -4
- data/manual/html/workinghours.resource.html +4 -4
- data/manual/html/workinghours.shift.html +4 -4
- data/manual/html/yearlyworkingdays.html +4 -4
- data/spec/Color_spec.rb +60 -0
- data/spec/ProjectBroker_spec.rb +3 -2
- data/spec/StatusSheets_spec.rb +5 -4
- data/spec/TableColumnSorter_spec.rb +78 -0
- data/spec/TimeSheets_spec.rb +6 -2
- data/spec/Tj3Daemon_spec.rb +2 -2
- data/spec/TraceReport_spec.rb +117 -0
- data/taskjuggler.gemspec +1 -1
- data/test/MessageChecker.rb +3 -1
- data/test/ReferenceGenerator.rb +1 -1
- data/test/TestSuite/CSV-Reports/Leave.tjp +1 -1
- data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +3 -0
- data/test/TestSuite/CSV-Reports/refs/taskcounter.csv +9 -0
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +19 -16
- data/test/TestSuite/CSV-Reports/refs/weekly.csv +1 -0
- data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +14 -2
- data/test/TestSuite/Export-Reports/refs/tutorial.tjp +98 -86
- data/test/TestSuite/Scheduler/Correct/Leaves.tjp +25 -0
- data/test/TestSuite/Syntax/Correct/Leave.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +9 -1
- data/test/TestSuite/Syntax/Correct/TraceReport.tjp +10 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +10 -4
- data/test/test_CSV-Reports.rb +3 -3
- data/test/test_Export-Reports.rb +91 -86
- data/test/test_Journal.rb +15 -12
- data/test/test_Limits.rb +3 -3
- data/test/test_Project.rb +1 -2
- data/test/test_ProjectFileScanner.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +5 -6
- data/test/test_ReportGenerator.rb +15 -7
- data/test/test_RichText.rb +4 -3
- data/test/test_Scheduler.rb +19 -7
- data/test/test_ShiftAssignments.rb +2 -2
- data/test/test_SimpleQueryExpander.rb +29 -2
- data/test/test_Syntax.rb +14 -5
- metadata +49 -10
- data/lib/taskjuggler/LogFile.rb +0 -73
data/lib/tj3webd.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# = tj3webd.rb -- The TaskJuggler III Project Management Software
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
8
|
+
#
|
9
|
+
# This program is free software; you can redistribute it and/or modify
|
10
|
+
# it under the terms of version 2 of the GNU General Public License as
|
11
|
+
# published by the Free Software Foundation.
|
12
|
+
#
|
13
|
+
|
14
|
+
require 'taskjuggler/apps/Tj3WebD'
|
15
|
+
|
16
|
+
exit TaskJuggler::Tj3WebD.new.main()
|
17
|
+
|
data/manual/Day_To_Day_Juggling
CHANGED
@@ -315,6 +315,7 @@ data for ''''tj3ts_sender'''' to your TaskJuggler configuration file.
|
|
315
315
|
The time sheet related settings have their own top-level section:
|
316
316
|
|
317
317
|
_global:
|
318
|
+
emailDeliveryMethod: smtp
|
318
319
|
smtpServer: smtp.your_company.com
|
319
320
|
authKey: topsecret
|
320
321
|
scmCommand: "svn add %f ; svn commit -m '%m' %f"
|
@@ -329,10 +330,15 @@ The time sheet related settings have their own top-level section:
|
|
329
330
|
digestRecipients:
|
330
331
|
- managers@your_company.com
|
331
332
|
|
333
|
+
The ''''emailDeliveryMethod'''' defines how emails should be sent.
|
334
|
+
Use ''''smtp'''' to directly send the emails to an SMTP server.
|
332
335
|
The ''''smtpServer'''' defines which host will handle your emails. Replace the
|
333
|
-
host name with your local SMTP server.
|
334
|
-
|
335
|
-
|
336
|
+
host name with your local SMTP server. Alternatively, you can use the
|
337
|
+
method ''''sendmail'''' on UNIX-like systems to pass the email to the
|
338
|
+
sendmail tool. In this case, the ''''smtpServer'''' line can be
|
339
|
+
omitted. The 'scmCommand' setting contains the command to add and
|
340
|
+
commit new and old files to the source code management system. The
|
341
|
+
command in this example works for Subversion.
|
336
342
|
|
337
343
|
The TaskJuggler server may serve multiple projects. With the
|
338
344
|
''''projectId'''' option you have to specify which project you would
|
@@ -545,6 +551,7 @@ used. Before you can use it, you need to add a few settings to the
|
|
545
551
|
TaskJuggler configuration file.
|
546
552
|
|
547
553
|
_global:
|
554
|
+
emailDeliveryMethod: smtp
|
548
555
|
smtpServer: smtp.your_company.com
|
549
556
|
authKey: topsecret
|
550
557
|
projectId: prj
|
data/manual/Installation
CHANGED
@@ -275,12 +275,18 @@ downloaded.
|
|
275
275
|
tar -Zxvf ruby-X.X.X-*.tar.gz
|
276
276
|
|
277
277
|
This will create a directory with the same name as the archive, but
|
278
|
-
without the ''''.tar.gz'''' extension.
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
278
|
+
without the ''''.tar.gz'''' extension.
|
279
|
+
|
280
|
+
Before you continue, make sure you have all the necessary packages
|
281
|
+
installed to compile ruby. That would be everything you need to
|
282
|
+
compile C programs. That includes gcc, make, zlib and libyaml. If
|
283
|
+
something is missing, you will run into problems in the next 2 steps.
|
284
|
+
It's sometimes not obvious which package to install to fix the issue.
|
285
|
+
|
286
|
+
Now change into this directory and configure the source code for your
|
287
|
+
specific OS and compile it. We configure Ruby to append ''''19'''' to
|
288
|
+
all executable names. This way, you can easily choose if you want to
|
289
|
+
run the old or the new Ruby. ''''ruby'''' runs your distribution Ruby,
|
284
290
|
''''ruby19'''' runs your new ruby.
|
285
291
|
|
286
292
|
cd ruby-X.X.X-*
|
@@ -293,6 +299,30 @@ will be installed into ''''/usr/local/bin''''.
|
|
293
299
|
|
294
300
|
sudo make install
|
295
301
|
|
302
|
+
The TaskJuggler front-end scripts always use the ''''ruby''''
|
303
|
+
interpreter that's the first in the PATH. You need to set a link in
|
304
|
+
your local ''''bin'''' directory to point to your ''''ruby19''''
|
305
|
+
executable as ''''ruby''''.
|
306
|
+
|
307
|
+
ln -s /usr/local/bin/ruby19 ${HOME}/bin/ruby
|
308
|
+
|
309
|
+
Make sure your ''''${HOME}/bin'''' directory is the first directory in
|
310
|
+
the ''''PATH''''. This step varies a lot depending on the login
|
311
|
+
shell. E. g. for ''''bash'''' put the following at the end in your
|
312
|
+
''''.profile'''' shell config file. Please make sure that
|
313
|
+
''''/usr/local/bin'''' is also in the PATH so that the ruby
|
314
|
+
executables (all having a ''''19'''' suffix) will be found as well.
|
315
|
+
|
316
|
+
export PATH=${HOME}/bin:${PATH}
|
317
|
+
|
318
|
+
Log out and back in again. Now
|
319
|
+
|
320
|
+
which ruby
|
321
|
+
|
322
|
+
should show return the path to the link to your
|
323
|
+
''''${HOME}/bin/ruby''''. You now have the latest Ruby installed and
|
324
|
+
are ready to use TaskJuggler.
|
325
|
+
|
296
326
|
As a final step, you need to install the ''''mail'''' and
|
297
327
|
''''term-ansicolor'''' gems.
|
298
328
|
|
@@ -303,17 +333,6 @@ install the TaskJuggler gem as well.
|
|
303
333
|
|
304
334
|
sudo gem19 install taskjuggler
|
305
335
|
|
306
|
-
The TaskJuggler front-end scripts always use the ''''ruby''''
|
307
|
-
interpreter that's the first in the PATH. You need to set a link in
|
308
|
-
your local ''''bin'''' directory to point to your ''''ruby19''''
|
309
|
-
executable as ''''ruby''''. Make sure your ''''${HOME}/bin''''
|
310
|
-
directory is the first directory in the ''''PATH''''.
|
311
|
-
|
312
|
-
ln -s /usr/local/bin/ruby19 ${HOME}/bin/ruby
|
313
|
-
|
314
|
-
That's it. You now have the latest Ruby installed and are ready to
|
315
|
-
use TaskJuggler.
|
316
|
-
|
317
336
|
=== Installing the Vim Support ===
|
318
337
|
|
319
338
|
TaskJuggler can be used with any text editor that supports UTF-8 text
|
@@ -364,11 +383,11 @@ should have the following features available:
|
|
364
383
|
must be the first non-blank character of the last line of the
|
365
384
|
block. See the '''':help fold'''' Vim help command for details how
|
366
385
|
to open and close folds.
|
367
|
-
* Tag navigation. If you include a [tagfile] report in your project,
|
386
|
+
* Tag navigation. If you include a [[tagfile]] report in your project,
|
368
387
|
Vim will know all property IDs and can jump to them. If you have a
|
369
388
|
task with the ID ''''foo.bar'''', the command '''':ta foo.bar''''
|
370
389
|
will put the cursor right where task ''''foo.bar'''' was declared.
|
371
|
-
* ID completion. If you include a [tagfile] report in your project,
|
390
|
+
* ID completion. If you include a [[tagfile]] report in your project,
|
372
391
|
Vim can tell you the full hierarchical ID of a property. Just move
|
373
392
|
the cursor to the first line of the property definition and press
|
374
393
|
''''Ctrl-]''''.
|
data/manual/Software
CHANGED
@@ -91,9 +91,8 @@ get this user manual (browser).
|
|
91
91
|
|
92
92
|
''''tj3d'''' is the TaskJuggler daemon. It is a program that runs
|
93
93
|
in the background, disconnected from your shell to provide certain
|
94
|
-
services. It can generate reports on demand and
|
95
|
-
|
96
|
-
sheets.
|
94
|
+
services. It can generate reports on demand and processes incoming
|
95
|
+
time sheets or status reports.
|
97
96
|
|
98
97
|
Depending on the size of your project the scheduling time can take
|
99
98
|
several minutes or more. Since all operations need to be done on the
|
@@ -157,22 +156,6 @@ the ''''-c'''' option. See
|
|
157
156
|
|
158
157
|
for details.
|
159
158
|
|
160
|
-
The daemon can also be turned into a web server that serves the HTML
|
161
|
-
reports of one or more projects. To enable the web server, start the
|
162
|
-
daemon with the ''''-w'''' option. By default, the web server is
|
163
|
-
listening on port 8080. This can be changed in the ''''_global''''
|
164
|
-
section of the config file.
|
165
|
-
|
166
|
-
_global:
|
167
|
-
authKey: topsecret
|
168
|
-
webServerPort: 8080
|
169
|
-
|
170
|
-
To access the HTML reports point your web browser to
|
171
|
-
''''http://localhost:8080/taskjuggler''''. This assumes that the
|
172
|
-
server is running on your local machine. You will then see a list of
|
173
|
-
all loaded projects. Click on the project name to get a list of all
|
174
|
-
reports for this project.
|
175
|
-
|
176
159
|
So far, the daemon has not received any kind of security review. We
|
177
160
|
strongly advise you to only use the daemon in a trusted environment
|
178
161
|
with only trusted users!
|
@@ -213,5 +196,28 @@ A server that is running can be terminated with the following command.
|
|
213
196
|
|
214
197
|
tj3client terminate
|
215
198
|
|
199
|
+
=== ''''tj3webd'''' ===
|
200
|
+
|
201
|
+
This is a web server to serve the HTML reports of a project to any
|
202
|
+
web browser. The HTML reports are generated on the fly when accessed.
|
203
|
+
''''tj3webd'''' requires that ''''tj3d'''' is already running on the
|
204
|
+
same machine.
|
205
|
+
|
206
|
+
By default, the web server is listening on port 8080. This can be
|
207
|
+
changed in the ''''_global'''' section of the config file.
|
208
|
+
|
209
|
+
_global:
|
210
|
+
authKey: topsecret
|
211
|
+
webServerPort: 8080
|
212
|
+
|
213
|
+
To access the HTML reports point your web browser to
|
214
|
+
''''http://localhost:8080/taskjuggler''''. This assumes that the
|
215
|
+
server is running on your local machine. You will then see a list of
|
216
|
+
all loaded projects. Click on the project name to get a list of all
|
217
|
+
reports for this project.
|
216
218
|
|
219
|
+
''WARNING: Please be aware that the web server when you have started
|
220
|
+
it can be accessed by anybody on your local machine and by anybody
|
221
|
+
that can reach your machine over the network! It will serve all
|
222
|
+
reports of all projects that are hosted by the TaskJuggler daemon.''
|
217
223
|
|
data/manual/Tutorial
CHANGED
@@ -1,50 +1,54 @@
|
|
1
1
|
== The Tutorial: Your first Project ==
|
2
2
|
|
3
3
|
We have mentioned already that TaskJuggler uses plain text files that
|
4
|
-
|
4
|
+
capture the known parts of the project. As you will see now, the syntax
|
5
5
|
of these files is easy to understand and very intuitive. This chapter
|
6
6
|
will walk you step by step through your first project. You create the
|
7
7
|
project plan for a made-up accounting software project. This project
|
8
|
-
demonstrates
|
9
|
-
|
10
|
-
|
8
|
+
demonstrates most of the commonly used features of TaskJuggler. It
|
9
|
+
also includes some of the more advanced concepts that you may or may
|
10
|
+
not need for your projects. Don't get scared by them. You can use
|
11
|
+
them once you are more familiar with TaskJuggler and your projects
|
12
|
+
grow larger. The complete tutorial example can be downloaded
|
13
|
+
[http://www.taskjuggler.org/tj3/examples/Tutorial/tutorial.tjp here].
|
14
|
+
You can use any plain text editor to view and modify it. The
|
11
15
|
resulting reports can be found
|
12
|
-
[http://www.taskjuggler.org/tj3/examples/Tutorial/Overview.html
|
13
|
-
here].
|
16
|
+
[http://www.taskjuggler.org/tj3/examples/Tutorial/Overview.html here].
|
14
17
|
|
15
18
|
=== Starting the project ===
|
16
19
|
|
17
|
-
|
20
|
+
Every TaskJuggler project file must start with the [[project]]
|
18
21
|
property. It tells TaskJuggler the name of your project and a start
|
19
22
|
and end date. The start and end dates don't need to be exact, but must
|
20
|
-
fit all tasks of the project.
|
23
|
+
fit all tasks of the project. It is the time interval the TaskJuggler
|
21
24
|
scheduler will use to fit the tasks in. So, make it large enough for
|
22
25
|
all your tasks to fit in. But don't make it too large, because this
|
23
26
|
will result in longer scheduling times and higher memory consumption.
|
24
27
|
|
25
28
|
<[example file="tutorial" tag="header1"]>
|
26
29
|
|
27
|
-
All TaskJuggler properties have
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
you
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
Attributes always start with a keyword that
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
30
|
+
All TaskJuggler properties have a unique ID ,a name, and a set of
|
31
|
+
optional attributes. The name must always be specified. The ID can be
|
32
|
+
omitted if you never have to reference the property from another
|
33
|
+
context. If you omit the ID, TaskJuggler will automatically generate a
|
34
|
+
unique ID. The optional attributes are always enclosed in curly
|
35
|
+
braces. If no optional attributes are specified, the braces can be
|
36
|
+
omitted as well. In this example we will introduce a number of the
|
37
|
+
attributes that may or may not matter for your specific projects. If
|
38
|
+
you don't see an immediate need for a specific attribute, feel free to
|
39
|
+
ignore it for now. You can always come back to them later. A full list
|
40
|
+
of the supported project attributes can be found in the ''attributes''
|
41
|
+
section of the [[project]] property documentation.
|
42
|
+
|
43
|
+
Attributes always start with a keyword that identifies them. The
|
44
|
+
meaning and parameters of attributes depends on the property context
|
45
|
+
that they are used in. A context is delimited by a set of curly
|
46
|
+
braces that enclose optional attributes of a property. The area
|
47
|
+
outside of any property is called the global scope. Usually,
|
48
|
+
attributes have one or more arguments. These arguments can be dates,
|
49
|
+
character strings, numbers or symbols. Strings must be enclosed in
|
50
|
+
single or double quotes. The argument types and meaning is explained
|
51
|
+
for each keyword in the syntax reference section of this manual.
|
48
52
|
|
49
53
|
TaskJuggler manages all events with an accuracy of up to 15 minutes.
|
50
54
|
In many cases, you don't care about this level of accuracy.
|
@@ -62,7 +66,7 @@ See [[interval2]] for details.
|
|
62
66
|
|
63
67
|
project acso "Accounting Software" 2002-01-16-0:00-+0100
|
64
68
|
|
65
|
-
The [[currency]] attribute specifies the unit of currency values.
|
69
|
+
The [[currency]] attribute specifies the unit of all currency values.
|
66
70
|
|
67
71
|
<[example file="tutorial" tag="currency"]>
|
68
72
|
|
@@ -70,7 +74,7 @@ Because each culture has its own way of specifying dates and numbers,
|
|
70
74
|
the format for these are configurable. Use the [[timeformat]]
|
71
75
|
attribute to specify the default format for dates. This format is used
|
72
76
|
for reports, it does not affect the way you specify dates in the
|
73
|
-
project files. Here you always need to use the [[date|
|
77
|
+
project files. Here you always need to use the [[date|TaskJuggler date
|
74
78
|
notation]].
|
75
79
|
|
76
80
|
<[example file="tutorial" tag="formats"]>
|
@@ -79,9 +83,9 @@ We also can specify the way numbers or currency values are shown in
|
|
79
83
|
the reports. Use the [[numberformat]] and [[currencyformat]]
|
80
84
|
attributes for this.
|
81
85
|
|
82
|
-
The
|
86
|
+
The attribute [[now]] is used to set the current day for the
|
83
87
|
scheduler to another value than to the moment your invoke TaskJuggler.
|
84
|
-
|
88
|
+
If this attribute is not present, TaskJuggler will use the current
|
85
89
|
moment of time to determine where you are with your tasks. To get a
|
86
90
|
defined result for the reports in this example we've picked a specific
|
87
91
|
date that fits our purpose here. In your projects, you would use
|
@@ -92,16 +96,17 @@ date that fits our purpose here. In your projects, you would use
|
|
92
96
|
In this tutorial we would like to compare two scenarios of the
|
93
97
|
project. The first scenario is the one that we have planned. The
|
94
98
|
second scenario is how it really happened. The two scenarios have the
|
95
|
-
same task structure, but the start and end dates
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
99
|
+
same task structure, but the start and end dates and other attributes
|
100
|
+
of the task that are scenario specific may vary. In this example we
|
101
|
+
assume that the project got delayed and use a second scenario that we
|
102
|
+
name "Delayed" to describe the actual project. The scenario property
|
103
|
+
is used to specify the scenarios. The delayed scenario is nested into
|
104
|
+
the plan scenario. This tells TaskJuggler to use all values from the
|
105
|
+
plan scenario also for the second scenario unless the second scenario
|
106
|
+
has it's own values. This is a very easy but also powerful way to
|
107
|
+
analyze the impact of certain changes to the plan of record. We'll
|
108
|
+
see further below, how to specify values for a scenario and how to
|
109
|
+
compare the results.
|
105
110
|
|
106
111
|
<[example file="tutorial" tag="scenario"]>
|
107
112
|
|
@@ -120,36 +125,34 @@ daily costs of an employee. This can be changed for certain employees
|
|
120
125
|
later, but it illustrates an important concept of TaskJuggler –
|
121
126
|
inheritance of attributes. In order to reduce the size of the
|
122
127
|
TaskJuggler project file to a readable minimum, properties inherit
|
123
|
-
many
|
124
|
-
|
125
|
-
|
126
|
-
following properties.
|
128
|
+
many attributes from their enclosing scopes. We'll see further below,
|
129
|
+
what this actually means. Right after the project property we are at
|
130
|
+
top-level scope, so this is the default for all following properties.
|
127
131
|
|
128
132
|
<[example file="tutorial" tag="rate"]>
|
129
133
|
|
130
134
|
The [[rate]] attribute can be used to specify the daily costs of
|
131
|
-
resources. All
|
132
|
-
changed to a different rate at group or individual
|
135
|
+
resources. All subsequently declared resources will get this rate. But
|
136
|
+
it can certainly be changed to a different rate at group or individual
|
137
|
+
resource level.
|
133
138
|
|
134
139
|
You may also want to tell TaskJuggler about holidays that affect
|
135
|
-
all resources. Global
|
140
|
+
all resources. Global holidays are time periods where TaskJuggler
|
136
141
|
does not do any resource assignments to tasks.
|
137
142
|
|
138
143
|
<[example file="tutorial" tag="vacation"]>
|
139
144
|
|
140
|
-
Use the [[
|
141
|
-
|
142
|
-
|
143
|
-
with the [[vacation.resource|vacation attribute for resources]] where
|
144
|
-
the name is optional. The vacation name is purely for documentation
|
145
|
-
purposes.
|
145
|
+
Use the [[leaves]] attribute to define a global holiday. Global
|
146
|
+
holidays may have a name and must have a date or date range. Other leaves for
|
147
|
+
individual resources or groups of resources can be defines similarly.
|
146
148
|
|
147
149
|
=== Macros ===
|
148
150
|
|
149
|
-
Macros are another TaskJuggler feature to
|
150
|
-
|
151
|
-
|
152
|
-
text pattern is enclosed
|
151
|
+
Macros are another TaskJuggler feature to save you typing work and to
|
152
|
+
keep project files small and maintainable. Macros are text patterns
|
153
|
+
that can be defined once and inserted multiple times in the project
|
154
|
+
file. A [[macro]] always has a name and the text pattern is enclosed
|
155
|
+
by square brackets.
|
153
156
|
|
154
157
|
<[example file="tutorial" tag="macro"]>
|
155
158
|
|
@@ -162,22 +165,22 @@ pattern.
|
|
162
165
|
=== Declaring Flags ===
|
163
166
|
|
164
167
|
A TaskJuggler feature that you will probably make heavy use of is
|
165
|
-
flags. Once declared you can attach them to
|
168
|
+
flags. Once declared you can attach them to any property. When you
|
166
169
|
generate reports of the TaskJuggler results, you can use the flags to
|
167
|
-
filter out
|
168
|
-
that you want to have included.
|
170
|
+
filter out unwanted properties and limit the report to exactly those
|
171
|
+
details that you want to have included.
|
169
172
|
|
170
173
|
<[example file="tutorial" tag="flags"]>
|
171
174
|
|
172
|
-
This is
|
173
|
-
can be used to avoid hard to find errors due to misspelled flag
|
174
|
-
names. The flags should be declared
|
175
|
-
We will see further down, how we can make use of these flags.
|
175
|
+
This is a [[flags]] declaration. All flags need to be declared before
|
176
|
+
they can be used to avoid hard to find errors due to misspelled flag
|
177
|
+
names. The flags should be declared before any property at global
|
178
|
+
scope. We will see further down, how we can make use of these flags.
|
176
179
|
|
177
180
|
=== Declaring Accounts ===
|
178
181
|
|
179
|
-
The use of our resources will
|
180
|
-
analysis, we need to balance the
|
182
|
+
The use of our resources will generate costs. For a profit and loss
|
183
|
+
analysis, we need to balance the cost against the customer payments.
|
181
184
|
In order not to get lost with all the various amounts, we declare 3
|
182
185
|
[[account|accounts]] to credit the amounts to. We create one account
|
183
186
|
for the development costs, one for the documentation costs, and one
|
@@ -185,14 +188,12 @@ for the customer payments.
|
|
185
188
|
|
186
189
|
<[example file="tutorial" tag="accounts"]>
|
187
190
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
characters and therefore has to be enclosed with single or double
|
195
|
-
quotes.
|
191
|
+
The account needs an ID and a name. IDs may only consist of the
|
192
|
+
characters a to z, A to Z and the underscore. All but the first
|
193
|
+
character may also be digits 0 to 9. The ID is necessary so that we
|
194
|
+
can reference the property again later without having to write the
|
195
|
+
potentially much longer name. The name may contain space characters
|
196
|
+
and therefore has to be enclosed with single or double quotes.
|
196
197
|
|
197
198
|
Accounts can be grouped by nesting them. You can use this feature to
|
198
199
|
create sets of accounts. Such sets can then be balanced against each
|
@@ -211,11 +212,11 @@ project.
|
|
211
212
|
<[example file="tutorial" tag="resources"]>
|
212
213
|
|
213
214
|
This snippet of the example shows the use of the [[resource|
|
214
|
-
resource property]]. Just like accounts, resources
|
215
|
-
and a
|
216
|
-
|
217
|
-
|
218
|
-
|
215
|
+
resource property]]. Just like accounts, resources should have an ID
|
216
|
+
and must have a name. Resource IDs, like account IDs must also be
|
217
|
+
unique within their property class. As you can see, resource
|
218
|
+
properties can be nested: ''''dev'''' is a group or container
|
219
|
+
resource, a team that consists of three other resources.
|
219
220
|
|
220
221
|
''''dev1'''', alias Paul Smith, costs more than the normal employee.
|
221
222
|
So the declaration of ''''dev1'''' overwrites the inherited default
|
@@ -224,34 +225,42 @@ rate with a higher value.
|
|
224
225
|
The default value has been inherited from the enclosing scope,
|
225
226
|
resource ''''dev'''', which in turn has inherited it from the global
|
226
227
|
scope. The declaration of the resource Klaus Müller uses another
|
227
|
-
optional attribute.
|
228
|
-
|
229
|
-
|
230
|
-
|
228
|
+
optional attribute. Attributes are only inherited from the parent
|
229
|
+
property if the attribute was declared in the parent property before
|
230
|
+
the child property declaration was started.
|
231
|
+
|
232
|
+
The syntax reference lists for each property whether an attribute is
|
233
|
+
inherited from the parent or the attribute in the global scope.
|
234
|
+
|
235
|
+
With [[leaves]] you can specify certain time intervals where the
|
236
|
+
resource is not available. Leaves are list attributes. They accumulate
|
237
|
+
the declarations. If you want to get rid of inherited or previously
|
238
|
+
assigned values, you can use the [[purge]] attribute to clear the
|
231
239
|
list.
|
232
240
|
|
233
|
-
|
234
|
-
intervals. Internally, TaskJuggler uses
|
235
|
-
January 1st, 1970 to store any date. So
|
236
|
-
with an accuracy of 1 second in UTC
|
237
|
-
midnight February 1st, 2002.
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
5th, 2002. Well, almost.
|
242
|
-
|
243
|
-
ends exactly at 0:00:00 on
|
241
|
+
''''leaves'''' requires a time interval. It is important to understand
|
242
|
+
how TaskJuggler handles time intervals. Internally, TaskJuggler uses
|
243
|
+
the number of seconds after January 1st, 1970 to store any date. So
|
244
|
+
all dates are actually stored with an accuracy of 1 second in UTC
|
245
|
+
time. ''''2002-02-01'''' specifies midnight February 1st, 2002.
|
246
|
+
Following the TaskJuggler concept of requiring as little information
|
247
|
+
as necessary and extending the rest with sensible defaults,
|
248
|
+
TaskJuggler adds the time 0:00:00 if nothing else has been specified.
|
249
|
+
So the vacation ends on midnight February 5th, 2002. Well, almost.
|
250
|
+
Every time you specify a time interval, the end date is not included
|
251
|
+
in the interval. So Klaus Müller's vacation ends exactly at 0:00:00 on
|
252
|
+
February 5th, 2002. February 5 is not part of the leave!
|
244
253
|
|
245
254
|
Peter Murphy only works 6.4 hours a day. So we use the
|
246
255
|
[[limits.resource|limits]] attribute to limit his daily working hours.
|
247
256
|
We could also define exact working hours using the [[shift|shift
|
248
257
|
property]], but we ignore this for now.
|
249
258
|
|
250
|
-
Note that we have attached the flag team after the declaration
|
251
|
-
sub-resources to the team resources. This way, these flags
|
252
|
-
passed down to the sub-resources. If we would have declared
|
253
|
-
before the sub-resources, then they would have the flags
|
254
|
-
well.
|
259
|
+
Note that we have attached the flag ''''team'''' after the declaration
|
260
|
+
of the sub-resources to the team resources. This way, these flags
|
261
|
+
don't get passed down to the sub-resources. If we would have declared
|
262
|
+
the flags before the sub-resources, then they would have the flags
|
263
|
+
attached as well.
|
255
264
|
|
256
265
|
=== Specifying the Tasks ===
|
257
266
|
|
@@ -259,7 +268,7 @@ Let's focus on the real work now. The project should solve a problem:
|
|
259
268
|
the creation of an accounting software. Because the job is quite
|
260
269
|
complicated, we break it down into several subtasks. We need to do a
|
261
270
|
specification, develop the software, test the software, and write a
|
262
|
-
manual. Using the [[task|task property]],
|
271
|
+
manual. Using the [[task|task property]], this would look as follows:
|
263
272
|
|
264
273
|
<[example file="tutorial" tag="task1"]>
|
265
274
|
|
@@ -296,7 +305,7 @@ resources could be allocated long enough to reach the specified
|
|
296
305
|
effort. Tasks with ''''length'''' or ''''duration'''' criteria and
|
297
306
|
allocated resources will last exactly as long as requested. Resources
|
298
307
|
will be allocated only if available. It's possible that such a tasks
|
299
|
-
ends up with no allocations at all
|
308
|
+
ends up with no allocations at all if the resources are always
|
300
309
|
assigned to other tasks for that period. Each task can only have one
|
301
310
|
of the three duration criteria. Container tasks may never have a
|
302
311
|
duration specification. They are automatically adjusted to fit all
|
@@ -310,13 +319,9 @@ expression ''''${allocate_developers}'''' is simply expanded to
|
|
310
319
|
If you need to [[allocate]] the same bunch of people to several tasks,
|
311
320
|
the macro saves you some typing. You could have written the allocate
|
312
321
|
attributes directly instead of using the macro. Since the allocation
|
313
|
-
of multiple resources to a task is a
|
322
|
+
of multiple resources to a task is a good place for macro
|
314
323
|
usage, we found it a good idea to use it in this example as well.
|
315
324
|
|
316
|
-
One more interesting thing to note is the fact that we like the
|
317
|
-
resource ''''dev2'''' only to work 4 hours each day on this task, so
|
318
|
-
we use the optional attribute [[limits.resource]] to specify this.
|
319
|
-
|
320
325
|
For TaskJuggler to schedule a task, it needs to know either the start
|
321
326
|
and end criteria of a task, or one of them and a duration
|
322
327
|
specification. The start and end criteria can either be fixed dates or
|
@@ -324,7 +329,7 @@ relative dates. Relative dates are specifications of the type ''task B
|
|
324
329
|
starts after task A has finished''. Or in other words, task B depends
|
325
330
|
on task A. In this example the spec task depends on a subtasks of the
|
326
331
|
deliveries task. We have not specified it yet, but it has the local ID
|
327
|
-
start.
|
332
|
+
''''start''''.
|
328
333
|
|
329
334
|
To specify the dependency between the two tasks, we use the
|
330
335
|
[[depends]] attribute. This attribute must be followed by one or more
|
@@ -370,6 +375,10 @@ the AcSo scope that contains the spec tasks. For a change, we
|
|
370
375
|
|
371
376
|
<[example file="tutorial" tag="gui"]>
|
372
377
|
|
378
|
+
One more interesting thing to note is the fact that we like the
|
379
|
+
resource ''''dev2'''' only to work 6 hours each day on this task, so
|
380
|
+
we use the optional attribute [[limits.resource]] to specify this.
|
381
|
+
|
373
382
|
TaskJuggler can schedule your project for two different [[scenario|
|
374
383
|
scenarios]]. We have called the first scenario ''''plan'''' scenario
|
375
384
|
and the second ''''delayed'''' scenario. Many of the reports allow you
|