taskjuggler 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|