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
data/lib/taskjuggler/Shift.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# = Shift.rb -- The TaskJuggler III Project Management Software
|
5
5
|
#
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2019
|
7
7
|
# by Chris Schlaeger <cs@taskjuggler.org>
|
8
8
|
#
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
@@ -34,7 +34,7 @@ class TaskJuggler
|
|
34
34
|
# provided by the class ShiftScenario. In case we can't find a
|
35
35
|
# function called for the Shift class we try to find it in
|
36
36
|
# ShiftScenario.
|
37
|
-
def method_missing(func, scenarioIdx, *args)
|
37
|
+
def method_missing(func, scenarioIdx = 0, *args)
|
38
38
|
@data[scenarioIdx].method(func).call(*args)
|
39
39
|
end
|
40
40
|
|
@@ -79,7 +79,7 @@ class TaskJuggler
|
|
79
79
|
# To optimize memory usage and computation time the Scoreboard objects for
|
80
80
|
# similar ShiftAssignments are shared.
|
81
81
|
#
|
82
|
-
# Scoreboard may be nil or a bit vector encoded as
|
82
|
+
# Scoreboard may be nil or a bit vector encoded as an Integer
|
83
83
|
# nil: Value has not been determined yet.
|
84
84
|
# Bit 0: 0: No assignment
|
85
85
|
# 1: Has assignement
|
@@ -29,7 +29,7 @@ class TaskJuggler
|
|
29
29
|
attr_accessor :maxCpuCores, :warnTsDeltas, :generateTraces
|
30
30
|
|
31
31
|
# Create a new TaskJuggler object. _console_ is a boolean that determines
|
32
|
-
# whether or not
|
32
|
+
# whether or not messages can be written to $stderr.
|
33
33
|
def initialize
|
34
34
|
@project = nil
|
35
35
|
@parser = nil
|
@@ -141,7 +141,7 @@ class TaskJuggler
|
|
141
141
|
res
|
142
142
|
end
|
143
143
|
|
144
|
-
# Generate all specified reports. The project must have
|
144
|
+
# Generate all specified reports. The project must have been scheduled before
|
145
145
|
# this method can be called. It returns true if no error occured, false
|
146
146
|
# otherwise.
|
147
147
|
def generateReports(outputDir = nil)
|
@@ -289,7 +289,7 @@ class TaskJuggler
|
|
289
289
|
end
|
290
290
|
|
291
291
|
# Check the content of the file _fileName_ and interpret it as a time sheet.
|
292
|
-
# If the sheet is
|
292
|
+
# If the sheet is syntactically correct and matches the loaded project, true
|
293
293
|
# is returned. Otherwise false.
|
294
294
|
def checkTimeSheet(fileName)
|
295
295
|
begin
|
@@ -333,7 +333,7 @@ class TaskJuggler
|
|
333
333
|
end
|
334
334
|
|
335
335
|
# Check the content of the file _fileName_ and interpret it as a status
|
336
|
-
# sheet. If the sheet is
|
336
|
+
# sheet. If the sheet is syntactically correct and matches the loaded
|
337
337
|
# project, true is returned. Otherwise false.
|
338
338
|
def checkStatusSheet(fileName)
|
339
339
|
begin
|
@@ -123,7 +123,7 @@ class TaskJuggler
|
|
123
123
|
# Add a new rule to the rule set. _name_ must be a unique identifier. The
|
124
124
|
# function also sets the class variable @cr to the new rule. Subsequent
|
125
125
|
# calls to TextParser#pattern, TextParser#optional or
|
126
|
-
# TextParser#repeatable will then
|
126
|
+
# TextParser#repeatable will then implicitly operate on the most recently
|
127
127
|
# added rule.
|
128
128
|
def newRule(name)
|
129
129
|
# Use a symbol instead of a String.
|
@@ -43,9 +43,9 @@ class TaskJuggler::TextParser
|
|
43
43
|
|
44
44
|
# This class is used to handle the low-level input operations. It knows
|
45
45
|
# whether it deals with a text buffer or a file and abstracts this to the
|
46
|
-
# Scanner. For each nested file the scanner puts
|
46
|
+
# Scanner. For each nested file the scanner puts a StreamHandle on the
|
47
47
|
# stack while the file is scanned. With this stack the scanner can resume
|
48
|
-
# the processing of the enclosing file once the included files
|
48
|
+
# the processing of the enclosing file once the included files have been
|
49
49
|
# completely processed.
|
50
50
|
class StreamHandle
|
51
51
|
|
@@ -281,7 +281,7 @@ class TaskJuggler::TextParser
|
|
281
281
|
end
|
282
282
|
|
283
283
|
|
284
|
-
# Start the processing.
|
284
|
+
# Start the processing. If _fileNameIsBuffer_ is true, we operate on a
|
285
285
|
# String, else on a File.
|
286
286
|
def open(fileNameIsBuffer = false)
|
287
287
|
@fileNameIsBuffer = fileNameIsBuffer
|
@@ -46,11 +46,11 @@ class TaskJuggler
|
|
46
46
|
@sourceFileInfo = nil
|
47
47
|
end
|
48
48
|
|
49
|
-
# Store the number of worked time slots. If the value is
|
49
|
+
# Store the number of worked time slots. If the value is an Integer, it can
|
50
50
|
# be directly assigned. A Float is interpreted as percentage and must be
|
51
51
|
# in the rage of 0.0 to 1.0.
|
52
52
|
def work=(value)
|
53
|
-
if value.is_a?(
|
53
|
+
if value.is_a?(Integer)
|
54
54
|
@work = value
|
55
55
|
else
|
56
56
|
# Must be percent value
|
@@ -51,16 +51,15 @@ class TaskJuggler
|
|
51
51
|
@opts.summary_width = @optsSummaryWidth
|
52
52
|
@opts.summary_indent = ' ' * @optsSummaryIndent
|
53
53
|
|
54
|
-
@opts.banner = "#{AppConfig.
|
55
|
-
"#{AppConfig.packageInfo}\n\n" +
|
56
|
-
"Copyright (c) #{AppConfig.copyright.join(', ')}\n" +
|
54
|
+
@opts.banner = "Copyright (c) #{AppConfig.copyright.join(', ')}\n" +
|
57
55
|
" by #{AppConfig.authors.join(', ')}\n\n" +
|
58
56
|
"#{AppConfig.license}\n" +
|
59
57
|
"For more info about #{AppConfig.softwareName} see " +
|
60
58
|
"#{AppConfig.contact}\n\n" +
|
61
59
|
"Usage: #{AppConfig.appName} [options] " +
|
62
60
|
"#{@mandatoryArgs}\n\n"
|
63
|
-
|
61
|
+
|
62
|
+
@opts.separator "\nOptions:"
|
64
63
|
@opts.on('-c', '--config <FILE>', String,
|
65
64
|
format('Use the specified YAML configuration file')) do |arg|
|
66
65
|
@configFile = arg
|
@@ -75,7 +74,7 @@ class TaskJuggler
|
|
75
74
|
format(<<'EOT'
|
76
75
|
Don't use ANSI contol sequences to color the terminal output. Colors should
|
77
76
|
only be used when spooling to an ANSI terminal. In case the detection fails,
|
78
|
-
you can this option to force colors to be off.
|
77
|
+
you can use this option to force colors to be off.
|
79
78
|
EOT
|
80
79
|
)) do
|
81
80
|
Term::ANSIColor::coloring = false
|
@@ -91,8 +90,23 @@ EOT
|
|
91
90
|
quit
|
92
91
|
end
|
93
92
|
@opts.on_tail('--version', format('Show version info')) do
|
94
|
-
|
95
|
-
|
93
|
+
# Display the software name and version in GNU format
|
94
|
+
# as expected by help2man
|
95
|
+
# https://www.gnu.org/prep/standards/standards.html#g_t_002d_002dversion
|
96
|
+
puts "#{AppConfig.appName} (#{AppConfig.softwareName}) #{AppConfig.version}\n"
|
97
|
+
# To also display the copyright and license statements in GNU format
|
98
|
+
# uncomment the following and remove the equivalent statements from
|
99
|
+
# --help
|
100
|
+
# +
|
101
|
+
#<<'EOT'
|
102
|
+
#Copyright (C) 2016 Chris Schlaeger <cs@taskjuggler.org>
|
103
|
+
#License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>
|
104
|
+
#This is free software; you can redistribute it and/or modify it under
|
105
|
+
#the terms of version 2 of the GNU General Public License as published by the
|
106
|
+
#Free Software Foundation.
|
107
|
+
#
|
108
|
+
#For more info about TaskJuggler see http://www.taskjuggler.org
|
109
|
+
#EOT
|
96
110
|
quit
|
97
111
|
end
|
98
112
|
|
@@ -128,7 +142,7 @@ EOT
|
|
128
142
|
args = processArguments(argv)
|
129
143
|
|
130
144
|
# If DEBUG mode has been enabled, we restore the INT trap handler again
|
131
|
-
# to get Ruby
|
145
|
+
# to get Ruby backtraces.
|
132
146
|
Kernel.trap('INT', intHandler) if $DEBUG
|
133
147
|
|
134
148
|
unless @silent
|
@@ -146,7 +160,7 @@ EOT
|
|
146
160
|
retVal = appMain(args)
|
147
161
|
MessageHandlerInstance.instance.trapSetup = false
|
148
162
|
rescue TjRuntimeError
|
149
|
-
# We have hit a
|
163
|
+
# We have hit a situation that we can't recover from. A message
|
150
164
|
# was severed via the MessageHandler to inform the user and we now
|
151
165
|
# abort the program.
|
152
166
|
return 1
|
@@ -3,7 +3,8 @@
|
|
3
3
|
#
|
4
4
|
# = Tj3Config.rb -- The TaskJuggler III Project Management Software
|
5
5
|
#
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016,
|
7
|
+
# 2020
|
7
8
|
# by Chris Schlaeger <cs@taskjuggler.org>
|
8
9
|
#
|
9
10
|
# This program is free software; you can redistribute it and/or modify
|
@@ -13,12 +14,13 @@
|
|
13
14
|
|
14
15
|
require 'taskjuggler/UTF8String'
|
15
16
|
require 'taskjuggler/AppConfig'
|
17
|
+
require 'taskjuggler/version'
|
16
18
|
|
17
|
-
AppConfig.version =
|
19
|
+
AppConfig.version = VERSION
|
18
20
|
AppConfig.packageName = 'taskjuggler'
|
19
21
|
AppConfig.softwareName = 'TaskJuggler'
|
20
22
|
AppConfig.packageInfo = 'A Project Management Software'
|
21
|
-
AppConfig.copyright = [ (2006..
|
23
|
+
AppConfig.copyright = [ (2006..2020).to_a ]
|
22
24
|
AppConfig.authors = [ 'Chris Schlaeger <cs@taskjuggler.org>' ]
|
23
25
|
AppConfig.contact = 'http://www.taskjuggler.org'
|
24
26
|
AppConfig.license = <<'EOT'
|
@@ -75,7 +75,9 @@ class TaskJuggler
|
|
75
75
|
@file.each_line do |line|
|
76
76
|
if line[0, mark.length] == mark
|
77
77
|
# We've found an annotation line. Get the tag and indicator.
|
78
|
-
|
78
|
+
tokens = line.split
|
79
|
+
tag = tokens[3]
|
80
|
+
indicator = tokens[4]
|
79
81
|
|
80
82
|
if indicator == '+'
|
81
83
|
# Start a new snip
|
@@ -76,7 +76,7 @@ EOT
|
|
76
76
|
def rule_accountHeader
|
77
77
|
pattern(%w( _account !optionalID $STRING ), lambda {
|
78
78
|
if @property.nil? && !@accountprefix.empty?
|
79
|
-
@property = @project.
|
79
|
+
@property = @project.account(@accountprefix)
|
80
80
|
end
|
81
81
|
if @val[1] && @project.account(@val[1])
|
82
82
|
error('account_exists', "Account #{@val[1]} has already been defined.",
|
@@ -239,7 +239,7 @@ certain maximum per time period. The purge statement can be used to remove
|
|
239
239
|
inherited allocations or flags.
|
240
240
|
|
241
241
|
For effort-based tasks the task duration is clipped to only extend from the
|
242
|
-
|
242
|
+
beginning of the first allocation to the end of the last allocation. This is
|
243
243
|
done to optimize for an overall minimum project duration as dependent tasks
|
244
244
|
can potentially use the unallocated, clipped slots.
|
245
245
|
EOT
|
@@ -287,7 +287,7 @@ EOT
|
|
287
287
|
@allocate.setSelectionMode(@val[1])
|
288
288
|
})
|
289
289
|
doc('select', <<'EOT'
|
290
|
-
The select
|
290
|
+
The select function controls which resource is picked from an allocation and
|
291
291
|
it's alternatives. The selection is re-evaluated each time the resource used
|
292
292
|
in the previous time slot becomes unavailable.
|
293
293
|
|
@@ -301,7 +301,7 @@ EOT
|
|
301
301
|
@allocate.persistent = true
|
302
302
|
})
|
303
303
|
doc('persistent', <<'EOT'
|
304
|
-
Specifies that once a resource is picked from the list of alternatives this
|
304
|
+
Specifies that once a resource is picked from the list of alternatives, this
|
305
305
|
resource is used for the whole task. This is useful when several alternative
|
306
306
|
resources have been specified. Normally the selected resource can change after
|
307
307
|
each break. A break is an interval of at least one timeslot where no resources
|
@@ -389,7 +389,7 @@ EOT
|
|
389
389
|
descr(<<'EOT'
|
390
390
|
Pick the resource that has the smallest allocation factor. The
|
391
391
|
allocation factor is calculated from the various allocations of the resource
|
392
|
-
across the tasks. This is the default setting.
|
392
|
+
across the tasks. This is the default setting.
|
393
393
|
EOT
|
394
394
|
)
|
395
395
|
|
@@ -748,7 +748,7 @@ EOT
|
|
748
748
|
Normally, columns with calculated values take the specified report period into
|
749
749
|
account when calculating their values. With this attribute, the user can
|
750
750
|
specify an end date for the period that should be used when calculating the
|
751
|
-
values of this column. It does not have an impact on
|
751
|
+
values of this column. It does not have an impact on columns with time
|
752
752
|
invariant values.
|
753
753
|
EOT
|
754
754
|
)
|
@@ -781,7 +781,7 @@ EOT
|
|
781
781
|
@column.listItem = @val[1]
|
782
782
|
})
|
783
783
|
doc('listitem.column', <<'EOT'
|
784
|
-
Specifies a
|
784
|
+
Specifies a [[Rich_Text_Attributes|Rich Text]] pattern that is used to generate the text for the list
|
785
785
|
items. The pattern should contain at least one ''''<nowiki><</nowiki>-query
|
786
786
|
attribute='XXX'->'''' element that will be replaced with the value of
|
787
787
|
attribute XXX. For the replacement, the property of the query will be the list
|
@@ -824,7 +824,7 @@ EOT
|
|
824
824
|
Normally, columns with calculated values take the specified report period into
|
825
825
|
account when calculating their values. With this attribute, the user can
|
826
826
|
specify a start date for the period that should be used when calculating the
|
827
|
-
values of this column. It does not have an impact on
|
827
|
+
values of this column. It does not have an impact on columns with time
|
828
828
|
invariant values.
|
829
829
|
EOT
|
830
830
|
)
|
@@ -930,19 +930,19 @@ are set to 0. ''''TIMEZONE'''' must be an offset to GMT or UTC, specified as
|
|
930
930
|
''''+HHMM'''' or ''''-HHMM''''. Dates must always be aligned with the
|
931
931
|
[[timingresolution]].
|
932
932
|
|
933
|
-
TaskJuggler also supports simple date calculations. You can add or
|
933
|
+
TaskJuggler also supports simple date calculations. You can add or subtract a
|
934
934
|
given interval from a fixed date.
|
935
935
|
|
936
936
|
%{2009-11-01 + 8m}
|
937
937
|
|
938
|
-
This will result in an actual date of around
|
938
|
+
This will result in an actual date of around 2010-07-01. Keep in mind that due
|
939
939
|
to the varying lengths of months TaskJuggler cannot add exactly 8 calendar
|
940
940
|
months. The date calculation functionality makes most sense when used with
|
941
941
|
macros.
|
942
942
|
|
943
943
|
%{${now} - 2w}
|
944
944
|
|
945
|
-
This
|
945
|
+
This results in a date 2 weeks earlier than the current (or specified) date.
|
946
946
|
See [[duration]] for a complete list of supported time intervals. Don't forget
|
947
947
|
to put at least one space character after the date to prevent TaskJuggler from
|
948
948
|
interpreting the interval as an hour.
|
@@ -1065,11 +1065,11 @@ EOT
|
|
1065
1065
|
@property.set('definitions', @val[1])
|
1066
1066
|
})
|
1067
1067
|
doc('definitions', <<"EOT"
|
1068
|
-
This
|
1068
|
+
This attribute controls what definitions will be contained in the report. If
|
1069
1069
|
the list includes ''project'', the generated file will have a ''''.tjp''''
|
1070
1070
|
extension. Otherwise it will have a ''''.tji'''' extension.
|
1071
1071
|
|
1072
|
-
By default, the report contains everything and the generated files
|
1072
|
+
By default, the report contains everything and the generated files have a ''''.tjp'''' extension.
|
1073
1073
|
EOT
|
1074
1074
|
)
|
1075
1075
|
allOrNothingListRule('exportDefinitions',
|
@@ -1188,13 +1188,13 @@ EOT
|
|
1188
1188
|
descr(<<'EOT'
|
1189
1189
|
Export of the scheduled project in Microsoft Project XML format. This will
|
1190
1190
|
export the data of the fully scheduled project. The exported data include the
|
1191
|
-
tasks, resources and the assignments of resources to
|
1191
|
+
tasks, resources and the assignments of resources to tasks. This is only a
|
1192
1192
|
small subset of the data that TaskJuggler can manage. This export is intended
|
1193
1193
|
to share resource assignment data with other teams using Microsoft Project.
|
1194
|
-
TaskJuggler manages assignments with a larger accuracy than the
|
1194
|
+
TaskJuggler manages assignments with a larger accuracy than the Microsoft
|
1195
1195
|
Project XML format can represent. This will inevitably lead to some rounding
|
1196
1196
|
errors and different interpretation of the data. The numbers you will see in
|
1197
|
-
Project are not necessarily an exact match of the numbers you see in
|
1197
|
+
Microsoft Project are not necessarily an exact match of the numbers you see in
|
1198
1198
|
TaskJuggler. The XML file format requires the sequence of the tasks in the
|
1199
1199
|
file to follow the work breakdown structure. Hence all user provided sorting
|
1200
1200
|
directions will be ignored for this format.
|
@@ -1385,7 +1385,7 @@ EOT
|
|
1385
1385
|
|
1386
1386
|
singlePattern('_inherit')
|
1387
1387
|
doc('inherit.extend', <<'EOT'
|
1388
|
-
If
|
1388
|
+
If this attribute is used, the property extension will be inherited by
|
1389
1389
|
child properties from their parent property.
|
1390
1390
|
EOT
|
1391
1391
|
)
|
@@ -1457,7 +1457,7 @@ A logical flag expression is a combination of operands and mathematical
|
|
1457
1457
|
operations. The final result of a logical expression is always true or false.
|
1458
1458
|
Logical expressions are used the reduce the properties in a report to a
|
1459
1459
|
certain subset or to select alternatives for the cell content of a table. When
|
1460
|
-
used with attributes like [[hidejournalentry]]
|
1460
|
+
the logical expression is used with attributes like [[hidejournalentry]] and
|
1461
1461
|
evaluates to true for a certain property, this property is hidden or rolled-up
|
1462
1462
|
in the report.
|
1463
1463
|
|
@@ -1507,7 +1507,7 @@ EOT
|
|
1507
1507
|
})
|
1508
1508
|
arg(0, 'operand', <<'EOT'
|
1509
1509
|
An operand is a declared flag. An operand can be a negated operand by
|
1510
|
-
prefixing a ~
|
1510
|
+
prefixing a ~ character or it can be another logical expression enclosed in
|
1511
1511
|
braces.
|
1512
1512
|
EOT
|
1513
1513
|
)
|
@@ -1527,7 +1527,7 @@ EOT
|
|
1527
1527
|
})
|
1528
1528
|
arg(1, 'operand', <<'EOT'
|
1529
1529
|
An operand is a declared flag. An operand can be a negated operand by
|
1530
|
-
prefixing a ~
|
1530
|
+
prefixing a ~ character or it can be another logical expression enclosed in
|
1531
1531
|
braces.
|
1532
1532
|
EOT
|
1533
1533
|
)
|
@@ -1582,18 +1582,18 @@ the evaluation, implicit and explicit parameters are used.
|
|
1582
1582
|
|
1583
1583
|
All functions may operate on the current property and the scope property. The
|
1584
1584
|
scope property is the enclosing property in reports with nested properties.
|
1585
|
-
Imagine e. g a task report with nested resources. When the function is called
|
1585
|
+
Imagine e. g. a task report with nested resources. When the function is called
|
1586
1586
|
for a task line, the task is the property and we don't have a scope property.
|
1587
1587
|
When the function is called for a resource line, the resource is the property
|
1588
1588
|
and the enclosing task is the scope property.
|
1589
1589
|
|
1590
|
-
|
1590
|
+
The number of arguments that are passed in brackets to the function depends
|
1591
1591
|
on the specific function. See the reference for details on each function.
|
1592
1592
|
|
1593
1593
|
All functions can be suffixed with an underscore character. In that case, the
|
1594
1594
|
function is operating on the scope property as if it were the property. The
|
1595
1595
|
original property is ignored in that case. In our task report example from
|
1596
|
-
above, calling a function with an appended
|
1596
|
+
above, calling a function with an appended underscore would mean that a task
|
1597
1597
|
line would be evaluated for the enclosing resource.
|
1598
1598
|
|
1599
1599
|
In the example below you can see how this can be used. To generate a task
|
@@ -1684,7 +1684,7 @@ EOT
|
|
1684
1684
|
|
1685
1685
|
pattern(%w( _isongoing _( $ID _) ))
|
1686
1686
|
doc('isongoing', <<'EOT'
|
1687
|
-
Will evaluate to true for tasks that overlap with the report period in given
|
1687
|
+
Will evaluate to true for tasks that overlap with the report period in the given
|
1688
1688
|
scenario.
|
1689
1689
|
EOT
|
1690
1690
|
)
|
@@ -1825,6 +1825,11 @@ EOT
|
|
1825
1825
|
pattern(%w( !reportStart ))
|
1826
1826
|
pattern(%w( !rollupresource ))
|
1827
1827
|
pattern(%w( !rolluptask ))
|
1828
|
+
pattern(%w( _novevents), lambda { @property.set('novevents', [ true ]) })
|
1829
|
+
doc('novevents', <<'EOT'
|
1830
|
+
Don't add VEVENT entries to generated [[icalreport]]s.
|
1831
|
+
EOT
|
1832
|
+
)
|
1828
1833
|
|
1829
1834
|
pattern(%w( _scenario !scenarioId ), lambda {
|
1830
1835
|
# Don't include disabled scenarios in the report
|
@@ -1837,8 +1842,8 @@ EOT
|
|
1837
1842
|
end
|
1838
1843
|
})
|
1839
1844
|
doc('scenario.ical', <<'EOT'
|
1840
|
-
|
1841
|
-
top-level scenario will be included. This attribute can be used select another
|
1845
|
+
ID of the scenario that should be included in the report. By default, the
|
1846
|
+
top-level scenario will be included. This attribute can be used to select another
|
1842
1847
|
scenario.
|
1843
1848
|
EOT
|
1844
1849
|
)
|
@@ -1863,6 +1868,8 @@ EOT
|
|
1863
1868
|
# Show all journal entries.
|
1864
1869
|
@property.set('hideJournalEntry',
|
1865
1870
|
LogicalExpression.new(LogicalOperation.new(0)))
|
1871
|
+
# Add VEVENT entries to icalreports by default
|
1872
|
+
@property.set('novevents', [ false ])
|
1866
1873
|
end
|
1867
1874
|
})
|
1868
1875
|
arg(1, 'file name', <<'EOT'
|
@@ -2021,7 +2028,7 @@ dates without a time specification! Date specifications are 0 extended. An
|
|
2021
2028
|
end date without a time is expanded to midnight that day. So the day of the
|
2022
2029
|
end date is not included in the interval! The start and end dates must be separated by a hyphen character.
|
2023
2030
|
|
2024
|
-
|
2031
|
+
The second form specifies the start date and an interval duration. The
|
2025
2032
|
duration must be prefixed by a plus character.
|
2026
2033
|
EOT
|
2027
2034
|
)
|
@@ -2161,7 +2168,7 @@ EOT
|
|
2161
2168
|
pattern(%w( _alerts_dep ), lambda { :alerts_dep })
|
2162
2169
|
descr(<<'EOT'
|
2163
2170
|
In this mode only the last entries before the report end date for the context
|
2164
|
-
property and all its sub-properties and their dependencies
|
2171
|
+
property and all its sub-properties and their dependencies are included. If
|
2165
2172
|
there are multiple entries at the exact same date, then all these entries are
|
2166
2173
|
included. In contrast to the ''''status_down'''' mode, only entries with an
|
2167
2174
|
alert level above the default level, and only those with the highest overall
|
@@ -2190,7 +2197,7 @@ used to record events, decisions or news that happened at a particular moment
|
|
2190
2197
|
during the project. Depending on the context, a journal entry may or may not
|
2191
2198
|
be associated with a specific property or author.
|
2192
2199
|
|
2193
|
-
A journal entry can
|
2200
|
+
A journal entry can consist of up to three parts. The headline is mandatory
|
2194
2201
|
and should be only 5 to 10 words long. The introduction is optional and should
|
2195
2202
|
be only one or two sentences long. All other details should be put into the
|
2196
2203
|
third part.
|
@@ -2209,7 +2216,7 @@ EOT
|
|
2209
2216
|
@journalEntry.alertLevel = @val[1]
|
2210
2217
|
})
|
2211
2218
|
doc('alert', <<'EOT'
|
2212
|
-
Specify the alert level for this entry. This attribute is
|
2219
|
+
Specify the alert level for this entry. This attribute is intended to be used for
|
2213
2220
|
status reporting. When used for a journal entry that is associated with a
|
2214
2221
|
property, the value can be reported in the alert column. When multiple entries
|
2215
2222
|
have been specified for the property, the entry with the date closest to the
|
@@ -2330,7 +2337,7 @@ allowances. The ''''leaveallowancebalance'''' report [[columns|column]] can be
|
|
2330
2337
|
used to report the current annual leave balance.
|
2331
2338
|
|
2332
2339
|
Leaves outside of the project period are silently ignored and will not be
|
2333
|
-
considered in the leave balance calculation.
|
2340
|
+
considered in the leave balance calculation. Therefore, leave allowances are
|
2334
2341
|
only allowed within the project period.
|
2335
2342
|
EOT
|
2336
2343
|
)
|
@@ -2352,7 +2359,7 @@ Leaves can be defined at global level, at resource level and at shift level
|
|
2352
2359
|
and intervals may overlap. The leave types have different priorities. A higher
|
2353
2360
|
priority leave type can overwrite a lower priority type. This means that
|
2354
2361
|
resource level leaves can overwrite global leaves when they have a higher
|
2355
|
-
priority. A sub resource can overwrite a leave of
|
2362
|
+
priority. A sub resource can overwrite a leave of an enclosing resource.
|
2356
2363
|
|
2357
2364
|
Leave periods outside of the project interval are silently ignored. For leave
|
2358
2365
|
periods that are partially outside of the project period only the part inside
|
@@ -2469,7 +2476,7 @@ EOT
|
|
2469
2476
|
doc('dailymin', <<'EOT'
|
2470
2477
|
Minimum required effort for any calendar day. This value cannot be guaranteed by
|
2471
2478
|
the scheduler. It is only checked after the schedule is complete. In case the
|
2472
|
-
|
2479
|
+
minimum required amount has not been reached, a warning will be generated.
|
2473
2480
|
EOT
|
2474
2481
|
)
|
2475
2482
|
example('Limits-1', '4')
|
@@ -2506,7 +2513,7 @@ EOT
|
|
2506
2513
|
doc('monthlymin', <<'EOT'
|
2507
2514
|
Minimum required effort for any calendar month. This value cannot be
|
2508
2515
|
guaranteed by the scheduler. It is only checked after the schedule is
|
2509
|
-
complete. In case the
|
2516
|
+
complete. In case the minimum required amount has not been reached, a warning
|
2510
2517
|
will be generated.
|
2511
2518
|
EOT
|
2512
2519
|
)
|
@@ -2525,7 +2532,7 @@ EOT
|
|
2525
2532
|
doc('weeklymin', <<'EOT'
|
2526
2533
|
Minimum required effort for any calendar week. This value cannot be guaranteed by
|
2527
2534
|
the scheduler. It is only checked after the schedule is complete. In case the
|
2528
|
-
|
2535
|
+
minimum required amount has not been reached, a warning will be generated.
|
2529
2536
|
EOT
|
2530
2537
|
)
|
2531
2538
|
end
|
@@ -2632,8 +2639,8 @@ EOT
|
|
2632
2639
|
A logical expression is a combination of operands and mathematical operations.
|
2633
2640
|
The final result of a logical expression is always true or false. Logical
|
2634
2641
|
expressions are used the reduce the properties in a report to a certain subset
|
2635
|
-
or to select alternatives for the cell content of a table. When
|
2636
|
-
attributes like [[hidetask]] or [[hideresource]]
|
2642
|
+
or to select alternatives for the cell content of a table. When the
|
2643
|
+
logical expression is used with attributes like [[hidetask]] or [[hideresource]] and
|
2637
2644
|
evaluates to true for a certain property, this property is hidden or rolled-up
|
2638
2645
|
in the report.
|
2639
2646
|
|
@@ -2655,7 +2662,7 @@ be undefined. To use such an attribute in a comparison, you need to test for
|
|
2655
2662
|
the validity first. E. g. to compare the end date of the ''''plan''''
|
2656
2663
|
scenario with the ''''maxend'''' value use ''''isvalid(plan.maxend) &
|
2657
2664
|
(plan.end > plan.maxend)''''. The ''''&'''' and ''''|'''' operators are lazy.
|
2658
|
-
If the result is already known after evaluation the first operand, the second
|
2665
|
+
If the result is already known after evaluation of the first operand, the second
|
2659
2666
|
operand will not be evaluated any more.
|
2660
2667
|
EOT
|
2661
2668
|
)
|
@@ -2690,9 +2697,9 @@ numbers as names. The number specifies the index of the argument.
|
|
2690
2697
|
will expand to ''''This stupid text'''' if called as ''''${FOO "stupid"}''''.
|
2691
2698
|
Macros may call other macros. All macro arguments must be enclosed by double
|
2692
2699
|
quotes. In case the argument contains a double quote, it must be escaped by a
|
2693
|
-
|
2700
|
+
backslash (''''\'''').
|
2694
2701
|
|
2695
|
-
User defined macro IDs
|
2702
|
+
User defined macro IDs should start with one uppercase letter as all
|
2696
2703
|
lowercase letter IDs are reserved for built-in macros.
|
2697
2704
|
|
2698
2705
|
To terminate the macro definition, the ''''<nowiki>]</nowiki>'''' must be the
|
@@ -3018,7 +3025,7 @@ them from flags. See [[columnid]] for a list of available attributes. The use
|
|
3018
3025
|
of list attributes is not recommended. User defined attributes are available
|
3019
3026
|
as well.
|
3020
3027
|
|
3021
|
-
An operand can be a negated operand by prefixing a ~
|
3028
|
+
An operand can be a negated operand by prefixing a ~ character or it can be
|
3022
3029
|
another logical expression enclosed in braces.
|
3023
3030
|
EOT
|
3024
3031
|
)
|
@@ -3037,7 +3044,7 @@ EOT
|
|
3037
3044
|
[ @val[0], @val[1] ]
|
3038
3045
|
})
|
3039
3046
|
arg(1, 'operand', <<'EOT'
|
3040
|
-
An operand can consist of a date, a text string or a numerical value. It can also be the name of a declared flag. Finally, an operand can be a negated operand by prefixing a ~
|
3047
|
+
An operand can consist of a date, a text string or a numerical value. It can also be the name of a declared flag. Finally, an operand can be a negated operand by prefixing a ~ character or it can be another operation enclosed in braces.
|
3041
3048
|
EOT
|
3042
3049
|
)
|
3043
3050
|
end
|
@@ -3075,7 +3082,7 @@ EOT
|
|
3075
3082
|
})
|
3076
3083
|
arg(0, 'id', <<"EOT"
|
3077
3084
|
An optional ID. If you ever want to reference this property, you must specify
|
3078
|
-
your own unique ID. If no ID is specified one will be automatically generated.
|
3085
|
+
your own unique ID. If no ID is specified, one will be automatically generated.
|
3079
3086
|
These IDs may become visible in reports, but may change at any time. You may
|
3080
3087
|
never rely on automatically generated IDs.
|
3081
3088
|
EOT
|
@@ -3140,7 +3147,7 @@ EOT
|
|
3140
3147
|
pattern(%w( _niku ), lambda {
|
3141
3148
|
:niku
|
3142
3149
|
})
|
3143
|
-
descr('Generate
|
3150
|
+
descr('Generate an XOG XML file to be used with Clarity.')
|
3144
3151
|
end
|
3145
3152
|
|
3146
3153
|
def rule_outputFormats
|
@@ -3238,7 +3245,7 @@ EOT
|
|
3238
3245
|
doc('extend', <<'EOT'
|
3239
3246
|
Often it is desirable to collect more information in the project file than is
|
3240
3247
|
necessary for task scheduling and resource allocation. To add such information
|
3241
|
-
to tasks, resources or accounts the user can extend these properties with
|
3248
|
+
to tasks, resources or accounts, the user can extend these properties with
|
3242
3249
|
user-defined attributes. The new attributes can be of various types such as
|
3243
3250
|
text, date or reference to capture various types of data. Optionally the user
|
3244
3251
|
can specify if the attribute value should be inherited from the enclosing
|
@@ -3267,6 +3274,21 @@ EOT
|
|
3267
3274
|
arg(1, 'date', 'Alternative date to be used as current date for all ' +
|
3268
3275
|
'computations')
|
3269
3276
|
|
3277
|
+
pattern(%w( _markdate !date ), lambda {
|
3278
|
+
@project['markdate'] = @val[1]
|
3279
|
+
@scanner.addMacro(TextParser::Macro.new('markdate', @val[1].to_s,
|
3280
|
+
@sourceFileInfo[0]))
|
3281
|
+
@scanner.addMacro(TextParser::Macro.new(
|
3282
|
+
'today', @val[1].to_s(@project['timeFormat']), @sourceFileInfo[0]))
|
3283
|
+
})
|
3284
|
+
doc('markdate', <<'EOT'
|
3285
|
+
Specify the reference date that TaskJuggler uses as date that can be specified
|
3286
|
+
and set by the user. It can be used as additional point in time to help with
|
3287
|
+
tracking tasks. If no value is specified, the current value of the system clock is used.
|
3288
|
+
EOT
|
3289
|
+
)
|
3290
|
+
arg(1, 'date', 'Alternative date to be used as custom date specified by the user')
|
3291
|
+
|
3270
3292
|
pattern(%w( !numberFormat ), lambda {
|
3271
3293
|
@project['numberFormat'] = @val[0]
|
3272
3294
|
})
|
@@ -3285,8 +3307,8 @@ EOT
|
|
3285
3307
|
})
|
3286
3308
|
doc('outputdir',
|
3287
3309
|
'Specifies the directory into which the reports should be generated. ' +
|
3288
|
-
'This will not affect reports
|
3289
|
-
'setting can be overwritten by the command line option.')
|
3310
|
+
'This will not affect reports whose name start with a slash. This ' +
|
3311
|
+
'setting can be overwritten by the command line option -o or --output-dir.')
|
3290
3312
|
arg(1, 'directory', 'Path to an existing directory')
|
3291
3313
|
|
3292
3314
|
pattern(%w( !scenario ))
|
@@ -3294,8 +3316,8 @@ EOT
|
|
3294
3316
|
@project['shortTimeFormat'] = @val[1]
|
3295
3317
|
})
|
3296
3318
|
doc('shorttimeformat',
|
3297
|
-
'Specifies time format for time
|
3298
|
-
'just
|
3319
|
+
'Specifies time format for short time specifications. This is normal ' +
|
3320
|
+
'just hours and minutes.')
|
3299
3321
|
arg(1, 'format', 'strftime like format string')
|
3300
3322
|
|
3301
3323
|
pattern(%w( !timeformat ), lambda {
|
@@ -3352,7 +3374,7 @@ the project. All sub-scenarios of this scenario inherit the bookings of the
|
|
3352
3374
|
tracking scenario and may not have any bookings of their own. The tracking
|
3353
3375
|
scenario must also be specified to use time and status sheet reports.
|
3354
3376
|
|
3355
|
-
The tracking scenario must be defined after all
|
3377
|
+
The tracking scenario must be defined after all scenarios have been defined.
|
3356
3378
|
|
3357
3379
|
The tracking scenario and all scenarios derived from it will be scheduled in
|
3358
3380
|
projection mode. This means that the scheduler will only add bookings after
|
@@ -3472,7 +3494,7 @@ EOT
|
|
3472
3494
|
# documentation.
|
3473
3495
|
pattern(%w( !projectPropertiesBody ))
|
3474
3496
|
doc('properties', <<'EOT'
|
3475
|
-
The project properties. Every project must
|
3497
|
+
The project properties. Every project must consist of at least one task. The other properties are optional. To save the scheduled data at least one output generating property should be used.
|
3476
3498
|
EOT
|
3477
3499
|
)
|
3478
3500
|
end
|
@@ -3489,7 +3511,7 @@ EOT
|
|
3489
3511
|
doc('include.project', <<'EOT'
|
3490
3512
|
Includes the specified file name as if its contents would be written
|
3491
3513
|
instead of the include property. When the included files contains other
|
3492
|
-
include statements or report definitions, the filenames are relative to file
|
3514
|
+
include statements or report definitions, the filenames are relative to the file
|
3493
3515
|
where they are defined in.
|
3494
3516
|
|
3495
3517
|
This version of the include directive may only be used inside the [[project]]
|
@@ -3506,7 +3528,7 @@ EOT
|
|
3506
3528
|
Includes the specified file name as if its contents would be written
|
3507
3529
|
instead of the include property. The only exception is the include
|
3508
3530
|
statement itself. When the included files contains other include
|
3509
|
-
statements or report definitions, the filenames are relative to file
|
3531
|
+
statements or report definitions, the filenames are relative to the file
|
3510
3532
|
where they are defined in.
|
3511
3533
|
|
3512
3534
|
The included file may only contain macro definitions. This version of the
|
@@ -3667,7 +3689,7 @@ EOT
|
|
3667
3689
|
Includes the specified file name as if its contents would be written
|
3668
3690
|
instead of the include property. The only exception is the include
|
3669
3691
|
statement itself. When the included files contains other include
|
3670
|
-
statements or report definitions, the filenames are relative to file
|
3692
|
+
statements or report definitions, the filenames are relative to the file
|
3671
3693
|
where they are defined in. include commands can be used in the project
|
3672
3694
|
header, at global scope or between property declarations of tasks,
|
3673
3695
|
resources, and accounts.
|
@@ -3689,13 +3711,11 @@ EOT
|
|
3689
3711
|
end
|
3690
3712
|
if attributeDefinition.scenarioSpecific
|
3691
3713
|
@scenarioIdx = 0 unless @val[1]
|
3692
|
-
attr = @property[attrId, 0]
|
3693
3714
|
else
|
3694
3715
|
if @val[1]
|
3695
3716
|
error('purge_non_sc_spec_attr',
|
3696
3717
|
'Scenario specified for a non-scenario specific attribute')
|
3697
3718
|
end
|
3698
|
-
attr = @property.get(attrId)
|
3699
3719
|
end
|
3700
3720
|
if @property.attributeDefinition(attrId).scenarioSpecific
|
3701
3721
|
@property.getAttribute(attrId, @scenarioIdx).reset
|
@@ -3776,6 +3796,13 @@ EOT
|
|
3776
3796
|
descr(<<'EOT'
|
3777
3797
|
The balance of the annual leave at the end of the reporting interval. The unit
|
3778
3798
|
can be adjusted with [[loadunit]].
|
3799
|
+
EOT
|
3800
|
+
)
|
3801
|
+
|
3802
|
+
singlePattern('_annualleavelist')
|
3803
|
+
descr(<<'EOT'
|
3804
|
+
A list with all annual leave intervals. The list can be customized with the
|
3805
|
+
[[listtype.column|listtype]] attribute.
|
3779
3806
|
EOT
|
3780
3807
|
)
|
3781
3808
|
|
@@ -3802,7 +3829,7 @@ EOT
|
|
3802
3829
|
singlePattern('_alerttrend')
|
3803
3830
|
descr(<<'EOT'
|
3804
3831
|
Shows how the alert level at the end of the report period compares to the
|
3805
|
-
alert level at the
|
3832
|
+
alert level at the beginning of the report period. Possible values are
|
3806
3833
|
''''Up'''', ''''Down'''' or ''''Flat''''.
|
3807
3834
|
EOT
|
3808
3835
|
)
|
@@ -3839,7 +3866,7 @@ EOT
|
|
3839
3866
|
singlePattern('_closedtasks')
|
3840
3867
|
descr(<<'EOT'
|
3841
3868
|
The number of sub-tasks (including the current task) that have been closed
|
3842
|
-
during the reported time period. Closed means that they have
|
3869
|
+
during the reported time period. Closed means that they have an end date
|
3843
3870
|
before the current time or [[now]] date.
|
3844
3871
|
EOT
|
3845
3872
|
)
|
@@ -3860,12 +3887,12 @@ EOT
|
|
3860
3887
|
singlePattern('_complete')
|
3861
3888
|
descr(<<'EOT'
|
3862
3889
|
The completion degree of a task. Unless a completion degree is manually
|
3863
|
-
provided, this is a computed value relative the [[now]] date of the project. A
|
3890
|
+
provided, this is a computed value relative to the [[now]] date of the project. A
|
3864
3891
|
task that has ended before the now date is always 100% complete. A task that
|
3865
|
-
starts at or after the now date is always 0%. For [[effort]] based
|
3892
|
+
starts at or after the now date is always 0%. For [[effort]] based tasks the
|
3866
3893
|
computation degree is the percentage of done effort of the overall effort. For
|
3867
|
-
other leaf
|
3868
|
-
duration of the overall task duration. For container
|
3894
|
+
other leaf tasks, the completion degree is the percentage of the already passed
|
3895
|
+
duration of the overall task duration. For container tasks, it's always the
|
3869
3896
|
average of the direct sub tasks. If the sub tasks consist of a mixture of
|
3870
3897
|
effort and non-effort tasks, the completion value is only of limited value.
|
3871
3898
|
EOT
|
@@ -3879,8 +3906,8 @@ EOT
|
|
3879
3906
|
descr('Deprecated alias for complete')
|
3880
3907
|
|
3881
3908
|
singlePattern('_criticalness')
|
3882
|
-
descr('A measure for how much effort the resource is allocated for, or' +
|
3883
|
-
'how strained the allocated resources of a task are')
|
3909
|
+
descr('A measure for how much effort the resource is allocated for, or ' +
|
3910
|
+
'how strained the allocated resources of a task are.')
|
3884
3911
|
|
3885
3912
|
singlePattern('_cost')
|
3886
3913
|
descr(<<'EOT'
|
@@ -3932,7 +3959,7 @@ EOT
|
|
3932
3959
|
descr(<<'EOT'
|
3933
3960
|
A list of tasks that depend on the current task. The list contains the names,
|
3934
3961
|
the IDs, the date and the type of dependency. For the type the following
|
3935
|
-
symbols are used for <nowiki><dep></nowiki
|
3962
|
+
symbols are used for <nowiki><dep></nowiki>:
|
3936
3963
|
|
3937
3964
|
* '''<nowiki>]->[</nowiki>''': End-to-Start dependency
|
3938
3965
|
* '''<nowiki>[->[</nowiki>''': Start-to-Start dependency
|
@@ -3941,7 +3968,7 @@ symbols are used for <nowiki><dep></nowiki>.
|
|
3941
3968
|
|
3942
3969
|
The list can be customized by the [[listitem.column|listitem]] and
|
3943
3970
|
[[listtype.column]] attributes. The dependency symbol can be generated via
|
3944
|
-
the ''''dependency'''' attribute
|
3971
|
+
the ''''dependency'''' attribute in the query, the target date via the
|
3945
3972
|
''''date'''' attribute.
|
3946
3973
|
EOT
|
3947
3974
|
)
|
@@ -4019,7 +4046,7 @@ EOT
|
|
4019
4046
|
singlePattern('_journal')
|
4020
4047
|
descr(<<'EOT'
|
4021
4048
|
The journal entries for the task or resource for the reported interval. The
|
4022
|
-
generated text can be customized with
|
4049
|
+
generated text can be customized with [[journalmode]],
|
4023
4050
|
[[journalattributes]], [[hidejournalentry]] and [[sortjournalentries]]. If
|
4024
4051
|
used in queries without a property context, the journal for the complete
|
4025
4052
|
project is generated.
|
@@ -4080,7 +4107,7 @@ EOT
|
|
4080
4107
|
singlePattern('_opentasks')
|
4081
4108
|
descr(<<'EOT'
|
4082
4109
|
The number of sub-tasks (including the current task) that have not yet been
|
4083
|
-
closed during the reported time period. Closed means that they have
|
4110
|
+
closed during the reported time period. Closed means that they have an end
|
4084
4111
|
date before the current time or [[now]] date.
|
4085
4112
|
EOT
|
4086
4113
|
)
|
@@ -4102,7 +4129,7 @@ are used
|
|
4102
4129
|
|
4103
4130
|
The list can be customized by the [[listitem.column|listitem]] and
|
4104
4131
|
[[listtype.column|listtype]] attributes. The dependency symbol can be
|
4105
|
-
generated via the ''''dependency'''' attribute
|
4132
|
+
generated via the ''''dependency'''' attribute in the query, the target date
|
4106
4133
|
via the ''''date'''' attribute.
|
4107
4134
|
EOT
|
4108
4135
|
)
|
@@ -4364,7 +4391,7 @@ EOT
|
|
4364
4391
|
})
|
4365
4392
|
doc('height', <<'EOT'
|
4366
4393
|
Set the height of the report in pixels. This attribute is only used for
|
4367
|
-
reports that cannot determine the height based on the content. Such
|
4394
|
+
reports that cannot determine the height based on the content. Such reports can
|
4368
4395
|
be freely resized to fit in. The vast majority of reports can determine their
|
4369
4396
|
height based on the provided content. These reports will simply ignore this
|
4370
4397
|
setting.
|
@@ -4421,7 +4448,7 @@ EOT
|
|
4421
4448
|
@property.set('rawHtmlHead', @val[1])
|
4422
4449
|
})
|
4423
4450
|
doc('rawhtmlhead', <<'EOT'
|
4424
|
-
Define
|
4451
|
+
Define an HTML fragment that will be inserted at the end of the HTML head
|
4425
4452
|
section.
|
4426
4453
|
EOT
|
4427
4454
|
)
|
@@ -4485,7 +4512,7 @@ EOT
|
|
4485
4512
|
doc('resourceroot', <<'EOT'
|
4486
4513
|
Only resources below the specified root-level resources are exported. The
|
4487
4514
|
exported resources will have the ID of the root-level resource stripped from
|
4488
|
-
their ID, so that the sub-
|
4515
|
+
their ID, so that the sub-resources of the root-level resource become
|
4489
4516
|
top-level resources in the report file.
|
4490
4517
|
EOT
|
4491
4518
|
)
|
@@ -4534,7 +4561,7 @@ EOT
|
|
4534
4561
|
})
|
4535
4562
|
doc('width', <<'EOT'
|
4536
4563
|
Set the width of the report in pixels. This attribute is only used for
|
4537
|
-
reports that cannot determine the width based on the content. Such
|
4564
|
+
reports that cannot determine the width based on the content. Such reports can
|
4538
4565
|
be freely resized to fit in. The vast majority of reports can determine their
|
4539
4566
|
width based on the provided content. These reports will simply ignore this
|
4540
4567
|
setting.
|
@@ -4796,9 +4823,9 @@ EOT
|
|
4796
4823
|
})
|
4797
4824
|
doc('resourcereport', <<'EOT'
|
4798
4825
|
The report lists resources and their respective values in a table. The task
|
4799
|
-
that
|
4826
|
+
that the resources are allocated to can be listed as well. To reduce the
|
4800
4827
|
list of included resources, you can use the [[hideresource]],
|
4801
|
-
[[rollupresource]] or [[resourceroot]] attributes. The order of the
|
4828
|
+
[[rollupresource]] or [[resourceroot]] attributes. The order of the tasks can
|
4802
4829
|
be controlled with [[sortresources]]. If the first sorting criteria is tree
|
4803
4830
|
sorting, the parent resources will always be included to form the tree.
|
4804
4831
|
Tree sorting is the default. You need to change it if you do not want certain
|
@@ -4857,7 +4884,7 @@ it as a crude way to model a team. A team of 5 people should have an
|
|
4857
4884
|
efficiency of 5.0. Keep in mind that you cannot track the members of the team
|
4858
4885
|
individually if you use this feature. They always act as a group.
|
4859
4886
|
|
4860
|
-
The other use is to model performance variations between your resources. Again, this is a fairly crude mechanism and should be used with care. A resource that isn't
|
4887
|
+
The other use is to model performance variations between your resources. Again, this is a fairly crude mechanism and should be used with care. A resource that isn't very good at some task might be pretty good at another. This can't be taken into account as the resource efficiency can only be set globally for all tasks.
|
4861
4888
|
|
4862
4889
|
All resources that do not contribute effort to the task, should have an
|
4863
4890
|
efficiency of 0.0. A typical example would be a conference room. It's necessary for a meeting, but it does not contribute any work.
|
@@ -4874,7 +4901,7 @@ EOT
|
|
4874
4901
|
pattern(%w( _booking !resourceBooking ))
|
4875
4902
|
doc('booking.resource', <<'EOT'
|
4876
4903
|
The booking attribute can be used to report actually completed work. A task
|
4877
|
-
with bookings must be [[scheduling|scheduled]] in ''''
|
4904
|
+
with bookings must be [[scheduling|scheduled]] in ''''ASAP'''' mode. If the
|
4878
4905
|
scenario is not the [[trackingscenario|tracking scenario]] or derived from it,
|
4879
4906
|
the scheduler will not allocate resources prior to the current date or the
|
4880
4907
|
date specified with [[now]] when a task has at least one booking.
|
@@ -4960,7 +4987,7 @@ EOT
|
|
4960
4987
|
@shiftAssignments = nil
|
4961
4988
|
})
|
4962
4989
|
level(:deprecated)
|
4963
|
-
also('
|
4990
|
+
also('shifts.resource')
|
4964
4991
|
doc('shift.resource', <<'EOT'
|
4965
4992
|
This keyword has been deprecated. Please use [[shifts.resource|shifts
|
4966
4993
|
(resource)]] instead.
|
@@ -5070,10 +5097,10 @@ that are listed as scenario specific may differ between the various
|
|
5070
5097
|
scenarios. A nested scenario uses all attributes from the enclosing scenario
|
5071
5098
|
unless the user has specified a different value for this attribute.
|
5072
5099
|
|
5073
|
-
By default, the scheduler assigns resources to
|
5100
|
+
By default, the scheduler assigns resources to tasks beginning with the project
|
5074
5101
|
start date. If the scenario is switched to projection mode, no assignments
|
5075
5102
|
will be made prior to the current date or the date specified by [[now]]. In
|
5076
|
-
this case, TaskJuggler assumes, that all
|
5103
|
+
this case, TaskJuggler assumes, that all assignments prior to the
|
5077
5104
|
current date have been provided by [[booking.task]] statements.
|
5078
5105
|
EOT
|
5079
5106
|
)
|
@@ -5088,7 +5115,7 @@ EOT
|
|
5088
5115
|
})
|
5089
5116
|
doc('active', <<'EOT'
|
5090
5117
|
Enable the scenario to be scheduled or not. By default, all scenarios will be
|
5091
|
-
scheduled. If a scenario is marked as inactive, it
|
5118
|
+
scheduled. If a scenario is marked as inactive, it cannot be scheduled and will
|
5092
5119
|
be ignored in the reports.
|
5093
5120
|
EOT
|
5094
5121
|
)
|
@@ -5703,7 +5730,7 @@ EOT
|
|
5703
5730
|
@property = @propertyStack.pop
|
5704
5731
|
})
|
5705
5732
|
doc('task.statussheet', <<'EOT'
|
5706
|
-
Opens the task with the specified ID to add a status report. Child
|
5733
|
+
Opens the task with the specified ID to add a status report. Child tasks can be
|
5707
5734
|
opened inside this context by specifying their relative ID to this parent.
|
5708
5735
|
EOT
|
5709
5736
|
)
|
@@ -6043,7 +6070,7 @@ EOT
|
|
6043
6070
|
)
|
6044
6071
|
|
6045
6072
|
singlePattern('$ID')
|
6046
|
-
arg(0, 'ID', 'Just the ID of the task without
|
6073
|
+
arg(0, 'ID', 'Just the ID of the task without any parent IDs.')
|
6047
6074
|
|
6048
6075
|
pattern(%w( !relativeId ), lambda {
|
6049
6076
|
task = @property
|
@@ -6159,7 +6186,7 @@ EOT
|
|
6159
6186
|
doc('taskreport', <<'EOT'
|
6160
6187
|
The report lists tasks and their respective values in a table. To reduce the
|
6161
6188
|
list of included tasks, you can use the [[hidetask]], [[rolluptask]] or
|
6162
|
-
[[taskroot]] attributes. The order of the
|
6189
|
+
[[taskroot]] attributes. The order of the tasks can be controlled with
|
6163
6190
|
[[sorttasks]]. If the first sorting criteria is tree sorting, the parent tasks
|
6164
6191
|
will always be included to form the tree. Tree sorting is the default. You
|
6165
6192
|
need to change it if you do not want certain parent tasks to be included in
|
@@ -6218,7 +6245,7 @@ EOT
|
|
6218
6245
|
pattern(%w( _booking !taskBooking ))
|
6219
6246
|
doc('booking.task', <<'EOT'
|
6220
6247
|
The booking attribute can be used to report actually completed work. A task
|
6221
|
-
with bookings must be [[scheduling|scheduled]] in ''''
|
6248
|
+
with bookings must be [[scheduling|scheduled]] in ''''ASAP'''' mode. If the
|
6222
6249
|
scenario is not the [[trackingscenario|tracking scenario]] or derived from it,
|
6223
6250
|
the scheduler will not allocate resources prior to the current date or the
|
6224
6251
|
date specified with [[now]] when a task has at least one booking.
|
@@ -6321,7 +6348,7 @@ Specifies that the task cannot start before the specified tasks have been
|
|
6321
6348
|
finished.
|
6322
6349
|
|
6323
6350
|
By using the 'depends' attribute, the scheduling policy is automatically set
|
6324
|
-
to
|
6351
|
+
to ASAP. If both depends and precedes are used, the last policy counts.
|
6325
6352
|
EOT
|
6326
6353
|
)
|
6327
6354
|
example('Depends1')
|
@@ -6418,10 +6445,10 @@ EOT
|
|
6418
6445
|
The end attribute provides a guideline to the scheduler when the task should
|
6419
6446
|
end. It will never end later, but it may end earlier when allocated
|
6420
6447
|
resources are not available that long. When an end date is provided for a
|
6421
|
-
container task, it will be passed down to ALAP
|
6448
|
+
container task, it will be passed down to ALAP tasks that don't have a well
|
6422
6449
|
defined end criteria.
|
6423
6450
|
|
6424
|
-
Setting an end date will
|
6451
|
+
Setting an end date will implicitly set the scheduling policy for this task
|
6425
6452
|
to ALAP.
|
6426
6453
|
EOT
|
6427
6454
|
)
|
@@ -6434,7 +6461,7 @@ EOT
|
|
6434
6461
|
level(:deprecated)
|
6435
6462
|
doc('endcredit', <<'EOT'
|
6436
6463
|
Specifies an amount that is credited to the accounts specified by the
|
6437
|
-
[[chargeset]] attributes at the moment the
|
6464
|
+
[[chargeset]] attributes at the moment the task ends.
|
6438
6465
|
EOT
|
6439
6466
|
)
|
6440
6467
|
also('charge')
|
@@ -6466,7 +6493,7 @@ and global working hours are defined accordingly.
|
|
6466
6493
|
For the length calculation, the global working hours and the global leaves
|
6467
6494
|
matter unless the task has [[shifts.task|shifts]] assigned. In the latter case
|
6468
6495
|
the working hours and leaves of the shift apply for the specified period to
|
6469
|
-
determine if a slot is working time or not. If a resource has
|
6496
|
+
determine if a slot is working time or not. If a resource has additional
|
6470
6497
|
working hours defined, it's quite possible that a task with a length of 5d
|
6471
6498
|
will have an allocated effort larger than 40 hours. Resource working hours
|
6472
6499
|
only have an impact on whether an allocation is made or not for a particular
|
@@ -6514,7 +6541,7 @@ EOT
|
|
6514
6541
|
})
|
6515
6542
|
doc('milestone', <<'EOT'
|
6516
6543
|
Turns the task into a special task that has no duration. You may not specify a
|
6517
|
-
duration, length, effort or
|
6544
|
+
duration, length, effort or subtask for a milestone task.
|
6518
6545
|
|
6519
6546
|
A task that only has a start or an end specification and no duration
|
6520
6547
|
specification, inherited start or end dates, no dependencies or sub tasks,
|
@@ -6551,7 +6578,7 @@ EOT
|
|
6551
6578
|
level(:deprecated)
|
6552
6579
|
doc('startcredit', <<'EOT'
|
6553
6580
|
Specifies an amount that is credited to the account specified by the
|
6554
|
-
[[chargeset]] attributes at the moment the
|
6581
|
+
[[chargeset]] attributes at the moment the task starts.
|
6555
6582
|
EOT
|
6556
6583
|
)
|
6557
6584
|
also('charge')
|
@@ -6566,14 +6593,14 @@ EOT
|
|
6566
6593
|
end
|
6567
6594
|
})
|
6568
6595
|
doc('precedes', <<'EOT'
|
6569
|
-
Specifies that the tasks with the specified IDs cannot start before
|
6596
|
+
Specifies that the tasks with the specified IDs cannot start before this task
|
6570
6597
|
has been finished. If multiple IDs are specified, they must be separated by
|
6571
6598
|
commas. IDs must be either global or relative. A relative ID starts with a
|
6572
6599
|
number of '!'. Each '!' moves the scope to the parent task. Global IDs do not
|
6573
6600
|
contain '!', but have IDs separated by dots.
|
6574
6601
|
|
6575
6602
|
By using the 'precedes' attribute, the scheduling policy is automatically set
|
6576
|
-
to
|
6603
|
+
to ALAP. If both depends and precedes are used within a task, the last policy
|
6577
6604
|
counts.
|
6578
6605
|
EOT
|
6579
6606
|
)
|
@@ -6589,13 +6616,13 @@ EOT
|
|
6589
6616
|
Specifies the priority of the task. A task with higher priority is more
|
6590
6617
|
likely to get the requested resources. The default priority value of all tasks
|
6591
6618
|
is 500. Don't confuse the priority of a tasks with the importance or urgency
|
6592
|
-
of a task. It only increases the chances that the
|
6619
|
+
of a task. It only increases the chances that the task gets the requested
|
6593
6620
|
resources. It does not mean that the task happens earlier, though that is
|
6594
6621
|
usually the effect you will see. It also does not have any effect on tasks
|
6595
6622
|
that don't have any resources assigned (e.g. milestones).
|
6596
6623
|
|
6597
|
-
For milestones it will raise or lower the chances that
|
6598
|
-
milestone will get their resources over
|
6624
|
+
For milestones, it will raise or lower the chances that tasks leading up the
|
6625
|
+
milestone will get their resources over tasks with equal priority that compete
|
6599
6626
|
for the same resources.
|
6600
6627
|
|
6601
6628
|
This attribute is inherited by subtasks if specified prior to the definition
|
@@ -6613,12 +6640,12 @@ EOT
|
|
6613
6640
|
begin
|
6614
6641
|
@property['projectid', @scenarioIdx] = @val[1]
|
6615
6642
|
rescue AttributeOverwrite
|
6616
|
-
# This attribute always overwrites the
|
6643
|
+
# This attribute always overwrites the implicitly provided ID.
|
6617
6644
|
end
|
6618
6645
|
})
|
6619
6646
|
doc('projectid.task', <<'EOT'
|
6620
|
-
In larger projects it may be
|
6621
|
-
parts of the project. This attribute assignes a new project ID to this task
|
6647
|
+
In larger projects it may be desirable to work with different project IDs for
|
6648
|
+
parts of the project. This attribute assignes a new project ID to this task and
|
6622
6649
|
all subsequently defined sub tasks. The project ID needs to be declared first using [[projectid]] or [[projectids]].
|
6623
6650
|
EOT
|
6624
6651
|
)
|
@@ -6662,8 +6689,8 @@ EOT
|
|
6662
6689
|
})
|
6663
6690
|
doc('scheduling', <<'EOT'
|
6664
6691
|
Specifies the scheduling policy for the task. A task can be scheduled from
|
6665
|
-
start to end (As Soon As Possible,
|
6666
|
-
Possible,
|
6692
|
+
start to end (As Soon As Possible, ASAP) or from end to start (As Late As
|
6693
|
+
Possible, ALAP).
|
6667
6694
|
|
6668
6695
|
A task can be scheduled from start to end (ASAP mode) when it has a hard
|
6669
6696
|
(start) or soft (depends) criteria for the start time. A task can be scheduled
|
@@ -6672,21 +6699,21 @@ criteria for the end time.
|
|
6672
6699
|
|
6673
6700
|
Some task attributes set the scheduling policy implicitly. This attribute can
|
6674
6701
|
be used to explicitly set the scheduling policy of the task to a certain
|
6675
|
-
direction. To avoid it being overwritten again by an implicit attribute this
|
6702
|
+
direction. To avoid it being overwritten again by an implicit attribute, this
|
6676
6703
|
attribute should always be the last attribute of the task.
|
6677
6704
|
|
6678
6705
|
A random mixture of ASAP and ALAP tasks can have unexpected side effects on
|
6679
6706
|
the scheduling of the project. It increases significantly the scheduling
|
6680
6707
|
complexity and results in much longer scheduling times. Especially in projects
|
6681
|
-
with many hundreds of tasks the scheduling time of a project with a mixture of
|
6682
|
-
ASAP and ALAP times can be 2 to 10 times longer. When the
|
6683
|
-
chains of ALAP and ASAP tasks the tasks further down the dependency chain will
|
6684
|
-
be served much later than other non-chained
|
6708
|
+
with many hundreds of tasks, the scheduling time of a project with a mixture of
|
6709
|
+
ASAP and ALAP times can be 2 to 10 times longer. When the project contains
|
6710
|
+
chains of ALAP and ASAP tasks, the tasks further down the dependency chain will
|
6711
|
+
be served much later than other non-chained tasks, even when they have a much
|
6685
6712
|
higher priority. This can result in situations where high priority tasks do
|
6686
|
-
not get their resources even though the parallel competing tasks have a much
|
6713
|
+
not get their resources, even though the parallel competing tasks have a much
|
6687
6714
|
lower priority.
|
6688
6715
|
|
6689
|
-
ALAP tasks may not have [[booking.task|bookings]] since the first booked slot
|
6716
|
+
ALAP tasks may not have [[booking.task|bookings]], since the first booked slot
|
6690
6717
|
determines the start date of the task and prevents it from being scheduled
|
6691
6718
|
from end to start.
|
6692
6719
|
|
@@ -6745,7 +6772,7 @@ EOT
|
|
6745
6772
|
Limits the working time for this task during the specified interval
|
6746
6773
|
to the working hours of the given shift. Multiple shifts can be defined, but
|
6747
6774
|
shift intervals may not overlap. This is an additional working time
|
6748
|
-
restriction
|
6775
|
+
restriction on top of the working hours of the allocated resources. It does not
|
6749
6776
|
replace the resource working hour restrictions. For a resource to be assigned
|
6750
6777
|
to a time slot, both the respective task shift as well as the resource working
|
6751
6778
|
hours must declare the time slot as duty slot.
|
@@ -6763,10 +6790,10 @@ EOT
|
|
6763
6790
|
The start attribute provides a guideline to the scheduler when the task should
|
6764
6791
|
start. It will never start earlier, but it may start later when allocated
|
6765
6792
|
resources are not available immediately. When a start date is provided for a
|
6766
|
-
container task, it will be passed down to ASAP
|
6793
|
+
container task, it will be passed down to ASAP tasks that don't have a well
|
6767
6794
|
defined start criteria.
|
6768
6795
|
|
6769
|
-
Setting a start date will
|
6796
|
+
Setting a start date will implicitly set the scheduling policy for this task
|
6770
6797
|
to ASAP.
|
6771
6798
|
EOT
|
6772
6799
|
)
|
@@ -6794,7 +6821,7 @@ EOT
|
|
6794
6821
|
@property = @property.parent
|
6795
6822
|
})
|
6796
6823
|
doc('textreport', <<'EOT'
|
6797
|
-
This report consists of 5
|
6824
|
+
This report consists of 5 [[Rich_Text_Attributes|Rich Text]] sections, a header, a center section with a
|
6798
6825
|
left and right margin and a footer. The sections may contain the output of
|
6799
6826
|
other defined reports.
|
6800
6827
|
EOT
|
@@ -6819,7 +6846,7 @@ EOT
|
|
6819
6846
|
arg(1, 'format', <<'EOT'
|
6820
6847
|
Ordinary characters placed in the format string are copied without
|
6821
6848
|
conversion. Conversion specifiers are introduced by a `%' character, and are
|
6822
|
-
replaced
|
6849
|
+
replaced as follows:
|
6823
6850
|
|
6824
6851
|
* ''''%a'''' The abbreviated weekday name according to the current locale.
|
6825
6852
|
|
@@ -6979,7 +7006,7 @@ The work is booked for the scenario specified by [[trackingscenario]].
|
|
6979
7006
|
|
6980
7007
|
The intended use for time sheets is to have all resources report a time sheet
|
6981
7008
|
every day, week or month. All time sheets can be added to the project plan.
|
6982
|
-
The status information is always used to
|
7009
|
+
The status information is always used to determine the current status of the
|
6983
7010
|
project. The [[work]], [[remaining]] and [[end.timesheet|end]] attributes are
|
6984
7011
|
ignored if there are also [[booking.task|bookings]] for the resource in the
|
6985
7012
|
time sheet period. The non-ignored attributes of the time sheets will be
|
@@ -7014,7 +7041,7 @@ EOT
|
|
7014
7041
|
})
|
7015
7042
|
doc('newtask', <<'EOT'
|
7016
7043
|
The keyword can be used to request a new task to the project. If the task ID
|
7017
|
-
requires further parent
|
7044
|
+
requires further parent tasks that don't exist yet, these tasks will be
|
7018
7045
|
requested as well. If the task exists already, an error will be generated. The
|
7019
7046
|
newly requested task can be used immediately to report progress and status
|
7020
7047
|
against it. These tasks will not automatically be added to the project plan.
|
@@ -7148,14 +7175,14 @@ the [[columns]] attribute. This column set is then repeated for all properties
|
|
7148
7175
|
that are not hidden by [[hideaccount]], [[hideresource]] and [[hidetask]]. By
|
7149
7176
|
default, all properties are excluded. You must provide at least one of the
|
7150
7177
|
''''hide...'''' attributes to select the properties you want to have included
|
7151
|
-
in the report. Please be aware that total number of columns is the product of
|
7178
|
+
in the report. Please be aware that the total number of columns is the product of
|
7152
7179
|
attributes defined with [[columns]] times the number of included properties.
|
7153
|
-
Select
|
7180
|
+
Select your values carefully or you will end up with very large reports.
|
7154
7181
|
|
7155
7182
|
The column headers can be customized by using the [[title.column|title]]
|
7156
7183
|
attribute. When you include multiple properties, these headers are not unique
|
7157
|
-
unless you include mini-queries to modify them based on the property
|
7158
|
-
|
7184
|
+
unless you include mini-queries to modify them based on the property the
|
7185
|
+
column is representing. You can use the queries
|
7159
7186
|
''''<nowiki><-id-></nowiki>'''', ''''<nowiki><-name-></nowiki>'''',
|
7160
7187
|
''''<nowiki><-scenario-></nowiki>'''' and
|
7161
7188
|
''''<nowiki><-attribute-></nowiki>''''. ''''<nowiki><-id-></nowiki>'''' is
|
@@ -7170,12 +7197,12 @@ shows the tracked values over time will be generated. The CSV file may contain
|
|
7170
7197
|
all kinds of values that are being tracked. Report formats that don't support
|
7171
7198
|
a mix of different values will just show the values of the second column.
|
7172
7199
|
|
7173
|
-
The values in the CSV files are fixed units and cannot be
|
7200
|
+
The values in the CSV files are fixed units and cannot be formatted. Effort
|
7174
7201
|
values are always in resource-days. This allows other software to interpret
|
7175
7202
|
the file without any need for additional context information.
|
7176
7203
|
|
7177
7204
|
The HTML version generates SVG graphs that are embedded in the HTML page.
|
7178
|
-
These graphs are only
|
7205
|
+
These graphs are only visible if the web browser supports HTML5. This is true
|
7179
7206
|
for the latest generation of browsers, but older browsers may not support this
|
7180
7207
|
format.
|
7181
7208
|
EOT
|
@@ -7187,7 +7214,7 @@ EOT
|
|
7187
7214
|
pattern(%w( _tracereport !optionalID !reportName ), lambda {
|
7188
7215
|
newReport(@val[1], @val[2], :tracereport, @sourceFileInfo[0]) do
|
7189
7216
|
# The top-level always inherits the global timeFormat setting. This is
|
7190
|
-
# not
|
7217
|
+
# not desirable in this case, so we ignore this.
|
7191
7218
|
if (@property.level == 0 && !@property.provided('timeFormat')) ||
|
7192
7219
|
(@property.level > 0 && !@property.modified?('timeFormat'))
|
7193
7220
|
# CSV readers such of Libre-/OpenOffice can't deal with time zones. We
|
@@ -7370,7 +7397,7 @@ EOT
|
|
7370
7397
|
})
|
7371
7398
|
doc('end.timesheet', <<'EOT'
|
7372
7399
|
The expected end date for the task. This can only be used for duration based
|
7373
|
-
|
7400
|
+
tasks. For effort based tasks [[remaining]] has to be used.
|
7374
7401
|
EOT
|
7375
7402
|
)
|
7376
7403
|
example('TimeSheet1', '5')
|
@@ -7386,7 +7413,7 @@ EOT
|
|
7386
7413
|
})
|
7387
7414
|
doc('priority.timesheet', <<'EOT'
|
7388
7415
|
The priority is a value between 1 and 1000. It is used to determine the
|
7389
|
-
sequence of
|
7416
|
+
sequence of tasks when converting [[work]] to [[booking.task|bookings]]. Tasks
|
7390
7417
|
that need to finish earlier in the period should have a high priority, tasks
|
7391
7418
|
that end later in the period should have a low priority. For tasks that don't
|
7392
7419
|
get finished in the reported period the priority should be set to 1.
|
@@ -7400,7 +7427,7 @@ EOT
|
|
7400
7427
|
The remaining effort for the task. This value is ignored if there are
|
7401
7428
|
[[booking.task|bookings]] for the resource that overlap with the time sheet
|
7402
7429
|
period. If there are no bookings, the value is compared with the [[effort]]
|
7403
|
-
specification of the task. If there a mismatch between the accumulated effort
|
7430
|
+
specification of the task. If there is a mismatch between the accumulated effort
|
7404
7431
|
specified with bookings, [[work]] and [[remaining]] on one side and the
|
7405
7432
|
specified [[effort]] on the other, a warning is generated.
|
7406
7433
|
|
@@ -7416,7 +7443,7 @@ EOT
|
|
7416
7443
|
@timeSheetRecord.work = @val[1]
|
7417
7444
|
})
|
7418
7445
|
doc('work', <<'EOT'
|
7419
|
-
The amount of time that the resource has
|
7446
|
+
The amount of time that the resource has spent with the task during the
|
7420
7447
|
reported period. This value is ignored when there are
|
7421
7448
|
[[booking.task|bookings]] for the resource overlapping with the time sheet
|
7422
7449
|
period. If there are no bookings, TaskJuggler will try to convert the work
|
@@ -7552,7 +7579,7 @@ specifications are 0 extended. An end date without a time is expanded to
|
|
7552
7579
|
midnight that day. So the day of the end date is not included in the interval!
|
7553
7580
|
The start and end dates must be separated by a hyphen character.
|
7554
7581
|
|
7555
|
-
|
7582
|
+
The second form specifies the start date and an interval duration. The
|
7556
7583
|
duration must be prefixed by a plus character.
|
7557
7584
|
EOT
|
7558
7585
|
)
|
@@ -7572,7 +7599,7 @@ EOT
|
|
7572
7599
|
doc('warn', <<'EOT'
|
7573
7600
|
The warn attribute adds a [[logicalexpression|logical expression]] to the
|
7574
7601
|
property. The condition described by the logical expression is checked after
|
7575
|
-
the scheduling and
|
7602
|
+
the scheduling and a warning is generated if the condition evaluates to true.
|
7576
7603
|
This attribute is primarily intended for testing purposes.
|
7577
7604
|
EOT
|
7578
7605
|
)
|
@@ -7708,7 +7735,7 @@ EOT
|
|
7708
7735
|
pattern(%w( !workinghours ))
|
7709
7736
|
doc('workinghours.project', <<'EOT'
|
7710
7737
|
Set the default working hours for all subsequent resource definitions. The
|
7711
|
-
standard working hours are 9:00am - 12:00am, 1:00pm -
|
7738
|
+
standard working hours are 9:00am - 12:00am, 1:00pm - 6:00pm, Monday to
|
7712
7739
|
Friday. The working hours specification limits the availability of resources
|
7713
7740
|
to certain time slots of week days.
|
7714
7741
|
|