taskjuggler 3.6.0 → 3.7.1
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.
- checksums.yaml +5 -5
- data/CHANGELOG +51 -0
- data/data/css/tjreport.css +4 -0
- data/data/tjp.vim +21 -15
- data/examples/ProjectTemplate/template.tjp +7 -7
- data/examples/Tutorial/tutorial.tjp +1 -1
- data/lib/taskjuggler/Allocation.rb +1 -1
- data/lib/taskjuggler/AttributeBase.rb +10 -4
- data/lib/taskjuggler/Attributes.rb +2 -2
- data/lib/taskjuggler/BatchProcessor.rb +1 -1
- data/lib/taskjuggler/Interval.rb +10 -12
- data/lib/taskjuggler/Journal.rb +2 -2
- data/lib/taskjuggler/LogicalFunction.rb +1 -1
- data/lib/taskjuggler/LogicalOperation.rb +7 -4
- data/lib/taskjuggler/MessageHandler.rb +1 -1
- data/lib/taskjuggler/PTNProxy.rb +1 -1
- data/lib/taskjuggler/Project.rb +27 -22
- data/lib/taskjuggler/PropertyList.rb +7 -1
- data/lib/taskjuggler/PropertySet.rb +1 -1
- data/lib/taskjuggler/PropertyTreeNode.rb +5 -3
- data/lib/taskjuggler/Query.rb +3 -3
- data/lib/taskjuggler/RealFormat.rb +1 -1
- data/lib/taskjuggler/Resource.rb +2 -2
- data/lib/taskjuggler/ResourceScenario.rb +37 -5
- data/lib/taskjuggler/RichText/Snip.rb +1 -1
- data/lib/taskjuggler/RuntimeConfig.rb +1 -1
- data/lib/taskjuggler/Scoreboard.rb +5 -2
- data/lib/taskjuggler/Shift.rb +2 -2
- data/lib/taskjuggler/ShiftAssignments.rb +1 -1
- data/lib/taskjuggler/TaskJuggler.rb +4 -4
- data/lib/taskjuggler/TextParser.rb +1 -1
- data/lib/taskjuggler/TextParser/Scanner.rb +3 -3
- data/lib/taskjuggler/TimeSheets.rb +2 -2
- data/lib/taskjuggler/Tj3AppBase.rb +23 -9
- data/lib/taskjuggler/Tj3Config.rb +5 -3
- data/lib/taskjuggler/TjpExample.rb +3 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +157 -130
- data/lib/taskjuggler/UTF8String.rb +3 -3
- data/lib/taskjuggler/WorkingHours.rb +3 -3
- data/lib/taskjuggler/XMLElement.rb +12 -1
- data/lib/taskjuggler/apps/Tj3.rb +3 -1
- data/lib/taskjuggler/apps/Tj3Client.rb +3 -2
- data/lib/taskjuggler/apps/Tj3Daemon.rb +3 -1
- data/lib/taskjuggler/apps/Tj3Man.rb +4 -2
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +3 -1
- data/lib/taskjuggler/apps/Tj3SsSender.rb +3 -1
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +3 -1
- data/lib/taskjuggler/apps/Tj3TsSender.rb +3 -1
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +3 -1
- data/lib/taskjuggler/apps/Tj3WebD.rb +3 -1
- data/lib/taskjuggler/deep_copy.rb +1 -1
- data/lib/taskjuggler/reports/CSVFile.rb +3 -3
- data/lib/taskjuggler/reports/ChartPlotter.rb +1 -1
- data/lib/taskjuggler/reports/GanttChart.rb +8 -2
- data/lib/taskjuggler/reports/GanttHeader.rb +11 -1
- data/lib/taskjuggler/reports/GanttLine.rb +6 -0
- data/lib/taskjuggler/reports/ICalReport.rb +1 -1
- data/lib/taskjuggler/reports/Report.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableCell.rb +1 -1
- data/lib/taskjuggler/reports/TableReport.rb +7 -12
- data/lib/taskjuggler/reports/TjpExportRE.rb +1 -5
- data/lib/taskjuggler/version.rb +1 -0
- data/man/tj3.1 +130 -0
- data/man/tj3client.1 +145 -0
- data/man/tj3d.1 +93 -0
- data/man/tj3man.1 +76 -0
- data/man/tj3ss_receiver.1 +86 -0
- data/man/tj3ss_sender.1 +100 -0
- data/man/tj3ts_receiver.1 +86 -0
- data/man/tj3ts_sender.1 +92 -0
- data/man/tj3ts_summary.1 +104 -0
- data/man/tj3webd.1 +86 -0
- data/manual/Day_To_Day_Juggling +8 -8
- data/manual/Installation +6 -6
- data/manual/List_Attributes +1 -1
- data/manual/Rich_Text_Attributes +6 -5
- data/manual/Software +6 -6
- data/manual/TaskJuggler_Internals +4 -4
- data/manual/The_TaskJuggler_Syntax +5 -5
- data/manual/Tutorial +13 -11
- data/manual/html/Day_To_Day_Juggling.html +9 -9
- data/manual/html/Getting_Started.html +2 -2
- data/manual/html/How_To_Contribute.html +2 -2
- data/manual/html/Installation.html +8 -8
- data/manual/html/Intro.html +2 -2
- data/manual/html/List_Attributes.html +3 -3
- data/manual/html/Reporting_Bugs.html +2 -2
- data/manual/html/Rich_Text_Attributes.html +5 -5
- data/manual/html/Software.html +7 -7
- data/manual/html/TaskJuggler_2x_Migration.html +2 -2
- data/manual/html/TaskJuggler_Internals.html +6 -6
- data/manual/html/The_TaskJuggler_Syntax.html +6 -6
- data/manual/html/Tutorial.html +17 -14
- data/manual/html/account.html +4 -4
- data/manual/html/account.task.html +2 -2
- data/manual/html/accountprefix.html +2 -2
- data/manual/html/accountreport.html +4 -4
- data/manual/html/accountroot.html +3 -3
- data/manual/html/active.html +3 -3
- data/manual/html/adopt.task.html +2 -2
- data/manual/html/aggregate.html +2 -2
- data/manual/html/alert.html +3 -3
- data/manual/html/alertlevels.html +2 -2
- data/manual/html/allocate.html +3 -3
- data/manual/html/alphabet.html +1 -1
- data/manual/html/alternative.html +2 -2
- data/manual/html/author.html +2 -2
- data/manual/html/auxdir.html +2 -2
- data/manual/html/auxdir.report.html +3 -3
- data/manual/html/balance.html +3 -3
- data/manual/html/booking.resource.html +4 -4
- data/manual/html/booking.task.html +4 -4
- data/manual/html/caption.html +3 -3
- data/manual/html/cellcolor.column.html +3 -3
- data/manual/html/celltext.column.html +3 -3
- data/manual/html/center.html +3 -3
- data/manual/html/charge.html +2 -2
- data/manual/html/chargeset.html +2 -2
- data/manual/html/columnid.html +17 -13
- data/manual/html/columns.html +3 -3
- data/manual/html/complete.html +2 -2
- data/manual/html/copyright.html +2 -2
- data/manual/html/credits.html +2 -2
- data/manual/html/css/tjreport.css +4 -0
- data/manual/html/currency.html +2 -2
- data/manual/html/currencyformat.html +4 -4
- data/manual/html/dailymax.html +2 -2
- data/manual/html/dailymin.html +3 -3
- data/manual/html/dailyworkinghours.html +2 -2
- data/manual/html/date.extend.html +2 -2
- 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 +2 -2
- data/manual/html/disabled.html +2 -2
- data/manual/html/duration.html +2 -2
- data/manual/html/efficiency.html +3 -3
- data/manual/html/effort.html +2 -2
- data/manual/html/effortdone.html +2 -2
- data/manual/html/effortleft.html +2 -2
- data/manual/html/email.html +2 -2
- data/manual/html/enabled.html +2 -2
- data/manual/html/end.column.html +3 -3
- data/manual/html/end.html +4 -4
- data/manual/html/end.limit.html +2 -2
- data/manual/html/end.report.html +3 -3
- data/manual/html/end.timesheet.html +3 -3
- data/manual/html/endcredit.html +3 -3
- data/manual/html/epilog.html +3 -3
- data/manual/html/export.html +4 -4
- data/manual/html/extend.html +3 -3
- data/manual/html/fail.html +3 -3
- data/manual/html/fdl.html +2 -2
- data/manual/html/flags.account.html +2 -2
- data/manual/html/flags.html +2 -2
- data/manual/html/flags.journalentry.html +2 -2
- data/manual/html/flags.report.html +3 -3
- data/manual/html/flags.resource.html +2 -2
- data/manual/html/flags.statussheet.html +2 -2
- data/manual/html/flags.task.html +2 -2
- data/manual/html/flags.timesheet.html +2 -2
- data/manual/html/fontcolor.column.html +3 -3
- data/manual/html/footer.html +3 -3
- data/manual/html/formats.export.html +3 -3
- data/manual/html/formats.html +4 -4
- data/manual/html/functions.html +5 -5
- data/manual/html/gapduration.html +2 -2
- data/manual/html/gaplength.html +2 -2
- data/manual/html/halign.center.html +2 -2
- data/manual/html/halign.column.html +3 -3
- data/manual/html/halign.left.html +2 -2
- data/manual/html/halign.right.html +2 -2
- data/manual/html/hasalert.html +2 -2
- data/manual/html/header.html +3 -3
- data/manual/html/headline.html +3 -3
- data/manual/html/height.html +4 -4
- data/manual/html/hideaccount.html +4 -4
- data/manual/html/hidejournalentry.html +3 -3
- data/manual/html/hidereport.html +3 -3
- data/manual/html/hideresource.html +4 -4
- data/manual/html/hidetask.html +4 -4
- data/manual/html/icalreport.html +9 -3
- data/manual/html/include.macro.html +3 -3
- data/manual/html/include.project.html +3 -3
- data/manual/html/include.properties.html +3 -3
- data/manual/html/index.html +1 -1
- data/manual/html/inherit.extend.html +3 -3
- data/manual/html/interval1.html +3 -3
- data/manual/html/interval2.html +3 -3
- data/manual/html/interval3.html +2 -2
- data/manual/html/interval4.html +2 -2
- data/manual/html/isactive.html +2 -2
- data/manual/html/ischildof.html +2 -2
- data/manual/html/isdependencyof.html +2 -2
- data/manual/html/isdutyof.html +2 -2
- data/manual/html/isfeatureof.html +2 -2
- data/manual/html/isleaf.html +2 -2
- data/manual/html/ismilestone.html +2 -2
- data/manual/html/isongoing.html +3 -3
- data/manual/html/isresource.html +2 -2
- data/manual/html/isresponsibilityof.html +2 -2
- data/manual/html/istask.html +2 -2
- data/manual/html/isvalid.html +2 -2
- data/manual/html/journalattributes.html +3 -3
- data/manual/html/journalentry.html +3 -3
- data/manual/html/journalmode.html +4 -4
- data/manual/html/leaveallowance.html +3 -3
- data/manual/html/leaves.html +3 -3
- data/manual/html/left.html +3 -3
- data/manual/html/length.html +3 -3
- data/manual/html/limits.allocate.html +2 -2
- data/manual/html/limits.html +2 -2
- data/manual/html/limits.resource.html +2 -2
- data/manual/html/limits.task.html +2 -2
- data/manual/html/listitem.column.html +3 -3
- data/manual/html/listtype.column.html +2 -2
- data/manual/html/loadunit.html +3 -3
- data/manual/html/logicalexpression.html +4 -4
- data/manual/html/logicalflagexpression.html +4 -4
- data/manual/html/macro.html +4 -4
- data/manual/html/managers.html +2 -2
- data/manual/html/mandatory.html +4 -4
- data/manual/html/markdate.html +69 -0
- data/manual/html/maxend.html +4 -4
- data/manual/html/maximum.html +2 -2
- data/manual/html/maxstart.html +2 -2
- data/manual/html/milestone.html +3 -3
- data/manual/html/minend.html +2 -2
- data/manual/html/minimum.html +2 -2
- data/manual/html/minstart.html +2 -2
- data/manual/html/monthlymax.html +2 -2
- data/manual/html/monthlymin.html +3 -3
- data/manual/html/navbar.html +5 -1
- data/manual/html/navigator.html +2 -2
- data/manual/html/newtask.html +3 -3
- data/manual/html/nikureport.html +2 -2
- data/manual/html/note.task.html +4 -4
- data/manual/html/novevents.html +68 -0
- data/manual/html/now.html +4 -4
- data/manual/html/number.extend.html +2 -2
- data/manual/html/numberformat.html +3 -3
- data/manual/html/onend.html +2 -2
- data/manual/html/onstart.html +2 -2
- data/manual/html/opennodes.html +3 -3
- data/manual/html/outputdir.html +3 -3
- data/manual/html/overtime.booking.html +2 -2
- data/manual/html/period.column.html +2 -2
- data/manual/html/period.limit.html +2 -2
- data/manual/html/period.report.html +3 -3
- data/manual/html/period.task.html +2 -2
- data/manual/html/persistent.html +3 -3
- data/manual/html/precedes.html +5 -5
- data/manual/html/priority.html +4 -4
- data/manual/html/priority.timesheet.html +3 -3
- data/manual/html/project.html +4 -4
- data/manual/html/projectid.html +2 -2
- data/manual/html/projectid.task.html +3 -3
- data/manual/html/projectids.html +2 -2
- data/manual/html/projection.html +2 -2
- data/manual/html/prolog.html +3 -3
- data/manual/html/properties.html +3 -3
- data/manual/html/purge.html +3 -3
- data/manual/html/rate.html +2 -2
- data/manual/html/rate.resource.html +2 -2
- data/manual/html/rawhtmlhead.html +4 -4
- data/manual/html/reference.extend.html +2 -2
- data/manual/html/remaining.html +3 -3
- data/manual/html/replace.html +2 -2
- data/manual/html/reportprefix.html +2 -2
- data/manual/html/resource.html +3 -3
- data/manual/html/resourceattributes.html +2 -2
- data/manual/html/resourceprefix.html +2 -2
- data/manual/html/resourcereport.html +5 -5
- data/manual/html/resourceroot.html +4 -4
- data/manual/html/resources.limit.html +2 -2
- data/manual/html/responsible.html +2 -2
- data/manual/html/richtext.extend.html +2 -2
- data/manual/html/right.html +3 -3
- data/manual/html/rollupaccount.html +4 -4
- data/manual/html/rollupresource.html +4 -4
- data/manual/html/rolluptask.html +4 -4
- data/manual/html/scale.column.html +2 -2
- data/manual/html/scenario.html +3 -3
- data/manual/html/scenario.ical.html +3 -3
- data/manual/html/scenarios.export.html +2 -2
- data/manual/html/scenarios.html +3 -3
- data/manual/html/scenariospecific.extend.html +2 -2
- data/manual/html/scheduled.html +2 -2
- data/manual/html/scheduling.html +6 -6
- data/manual/html/schedulingmode.html +2 -2
- data/manual/html/select.html +4 -4
- data/manual/html/selfcontained.html +3 -3
- data/manual/html/shift.allocate.html +2 -2
- data/manual/html/shift.html +3 -3
- data/manual/html/shift.resource.html +4 -4
- data/manual/html/shift.task.html +2 -2
- data/manual/html/shift.timesheet.html +2 -2
- data/manual/html/shifts.allocate.html +2 -2
- data/manual/html/shifts.resource.html +2 -2
- data/manual/html/shifts.task.html +3 -3
- data/manual/html/shorttimeformat.html +3 -3
- data/manual/html/sloppy.booking.html +2 -2
- data/manual/html/sloppy.projection.html +2 -2
- data/manual/html/sortaccounts.html +3 -3
- data/manual/html/sortjournalentries.html +3 -3
- data/manual/html/sortresources.html +3 -3
- data/manual/html/sorttasks.html +3 -3
- data/manual/html/start.column.html +3 -3
- data/manual/html/start.html +4 -4
- data/manual/html/start.limit.html +2 -2
- data/manual/html/start.report.html +3 -3
- data/manual/html/startcredit.html +3 -3
- data/manual/html/status.statussheet.html +2 -2
- data/manual/html/status.timesheet.html +2 -2
- data/manual/html/statussheet.html +2 -2
- data/manual/html/statussheetreport.html +3 -3
- data/manual/html/strict.projection.html +2 -2
- data/manual/html/summary.html +2 -2
- data/manual/html/supplement.html +2 -2
- data/manual/html/supplement.resource.html +2 -2
- data/manual/html/supplement.task.html +2 -2
- data/manual/html/tagfile.html +3 -3
- data/manual/html/task.html +3 -3
- data/manual/html/task.statussheet.html +3 -3
- data/manual/html/task.timesheet.html +2 -2
- data/manual/html/taskattributes.html +2 -2
- data/manual/html/taskprefix.html +2 -2
- data/manual/html/taskreport.html +5 -5
- data/manual/html/taskroot.export.html +2 -2
- data/manual/html/taskroot.html +3 -3
- data/manual/html/text.extend.html +2 -2
- data/manual/html/textreport.html +5 -5
- data/manual/html/timeformat.html +4 -4
- data/manual/html/timeformat1.html +2 -2
- data/manual/html/timeformat2.html +2 -2
- data/manual/html/timeoff.nikureport.html +2 -2
- data/manual/html/timesheet.html +3 -3
- data/manual/html/timesheetreport.html +3 -3
- data/manual/html/timezone.export.html +2 -2
- data/manual/html/timezone.html +2 -2
- data/manual/html/timezone.report.html +3 -3
- data/manual/html/timezone.shift.html +2 -2
- data/manual/html/timingresolution.html +2 -2
- data/manual/html/title.column.html +2 -2
- data/manual/html/title.html +3 -3
- data/manual/html/toc.html +157 -143
- data/manual/html/tooltip.column.html +3 -3
- data/manual/html/tracereport.html +8 -8
- data/manual/html/trackingscenario.html +3 -3
- data/manual/html/treelevel.html +2 -2
- data/manual/html/vacation.html +2 -2
- data/manual/html/vacation.resource.html +2 -2
- data/manual/html/vacation.shift.html +2 -2
- data/manual/html/warn.html +4 -4
- data/manual/html/weeklymax.html +2 -2
- data/manual/html/weeklymin.html +3 -3
- data/manual/html/weekstartsmonday.html +2 -2
- data/manual/html/weekstartssunday.html +2 -2
- data/manual/html/width.column.html +2 -2
- data/manual/html/width.html +4 -4
- data/manual/html/work.html +3 -3
- data/manual/html/workinghours.project.html +3 -3
- data/manual/html/workinghours.resource.html +2 -2
- data/manual/html/workinghours.shift.html +2 -2
- data/manual/html/yearlyworkingdays.html +2 -2
- data/spec/ProjectBroker_spec.rb +6 -6
- data/spec/StatusSheets_spec.rb +1 -1
- data/spec/TimeSheets_spec.rb +1 -1
- data/taskjuggler.gemspec +7 -7
- data/tasks/changelog.rake +2 -0
- data/tasks/gem.rake +3 -0
- data/tasks/help2man.rake +18 -0
- data/tasks/kate.rake +2 -0
- data/tasks/manual.rake +2 -0
- data/tasks/test.rake +5 -0
- data/tasks/vim.rake +2 -0
- data/test/TestSuite/Export-Reports/refs/AccountReport.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/AdoptedTasks.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/AlertLevels.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Allocate-1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/AutoID.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/AutoMacros.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Currencyformat.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Depends1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Durations.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Efficiency.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Gap.tjp +0 -3
- data/test/TestSuite/Export-Reports/refs/Include.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Journal.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Macro-1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Macro-3.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Manager.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Milestone.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Numberformat.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Precedes1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Project.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/ProjectIDs.tjp +0 -3
- data/test/TestSuite/Export-Reports/refs/Reports.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Resource.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/ResourceRoot.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/RollupResource.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Scenario.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Timezone.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Vacation.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/navigator.tjp +0 -4
- data/test/TestSuite/Export-Reports/refs/template.tjp +0 -6
- data/test/TestSuite/Export-Reports/refs/textreport.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/tutorial.tjp +0 -8
- data/test/TestSuite/Syntax/Correct/Booking.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Currencyformat.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +5 -0
- data/test/test_ProjectFileScanner.rb +8 -8
- metadata +43 -10
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Day_To_Day_Juggling</title>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
|
25
25
|
<h1 class="manual" id="Day_To_Day_Juggling">7 Day To Day Juggling</h1>
|
26
26
|
<h2 class="manual" id="Working_with_multiple_scenarios">7.1 Working with multiple scenarios</h2>
|
27
|
-
<p class="manual">To analyze the impact that a small variation can have on a project, TaskJuggler supports an unlimited amount of scenarios. Each additional scenario is a slight derivation of
|
27
|
+
<p class="manual">To analyze the impact that a small variation can have on a project, TaskJuggler supports an unlimited amount of scenarios. Each additional scenario is a slight derivation of it's parent. The task tree structure needs to be the same for all scenarios, but most attributes can vary from one scenario to another. Several report types support comparative listing of multiple <a href="scenarios.html">scenarios</a>.</p>
|
28
28
|
<p class="manual">By default, TaskJuggler knows about one scenario, called <code class="manual">plan</code>. The name of this scenario can be changed just like you can add more scenarios in the <a href="project.html">project</a> section of your project files.</p>
|
29
29
|
<div class="codeframe"><pre class="code">project "Example" 2007-05-29 - 2007-07-01 {
|
30
30
|
timezone "America/Denver"
|
@@ -119,7 +119,7 @@
|
|
119
119
|
<li>
|
120
120
|
<b>Time sheets</b>: Every project contributor needs to fill out a <a href="timesheet.html">time sheet</a> once a week. To simplify this task as much as possible, a template will be send out by email. The template already lists all tasks that were planned for this week to work on with the respective effort values and end dates. It also provides sections for textual status reports. The contributor needs to review and complete the time sheet and has to send it back via email. TaskJuggler validates the submission and returns an email with either an error message or a nicely formatted version of the time sheet.</li>
|
121
121
|
<li>All time sheets must be submitted by a certain deadline, e. g. midnight on Sunday. TaskJuggler will then compile a summary report and sent it out to a list of interested parties. It will also detect missing time sheets and will send out a reminder to those contributors that have not submitted their report.</li>
|
122
|
-
<li>On Monday the project managers need to review the time sheets and update the plan accordingly. TaskJuggler can compile a list changes compared to the plan. This makes it easy to update the plan according to the actual progress that was made. The closer the actuals match the plan the less work this is. The project managers now generate bookings for the last week and add them to the database with previous bookings. Doing so
|
122
|
+
<li>On Monday the project managers need to review the time sheets and update the plan accordingly. TaskJuggler can compile a list of changes compared to the plan. This makes it easy to update the plan according to the actual progress that was made. The closer the actuals match the plan the less work this is. The project managers now generate bookings for the last week and add them to the database with previous bookings. Doing so will prevent changes to the plan to affect the past. Only the future will be modified.</li>
|
123
123
|
<li>Once the plan has been updated, managers will receive their status sheet templates per email. Each manager will get the information for the tasks that they are <a href="responsible.html">responsible</a> for. To consolidate the information for the next manager in the reporting chain they can moderate the reports in three ways. Consolidated manager reports are called dashboard reports.</li>
|
124
124
|
<ol>
|
125
125
|
<li>A status report for a task can be removed from the dashboard.</li>
|
@@ -312,18 +312,18 @@ include</a> this file at the end of your project header section.</p>
|
|
312
312
|
<p class="manual">The booking file must be <a href="include.properties.html">included</a> at the end of your main project file.</p>
|
313
313
|
<p class="manual">In case there are still some discrepancies between the booking data and the actual assignments of the resources, you can edit the booking file to correct the data.</p>
|
314
314
|
<p class="manual">The next time you run <code class="manual">tj3</code> with your project, all assignments prior to the date in the project header file will be taken only from the bookings file. All assignments after this date will be determined by the scheduler according to your provided constraints.</p>
|
315
|
-
<p class="manual">When you run <code class="manual">tj3 --freeze</code> again, it will update the header and booking files. Since you have included your booking file, any modifications you have made
|
315
|
+
<p class="manual">When you run <code class="manual">tj3 --freeze</code> again, it will update the header and booking files. Since you have included your booking file, any modifications you have made will be preserved. That is, the actual data will be preserved, not the formatting since the file will be completely re-generated again.</p>
|
316
316
|
<h3 class="manual" id="Status_Sheets">7.7.1 Status Sheets</h3>
|
317
317
|
<p class="manual">For larger projects with many contributors the flood of time sheets can become hard to manage. Higher level managers are usually not interested in all the details as long as the project executes according to plan. To keep the managers on each level informed with the proper amount and content TaskJuggler provides the concept of status sheets.</p>
|
318
318
|
<p class="manual">To use status sheets, the reporting chains must be reflected in the task hierarchy of the project. The <a href="responsible.html">responsible</a> attribute must be used to assign tasks to managers. Leaf tasks or whole sub trees must be assigned to the lowest level of management. The responsibility for one or more level of parent tasks must be assigned to the next level of managers and so on.</p>
|
319
319
|
<p class="manual">When all time sheets have been submitted, the reports for all tasks are sent to the responsible managers for these tasks. The information is generated by the <code class="manual">tj3ss_sender</code> program and is called a status report template. Each manager will get one template that includes the status reports for the tasks they are responsible for.</p>
|
320
|
-
<p class="manual">It's
|
321
|
-
<ul><li>Forward the status report of a task directly to the next level. The original authorship can be
|
320
|
+
<p class="manual">It's the managers task to prepare the report for the next level of management. To do this, the manager has 3 options:</p>
|
321
|
+
<ul><li>Forward the status report of a task directly to the next level. The original authorship can be kept or removed. The content can also be edited if needed.</li></ul>
|
322
322
|
<ul><li>Similar reports for a task or a whole task sub-tree can be combined into just one report. To achieve this a new task report must be created for the parent tasks of these lower-level tasks. This will replace all reports for sub tasks with this newly created report.</li></ul>
|
323
323
|
<ul><li>A task report can simply be removed from the status report.</li></ul>
|
324
324
|
<p class="manual">The status sheet template is designed to perform all three actions in a simple manner. The original reports are commented out. To remove a report, it needs to be uncommented and the headline must be set to an empty string. To change a report, the text must be edited after the comment marks have been removed. To create a summary report for a group of tasks, a new report for the common parent task must be created.</p>
|
325
325
|
<h3 class="manual" id="The_Status_Sheet_Template_Sender">7.7.2 The Status Sheet Template Sender</h3>
|
326
|
-
<p class="manual">To send out the time sheets, the command <code class="manual">tj3ts_sender</code> must be used. It will use the <code class="manual">tj3client</code> program to
|
326
|
+
<p class="manual">To send out the time sheets, the command <code class="manual">tj3ts_sender</code> must be used. It will use the <code class="manual">tj3client</code> program to retrieve the necessary data from the TaskJuggler server.</p>
|
327
327
|
<p class="manual">Before the program can be used, a new section must be added to the TaskJuggler configuration file.</p>
|
328
328
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">_statussheets:
|
329
329
|
projectId: prj
|
@@ -341,7 +341,7 @@ include</a> this file at the end of your project header section.</p>
|
|
341
341
|
<p class="manual">By sending an email to statussheet-request@taskjuggler.your_company.com and putting their resource ID in the subject of the email, managers will receive an email with the status sheet template. The email will be sent to the email address in the project plan, not the sender of the request email.</p>
|
342
342
|
<p class="manual">The setup described here only works for first-level managers. By adding more email addresses, this can easily be extended for more levels of management. You just need to make sure that <code class="manual">tj3ss_sender</code> is called with the proper parameters to change the resource selection and end date.</p>
|
343
343
|
<h3 class="manual" id="The_Status_Sheet_Receiver">7.7.4 The Status Sheet Receiver</h3>
|
344
|
-
<p class="manual">Similarly to the time sheets
|
344
|
+
<p class="manual">Similarly to the time sheets, the completed status sheets must be send back by email. We already described how the necessary email aliases should be configured. For status sheets the address <code class="manual">statussheets@taskjuggler.your_company.com</code> can be used.</p>
|
345
345
|
<p class="manual">The incoming emails will then be forwarded to the <code class="manual">tj3ss_receiver</code> program that will process them. To use it, you first need to add the following settings to the <code class="manual">statussheets</code> section of your TaskJuggler configuration file:</p>
|
346
346
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">_statussheets:
|
347
347
|
projectId: prj
|
@@ -360,6 +360,6 @@ include</a> this file at the end of your project header section.</p>
|
|
360
360
|
</tr></table>
|
361
361
|
<hr/>
|
362
362
|
<br/>
|
363
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
363
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
364
364
|
</body>
|
365
365
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Getting_Started</title>
|
@@ -59,6 +59,6 @@ accounts</a>, <a href="resource.html">resources</a>, <a href="task.html">tasks</
|
|
59
59
|
</tr></table>
|
60
60
|
<hr/>
|
61
61
|
<br/>
|
62
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
62
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
63
63
|
</body>
|
64
64
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>How_To_Contribute</title>
|
@@ -90,6 +90,6 @@ rake gem
|
|
90
90
|
</tr></table>
|
91
91
|
<hr/>
|
92
92
|
<br/>
|
93
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
93
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
94
94
|
</body>
|
95
95
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Installation</title>
|
@@ -54,7 +54,7 @@
|
|
54
54
|
<p class="manual">This will download and install the latest version from the <a href="http://rubygems.org/gems/taskjuggler" target="_top">RubyGems.org</a> site.</p>
|
55
55
|
<h4 class="manual" id="Installation_into_a_local_Directory">2.2.1.2 Installation into a local Directory</h4>
|
56
56
|
<p class="manual">If you don't want to install TaskJuggler for all users on the system, you can also install it into your home or data directory. This does not require root or admin permissions.</p>
|
57
|
-
<p class="manual">The following steps
|
57
|
+
<p class="manual">The following steps describe the installation on a Linux system with the bash shell. You may have to use slightly different commands on a different operating system.</p>
|
58
58
|
<p class="manual">Create a new directory <code class="manual">taskjuggler</code> in your $HOME directory for the installation to go into.</p>
|
59
59
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> mkdir taskjuggler
|
60
60
|
</pre></div>
|
@@ -71,7 +71,7 @@
|
|
71
71
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> export GEM_HOME=${HOME}/taskjuggler
|
72
72
|
</pre></div>
|
73
73
|
<p class="manual">The last two settings should also be added to your .profile file to make them permanent.</p>
|
74
|
-
<p class="manual">That's it. You now should
|
74
|
+
<p class="manual">That's it. You now should run TaskJuggler.</p>
|
75
75
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> tj3 --version
|
76
76
|
</pre></div>
|
77
77
|
<h3 class="manual" id="The_manual_way">2.2.2 The manual way</h3>
|
@@ -101,7 +101,7 @@
|
|
101
101
|
<p class="manual">Then checkout the source code with the following command</p>
|
102
102
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">git clone git@github.com/taskjuggler/TaskJuggler.git
|
103
103
|
</pre></div>
|
104
|
-
<p class="manual">Make sure
|
104
|
+
<p class="manual">Make sure you have removed all previously installed instances of TaskJuggler from your system before doing so. It is a common mistake to have an old version of the TaskJuggler installed and then use parts of the old and new version together.</p>
|
105
105
|
<p class="manual">If your Ruby installation does not come with the <a href="http://rake.rubyforge.org" target="_top">Rake</a> build tool, you need to install it now.</p>
|
106
106
|
<p class="manual">If you are interested in a code coverage analysis, you need to also install the <a href="http://eigenclass.org/hiki.rb?rcov" target="_top">rcov</a> code coverage analysis tool. This tool is not needed for most developers. You can safely ignore the warning during rake builds if you don't have it installed.</p>
|
107
107
|
<p class="manual">The following command will create a gem package from the source code.</p>
|
@@ -155,7 +155,7 @@ export PATH=${PATH}:${TASKJUGGLER_DIR}/bin
|
|
155
155
|
<p class="manual">Log out and back in again. Now</p>
|
156
156
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> which ruby
|
157
157
|
</pre></div>
|
158
|
-
<p class="manual">should
|
158
|
+
<p class="manual">should return the path to the link to your <code class="manual">${HOME}/bin/ruby</code>. You now have the latest Ruby installed and are ready to use TaskJuggler.</p>
|
159
159
|
<p class="manual">As a final step, you need to install the <code class="manual">mail</code> and <code class="manual">term-ansicolor</code> gems.</p>
|
160
160
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> sudo gem19 install mail term-ansicolor
|
161
161
|
</pre></div>
|
@@ -163,7 +163,7 @@ export PATH=${PATH}:${TASKJUGGLER_DIR}/bin
|
|
163
163
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> sudo gem19 install taskjuggler
|
164
164
|
</pre></div>
|
165
165
|
<h2 class="manual" id="Installing_the_Vim_Support">2.7 Installing the Vim Support</h2>
|
166
|
-
<p class="manual">TaskJuggler can be used with any text editor that supports UTF-8 text file editing. If you don't have a preference yet, we recommend to try the <a href="http://www.vim.org" target="_top">Vim</a> text editor. It's a very powerful editor and it has been customized for better integration with TaskJuggler. This section describes
|
166
|
+
<p class="manual">TaskJuggler can be used with any text editor that supports UTF-8 text file editing. If you don't have a preference yet, we recommend to try the <a href="http://www.vim.org" target="_top">Vim</a> text editor. It's a very powerful editor and it has been customized for better integration with TaskJuggler. This section describes how to activate and use the Vim integration. Vim is provided by pretty much any Linux distribution and also works well on MacOX and Windows. See the web page for how to install it if you don't have it yet.</p>
|
167
167
|
<p class="manual">This section describes the integration on Linux. Please see the <a href="How_To_Contribute.html">How_To_Contribute</a> section if you want to contribute the description for another OS.</p>
|
168
168
|
<p class="manual">If you have never customized Vim, you need to create a few directories first.</p>
|
169
169
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> cd ${HOME}
|
@@ -173,7 +173,7 @@ export PATH=${PATH}:${TASKJUGGLER_DIR}/bin
|
|
173
173
|
<p class="manual">Then copy the syntax file <code class="manual">tjp.vim</code> into the vim syntax directory. The following command works if you have installed TaskJuggler as a gem with the system provided Ruby. For other cases, you may have to modify it accordingly.</p>
|
174
174
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> cp `gem contents taskjuggler | fgrep tjp.vim` .vim/syntax
|
175
175
|
</pre></div>
|
176
|
-
<p class="manual">Now we have to make sure
|
176
|
+
<p class="manual">Now we have to make sure Vim detects the file. Edit the <code class="manual">.vim/filetype.vim</code> file to contain the following section.</p>
|
177
177
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">augroup filetypedetect
|
178
178
|
au BufNewFile,BufRead *.tjp,*.tji setf tjp
|
179
179
|
augroup END
|
@@ -200,6 +200,6 @@ augroup END
|
|
200
200
|
</tr></table>
|
201
201
|
<hr/>
|
202
202
|
<br/>
|
203
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
203
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
204
204
|
</body>
|
205
205
|
</html>
|
data/manual/html/Intro.html
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Intro</title>
|
@@ -99,6 +99,6 @@
|
|
99
99
|
</tr></table>
|
100
100
|
<hr/>
|
101
101
|
<br/>
|
102
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
102
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
103
103
|
</body>
|
104
104
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>List_Attributes</title>
|
@@ -40,7 +40,7 @@
|
|
40
40
|
}
|
41
41
|
</pre></div>
|
42
42
|
<p class="manual">In this example, task <code class="manual">T3</code> has the flags <code class="manual">f1</code> and <code class="manual">f2</code> assigned.</p>
|
43
|
-
<p class="manual">The same works for scenarios as well. Even though the syntax may not look like inheritance is at play the scenario <code class="manual">s2</code> inherits all values from <code class="manual">s1</code>.</p>
|
43
|
+
<p class="manual">The same works for scenarios as well. Even though the syntax may not look like inheritance is at play, the scenario <code class="manual">s2</code> inherits all values from <code class="manual">s1</code>.</p>
|
44
44
|
<div class="codeframe"><pre class="code">project "List attributes" 2014-04-06 +1m {
|
45
45
|
scenario s1 "S1" {
|
46
46
|
scenario s2 "S2"
|
@@ -71,6 +71,6 @@ task "T4" {
|
|
71
71
|
</tr></table>
|
72
72
|
<hr/>
|
73
73
|
<br/>
|
74
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
74
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
75
75
|
</body>
|
76
76
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Reporting_Bugs</title>
|
@@ -44,6 +44,6 @@
|
|
44
44
|
</tr></table>
|
45
45
|
<hr/>
|
46
46
|
<br/>
|
47
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
47
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
48
48
|
</body>
|
49
49
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Rich_Text_Attributes</title>
|
@@ -85,7 +85,7 @@ This is a '''''italic and bold''''' word.
|
|
85
85
|
<p class="manual">In some situations, it is desirable to not interpret certain markup sequences and reproduce the text verbatim. Such text must be enclosed in nowiki tags.</p>
|
86
86
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"><nowiki> This is not '''bold''' text. </nowiki>
|
87
87
|
</pre></div>
|
88
|
-
<p class="manual">You can also insert raw HTML code by enclosing it in <b><html>...</html></b> tags. For all other output formats, this content will be ignored. There is also no error checking
|
88
|
+
<p class="manual">You can also insert raw HTML code by enclosing it in <b><html>...</html></b> tags. For all other output formats, this content will be ignored. There is also no error checking whether the code is valid! Use this feature very carefully.</p>
|
89
89
|
<h3 class="manual" id="Block_and_Inline_Generators">5.4.3 Block and Inline Generators</h3>
|
90
90
|
<p class="manual">Block and inline generators are a very powerful extension that allow you to insert arbitrarily complex content. Block generators create a text block whereas inline generators generate an element that fits inside a text paragraph.</p>
|
91
91
|
<p class="manual">Block generators use the following syntax:</p>
|
@@ -120,7 +120,7 @@ This is a '''''italic and bold''''' word.
|
|
120
120
|
<ul><li>
|
121
121
|
<code class="manual">id</code> : ID of a defined report</li></ul>
|
122
122
|
<ul><li>
|
123
|
-
<code class="manual">attributes</code>: A set of attributes that override the original attributes of the referenced report. All report attributes are supported. Since the
|
123
|
+
<code class="manual">attributes</code>: A set of attributes that override the original attributes of the referenced report. All report attributes are supported. Since the values of attributes already must be enclosed by single or double quotes, all single or double quotes contained in the string must be escaped with backslashes. This feature enables reports with content that is customized based on where they have been referenced from. It requires the reports to be dynamically generated and is only available when used with the <code class="manual">tj3d</code> web server <code class="manual">tj3webd</code>. The <code class="manual">tj3</code> application will ignore the attributes setting.</li></ul>
|
124
124
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">taskreport "All" {
|
125
125
|
formats html
|
126
126
|
columns name {
|
@@ -163,7 +163,7 @@ taskreport taskRep "Task" {
|
|
163
163
|
<ul><li>
|
164
164
|
<code class="manual">currencyformat</code> : The <a href="currencyformat.html">currencyformat</a> used to format currency values.</li></ul>
|
165
165
|
<p class="manual">The query generator inserts any requested value from the project, a task or a resource.</p>
|
166
|
-
<p class="manual">Queries are context aware. Depending on the context where the query is used, certain or all of the above parameters have already predefined values. When used in the header section of a report, the context does not provide a property or scope property. Start and end dates as well the formatting options are taken from the report context. But when used e. g. in <a href="celltext.column.html">celltext.column</a
|
166
|
+
<p class="manual">Queries are context aware. Depending on the context where the query is used, certain or all of the above parameters have already predefined values. When used in the header section of a report, the context does not provide a property or scope property. Start and end dates as well the formatting options are taken from the report context. But when used e. g. in <a href="celltext.column.html">celltext.column</a>, the cell provides that property and the attribute and possibly even the scope property.</p>
|
167
167
|
</div></div>
|
168
168
|
<br/>
|
169
169
|
<hr/>
|
@@ -174,6 +174,6 @@ taskreport taskRep "Task" {
|
|
174
174
|
</tr></table>
|
175
175
|
<hr/>
|
176
176
|
<br/>
|
177
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
177
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
178
178
|
</body>
|
179
179
|
</html>
|
data/manual/html/Software.html
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Software</title>
|
@@ -23,7 +23,7 @@
|
|
23
23
|
<br/>
|
24
24
|
<div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
|
25
25
|
<h1 class="manual" id="The_TaskJuggler_Software">6 The TaskJuggler Software</h1>
|
26
|
-
<p class="manual">After the installation of a software package the first
|
26
|
+
<p class="manual">After the installation of a software package the first question that most users have is <i>"How do I run it?"</i>. Many users expect to find an icon on their desktop or an entry in the start menu hierarchy. Don't bother looking for them, you won't find any for TaskJuggler. As we have mentioned before, TaskJuggler is a command line program. All the components are started from a shell by typing in the command name.</p>
|
27
27
|
<p class="manual">This chapter describes the most important TaskJuggler commands and how to use them. If you haven't used command line programs before, don't worry - you will quickly get used to it.</p>
|
28
28
|
<h2 class="manual" id="tj3">6.1 <code class="manual">tj3</code>
|
29
29
|
</h2>
|
@@ -74,7 +74,7 @@ shift.timesheet
|
|
74
74
|
<p class="manual">The same information that is available in your shell is also available in your web browser.</p>
|
75
75
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">tj3man --html <keyword>
|
76
76
|
</pre></div>
|
77
|
-
<p class="manual">The latter defaults to using the <a href="http://www.mozilla.com/en-US/firefox/new/" target="_top">Mozilla Firefox</a> web browser
|
77
|
+
<p class="manual">The latter defaults to using the <a href="http://www.mozilla.com/en-US/firefox/new/" target="_top">Mozilla Firefox</a> web browser. Please see</p>
|
78
78
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">tj3man --help
|
79
79
|
</pre></div>
|
80
80
|
<p class="manual">how to use a different browser. If you omit the keyword, you will get this user manual (browser).</p>
|
@@ -82,7 +82,7 @@ shift.timesheet
|
|
82
82
|
</h2>
|
83
83
|
<p class="manual">
|
84
84
|
<code class="manual">tj3d</code> is the TaskJuggler daemon. It is a program that runs in the background, disconnected from your shell to provide certain services. It can generate reports on demand and processes incoming time sheets or status reports.</p>
|
85
|
-
<p class="manual">Depending on the size of your project the scheduling time can take several minutes or more. Since all operations need to be done on the data of a scheduled project, it makes sense to have this data readily available. This is the job of the TaskJuggler server or daemon in Linux lingo. The program is called <code class="manual">tj3d</code>. When started, it automatically disconnects from the terminal and runs in the background. All interactions with the server are done via the TCP/IP protocol. For security reasons, only connections from the same machine (localhost) are accepted. To get access all clients must provide an authentication key. A TaskJuggler server can serve any number of projects. Once a project has been loaded successfully, clients can retrieve the data in form of reports. Projects are identified by their project ID. If a newly added project has the same ID
|
85
|
+
<p class="manual">Depending on the size of your project the scheduling time can take several minutes or more. Since all operations need to be done on the data of a scheduled project, it makes sense to have this data readily available. This is the job of the TaskJuggler server or daemon in Linux lingo. The program is called <code class="manual">tj3d</code>. When started, it automatically disconnects from the terminal and runs in the background. All interactions with the server are done via the TCP/IP protocol. For security reasons, only connections from the same machine (localhost) are accepted. To get access, all clients must provide an authentication key. A TaskJuggler server can serve any number of projects. Once a project has been loaded successfully, clients can retrieve the data in form of reports. Projects are identified by their project ID. If a newly added project has the same ID as an already loaded project, the new project will replace the old project once it was scheduled successfully. Before you start the server, you need to provide a configuration file with some basic settings.</p>
|
86
86
|
<p class="manual">All taskjuggler components can use the same TaskJuggler configuration file. The format is a simple plain text format that follows the <a href="http://www.yaml.org/" target="_top">YAML specification</a>. The file should be called <code class="manual">.taskjugglerrc</code> or <code class="manual">taskjuggler.rc</code>. The settings are structured by sections. Section names always start with an underscore.</p>
|
87
87
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">_global:
|
88
88
|
authKey: topsecret
|
@@ -100,7 +100,7 @@ shift.timesheet
|
|
100
100
|
<li>3: Like 2, but additionally with information messages</li>
|
101
101
|
<li>4: Like 3, but additionally with debug messages</li>
|
102
102
|
</ul>
|
103
|
-
<p class="manual">The configuration file will be searched in the current directory, the current user's home directory or <code class="manual">/etc</code>. You can also explicitly tell the server where to find the configuration file with the <code class="manual">-c</code> option. See</p>
|
103
|
+
<p class="manual">The configuration file will be searched for in the current directory, the current user's home directory or <code class="manual">/etc</code>. You can also explicitly tell the server where to find the configuration file with the <code class="manual">-c</code> option. See</p>
|
104
104
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">tj3d --help
|
105
105
|
</pre></div>
|
106
106
|
<p class="manual">for details.</p>
|
@@ -134,7 +134,7 @@ shift.timesheet
|
|
134
134
|
authKey: topsecret
|
135
135
|
webServerPort: 8080
|
136
136
|
</pre></div>
|
137
|
-
<p class="manual">To access the HTML reports point your web browser to <code class="manual">http://localhost:8080/taskjuggler</code>. This assumes that the server is running on your local machine. You will then see a list of all loaded projects. Click on the project name to get a list of all reports for this project.</p>
|
137
|
+
<p class="manual">To access the HTML reports, point your web browser to <code class="manual">http://localhost:8080/taskjuggler</code>. This assumes that the server is running on your local machine. You will then see a list of all loaded projects. Click on the project name to get a list of all reports for this project.</p>
|
138
138
|
<p class="manual"><i>WARNING: Please be aware that the web server when you have started it can be accessed by anybody on your local machine and by anybody that can reach your machine over the network! It will serve all reports of all projects that are hosted by the TaskJuggler daemon.</i></p>
|
139
139
|
</div></div>
|
140
140
|
<br/>
|
@@ -146,6 +146,6 @@ shift.timesheet
|
|
146
146
|
</tr></table>
|
147
147
|
<hr/>
|
148
148
|
<br/>
|
149
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
149
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
150
150
|
</body>
|
151
151
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>TaskJuggler_2x_Migration</title>
|
@@ -66,6 +66,6 @@ applied</a> to certain resources.</li></ul>
|
|
66
66
|
</tr></table>
|
67
67
|
<hr/>
|
68
68
|
<br/>
|
69
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
69
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
70
70
|
</body>
|
71
71
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>TaskJuggler_Internals</title>
|
@@ -27,7 +27,7 @@
|
|
27
27
|
<h2 class="manual" id="How_the_Scheduler_works">8.1 How the Scheduler works</h2>
|
28
28
|
<p class="manual">It's important to understand that the scheduler implementation is not an optimization algorithm. It does not search a solution space and evaluates various alternative results against each other. This has been tried, but for any real-world project, the solution space becomes unmanageable and scheduling runs took hours to complete.</p>
|
29
29
|
<p class="manual">Instead, we use a heuristic to decide when each task gets its resources assigned. This heuristic is certainly not perfect but has shown good results with fairly moderate computation costs. The following sections contain an overview of the scheduling algorithm. Users are also encouraged to read the actual source code. It can be found in <code class="manual">Project.rb</code>, <code class="manual">TaskScenario.rb</code>, <code class="manual">ResourceScenario.rb</code> and <code class="manual">Allocation.rb</code>. All these files can be found in the <code class="manual">lib/taskjuggler</code> directory. You can also browse the sources on <a href="https://github.com/taskjuggler/TaskJuggler" target="_top">github</a>.</p>
|
30
|
-
<p class="manual">The scheduler needs to determine the start and end date for all tasks that don't have such dates yet. To deal with multiple concurrent time zones, all time related events are stored internally as UTC time.Additionally, it allocates resources to tasks. All events such as start or end of a task, or allocation of a resource can only happen aligned with the <a href="timingresolution.html">timing resolution</a>. This determines the smallest possible allocation period that we call a time slot. The duration of the slot can be set by the user. Possible values are 5, 10, 15, 30 and 60 minutes.</p>
|
30
|
+
<p class="manual">The scheduler needs to determine the start and end date for all tasks that don't have such dates yet. To deal with multiple concurrent time zones, all time related events are stored internally as UTC time. Additionally, it allocates resources to tasks. All events such as start or end of a task, or allocation of a resource can only happen aligned with the <a href="timingresolution.html">timing resolution</a>. This determines the smallest possible allocation period that we call a time slot. The duration of the slot can be set by the user. Possible values are 5, 10, 15, 30 and 60 minutes.</p>
|
31
31
|
<p class="manual">TaskJuggler keeps a scoreboard for each time slot for each leaf resource. Each scoreboard entry specifies whether the resource is unassigned, assigned to a specific task or on leave. This explains why the project duration and number of allocated resources determines the memory usage of the scheduler.</p>
|
32
32
|
<p class="manual">For the scheduling of the project, the scheduler only looks at leave tasks that are not milestones. Container tasks and milestones are scheduled once all necessary information is available. During the scheduling process, leave tasks can have 3 different states.</p>
|
33
33
|
<ol>
|
@@ -38,14 +38,14 @@
|
|
38
38
|
<li>
|
39
39
|
<code class="manual">Scheduling completed</code>: The task has a start and end date and resources have been assigned for all time slots.</li>
|
40
40
|
</ol>
|
41
|
-
<p class="manual">The goal of the scheduler is to transfer all tasks in the completed state. Until this goal has been reached, at least one
|
41
|
+
<p class="manual">The goal of the scheduler is to transfer all tasks in the completed state. Until this goal has been reached, at least one task needs to be in the ready state. If that's not the case, the project schedule cannot be determined and an error is raised. In case there are more than one task in the ready state, we need to have a well defined priority of the tasks. This is necessary since those ready tasks may compete for the same resource in the same time slot.</p>
|
42
42
|
<p class="manual">The priority can be directly influenced by the user with the <a href="priority.html">priority</a> attribute. This user-defined priority always trumps the other internal criteria described below. In case two tasks have the same priority, an additional measure is used. This measure is called path criticalness. The path criticalness is calculated for each leaf task. The path criticalness is a measure for how important the task is to keep the overall project duration (start of first task to end of last task) to a minimum.</p>
|
43
43
|
<p class="manual">To determine the path criticalness, we first need to determine the resource criticalness first. This is a measure for how likely the tasks that have this resource in their allocation list will actually get the resource. A resource criticalness larger than 1.0 means that statistically, at least one tasks will not get enough of this resource. This is just a statistical measure based on the total requested allocations and the number of available work time.</p>
|
44
44
|
<p class="manual">Once we have determined the criticalness of all allocated resources, we can calculate the criticalness of each individual task. This really only matters for <a href="effort.html">effort</a> based tasks. These really need their allocations to be finished within a limited amount of time. For <a href="length.html">length</a> and <a href="duration.html">duration</a> tasks, the allocations are by definition optional. The user can still influence the allocation to length and duration tasks by adjusting the priority appropriately. However, there is no guarantee that such tasks will ever get any resources assigned. The criticalness of an effort based task is defined as the average of the criticalness of the resources allocated to this task.</p>
|
45
45
|
<p class="manual">We also assign a criticalness to milestones. Based on their priority a criticalness between 0 and 2.0 is assigned. This is done to reflect the user perception that milestones are usually some important goal of the project.</p>
|
46
46
|
<p class="manual">The final step is now the computation of the path criticalness for each effort-based leaf task. For each possible chain of task (path) that is going through a task, the sum of the criticalness values of the tasks of the path is computed. The largest sum is the path criticalness of that task.</p>
|
47
|
-
<p class="manual">This heuristic will favor allocations to
|
48
|
-
<p class="manual">When the criticalness and pathcriticalness for all leaf resources and tasks has been determined, the leaf tasks are sorted by priority (
|
47
|
+
<p class="manual">This heuristic will favor allocations to tasks with critical resources and long dependency chains. As a result, the critical paths of the project are tried to be kept short. The user can use the <b>criticalness</b> and <b>pathcriticalness</b> <a href="columnid.html">columns</a> to review the respective values for he project's tasks and resources.</p>
|
48
|
+
<p class="manual">When the criticalness and pathcriticalness for all leaf resources and tasks has been determined, the leaf tasks are sorted by priority (high to low), then by pathcricialness (high to low) and then by the index (low to high). In a loop that is terminated when all tasks have been scheduled or an error condition has been detected, the first task that is ready for scheduling is completely scheduled. This means that resources are allocated for all time slots and missing dates are being computed. The newly determined end (for ASAP tasks) or start (for ALAP tasks) date is then propagated to dependent tasks, milestones or parent tasks if needed. This can result in other tasks becoming ready for scheduling and the list is searched again for the first task that is ready for scheduling to be scheduled.</p>
|
49
49
|
<p class="manual">A task can only be scheduled when it is ready for scheduling. This means that at least the start date for the scheduling process must be known. For ASAP (As Soon As Possible) tasks, the scheduler start date is the start date of the task. For ALAP (As Late As Possible) tasks the scheduler start date is the end date of the task. ASAP task will be scheduled from start to end, ALAP tasks from end to start. This is important to understand as resource assignments for each time slot will be determined in this order.</p>
|
50
50
|
<p class="manual">Mixing ASAP and ALAP tasks in the same project is supported but should be used very carefully. It can lead to situations where a lower priority tasks that is earlier in the scheduling process ready for scheduling takes away resources from a higher prioritized task that competes for the same resources. This condition is known is priority inversion. If the scheduler detects such a situation, a warning is generated.</p>
|
51
51
|
</div></div>
|
@@ -58,6 +58,6 @@
|
|
58
58
|
</tr></table>
|
59
59
|
<hr/>
|
60
60
|
<br/>
|
61
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
61
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
62
62
|
</body>
|
63
63
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>The_TaskJuggler_Syntax</title>
|
@@ -35,7 +35,7 @@
|
|
35
35
|
<p class="manual">List of predefined options are enclosed in brackets, the options separated by a vertical bar.</p>
|
36
36
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">keyword ( foo | bar | foobar )
|
37
37
|
</pre></div>
|
38
|
-
<p class="manual">Some keywords take one or more arguments. These are known as list attributes. The arguments are comma separated. The
|
38
|
+
<p class="manual">Some keywords take one or more arguments. These are known as list attributes. The arguments are comma separated. The three dots in the syntax description mean that the sequence before the dots can be repeated if needed. Inheritable list attributes will append the new list values to the inherited list. Use can use the <a href="purge.html">purge</a> attribute to clear the list before assigning new values to the list attribute.</p>
|
39
39
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">keyword arg1 [, arg2 ... ]
|
40
40
|
</pre></div>
|
41
41
|
<p class="manual">Variable arguments are further described in the <i>Arguments</i> section of the keyword syntax table. The name is listed immediately followed by the type of the variable argument. The supported types and their meaning is described in the following sections.</p>
|
@@ -46,7 +46,7 @@
|
|
46
46
|
<h3 class="manual" id="INTEGER">5.1.3 INTEGER</h3>
|
47
47
|
<p class="manual">An integer is any natural number, e. g. <code class="manual">0</code>, <code class="manual">1</code>, <code class="manual">2</code> and so on.</p>
|
48
48
|
<h3 class="manual" id="STRING">5.1.4 STRING</h3>
|
49
|
-
<p class="manual">Strings are character sequences that are enclosed by special character marks. There are three different marks supported. For short strings that fit on one
|
49
|
+
<p class="manual">Strings are character sequences that are enclosed by special character marks. There are three different marks supported. For short strings that fit on one line, you can either use single or double quotes.</p>
|
50
50
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">'This is a single quoted string.'
|
51
51
|
"This is a double quoted string."
|
52
52
|
</pre></div>
|
@@ -64,7 +64,7 @@
|
|
64
64
|
->8-
|
65
65
|
</pre></div>
|
66
66
|
<h2 class="manual" id="Predefined_Macros">5.2 Predefined Macros</h2>
|
67
|
-
<p class="manual">TaskJuggler supports a few predefined macros. These are available after the project header.
|
67
|
+
<p class="manual">TaskJuggler supports a few predefined macros. These are available after the project header. Their values correspond to the values provided in the project header.</p>
|
68
68
|
<ul>
|
69
69
|
<li>
|
70
70
|
<code class="manual">projectstart</code> The start date of the project.</li>
|
@@ -76,7 +76,7 @@
|
|
76
76
|
<code class="manual">today</code> Identical to <code class="manual">now</code> but formatted according to the <a href="timeformat.html">timeformat</a> setting of the current context.</li>
|
77
77
|
</ul>
|
78
78
|
<h2 class="manual" id="Environment_Variable_Expansions">5.3 Environment Variable Expansions</h2>
|
79
|
-
<p class="manual">By using the $(VAR) syntax, you can insert the value of the environment variable name VAR. The name of the variable must
|
79
|
+
<p class="manual">By using the $(VAR) syntax, you can insert the value of the environment variable name VAR. The name of the variable must consist only of uppercase ASCII letters, underscores or decimal digits.</p>
|
80
80
|
</div></div>
|
81
81
|
<br/>
|
82
82
|
<hr/>
|
@@ -87,6 +87,6 @@
|
|
87
87
|
</tr></table>
|
88
88
|
<hr/>
|
89
89
|
<br/>
|
90
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
90
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
91
91
|
</body>
|
92
92
|
</html>
|
data/manual/html/Tutorial.html
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
|
-
<!-- This file has been generated by tj3man v3.
|
2
|
+
<!-- This file has been generated by tj3man v3.7.1 -->
|
3
3
|
<html lang="en" xml:lang="en">
|
4
4
|
<head>
|
5
5
|
<title>Tutorial</title>
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
|
25
25
|
<h1 class="manual" id="The_Tutorial_Your_first_Project">4 The Tutorial: Your first Project</h1>
|
26
26
|
<p class="manual">We have mentioned already that TaskJuggler uses plain text files that capture the known parts of the project. As you will see now, the syntax of these files is easy to understand and very intuitive. This chapter will walk you step by step through your first project. You create the project plan for a made-up accounting software project. This project demonstrates most of the commonly used features of TaskJuggler. It also includes some of the more advanced concepts that you may or may not need for your projects. Don't get scared by them. You can use them once you are more familiar with TaskJuggler and your projects grow larger. The complete tutorial example comes with your TaskJuggler software installation. You can use the following command to find the base directory of the example projects.</p>
|
27
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">
|
27
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> ruby -e "puts Gem::Specification.find_by_name('taskjuggler').gem_dir"
|
28
28
|
</pre></div>
|
29
29
|
<p class="manual">The file for the tutorial project is called <code class="manual">examples/Tutorial/tutorial.tjp</code>. You can use any plain text editor to view and modify it.</p>
|
30
30
|
<h2 class="manual" id="Starting_the_project">4.1 Starting the project</h2>
|
@@ -32,7 +32,7 @@
|
|
32
32
|
<div class="codeframe"><pre class="code">project acso "Accounting Software" 2002-01-16 +4m {
|
33
33
|
}
|
34
34
|
</pre></div>
|
35
|
-
<p class="manual">All TaskJuggler properties have a unique ID
|
35
|
+
<p class="manual">All TaskJuggler properties have a unique ID, a name, and a set of optional attributes. The name must always be specified. The ID can be omitted if you never have to reference the property from another context. If you omit the ID, TaskJuggler will automatically generate a unique ID. The optional attributes are always enclosed in curly braces. If no optional attributes are specified, the braces can be omitted as well. In this example we will introduce a number of the attributes that may or may not matter for your specific projects. If you don't see an immediate need for a specific attribute, feel free to ignore it for now. You can always come back to them later. A full list of the supported project attributes can be found in the <i>attributes</i> section of the <a href="project.html">project</a> property documentation.</p>
|
36
36
|
<p class="manual">Attributes always start with a keyword that identifies them. The meaning and parameters of attributes depends on the property context that they are used in. A context is delimited by a set of curly braces that enclose optional attributes of a property. The area outside of any property is called the global scope. Usually, attributes have one or more arguments. These arguments can be dates, character strings, numbers or symbols. Strings must be enclosed in single or double quotes. The argument types and meaning is explained for each keyword in the syntax reference section of this manual.</p>
|
37
37
|
<p class="manual">TaskJuggler manages all events with an accuracy of up to 15 minutes. In many cases, you don't care about this level of accuracy. Nevertheless, it's good to have it when you need it. All dates can optionally be extended by a time. By default, TaskJuggler assumes that all times are UTC (world time) times. If you prefer a different time zone, you need to use the <a href="timezone.html">timezone</a> attribute.</p>
|
38
38
|
<div class="codeframe"><pre class="code"> timezone "Europe/Paris"
|
@@ -43,7 +43,7 @@
|
|
43
43
|
<p class="manual">The <a href="currency.html">currency</a> attribute specifies the unit of all currency values.</p>
|
44
44
|
<div class="codeframe"><pre class="code"> currency "USD"
|
45
45
|
</pre></div>
|
46
|
-
<p class="manual">Because each culture has its own way of specifying dates and numbers, the format for these
|
46
|
+
<p class="manual">Because each culture has its own way of specifying dates and numbers, the format for these is configurable. Use the <a href="timeformat.html">timeformat</a> attribute to specify the default format for dates. This format is used for reports, it does not affect the way you specify dates in the project files. Here you always need to use the <a href="date.html">TaskJuggler date
|
47
47
|
notation</a>.</p>
|
48
48
|
<div class="codeframe"><pre class="code"> timeformat "%Y-%m-%d"
|
49
49
|
numberformat "-" "" "," "." 1
|
@@ -74,6 +74,9 @@ notation</a>.</p>
|
|
74
74
|
# used, but this will likely be outside of the project range, so it
|
75
75
|
# can't be seen in the reports.
|
76
76
|
now 2002-03-05-13:00
|
77
|
+
# The date that is used to show additional line on a Gannt chart
|
78
|
+
# and can be specified by the user.
|
79
|
+
markdate 2002-08-07-03:00
|
77
80
|
# The currency for all money values is the Euro.
|
78
81
|
currency "USD"
|
79
82
|
|
@@ -95,7 +98,7 @@ notation</a>.</p>
|
|
95
98
|
<p class="manual">You may also want to tell TaskJuggler about holidays that affect all resources. Global holidays are time periods where TaskJuggler does not do any resource assignments to tasks.</p>
|
96
99
|
<div class="codeframe"><pre class="code">leaves holiday "Good Friday" 2002-03-29
|
97
100
|
</pre></div>
|
98
|
-
<p class="manual">Use the <a href="leaves.html">leaves</a> attribute to define a global holiday. Global holidays may have a name and must have a date or date range. Other leaves for individual resources or groups of resources can be
|
101
|
+
<p class="manual">Use the <a href="leaves.html">leaves</a> attribute to define a global holiday. Global holidays may have a name and must have a date or date range. Other leaves for individual resources or groups of resources can be defined similarly.</p>
|
99
102
|
<h2 class="manual" id="Macros">4.3 Macros</h2>
|
100
103
|
<p class="manual">Macros are another TaskJuggler feature to save you typing work and to keep project files small and maintainable. Macros are text patterns that can be defined once and inserted multiple times in the project file. A <a href="macro.html">macro</a> always has a name and the text pattern is enclosed by square brackets.</p>
|
101
104
|
<div class="codeframe"><pre class="code">macro allocate_developers [
|
@@ -111,7 +114,7 @@ notation</a>.</p>
|
|
111
114
|
</pre></div>
|
112
115
|
<p class="manual">This is a <a href="flags.html">flags</a> declaration. All flags need to be declared before they can be used to avoid hard to find errors due to misspelled flag names. The flags should be declared before any property at global scope. We will see further down, how we can make use of these flags.</p>
|
113
116
|
<h2 class="manual" id="Declaring_Accounts">4.5 Declaring Accounts</h2>
|
114
|
-
<p class="manual">The use of our resources will generate costs. For a profit and loss analysis, we need to balance the cost against the customer payments. In order not to get lost with all the various amounts, we declare 3 <a href="account.html">accounts</a> to credit the amounts to. We create one account for the development costs, one for the documentation costs, and one for the customer payments.</p>
|
117
|
+
<p class="manual">The use of our resources will generate costs. For a profit and loss analysis, we need to balance the cost against the customer payments. In order not to get lost with all the various amounts, we declare 3 <a href="account.html">accounts</a> to credit the amounts to. We create one account for the development costs, one for the documentation costs, and one for the customer payments. Actually, there is a fourth account consisting of two accounts nested into it.</p>
|
115
118
|
<div class="codeframe"><pre class="code">account cost "Project Cost" {
|
116
119
|
account dev "Development"
|
117
120
|
account doc "Documentation"
|
@@ -205,16 +208,16 @@ property</a>, but we ignore this for now.</p>
|
|
205
208
|
depends !deliveries.start
|
206
209
|
}
|
207
210
|
</pre></div>
|
208
|
-
<p class="manual">The <a href="effort.html">effort</a> to complete the task is specified with 20 man-days. Alternatively we could have used the <a href="length.html">length</a> attribute or the <a href="duration.html">duration</a> attribute. <code class="manual">length</code> specifies the duration of the task in working days while <code class="manual">duration</code> specifies the duration in calendar days. Contrary to <code class="manual">effort</code>, these two don't have to have a specification of the involved resources. Since <code class="manual">effort</code> specifies the duration in man-days, we need to say who should be allocated to the task. The task won't finish before the resources could be allocated long enough to reach the specified effort. Tasks with <code class="manual">length</code> or <code class="manual">duration</code> criteria and allocated resources will last exactly as long as requested. Resources will be allocated only if available. It's possible that such a
|
211
|
+
<p class="manual">The <a href="effort.html">effort</a> to complete the task is specified with 20 man-days. Alternatively we could have used the <a href="length.html">length</a> attribute or the <a href="duration.html">duration</a> attribute. <code class="manual">length</code> specifies the duration of the task in working days while <code class="manual">duration</code> specifies the duration in calendar days. Contrary to <code class="manual">effort</code>, these two don't have to have a specification of the involved resources. Since <code class="manual">effort</code> specifies the duration in man-days, we need to say who should be allocated to the task. The task won't finish before the resources could be allocated long enough to reach the specified effort. Tasks with <code class="manual">length</code> or <code class="manual">duration</code> criteria and allocated resources will last exactly as long as requested. Resources will be allocated only if available. It's possible that such a task ends up with no allocations at all if the resources are always assigned to other tasks for that period. Each task can only have one of the three duration criteria. Container tasks may never have a duration specification. They are automatically adjusted to fit all sub tasks.</p>
|
209
212
|
<p class="manual">Here we use the allocate_developers macro mentioned above. The expression <code class="manual">${allocate_developers}</code> is simply expanded to</p>
|
210
213
|
<div class="codeframe"><pre class="code"> allocate dev1
|
211
214
|
allocate dev2
|
212
215
|
allocate dev3
|
213
216
|
</pre></div>
|
214
217
|
<p class="manual">If you need to <a href="allocate.html">allocate</a> the same bunch of people to several tasks, the macro saves you some typing. You could have written the allocate attributes directly instead of using the macro. Since the allocation of multiple resources to a task is a good place for macro usage, we found it a good idea to use it in this example as well.</p>
|
215
|
-
<p class="manual">For TaskJuggler to schedule a task, it needs to know either the start and end criteria of a task, or one of them and a duration specification. The start and end criteria can either be fixed dates or relative dates. Relative dates are specifications of the type <i>task B starts after task A has finished</i>. Or in other words, task B depends on task A. In this example the spec task depends on a
|
218
|
+
<p class="manual">For TaskJuggler to schedule a task, it needs to know either the start and end criteria of a task, or one of them and a duration specification. The start and end criteria can either be fixed dates or relative dates. Relative dates are specifications of the type <i>task B starts after task A has finished</i>. Or in other words, task B depends on task A. In this example the spec task depends on a subtask of the deliveries task. We have not specified it yet, but it has the local ID <code class="manual">start</code>.</p>
|
216
219
|
<p class="manual">To specify the dependency between the two tasks, we use the <a href="depends.html">depends</a> attribute. This attribute must be followed by one or more task IDs. If more than one ID is specified, each ID has to be separated with a comma from the previous one. Task IDs can be either absolute IDs or relative IDs. An absolute ID of a task is the ID of this task prepended by the IDs of all enclosing tasks. The task IDs are separated by a dot from each other. The absolute ID of the specification task would be <code class="manual">AcSo.spec</code>.</p>
|
217
|
-
<p class="manual">Relative IDs always start with one or more exclamation marks. Each exclamation mark moves the scope to the next enclosing task. So <code class="manual">!deliveries.start</code> is expanded to <code class="manual">AcSo.deliveries.start</code> since <code class="manual">AcSo</code> is the enclosing task of deliveries
|
220
|
+
<p class="manual">Relative IDs always start with one or more exclamation marks. Each exclamation mark moves the scope to the next enclosing task. So <code class="manual">!deliveries.start</code> is expanded to <code class="manual">AcSo.deliveries.start</code> since <code class="manual">AcSo</code> is the enclosing task of <code class="manual">deliveries</code>. Relative task IDs are a little bit confusing at first, but have a real advantage over absolute IDs. Sooner or later you want to move tasks around in your project and then it's a lot less likely that you have to fix dependency specifications of relative IDs.</p>
|
218
221
|
<p class="manual">The software development task is still too complex to specify it directly. So we split it further into subtasks.</p>
|
219
222
|
<div class="codeframe"><pre class="code"> task software "Software Development" {
|
220
223
|
priority 1000
|
@@ -238,7 +241,7 @@ property</a>, but we ignore this for now.</p>
|
|
238
241
|
}
|
239
242
|
}
|
240
243
|
</pre></div>
|
241
|
-
<p class="manual">We use the <a href="priority.html">priority</a> attribute to mark the importance of the tasks. 500 is the default priority of top-level tasks. Setting the priority to 1000 marks the task as most important task, since the possible range is 1 (not important at all) to 1000 (ultimately important). priority is an attribute that is passed down to subtasks if specified before the subtasks' declaration. So all subtasks of software have a priority of 1000 as well, unless they have their own priority definition.</p>
|
244
|
+
<p class="manual">We use the <a href="priority.html">priority</a> attribute to mark the importance of the tasks. 500 is the default priority of top-level tasks. Setting the priority to 1000 marks the task as most important task, since the possible range is 1 (not important at all) to 1000 (ultimately important). <code class="manual">priority</code> is an attribute that is passed down to subtasks if specified before the subtasks' declaration. So all subtasks of software have a priority of 1000 as well, unless they have their own priority definition.</p>
|
242
245
|
<div class="codeframe"><pre class="code"> task database "Database coupling" {
|
243
246
|
effort 20d
|
244
247
|
allocate dev1, dev2
|
@@ -368,7 +371,7 @@ scenarios</a>. We have called the first scenario <code class="manual">plan</code
|
|
368
371
|
<p class="manual">Did you notice the line in the task done that starts with a hash? This line is commented out. If TaskJuggler finds a hash, it ignores the rest of the line. This way you can include comments in your project. The <a href="maxend.html">maxend</a> attribute specifies that the task should end no later than the specified date. This information is not used for scheduling, but only for checking the schedule afterwards. Since the task will end later than the specified date, commenting out the line would trigger a warning.</p>
|
369
372
|
<p class="manual">Now the project has been completely specified. Stopping here would result in a valid TaskJuggler file that could be processed and scheduled. But no reports would be generated to visualize the results.</p>
|
370
373
|
<h2 class="manual" id="Visualizing_the_Project">4.9 Visualizing the Project</h2>
|
371
|
-
<p class="manual">To see and share the project data
|
374
|
+
<p class="manual">To see and share the project data, reports can be generated. You can generate any number of reports and you can select from a variety of report types and output formats. To have a report generated after the project scheduling has been completed, you need include a report definition into the project description. Report definitions are properties that are very similar to the task and resource properties that you are already familiar with. Just like these, report definitions can be nested to take advantage of the attribute inheritance mechanism. Every report definition starts with the type of the report. Each type of report has a particular focus. A <a href="taskreport.html">taskreport</a> lists the project data in the form of a task list. A <a href="resourcereport.html">resourcereport</a> does the same in form of a resource list. For a more generic report, you can use the <a href="textreport.html">textreport</a>.</p>
|
372
375
|
<p class="manual">A <code class="manual">textreport</code> does not directly present the data in form of a task or resource list. It just consists of text building blocks that are described by <a href="Rich_Text_Attributes.html">Rich Text</a>. There can be a building block at the top and bottom, as well as three columns in the center. The column are called <code class="manual">left</code>, <code class="manual">center</code> and <code class="manual">right</code>.</p>
|
373
376
|
<p class="manual">For our first report, we'll just use the center column for now. Like every property, you need to specify a name. This name will be the base name of the generated report file. Depending on the output format, the proper suffix is appended. For this report, we only chose to generate a web page in HTML format. There is no default format defined for reports. If the <a href="formats.html">formats</a> attribute is not specified, no output file will be generated for the report specification.</p>
|
374
377
|
<p class="manual">This may seem odd at first glance since TaskJuggler syntax always tries to use the most compact and readable syntax for the common case. As you will see in a minute, reports may be composed of several report specifications. One report specification can include the output of another report specification as well. In this case, the included report does not need to generate it's own file. The output will be included within the output of another report specification. In case of such composed reports, the output format specification of the top-level format will be used for all included reports as well.</p>
|
@@ -435,7 +438,7 @@ generators</a> to include task attributes such as the start and end date.</p>
|
|
435
438
|
</pre></div>
|
436
439
|
<p class="manual">Section headers are surrounded by <code class="manual">==</code>. The number of equal signs, define the section level. You need to start with two equal characters for the first level. Text that is surrounded by blank lines will create a paragraph. Bullet lists can be made by starting a line with a <code class="manual">#</code> character. Remember that the indentation of cut-mark strings will be ignored. Your <code class="manual">#</code> character must not be the first character in the line as long it is only preceded by the exact same number of blanks as the first line of the cut-mark string.</p>
|
437
440
|
<p class="manual">If you want to reference other reports from this report, you can include the file name of this report by <code class="manual">[[</code> and <code class="manual">]]</code>. Don't include the extension of the file name, it will be automatically appended. The actual representation of the reference depends on the chosen output format. For HTML output, the reference is a click-able link to the referenced report file.</p>
|
438
|
-
<p class="manual">For the <a href="footer.html">footer</a> we can proceed accordingly. We just add a few more paragraphs of text
|
441
|
+
<p class="manual">For the <a href="footer.html">footer</a> we can proceed accordingly. We just add a few more paragraphs of text to describe certain aspects of the project. By putting it all together, we end up with the following report definition.</p>
|
439
442
|
<div class="codeframe"><pre class="code">taskreport overview "" {
|
440
443
|
header -8<-
|
441
444
|
=== Project Overview ===
|
@@ -473,7 +476,7 @@ generators</a> to include task attributes such as the start and end date.</p>
|
|
473
476
|
->8-
|
474
477
|
}
|
475
478
|
</pre></div>
|
476
|
-
<p class="manual">The generated report can be found <a href="http://www.taskjuggler.org/tj3/examples/Tutorial/Overview.html" target="_top">here</a>. It
|
479
|
+
<p class="manual">The generated report can be found <a href="http://www.taskjuggler.org/tj3/examples/Tutorial/Overview.html" target="_top">here</a>. It serves as an entry page for the other reports. While it already contains some references, a navigator bar would be handy as well. Fortunately, there is a block generator called 'navigator' to take care of this. But before we can include the navigator in the report, we need to define it first.</p>
|
477
480
|
<div class="codeframe"><pre class="code">navigator navbar {
|
478
481
|
hidereport @none
|
479
482
|
}
|
@@ -503,6 +506,6 @@ generators</a> to include task attributes such as the start and end date.</p>
|
|
503
506
|
</tr></table>
|
504
507
|
<hr/>
|
505
508
|
<br/>
|
506
|
-
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
509
|
+
<div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
|
507
510
|
</body>
|
508
511
|
</html>
|