taskjuggler 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +41 -0
- data/data/css/tjreport.css +4 -1
- data/data/tjp.vim +22 -11
- data/examples/ToDo-List/todolist.tjp +1 -1
- data/lib/header.tmpl +1 -1
- data/lib/taskjuggler/Account.rb +1 -1
- data/lib/taskjuggler/AccountCredit.rb +1 -1
- data/lib/taskjuggler/AccountScenario.rb +1 -1
- data/lib/taskjuggler/AlertLevelDefinitions.rb +1 -1
- data/lib/taskjuggler/AlgorithmDiff.rb +1 -1
- data/lib/taskjuggler/Allocation.rb +1 -1
- data/lib/taskjuggler/AppConfig.rb +1 -1
- data/lib/taskjuggler/AttributeBase.rb +11 -1
- data/lib/taskjuggler/AttributeDefinition.rb +1 -1
- data/lib/taskjuggler/Attributes.rb +3 -3
- data/lib/taskjuggler/BatchProcessor.rb +1 -1
- data/lib/taskjuggler/Booking.rb +1 -1
- data/lib/taskjuggler/Charge.rb +1 -1
- data/lib/taskjuggler/ChargeSet.rb +1 -1
- data/lib/taskjuggler/DataCache.rb +1 -1
- data/lib/taskjuggler/FileList.rb +1 -1
- data/lib/taskjuggler/HTMLDocument.rb +2 -2
- data/lib/taskjuggler/HTMLElements.rb +1 -1
- data/lib/taskjuggler/ICalendar.rb +2 -2
- data/lib/taskjuggler/Interval.rb +1 -1
- data/lib/taskjuggler/IntervalList.rb +1 -1
- data/lib/taskjuggler/Journal.rb +1 -1
- data/lib/taskjuggler/KateSyntax.rb +1 -1
- data/lib/taskjuggler/KeywordArray.rb +1 -1
- data/lib/taskjuggler/KeywordDocumentation.rb +3 -2
- data/lib/taskjuggler/LeaveList.rb +1 -1
- data/lib/taskjuggler/Limits.rb +1 -1
- data/lib/taskjuggler/Log.rb +1 -1
- data/lib/taskjuggler/LogicalExpression.rb +1 -1
- data/lib/taskjuggler/LogicalFunction.rb +23 -1
- data/lib/taskjuggler/LogicalOperation.rb +5 -2
- data/lib/taskjuggler/MessageHandler.rb +9 -3
- data/lib/taskjuggler/PTNProxy.rb +1 -1
- data/lib/taskjuggler/Painter.rb +1 -1
- data/lib/taskjuggler/Project.rb +4 -3
- data/lib/taskjuggler/ProjectFileParser.rb +15 -4
- data/lib/taskjuggler/ProjectFileScanner.rb +1 -1
- data/lib/taskjuggler/PropertyList.rb +2 -2
- data/lib/taskjuggler/PropertySet.rb +2 -2
- data/lib/taskjuggler/PropertyTreeNode.rb +44 -16
- data/lib/taskjuggler/Query.rb +23 -10
- data/lib/taskjuggler/RealFormat.rb +1 -1
- data/lib/taskjuggler/Resource.rb +1 -1
- data/lib/taskjuggler/ResourceScenario.rb +6 -1
- data/lib/taskjuggler/RichText.rb +1 -1
- data/lib/taskjuggler/RichText/Document.rb +1 -1
- data/lib/taskjuggler/RichText/Element.rb +1 -1
- data/lib/taskjuggler/RichText/FunctionExample.rb +3 -3
- data/lib/taskjuggler/RichText/FunctionHandler.rb +1 -1
- data/lib/taskjuggler/RichText/Parser.rb +1 -1
- data/lib/taskjuggler/RichText/RTFHandlers.rb +1 -1
- data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
- data/lib/taskjuggler/RichText/RTFQuery.rb +4 -3
- data/lib/taskjuggler/RichText/RTFReport.rb +1 -1
- data/lib/taskjuggler/RichText/RTFReportLink.rb +1 -1
- data/lib/taskjuggler/RichText/RTFWithQuerySupport.rb +1 -1
- data/lib/taskjuggler/RichText/Scanner.rb +2 -1
- data/lib/taskjuggler/RichText/Snip.rb +1 -1
- data/lib/taskjuggler/RichText/SyntaxRules.rb +1 -1
- data/lib/taskjuggler/RichText/TOCEntry.rb +1 -1
- data/lib/taskjuggler/RichText/TableOfContents.rb +1 -1
- data/lib/taskjuggler/RuntimeConfig.rb +1 -1
- data/lib/taskjuggler/Scenario.rb +1 -1
- data/lib/taskjuggler/ScenarioData.rb +1 -1
- data/lib/taskjuggler/Scoreboard.rb +10 -6
- data/lib/taskjuggler/SheetHandlerBase.rb +1 -1
- data/lib/taskjuggler/SheetReceiver.rb +1 -1
- data/lib/taskjuggler/SheetSender.rb +1 -1
- data/lib/taskjuggler/Shift.rb +1 -1
- data/lib/taskjuggler/ShiftAssignments.rb +1 -1
- data/lib/taskjuggler/ShiftScenario.rb +1 -1
- data/lib/taskjuggler/SimpleQueryExpander.rb +1 -1
- data/lib/taskjuggler/StatusSheetReceiver.rb +1 -1
- data/lib/taskjuggler/StatusSheetSender.rb +1 -1
- data/lib/taskjuggler/StdIoWrapper.rb +1 -1
- data/lib/taskjuggler/SyntaxReference.rb +15 -1
- data/lib/taskjuggler/TableColumnDefinition.rb +1 -1
- data/lib/taskjuggler/TableColumnSorter.rb +1 -1
- data/lib/taskjuggler/Task.rb +1 -1
- data/lib/taskjuggler/TaskDependency.rb +1 -1
- data/lib/taskjuggler/TaskJuggler.rb +7 -4
- data/lib/taskjuggler/TaskScenario.rb +95 -72
- data/lib/taskjuggler/TernarySearchTree.rb +1 -1
- data/lib/taskjuggler/TextFormatter.rb +1 -1
- data/lib/taskjuggler/TextParser.rb +1 -1
- data/lib/taskjuggler/TextParser/MacroTable.rb +1 -1
- data/lib/taskjuggler/TextParser/Pattern.rb +1 -1
- data/lib/taskjuggler/TextParser/Rule.rb +6 -1
- data/lib/taskjuggler/TextParser/Scanner.rb +1 -1
- data/lib/taskjuggler/TextParser/SourceFileInfo.rb +1 -1
- data/lib/taskjuggler/TextParser/StackElement.rb +1 -1
- data/lib/taskjuggler/TextParser/State.rb +1 -1
- data/lib/taskjuggler/TextParser/TokenDoc.rb +1 -1
- data/lib/taskjuggler/TimeSheetReceiver.rb +1 -1
- data/lib/taskjuggler/TimeSheetSender.rb +1 -1
- data/lib/taskjuggler/TimeSheetSummary.rb +1 -1
- data/lib/taskjuggler/TimeSheets.rb +1 -1
- data/lib/taskjuggler/Tj3AppBase.rb +3 -2
- data/lib/taskjuggler/Tj3Config.rb +3 -3
- data/lib/taskjuggler/Tj3SheetAppBase.rb +1 -1
- data/lib/taskjuggler/TjException.rb +1 -1
- data/lib/taskjuggler/TjTime.rb +17 -12
- data/lib/taskjuggler/TjpExample.rb +1 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +378 -303
- data/lib/taskjuggler/URLParameter.rb +1 -1
- data/lib/taskjuggler/UTF8String.rb +1 -1
- data/lib/taskjuggler/UserManual.rb +3 -3
- data/lib/taskjuggler/VimSyntax.rb +1 -1
- data/lib/taskjuggler/WorkingHours.rb +1 -1
- data/lib/taskjuggler/XMLDocument.rb +1 -1
- data/lib/taskjuggler/XMLElement.rb +1 -1
- data/lib/taskjuggler/apps/Tj3.rb +20 -6
- data/lib/taskjuggler/apps/Tj3Client.rb +1 -1
- data/lib/taskjuggler/apps/Tj3Daemon.rb +1 -1
- data/lib/taskjuggler/apps/Tj3Man.rb +2 -2
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +1 -1
- data/lib/taskjuggler/apps/Tj3SsSender.rb +1 -1
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +1 -1
- data/lib/taskjuggler/apps/Tj3TsSender.rb +1 -1
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +1 -1
- data/lib/taskjuggler/apps/Tj3WebD.rb +2 -2
- data/lib/taskjuggler/daemon/Daemon.rb +1 -1
- data/lib/taskjuggler/daemon/DaemonConnector.rb +1 -1
- data/lib/taskjuggler/daemon/ProcessIntercom.rb +1 -1
- data/lib/taskjuggler/daemon/ProjectBroker.rb +1 -1
- data/lib/taskjuggler/daemon/ProjectServer.rb +1 -1
- data/lib/taskjuggler/daemon/ReportServer.rb +1 -1
- data/lib/taskjuggler/daemon/ReportServlet.rb +1 -1
- data/lib/taskjuggler/daemon/WebServer.rb +1 -1
- data/lib/taskjuggler/daemon/WelcomePage.rb +1 -1
- data/lib/taskjuggler/deep_copy.rb +1 -1
- data/lib/taskjuggler/reports/AccountListRE.rb +1 -1
- data/lib/taskjuggler/reports/CSVFile.rb +1 -1
- data/lib/taskjuggler/reports/ChartPlotter.rb +1 -1
- data/lib/taskjuggler/reports/CollisionDetector.rb +1 -1
- data/lib/taskjuggler/reports/ColumnTable.rb +1 -1
- data/lib/taskjuggler/reports/ExportRE.rb +1 -1
- data/lib/taskjuggler/reports/GanttChart.rb +1 -1
- data/lib/taskjuggler/reports/GanttContainer.rb +1 -1
- data/lib/taskjuggler/reports/GanttHeader.rb +1 -1
- data/lib/taskjuggler/reports/GanttHeaderScaleItem.rb +1 -1
- data/lib/taskjuggler/reports/GanttLine.rb +1 -1
- data/lib/taskjuggler/reports/GanttLoadStack.rb +1 -1
- data/lib/taskjuggler/reports/GanttMilestone.rb +1 -1
- data/lib/taskjuggler/reports/GanttRouter.rb +1 -1
- data/lib/taskjuggler/reports/GanttTaskBar.rb +1 -1
- data/lib/taskjuggler/reports/HTMLGraphics.rb +1 -1
- data/lib/taskjuggler/reports/ICalReport.rb +1 -1
- data/lib/taskjuggler/reports/MspXmlRE.rb +1 -1
- data/lib/taskjuggler/reports/Navigator.rb +1 -1
- data/lib/taskjuggler/reports/NikuReport.rb +1 -1
- data/lib/taskjuggler/reports/Report.rb +31 -19
- data/lib/taskjuggler/reports/ReportBase.rb +1 -1
- data/lib/taskjuggler/reports/ReportContext.rb +1 -1
- data/lib/taskjuggler/reports/ReportTable.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableCell.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableColumn.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableLegend.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableLine.rb +1 -1
- data/lib/taskjuggler/reports/ResourceListRE.rb +1 -1
- data/lib/taskjuggler/reports/StatusSheetReport.rb +1 -1
- data/lib/taskjuggler/reports/TableReport.rb +4 -5
- data/lib/taskjuggler/reports/TableReportColumn.rb +1 -1
- data/lib/taskjuggler/reports/TagFile.rb +1 -1
- data/lib/taskjuggler/reports/TaskListRE.rb +1 -1
- data/lib/taskjuggler/reports/TextReport.rb +1 -1
- data/lib/taskjuggler/reports/TimeSheetReport.rb +1 -1
- data/lib/taskjuggler/reports/TjpExportRE.rb +9 -2
- data/lib/taskjuggler/reports/TraceReport.rb +1 -1
- data/lib/tj3.rb +1 -1
- data/lib/tj3client.rb +1 -1
- data/lib/tj3d.rb +1 -1
- data/lib/tj3man.rb +1 -1
- data/lib/tj3ss_receiver.rb +1 -1
- data/lib/tj3ss_sender.rb +1 -1
- data/lib/tj3ts_receiver.rb +1 -1
- data/lib/tj3ts_sender.rb +1 -1
- data/lib/tj3ts_summary.rb +1 -1
- data/lib/tj3webd.rb +1 -1
- data/manual/How_To_Contribute +5 -6
- data/manual/Installation +3 -3
- data/manual/Rich_Text_Attributes +8 -3
- data/manual/html/Day_To_Day_Juggling.html +3 -3
- data/manual/html/Getting_Started.html +3 -3
- data/manual/html/How_To_Contribute.html +6 -7
- data/manual/html/Installation.html +6 -6
- data/manual/html/Intro.html +3 -3
- data/manual/html/Reporting_Bugs.html +3 -3
- data/manual/html/Rich_Text_Attributes.html +5 -4
- data/manual/html/Software.html +3 -3
- data/manual/html/TaskJuggler_2x_Migration.html +3 -3
- data/manual/html/TaskJuggler_Internals.html +3 -3
- data/manual/html/The_TaskJuggler_Syntax.html +3 -3
- data/manual/html/Tutorial.html +3 -3
- data/manual/html/account.html +3 -3
- data/manual/html/account.task.html +3 -3
- data/manual/html/accountprefix.html +3 -3
- data/manual/html/accountreport.html +5 -5
- data/manual/html/accountroot.html +3 -3
- data/manual/html/active.html +3 -3
- data/manual/html/adopt.task.html +3 -3
- data/manual/html/aggregate.html +3 -3
- data/manual/html/alert.html +3 -3
- data/manual/html/alertlevels.html +3 -3
- data/manual/html/allocate.html +3 -3
- data/manual/html/alphabet.html +11 -4
- data/manual/html/alternative.html +3 -3
- data/manual/html/author.html +3 -3
- data/manual/html/auxdir.html +7 -9
- data/manual/html/auxdir.report.html +69 -0
- data/manual/html/balance.html +5 -5
- data/manual/html/booking.resource.html +3 -3
- data/manual/html/booking.task.html +3 -3
- data/manual/html/caption.html +3 -3
- data/manual/html/cellcolor.column.html +4 -4
- data/manual/html/celltext.column.html +3 -3
- data/manual/html/center.html +3 -3
- data/manual/html/charge.html +3 -3
- data/manual/html/chargeset.html +3 -3
- data/manual/html/columnid.html +10 -6
- data/manual/html/columns.html +3 -3
- data/manual/html/complete.html +3 -3
- data/manual/html/copyright.html +3 -3
- data/manual/html/credits.html +3 -3
- data/manual/html/css/tjreport.css +4 -1
- data/manual/html/currency.html +3 -3
- data/manual/html/currencyformat.html +3 -3
- data/manual/html/dailymax.html +3 -3
- data/manual/html/dailymin.html +3 -3
- data/manual/html/dailyworkinghours.html +3 -3
- data/manual/html/date.extend.html +3 -3
- data/manual/html/date.html +4 -3
- data/manual/html/definitions.html +3 -3
- data/manual/html/depends.html +3 -3
- data/manual/html/details.html +3 -3
- data/manual/html/disabled.html +3 -3
- data/manual/html/duration.html +3 -3
- data/manual/html/efficiency.html +3 -3
- data/manual/html/effort.html +3 -3
- data/manual/html/email.html +3 -3
- data/manual/html/enabled.html +3 -3
- data/manual/html/end.column.html +3 -3
- data/manual/html/end.html +3 -3
- data/manual/html/end.limit.html +3 -3
- 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 +3 -3
- data/manual/html/extend.html +58 -13
- data/manual/html/fail.html +4 -4
- data/manual/html/fdl.html +3 -3
- data/manual/html/flags.account.html +3 -3
- data/manual/html/flags.html +3 -3
- data/manual/html/flags.journalentry.html +3 -3
- data/manual/html/flags.report.html +3 -3
- data/manual/html/flags.resource.html +3 -3
- data/manual/html/flags.statussheet.html +3 -3
- data/manual/html/flags.task.html +3 -3
- data/manual/html/flags.timesheet.html +3 -3
- data/manual/html/fontcolor.column.html +4 -4
- data/manual/html/footer.html +3 -3
- data/manual/html/formats.export.html +3 -3
- data/manual/html/formats.html +3 -3
- data/manual/html/functions.html +4 -4
- data/manual/html/gapduration.html +3 -3
- data/manual/html/gaplength.html +3 -3
- data/manual/html/halign.center.html +3 -3
- data/manual/html/halign.column.html +4 -4
- data/manual/html/halign.left.html +3 -3
- data/manual/html/halign.right.html +3 -3
- data/manual/html/hasalert.html +3 -3
- data/manual/html/header.html +3 -3
- data/manual/html/headline.html +3 -3
- data/manual/html/height.html +3 -3
- data/manual/html/hideaccount.html +5 -4
- data/manual/html/hidejournalentry.html +3 -3
- data/manual/html/hidereport.html +4 -4
- data/manual/html/hideresource.html +5 -4
- data/manual/html/hidetask.html +5 -4
- data/manual/html/icalreport.html +3 -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 +2 -2
- data/manual/html/inherit.extend.html +4 -4
- data/manual/html/interval1.html +3 -3
- data/manual/html/interval2.html +3 -3
- data/manual/html/interval3.html +3 -3
- data/manual/html/interval4.html +3 -3
- data/manual/html/isactive.html +3 -3
- data/manual/html/ischildof.html +3 -3
- data/manual/html/isdependencyof.html +3 -3
- data/manual/html/isdutyof.html +3 -3
- data/manual/html/isfeatureof.html +3 -3
- data/manual/html/isleaf.html +3 -3
- data/manual/html/ismilestone.html +3 -3
- data/manual/html/isongoing.html +3 -3
- data/manual/html/isresource.html +3 -3
- data/manual/html/isresponsibilityof.html +3 -3
- data/manual/html/istask.html +5 -5
- data/manual/html/isvalid.html +66 -0
- data/manual/html/journalattributes.html +5 -5
- data/manual/html/journalentry.html +3 -3
- data/manual/html/journalmode.html +3 -3
- 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 +5 -5
- data/manual/html/limits.allocate.html +3 -3
- data/manual/html/limits.html +3 -3
- data/manual/html/limits.resource.html +3 -3
- data/manual/html/limits.task.html +3 -3
- data/manual/html/listitem.column.html +3 -3
- data/manual/html/listtype.column.html +3 -3
- data/manual/html/loadunit.html +3 -3
- data/manual/html/logicalexpression.html +14 -4
- data/manual/html/logicalflagexpression.html +3 -3
- data/manual/html/macro.html +3 -3
- data/manual/html/managers.html +3 -3
- data/manual/html/mandatory.html +3 -3
- data/manual/html/maxend.html +3 -3
- data/manual/html/maximum.html +3 -3
- data/manual/html/maxstart.html +3 -3
- data/manual/html/milestone.html +3 -3
- data/manual/html/minend.html +3 -3
- data/manual/html/minimum.html +3 -3
- data/manual/html/minstart.html +3 -3
- data/manual/html/monthlymax.html +3 -3
- data/manual/html/monthlymin.html +3 -3
- data/manual/html/navbar.html +10 -2
- data/manual/html/navigator.html +3 -3
- data/manual/html/newtask.html +4 -4
- data/manual/html/nikureport.html +3 -3
- data/manual/html/note.task.html +3 -3
- data/manual/html/now.html +5 -5
- data/manual/html/number.extend.html +77 -0
- data/manual/html/numberformat.html +5 -5
- data/manual/html/onend.html +3 -3
- data/manual/html/onstart.html +3 -3
- data/manual/html/opennodes.html +5 -5
- data/manual/html/outputdir.html +67 -0
- data/manual/html/overtime.booking.html +5 -5
- data/manual/html/period.column.html +3 -3
- data/manual/html/period.limit.html +3 -3
- data/manual/html/period.report.html +3 -3
- data/manual/html/period.task.html +3 -3
- data/manual/html/persistent.html +3 -3
- data/manual/html/precedes.html +3 -3
- data/manual/html/priority.html +3 -3
- data/manual/html/priority.timesheet.html +3 -3
- data/manual/html/project.html +4 -4
- data/manual/html/projectid.html +3 -3
- data/manual/html/projectid.task.html +3 -3
- data/manual/html/projectids.html +3 -3
- data/manual/html/projection.html +3 -3
- data/manual/html/prolog.html +3 -3
- data/manual/html/properties.html +10 -4
- data/manual/html/purge.html +3 -3
- data/manual/html/rate.html +3 -3
- data/manual/html/rate.resource.html +3 -3
- data/manual/html/rawhtmlhead.html +3 -3
- data/manual/html/reference.extend.html +3 -3
- data/manual/html/remaining.html +3 -3
- data/manual/html/replace.html +3 -3
- data/manual/html/reportprefix.html +3 -3
- data/manual/html/resource.html +3 -3
- data/manual/html/resourceattributes.html +3 -3
- data/manual/html/resourceprefix.html +3 -3
- data/manual/html/resourcereport.html +5 -5
- data/manual/html/resourceroot.html +3 -3
- data/manual/html/resources.limit.html +3 -3
- data/manual/html/responsible.html +3 -3
- data/manual/html/richtext.extend.html +3 -3
- 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 +3 -3
- data/manual/html/scenario.html +3 -3
- data/manual/html/scenario.ical.html +3 -3
- data/manual/html/scenarios.export.html +3 -3
- data/manual/html/scenarios.html +3 -3
- data/manual/html/scenariospecific.extend.html +4 -4
- data/manual/html/scheduled.html +3 -3
- data/manual/html/scheduling.html +3 -3
- data/manual/html/select.html +3 -3
- data/manual/html/selfcontained.html +3 -3
- data/manual/html/shift.allocate.html +3 -3
- data/manual/html/shift.html +4 -4
- data/manual/html/shift.resource.html +3 -3
- data/manual/html/shift.task.html +3 -3
- data/manual/html/shift.timesheet.html +3 -3
- data/manual/html/shifts.allocate.html +3 -3
- data/manual/html/shifts.resource.html +3 -3
- data/manual/html/shifts.task.html +3 -3
- data/manual/html/shorttimeformat.html +3 -3
- data/manual/html/sloppy.booking.html +3 -3
- data/manual/html/sloppy.projection.html +3 -3
- 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 +3 -3
- data/manual/html/start.limit.html +3 -3
- data/manual/html/start.report.html +3 -3
- data/manual/html/startcredit.html +3 -3
- data/manual/html/status.statussheet.html +3 -3
- data/manual/html/status.timesheet.html +3 -3
- data/manual/html/statussheet.html +3 -3
- data/manual/html/statussheetreport.html +3 -3
- data/manual/html/strict.projection.html +3 -3
- data/manual/html/summary.html +3 -3
- data/manual/html/supplement.html +3 -3
- data/manual/html/supplement.resource.html +3 -3
- data/manual/html/supplement.task.html +3 -3
- 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 +3 -3
- data/manual/html/taskattributes.html +3 -3
- data/manual/html/taskprefix.html +3 -3
- data/manual/html/taskreport.html +5 -5
- data/manual/html/taskroot.export.html +3 -3
- data/manual/html/taskroot.html +3 -3
- data/manual/html/text.extend.html +3 -3
- data/manual/html/textreport.html +5 -5
- data/manual/html/timeformat.html +3 -3
- data/manual/html/timeformat1.html +3 -3
- data/manual/html/timeformat2.html +3 -3
- data/manual/html/timeoff.nikureport.html +3 -3
- data/manual/html/timesheet.html +3 -3
- data/manual/html/timesheetreport.html +3 -3
- data/manual/html/timezone.export.html +3 -3
- data/manual/html/timezone.html +3 -3
- data/manual/html/timezone.report.html +3 -3
- data/manual/html/timezone.shift.html +3 -3
- data/manual/html/timingresolution.html +3 -3
- data/manual/html/title.column.html +3 -3
- data/manual/html/title.html +3 -3
- data/manual/html/toc.html +276 -248
- data/manual/html/tooltip.column.html +4 -4
- data/manual/html/tracereport.html +5 -5
- data/manual/html/trackingscenario.html +3 -3
- data/manual/html/treelevel.html +3 -3
- data/manual/html/vacation.html +3 -3
- data/manual/html/vacation.resource.html +3 -3
- data/manual/html/vacation.shift.html +3 -3
- data/manual/html/warn.html +4 -4
- data/manual/html/weeklymax.html +3 -3
- data/manual/html/weeklymin.html +3 -3
- data/manual/html/weekstartsmonday.html +3 -3
- data/manual/html/weekstartssunday.html +3 -3
- data/manual/html/width.column.html +4 -4
- data/manual/html/width.html +3 -3
- data/manual/html/work.html +3 -3
- data/manual/html/workinghours.project.html +3 -3
- data/manual/html/workinghours.resource.html +3 -3
- data/manual/html/workinghours.shift.html +3 -3
- data/manual/html/yearlyworkingdays.html +3 -3
- data/spec/Color_spec.rb +2 -2
- data/spec/ICalendar_spec.rb +1 -1
- data/spec/IntervalList_spec.rb +1 -1
- data/spec/ProjectBroker_spec.rb +1 -1
- data/spec/StatusSheets_spec.rb +1 -1
- data/spec/TableColumnSorter_spec.rb +2 -2
- data/spec/TernarySearchTree_spec.rb +1 -1
- data/spec/TimeSheets_spec.rb +1 -1
- data/spec/Tj3Daemon_spec.rb +1 -1
- data/spec/Tj3_spec.rb +1 -1
- data/spec/TraceReport_spec.rb +2 -2
- data/spec/support/DaemonControl.rb +1 -1
- data/spec/support/spec_helper.rb +1 -1
- data/tasks/gem.rake +7 -1
- data/tasks/rdoc.rake +5 -1
- data/test/MessageChecker.rb +1 -1
- data/test/ReferenceGenerator.rb +1 -1
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +14 -14
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +1 -1
- data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +62 -10
- data/test/TestSuite/Export-Reports/refs/Shift.tjp +1 -1
- data/test/TestSuite/Scheduler/Correct/DateAndDep.tjp +25 -0
- data/test/TestSuite/Scheduler/Correct/hammock.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/container_milestone.tjp +13 -0
- data/test/TestSuite/Scheduler/Errors/{weak_end_dep.tjp → impossible_end_dep.tjp} +2 -2
- data/test/TestSuite/Scheduler/Errors/{weak_start_dep.tjp → impossible_start_dep.tjp} +2 -2
- data/test/TestSuite/Scheduler/Errors/sched_runaway.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/{task_pred_before_gl.tjp → task_pred_before_1.tjp} +1 -1
- data/test/TestSuite/Scheduler/Errors/{task_pred_before_gd.tjp → task_pred_before_2.tjp} +1 -1
- data/test/TestSuite/Scheduler/Errors/{task_succ_after_gl.tjp → task_succ_after_1.tjp} +1 -1
- data/test/TestSuite/Scheduler/Errors/{task_succ_after_gd.tjp → task_succ_after_2.tjp} +1 -1
- data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +53 -9
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +11 -0
- data/test/TjpGen.rb +1 -1
- data/test/all.rb +1 -1
- data/test/test_AlgorithmDiff.rb +1 -1
- data/test/test_BatchProcessor.rb +1 -1
- data/test/test_CSV-Reports.rb +1 -1
- data/test/test_CSVFile.rb +1 -1
- data/test/test_CollisionDetector.rb +1 -1
- data/test/test_Export-Reports.rb +1 -1
- data/test/test_Journal.rb +1 -1
- data/test/test_Limits.rb +1 -1
- data/test/test_LogicalExpression.rb +1 -1
- data/test/test_MacroTable.rb +1 -1
- data/test/test_Project.rb +1 -1
- data/test/test_ProjectFileScanner.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +1 -1
- data/test/test_RealFormat.rb +1 -1
- data/test/test_ReportGenerator.rb +1 -1
- data/test/test_RichText.rb +1 -1
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +1 -1
- data/test/test_SimpleQueryExpander.rb +1 -1
- data/test/test_Syntax.rb +1 -1
- data/test/test_TextFormatter.rb +1 -1
- data/test/test_TjTime.rb +1 -1
- data/test/test_TjpExample.rb +1 -1
- data/test/test_URLParameter.rb +1 -1
- data/test/test_UTF8String.rb +1 -1
- data/test/test_WorkingHours.rb +1 -1
- data/test/test_deep_copy.rb +1 -1
- metadata +26 -14
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Rule.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -53,6 +53,11 @@ class TaskJuggler::TextParser
|
|
|
53
53
|
@patterns << pattern
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
def include?(token)
|
|
57
|
+
@patterns.each { |p| return true if p[0][1] == token }
|
|
58
|
+
false
|
|
59
|
+
end
|
|
60
|
+
|
|
56
61
|
# Mark the rule as an optional element of the syntax.
|
|
57
62
|
def setOptional
|
|
58
63
|
@optional = true
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Scanner.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = SourceFileInfo.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = StackElement.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = State.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TokenDoc.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TimeSheetReceiver.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TimeSheetSender.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TimeSheetSummary.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TimeSheets.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Tj3AppBase.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
# published by the Free Software Foundation.
|
|
12
12
|
#
|
|
13
13
|
|
|
14
|
-
require 'rubygems'
|
|
15
14
|
require 'optparse'
|
|
16
15
|
require 'term/ansicolor'
|
|
17
16
|
require 'taskjuggler/Tj3Config'
|
|
@@ -163,6 +162,8 @@ EOT
|
|
|
163
162
|
"#{'*' * 79}\nYou have triggered a bug in " +
|
|
164
163
|
"#{AppConfig.softwareName} version #{AppConfig.version}!\n" +
|
|
165
164
|
"Please see the user manual on how to get this bug fixed!\n" +
|
|
165
|
+
"http://www.taskjuggler.org/tj3/manual/Reporting_Bugs.html#" +
|
|
166
|
+
"Reporting_Bugs_and_Feature_Requests\n" +
|
|
166
167
|
"#{'*' * 79}\n")
|
|
167
168
|
end
|
|
168
169
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Tj3Config.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
require 'taskjuggler/UTF8String'
|
|
15
15
|
require 'taskjuggler/AppConfig'
|
|
16
16
|
|
|
17
|
-
AppConfig.version = '3.
|
|
17
|
+
AppConfig.version = '3.5.0'
|
|
18
18
|
AppConfig.packageName = 'taskjuggler'
|
|
19
19
|
AppConfig.softwareName = 'TaskJuggler'
|
|
20
20
|
AppConfig.packageInfo = 'A Project Management Software'
|
|
21
|
-
AppConfig.copyright = [ (2006..
|
|
21
|
+
AppConfig.copyright = [ (2006..2013).to_a ]
|
|
22
22
|
AppConfig.authors = [ 'Chris Schlaeger <chris@linux.com>' ]
|
|
23
23
|
AppConfig.contact = 'http://www.taskjuggler.org'
|
|
24
24
|
AppConfig.license = <<'EOT'
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Tj3SheetAppBase.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TjException.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
data/lib/taskjuggler/TjTime.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TjTime.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -21,7 +21,7 @@ class TaskJuggler
|
|
|
21
21
|
# time zones.
|
|
22
22
|
class TjTime
|
|
23
23
|
|
|
24
|
-
attr_reader :time
|
|
24
|
+
attr_reader :time
|
|
25
25
|
|
|
26
26
|
# The number of days per month. Leap years are taken care of separately.
|
|
27
27
|
MON_MAX = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
|
|
@@ -40,17 +40,13 @@ class TaskJuggler
|
|
|
40
40
|
# is a Time object it's assumed to be in local time. If it's a string, it
|
|
41
41
|
# is parsed as a date. Or else it is interpreted as seconds after Epoch.
|
|
42
42
|
def initialize(t = nil)
|
|
43
|
-
@timeZone = @@tz
|
|
44
|
-
|
|
45
43
|
case t
|
|
46
44
|
when nil
|
|
47
45
|
@time = Time.now
|
|
48
46
|
when Time
|
|
49
47
|
@time = t
|
|
50
|
-
@timeZone = nil
|
|
51
48
|
when TjTime
|
|
52
49
|
@time = t.time
|
|
53
|
-
@timeZone = nil
|
|
54
50
|
when String
|
|
55
51
|
parse(t)
|
|
56
52
|
when Array
|
|
@@ -367,16 +363,18 @@ class TaskJuggler
|
|
|
367
363
|
|
|
368
364
|
# This function is just a wrapper around Time.strftime(). In case @time is
|
|
369
365
|
# nil, it returns 'unkown'.
|
|
370
|
-
def to_s(format = nil)
|
|
366
|
+
def to_s(format = nil, tz = nil)
|
|
371
367
|
return 'unknown' if @time.nil?
|
|
368
|
+
|
|
369
|
+
t = tz == 'UTC' ? gmtime : localtime
|
|
372
370
|
if format.nil?
|
|
373
371
|
fmt = '%Y-%m-%d-%H:%M' + (@time.sec == 0 ? '' : ':%S') + '-%z'
|
|
374
372
|
else
|
|
375
373
|
# Handle TJ specific extensions to the strftime format.
|
|
376
|
-
fmt = format.sub(/%Q/, "#{((
|
|
374
|
+
fmt = format.sub(/%Q/, "#{((t.mon - 1) / 3) + 1}")
|
|
377
375
|
end
|
|
378
376
|
# Always report values in local timezone
|
|
379
|
-
|
|
377
|
+
t.strftime(fmt)
|
|
380
378
|
end
|
|
381
379
|
|
|
382
380
|
# Return the seconds since Epoch.
|
|
@@ -515,7 +513,6 @@ class TaskJuggler
|
|
|
515
513
|
"(0 - 59) but is #{tzMinute}"
|
|
516
514
|
end
|
|
517
515
|
@time += sign * (tzHour * 3600 + tzMinute * 60)
|
|
518
|
-
@timeZone = 'UTC'
|
|
519
516
|
else
|
|
520
517
|
@time = Time.mktime(year, month, day, hour, minute, second)
|
|
521
518
|
end
|
|
@@ -550,9 +547,17 @@ class TaskJuggler
|
|
|
550
547
|
end
|
|
551
548
|
end
|
|
552
549
|
|
|
553
|
-
def
|
|
554
|
-
|
|
550
|
+
def gmtime
|
|
551
|
+
if @time.utc?
|
|
552
|
+
# @time is already in the right zone (UTC)
|
|
553
|
+
@time
|
|
554
|
+
else
|
|
555
|
+
# To convert a Time object from local time to UTC.
|
|
556
|
+
@time.dup.gmtime
|
|
557
|
+
end
|
|
558
|
+
end
|
|
555
559
|
|
|
560
|
+
def localtime
|
|
556
561
|
if @time.utc?
|
|
557
562
|
if @@tz == 'UTC'
|
|
558
563
|
# @time is already in the right zone (UTC)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TjpExample.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TjpSyntaxRules.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -130,24 +130,24 @@ EOT
|
|
|
130
130
|
|
|
131
131
|
def rule_accountReportHeader
|
|
132
132
|
pattern(%w( _accountreport !optionalID !reportName ), lambda {
|
|
133
|
-
newReport(@val[1], @val[2], :accountreport, @sourceFileInfo[0])
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
133
|
+
newReport(@val[1], @val[2], :accountreport, @sourceFileInfo[0]) do
|
|
134
|
+
unless @property.modified?('columns')
|
|
135
|
+
# Set the default columns for this report.
|
|
136
|
+
%w( bsi name monthly ).each do |col|
|
|
137
|
+
@property.get('columns') <<
|
|
138
|
+
TableColumnDefinition.new(col, columnTitle(col))
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
# Show all accounts, sorted by tree, seqno-up.
|
|
142
|
+
unless @property.modified?('hideAccount')
|
|
143
|
+
@property.set('hideAccount',
|
|
144
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
145
|
+
end
|
|
146
|
+
unless @property.modified?('sortAccounts')
|
|
147
|
+
@property.set('sortAccounts',
|
|
148
|
+
[ [ 'tree', true, -1 ],
|
|
149
|
+
[ 'seqno', true, -1 ] ])
|
|
140
150
|
end
|
|
141
|
-
end
|
|
142
|
-
# Show all accounts, sorted by tree, seqno-up.
|
|
143
|
-
unless @property.modified?('hideAccount')
|
|
144
|
-
@property.set('hideAccount',
|
|
145
|
-
LogicalExpression.new(LogicalOperation.new(0)))
|
|
146
|
-
end
|
|
147
|
-
unless @property.modified?('sortAccounts')
|
|
148
|
-
@property.set('sortAccounts',
|
|
149
|
-
[ [ 'tree', true, -1 ],
|
|
150
|
-
[ 'seqno', true, -1 ] ])
|
|
151
151
|
end
|
|
152
152
|
})
|
|
153
153
|
end
|
|
@@ -164,11 +164,7 @@ EOT
|
|
|
164
164
|
example('AccountReport')
|
|
165
165
|
|
|
166
166
|
pattern(%w( _credits !accountCredits ), lambda {
|
|
167
|
-
|
|
168
|
-
@property['credits', @scenarioIdx] += @val[1]
|
|
169
|
-
rescue AttributeOverwrite
|
|
170
|
-
# Adding multiple credits for an account is a pretty common idiom.
|
|
171
|
-
end
|
|
167
|
+
@property['credits', @scenarioIdx] += @val[1]
|
|
172
168
|
})
|
|
173
169
|
doc('credits', <<'EOT'
|
|
174
170
|
Book the specified amounts to the account at the specified date. The
|
|
@@ -232,13 +228,7 @@ EOT
|
|
|
232
228
|
def rule_allocate
|
|
233
229
|
pattern(%w( _allocate !allocations ), lambda {
|
|
234
230
|
checkContainer('allocate')
|
|
235
|
-
|
|
236
|
-
begin
|
|
237
|
-
@property['allocate', @scenarioIdx] =
|
|
238
|
-
@property['allocate', @scenarioIdx] + @val[1]
|
|
239
|
-
rescue AttributeOverwrite
|
|
240
|
-
# Adding multiple allocates for a task is a pretty common idiom.
|
|
241
|
-
end
|
|
231
|
+
@property['allocate', @scenarioIdx] += @val[1]
|
|
242
232
|
})
|
|
243
233
|
doc('allocate', <<'EOT'
|
|
244
234
|
Specify which resources should be allocated to the task. The
|
|
@@ -745,9 +735,9 @@ EOT
|
|
|
745
735
|
})
|
|
746
736
|
doc('cellcolor.column', <<'EOT'
|
|
747
737
|
Specifies an alternative background color for the cells of this column. The
|
|
748
|
-
logical expression specifies for which cells the color
|
|
749
|
-
multiple cellcolor patterns are provided for a column, the
|
|
750
|
-
matching one is used for each cell.
|
|
738
|
+
[[logicalexpression|logical expression]] specifies for which cells the color
|
|
739
|
+
should be used. If multiple cellcolor patterns are provided for a column, the
|
|
740
|
+
first matching one is used for each cell.
|
|
751
741
|
EOT
|
|
752
742
|
)
|
|
753
743
|
|
|
@@ -769,9 +759,9 @@ EOT
|
|
|
769
759
|
})
|
|
770
760
|
doc('fontcolor.column', <<'EOT'
|
|
771
761
|
Specifies an alternative font color for the cells of this column. The
|
|
772
|
-
logical expression specifies for which cells the color
|
|
773
|
-
multiple fontcolor patterns are provided for a column, the
|
|
774
|
-
matching one is used for each cell.
|
|
762
|
+
[[logicalexpression|logical expression]] specifies for which cells the color
|
|
763
|
+
should be used. If multiple fontcolor patterns are provided for a column, the
|
|
764
|
+
first matching one is used for each cell.
|
|
775
765
|
EOT
|
|
776
766
|
)
|
|
777
767
|
|
|
@@ -780,10 +770,10 @@ EOT
|
|
|
780
770
|
CellSettingPattern.new(@val[2], @val[1]))
|
|
781
771
|
})
|
|
782
772
|
doc('halign.column', <<'EOT'
|
|
783
|
-
Specifies the horizontal alignment of the cell content. The
|
|
784
|
-
specifies for which cells the alignment
|
|
785
|
-
halign patterns are provided for a column,
|
|
786
|
-
each cell.
|
|
773
|
+
Specifies the horizontal alignment of the cell content. The
|
|
774
|
+
[[logicalexpression|logical expression]] specifies for which cells the alignment
|
|
775
|
+
setting should be used. If multiple halign patterns are provided for a column,
|
|
776
|
+
the first matching one is used for each cell.
|
|
787
777
|
EOT
|
|
788
778
|
)
|
|
789
779
|
|
|
@@ -876,9 +866,10 @@ EOT
|
|
|
876
866
|
doc('tooltip.column', <<'EOT'
|
|
877
867
|
Specifies an alternative content for the tooltip. This will replace the
|
|
878
868
|
original content of the tooltip that would be available for columns with text
|
|
879
|
-
that does not fit the column with. The logical expression
|
|
880
|
-
cells the text should be used. If multiple tooltip
|
|
881
|
-
column, the first matching one is taken for each
|
|
869
|
+
that does not fit the column with. The [[logicalexpression|logical expression]]
|
|
870
|
+
specifies for which cells the text should be used. If multiple tooltip
|
|
871
|
+
patterns are provided for a column, the first matching one is taken for each
|
|
872
|
+
cell.
|
|
882
873
|
EOT
|
|
883
874
|
)
|
|
884
875
|
arg(2, 'text', <<'EOT'
|
|
@@ -891,11 +882,12 @@ EOT
|
|
|
891
882
|
@column.width = @val[1]
|
|
892
883
|
})
|
|
893
884
|
doc('width.column', <<'EOT'
|
|
894
|
-
Specifies the width of the column in screen pixels. If the content of
|
|
895
|
-
column does not fit into this width, it will be cut off. In some cases a
|
|
885
|
+
Specifies the maximum width of the column in screen pixels. If the content of
|
|
886
|
+
the column does not fit into this width, it will be cut off. In some cases a
|
|
896
887
|
scrollbar is added or a tooltip window with the complete content is shown when
|
|
897
888
|
the mouse is moved over the column. The latter is only supported in
|
|
898
|
-
interactive output formats.
|
|
889
|
+
interactive output formats. The resulting column width may be smaller if the
|
|
890
|
+
column has a fixed width (e. g. the chart column).
|
|
899
891
|
EOT
|
|
900
892
|
)
|
|
901
893
|
end
|
|
@@ -954,6 +946,9 @@ This is result in a date 2 weeks earlier than the current (or specified) date.
|
|
|
954
946
|
See [[duration]] for a complete list of supported time intervals. Don't forget
|
|
955
947
|
to put at least one space character after the date to prevent TaskJuggler from
|
|
956
948
|
interpreting the interval as an hour.
|
|
949
|
+
|
|
950
|
+
Date attributes may be invalid in some cases. This needs special care in
|
|
951
|
+
[[logicalexpression|logical expressions]].
|
|
957
952
|
EOT
|
|
958
953
|
)
|
|
959
954
|
end
|
|
@@ -1209,31 +1204,33 @@ EOT
|
|
|
1209
1204
|
|
|
1210
1205
|
def rule_exportHeader
|
|
1211
1206
|
pattern(%w( _export !optionalID $STRING ), lambda {
|
|
1212
|
-
newReport(@val[1], @val[2], :export, @sourceFileInfo[0])
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1207
|
+
newReport(@val[1], @val[2], :export, @sourceFileInfo[0]) do
|
|
1208
|
+
unless @property.modified?('formats')
|
|
1209
|
+
@property.set('formats', [ :tjp ])
|
|
1210
|
+
end
|
|
1216
1211
|
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
@property.
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
@property.
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
@property.
|
|
1212
|
+
# By default, we export all scenarios.
|
|
1213
|
+
unless @property.modified?('scenarios')
|
|
1214
|
+
scenarios = Array.new(@project.scenarios.items) { |i| i }
|
|
1215
|
+
scenarios.delete_if { |sc| !@project.scenario(sc).get('active') }
|
|
1216
|
+
@property.set('scenarios', scenarios)
|
|
1217
|
+
end
|
|
1218
|
+
# Show all tasks, sorted by seqno-up.
|
|
1219
|
+
unless @property.modified?('hideTask')
|
|
1220
|
+
@property.set('hideTask',
|
|
1221
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
1222
|
+
end
|
|
1223
|
+
unless @property.modified?('sortTasks')
|
|
1224
|
+
@property.set('sortTasks', [ [ 'seqno', true, -1 ] ])
|
|
1225
|
+
end
|
|
1226
|
+
# Show all resources, sorted by seqno-up.
|
|
1227
|
+
unless @property.modified?('hideResource')
|
|
1228
|
+
@property.set('hideResource',
|
|
1229
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
1230
|
+
end
|
|
1231
|
+
unless @property.modified?('sortResources')
|
|
1232
|
+
@property.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
1233
|
+
end
|
|
1237
1234
|
end
|
|
1238
1235
|
})
|
|
1239
1236
|
arg(2, 'file name', <<'EOT'
|
|
@@ -1263,6 +1260,28 @@ EOT
|
|
|
1263
1260
|
})
|
|
1264
1261
|
doc('date.extend', <<'EOT'
|
|
1265
1262
|
Extend the property with a new attribute of type date.
|
|
1263
|
+
EOT
|
|
1264
|
+
)
|
|
1265
|
+
arg(2, 'name', 'The name of the new attribute. It is used as header ' +
|
|
1266
|
+
'in report columns and the like.')
|
|
1267
|
+
|
|
1268
|
+
pattern(%w( _number !extendId $STRING !extendOptionsBody ), lambda {
|
|
1269
|
+
# Extend the propertySet definition and parser rules
|
|
1270
|
+
if extendPropertySetDefinition(FloatAttribute, nil)
|
|
1271
|
+
@ruleToExtendWithScenario.addPattern(TextParser::Pattern.new(
|
|
1272
|
+
[ '_' + @val[1], '!number' ], lambda {
|
|
1273
|
+
@property[@val[0], @scenarioIdx] = @val[1]
|
|
1274
|
+
}))
|
|
1275
|
+
else
|
|
1276
|
+
@ruleToExtend.addPattern(TextParser::Pattern.new(
|
|
1277
|
+
[ '_' + @val[1], '!number' ], lambda {
|
|
1278
|
+
@property.set(@val[0], @val[1])
|
|
1279
|
+
}))
|
|
1280
|
+
end
|
|
1281
|
+
})
|
|
1282
|
+
doc('number.extend', <<'EOT'
|
|
1283
|
+
Extend the property with a new attribute of type number. Possible values for
|
|
1284
|
+
this attribute could be integer or floating point numbers.
|
|
1266
1285
|
EOT
|
|
1267
1286
|
)
|
|
1268
1287
|
arg(2, 'name', 'The name of the new attribute. It is used as header ' +
|
|
@@ -1405,10 +1424,10 @@ EOT
|
|
|
1405
1424
|
end
|
|
1406
1425
|
})
|
|
1407
1426
|
doc('fail', <<'EOT'
|
|
1408
|
-
The fail attribute adds a logical expression to the
|
|
1409
|
-
described by the logical expression is checked after
|
|
1410
|
-
error is raised if the condition evaluates to true. This
|
|
1411
|
-
primarily intended for testing purposes.
|
|
1427
|
+
The fail attribute adds a [[logicalexpression|logical expression]] to the
|
|
1428
|
+
property. The condition described by the logical expression is checked after
|
|
1429
|
+
the scheduling and an error is raised if the condition evaluates to true. This
|
|
1430
|
+
attribute is primarily intended for testing purposes.
|
|
1412
1431
|
EOT
|
|
1413
1432
|
)
|
|
1414
1433
|
end
|
|
@@ -1522,11 +1541,7 @@ EOT
|
|
|
1522
1541
|
@val[1].each do |flag|
|
|
1523
1542
|
next if @property['flags', @scenarioIdx].include?(flag)
|
|
1524
1543
|
|
|
1525
|
-
|
|
1526
|
-
begin
|
|
1527
|
-
@property['flags', @scenarioIdx] += [ flag ]
|
|
1528
|
-
rescue AttributeOverwrite
|
|
1529
|
-
end
|
|
1544
|
+
@property['flags', @scenarioIdx] += [ flag ]
|
|
1530
1545
|
end
|
|
1531
1546
|
})
|
|
1532
1547
|
end
|
|
@@ -1684,6 +1699,10 @@ EOT
|
|
|
1684
1699
|
pattern(['_istask', '_(', '_)' ])
|
|
1685
1700
|
doc('istask', 'The result is true if the property is a task.')
|
|
1686
1701
|
|
|
1702
|
+
pattern(%w( _isvalid _( $ID _) ))
|
|
1703
|
+
doc('isvalid', 'Returns false if argument is not an assigned or ' +
|
|
1704
|
+
'properly computed value.')
|
|
1705
|
+
|
|
1687
1706
|
pattern(%w( _treelevel _( _) ))
|
|
1688
1707
|
doc('treelevel', <<'EOT'
|
|
1689
1708
|
Returns the nesting level of a property in the property tree.
|
|
@@ -1729,8 +1748,9 @@ EOT
|
|
|
1729
1748
|
@property.set('hideAccount', @val[1])
|
|
1730
1749
|
})
|
|
1731
1750
|
doc('hideaccount', <<'EOT'
|
|
1732
|
-
Do not include accounts that match the specified logical
|
|
1733
|
-
report is sorted in ''''tree'''' mode (default) then
|
|
1751
|
+
Do not include accounts that match the specified [[logicalexpression|logical
|
|
1752
|
+
expression]]. If the report is sorted in ''''tree'''' mode (default) then
|
|
1753
|
+
enclosing accounts are
|
|
1734
1754
|
listed even if the expression matches the account.
|
|
1735
1755
|
EOT
|
|
1736
1756
|
)
|
|
@@ -1752,9 +1772,9 @@ EOT
|
|
|
1752
1772
|
@property.set('hideResource', @val[1])
|
|
1753
1773
|
})
|
|
1754
1774
|
doc('hideresource', <<'EOT'
|
|
1755
|
-
Do not include resources that match the specified logical
|
|
1756
|
-
report is sorted in ''''tree'''' mode (default) then
|
|
1757
|
-
listed even if the expression matches the resource.
|
|
1775
|
+
Do not include resources that match the specified [[logicalexpression|logical
|
|
1776
|
+
expression]]. If the report is sorted in ''''tree'''' mode (default) then
|
|
1777
|
+
enclosing resources are listed even if the expression matches the resource.
|
|
1758
1778
|
EOT
|
|
1759
1779
|
)
|
|
1760
1780
|
also(%w( sortresources ))
|
|
@@ -1765,9 +1785,9 @@ EOT
|
|
|
1765
1785
|
@property.set('hideTask', @val[1])
|
|
1766
1786
|
})
|
|
1767
1787
|
doc('hidetask', <<'EOT'
|
|
1768
|
-
Do not include tasks that match the specified logical
|
|
1769
|
-
report is sorted in ''''tree'''' mode (default) then
|
|
1770
|
-
listed even if the expression matches the task.
|
|
1788
|
+
Do not include tasks that match the specified [[logicalexpression|logical
|
|
1789
|
+
expression]]. If the report is sorted in ''''tree'''' mode (default) then
|
|
1790
|
+
enclosing tasks are listed even if the expression matches the task.
|
|
1771
1791
|
EOT
|
|
1772
1792
|
)
|
|
1773
1793
|
also(%w( sorttasks ))
|
|
@@ -1820,23 +1840,24 @@ EOT
|
|
|
1820
1840
|
|
|
1821
1841
|
def rule_iCalReportHeader
|
|
1822
1842
|
pattern(%w( _icalreport !optionalID $STRING ), lambda {
|
|
1823
|
-
newReport(@val[1], @val[2], :iCal, @sourceFileInfo[0])
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1843
|
+
newReport(@val[1], @val[2], :iCal, @sourceFileInfo[0]) do
|
|
1844
|
+
@property.set('formats', [ :iCal ])
|
|
1845
|
+
|
|
1846
|
+
# By default, we export only the first scenario.
|
|
1847
|
+
unless @project.scenario(0).get('active')
|
|
1848
|
+
@property.set('scenarios', [ 0 ])
|
|
1849
|
+
end
|
|
1850
|
+
# Show all tasks, sorted by seqno-up.
|
|
1851
|
+
@property.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
|
1852
|
+
@property.set('sortTasks', [ [ 'seqno', true, -1 ] ])
|
|
1853
|
+
# Show all resources, sorted by seqno-up.
|
|
1854
|
+
@property.set('hideResource',
|
|
1855
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
1856
|
+
@property.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
1857
|
+
# Show all journal entries.
|
|
1858
|
+
@property.set('hideJournalEntry',
|
|
1859
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
1860
|
+
end
|
|
1840
1861
|
})
|
|
1841
1862
|
arg(1, 'file name', <<'EOT'
|
|
1842
1863
|
The name of the report file to generate without an extension. Use . to use
|
|
@@ -2609,17 +2630,27 @@ in the report.
|
|
|
2609
2630
|
Operands can be previously declared flags, built-in [[functions]], property
|
|
2610
2631
|
attributes (specified as scenario.attribute) or another logical expression.
|
|
2611
2632
|
When you combine logical operations to a more complex expression, the
|
|
2612
|
-
operators are evaluated from left to right. '''a | b & c''' is identical to
|
|
2613
|
-
'''(a | b) & c'''. It's highly recommended that you always use brackets to
|
|
2633
|
+
operators are evaluated from left to right. ''''a | b & c'''' is identical to
|
|
2634
|
+
''''(a | b) & c''''. It's highly recommended that you always use brackets to
|
|
2614
2635
|
control the evaluation sequence. Currently, TaskJuggler does not support the
|
|
2615
2636
|
concept of operator precedence or right-left associativity. This may change in
|
|
2616
2637
|
the future.
|
|
2617
2638
|
|
|
2618
2639
|
An operand can also be just a number. 0 evaluates to false, all other numbers
|
|
2619
|
-
to true. The logical expression can also be the special constants ''''@all''''
|
|
2640
|
+
to true. The logical expression can also be the special constants ''''@all''''
|
|
2641
|
+
or ''''@none''''. The first always evaluates to true, the latter to false.
|
|
2642
|
+
|
|
2643
|
+
Date attributes needs special attention. Attributes like [[maxend]] can
|
|
2644
|
+
be undefined. To use such an attribute in a comparison, you need to test for
|
|
2645
|
+
the validity first. E. g. to compare the end date of the ''''plan''''
|
|
2646
|
+
scenario with the ''''maxend'''' value use ''''isvalid(plan.maxend) &
|
|
2647
|
+
(plan.end > plan.maxend)''''. The ''''&'''' and ''''|'''' operators are lazy.
|
|
2648
|
+
If the result is already known after evaluation the first operand, the second
|
|
2649
|
+
operand will not be evaluated any more.
|
|
2620
2650
|
EOT
|
|
2621
2651
|
)
|
|
2622
2652
|
also(%w( functions ))
|
|
2653
|
+
example('LogicalExpression', '1')
|
|
2623
2654
|
end
|
|
2624
2655
|
|
|
2625
2656
|
def rule_macro
|
|
@@ -2751,7 +2782,7 @@ EOT
|
|
|
2751
2782
|
})
|
|
2752
2783
|
doc('hidereport', <<'EOT'
|
|
2753
2784
|
This attribute can be used to exclude the reports that match the specified
|
|
2754
|
-
expression from the navigation bar.
|
|
2785
|
+
[[logicalexpression|logical expression]] from the navigation bar.
|
|
2755
2786
|
EOT
|
|
2756
2787
|
)
|
|
2757
2788
|
end
|
|
@@ -2810,8 +2841,9 @@ EOF
|
|
|
2810
2841
|
|
|
2811
2842
|
def rule_nikuReportHeader
|
|
2812
2843
|
pattern(%w( _nikureport !optionalID $STRING ), lambda {
|
|
2813
|
-
newReport(@val[1], @val[2], :niku, @sourceFileInfo[0])
|
|
2814
|
-
|
|
2844
|
+
newReport(@val[1], @val[2], :niku, @sourceFileInfo[0]) do
|
|
2845
|
+
@property.set('numberFormat', RealFormat.new(['-', '', '', '.', 2]))
|
|
2846
|
+
end
|
|
2815
2847
|
})
|
|
2816
2848
|
arg(1, 'file name', <<'EOT'
|
|
2817
2849
|
The name of the time sheet report file to generate. It must end with a .tji
|
|
@@ -3229,6 +3261,24 @@ EOT
|
|
|
3229
3261
|
@project['numberFormat'] = @val[0]
|
|
3230
3262
|
})
|
|
3231
3263
|
|
|
3264
|
+
pattern(%w( _outputdir $STRING ), lambda {
|
|
3265
|
+
# Directory name must be terminated by a slash.
|
|
3266
|
+
if @val[1].empty?
|
|
3267
|
+
error('outdir_empty', 'Output directory may not be empty.')
|
|
3268
|
+
end
|
|
3269
|
+
if !File.directory?(@val[1])
|
|
3270
|
+
error('outdir_missing',
|
|
3271
|
+
"Output directory '#{@val[1]}' does not exist or is not " +
|
|
3272
|
+
"a directory!")
|
|
3273
|
+
end
|
|
3274
|
+
@project.outputDir = @val[1] + (@val[1][-1] == ?/ ? '' : '/')
|
|
3275
|
+
})
|
|
3276
|
+
doc('outputdir',
|
|
3277
|
+
'Specifies the directory into which the reports should be generated. ' +
|
|
3278
|
+
'This will not affect reports whos name start with a slash. This ' +
|
|
3279
|
+
'setting can be overwritten by the command line option.')
|
|
3280
|
+
arg(1, 'directory', 'Path to an existing directory')
|
|
3281
|
+
|
|
3232
3282
|
pattern(%w( !scenario ))
|
|
3233
3283
|
pattern(%w( _shorttimeformat $STRING ), lambda {
|
|
3234
3284
|
@project['shortTimeFormat'] = @val[1]
|
|
@@ -3465,6 +3515,24 @@ EOT
|
|
|
3465
3515
|
|
|
3466
3516
|
pattern(%w( !account ))
|
|
3467
3517
|
|
|
3518
|
+
pattern(%w( _auxdir $STRING ), lambda {
|
|
3519
|
+
auxdir = @val[1]
|
|
3520
|
+
# Ensure that the directory always ends with a '/'.
|
|
3521
|
+
auxdir += '/' unless auxdir[-1] == ?/
|
|
3522
|
+
@project['auxdir'] = auxdir
|
|
3523
|
+
})
|
|
3524
|
+
level(:beta)
|
|
3525
|
+
doc('auxdir', <<'EOT'
|
|
3526
|
+
Specifies an alternative directory for the auxiliary report files such as CSS,
|
|
3527
|
+
JavaScript and icon files. This setting will affect all subsequent report
|
|
3528
|
+
definitions unless it gets overridden. If this attribute is not set, the
|
|
3529
|
+
directory and its contents will be generated automatically. If this attribute
|
|
3530
|
+
is provided, the user has to ensure that the directory exists and is filled
|
|
3531
|
+
with the proper data. The specified path can be absolute or relative to the
|
|
3532
|
+
generated report file.
|
|
3533
|
+
EOT
|
|
3534
|
+
)
|
|
3535
|
+
|
|
3468
3536
|
pattern(%w( _copyright $STRING ), lambda {
|
|
3469
3537
|
@project['copyright'] = @val[1]
|
|
3470
3538
|
})
|
|
@@ -3730,7 +3798,11 @@ EOT
|
|
|
3730
3798
|
)
|
|
3731
3799
|
|
|
3732
3800
|
singlePattern('_balance')
|
|
3733
|
-
descr('
|
|
3801
|
+
descr(<<'EOT'
|
|
3802
|
+
The account balance at the beginning of the reported period. This is the
|
|
3803
|
+
balance before any transactions of the reported period have been credited.
|
|
3804
|
+
EOT
|
|
3805
|
+
)
|
|
3734
3806
|
|
|
3735
3807
|
singlePattern('_bsi')
|
|
3736
3808
|
descr('The hierarchical or work breakdown structure index (i. e. 1.2.3)')
|
|
@@ -4093,6 +4165,12 @@ will also include the targets of the child tasks. Targets may not have any
|
|
|
4093
4165
|
follower tasks.
|
|
4094
4166
|
|
|
4095
4167
|
The list can be customized by the [[listitem.column|listitem]] attribute.
|
|
4168
|
+
EOT
|
|
4169
|
+
)
|
|
4170
|
+
|
|
4171
|
+
singlePattern('_turnover')
|
|
4172
|
+
descr(<<'EOT'
|
|
4173
|
+
The financial turnover of an account during the reporting interval.
|
|
4096
4174
|
EOT
|
|
4097
4175
|
)
|
|
4098
4176
|
|
|
@@ -4146,12 +4224,12 @@ EOT
|
|
|
4146
4224
|
@property.set('auxdir', auxdir)
|
|
4147
4225
|
})
|
|
4148
4226
|
level(:beta)
|
|
4149
|
-
doc('auxdir', <<'EOT'
|
|
4227
|
+
doc('auxdir.report', <<'EOT'
|
|
4150
4228
|
Specifies an alternative directory for the auxiliary report files such as CSS,
|
|
4151
|
-
JavaScript and icon files. If this attribute is not set, the
|
|
4152
|
-
generated automatically. If
|
|
4229
|
+
JavaScript and icon files. If this attribute is not set, the directory will be
|
|
4230
|
+
generated automatically. If this attribute is provided, the user has to ensure
|
|
4153
4231
|
that the directory exists and is filled with the proper data. The specified
|
|
4154
|
-
path
|
|
4232
|
+
path can be absolute or relative to the generated report file.
|
|
4155
4233
|
EOT
|
|
4156
4234
|
)
|
|
4157
4235
|
|
|
@@ -4706,34 +4784,34 @@ EOT
|
|
|
4706
4784
|
|
|
4707
4785
|
def rule_resourceReportHeader
|
|
4708
4786
|
pattern(%w( _resourcereport !optionalID !reportName ), lambda {
|
|
4709
|
-
newReport(@val[1], @val[2], :resourcereport, @sourceFileInfo[0])
|
|
4710
|
-
|
|
4711
|
-
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
|
|
4715
|
-
|
|
4787
|
+
newReport(@val[1], @val[2], :resourcereport, @sourceFileInfo[0]) do
|
|
4788
|
+
unless @property.modified?('columns')
|
|
4789
|
+
# Set the default columns for this report.
|
|
4790
|
+
%w( no name ).each do |col|
|
|
4791
|
+
@property.get('columns') <<
|
|
4792
|
+
TableColumnDefinition.new(col, columnTitle(col))
|
|
4793
|
+
end
|
|
4794
|
+
end
|
|
4795
|
+
# Show all resources, sorted by tree and id-up.
|
|
4796
|
+
unless @property.modified?('hideResource')
|
|
4797
|
+
@property.set('hideResource',
|
|
4798
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
4799
|
+
end
|
|
4800
|
+
unless @property.modified?('sortResources')
|
|
4801
|
+
@property.set('sortResources', [ [ 'tree', true, -1 ],
|
|
4802
|
+
[ 'id', true, -1 ] ])
|
|
4803
|
+
end
|
|
4804
|
+
# Hide all resources, but set sorting to tree, start-up, seqno-up.
|
|
4805
|
+
unless @property.modified?('hideTask')
|
|
4806
|
+
@property.set('hideTask',
|
|
4807
|
+
LogicalExpression.new(LogicalOperation.new(1)))
|
|
4808
|
+
end
|
|
4809
|
+
unless @property.modified?('sortTasks')
|
|
4810
|
+
@property.set('sortTasks',
|
|
4811
|
+
[ [ 'tree', true, -1 ],
|
|
4812
|
+
[ 'start', true, 0 ],
|
|
4813
|
+
[ 'seqno', true, -1 ] ])
|
|
4716
4814
|
end
|
|
4717
|
-
end
|
|
4718
|
-
# Show all resources, sorted by tree and id-up.
|
|
4719
|
-
unless @property.modified?('hideResource')
|
|
4720
|
-
@property.set('hideResource',
|
|
4721
|
-
LogicalExpression.new(LogicalOperation.new(0)))
|
|
4722
|
-
end
|
|
4723
|
-
unless @property.modified?('sortResources')
|
|
4724
|
-
@property.set('sortResources', [ [ 'tree', true, -1 ],
|
|
4725
|
-
[ 'id', true, -1 ] ])
|
|
4726
|
-
end
|
|
4727
|
-
# Hide all resources, but set sorting to tree, start-up, seqno-up.
|
|
4728
|
-
unless @property.modified?('hideTask')
|
|
4729
|
-
@property.set('hideTask',
|
|
4730
|
-
LogicalExpression.new(LogicalOperation.new(1)))
|
|
4731
|
-
end
|
|
4732
|
-
unless @property.modified?('sortTasks')
|
|
4733
|
-
@property.set('sortTasks',
|
|
4734
|
-
[ [ 'tree', true, -1 ],
|
|
4735
|
-
[ 'start', true, 0 ],
|
|
4736
|
-
[ 'seqno', true, -1 ] ])
|
|
4737
4815
|
end
|
|
4738
4816
|
})
|
|
4739
4817
|
end
|
|
@@ -4801,10 +4879,7 @@ EOT
|
|
|
4801
4879
|
pattern(%w( !leaveAllowances ))
|
|
4802
4880
|
|
|
4803
4881
|
pattern(%w( !leaves ), lambda {
|
|
4804
|
-
|
|
4805
|
-
@property['leaves', @scenarioIdx] += @val[0]
|
|
4806
|
-
rescue AttributeOverwrite
|
|
4807
|
-
end
|
|
4882
|
+
@property['leaves', @scenarioIdx] += @val[0]
|
|
4808
4883
|
})
|
|
4809
4884
|
|
|
4810
4885
|
pattern(%w( !limits ), lambda {
|
|
@@ -4884,11 +4959,8 @@ EOT
|
|
|
4884
4959
|
|
|
4885
4960
|
pattern(%w( _vacation !vacationName !intervals ), lambda {
|
|
4886
4961
|
@val[2].each do |interval|
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
@property['leaves', @scenarioIdx] += [ Leave.new(:holiday, interval) ]
|
|
4890
|
-
rescue AttributeOverwrite
|
|
4891
|
-
end
|
|
4962
|
+
# We map the old 'vacation' attribute to public holidays.
|
|
4963
|
+
@property['leaves', @scenarioIdx] += [ Leave.new(:holiday, interval) ]
|
|
4892
4964
|
end
|
|
4893
4965
|
})
|
|
4894
4966
|
doc('vacation.resource', <<'EOT'
|
|
@@ -4922,8 +4994,8 @@ EOT
|
|
|
4922
4994
|
@property.set('rollupAccount', @val[1])
|
|
4923
4995
|
})
|
|
4924
4996
|
doc('rollupaccount', <<'EOT'
|
|
4925
|
-
Do not show sub-accounts of accounts that match the specified
|
|
4926
|
-
expression.
|
|
4997
|
+
Do not show sub-accounts of accounts that match the specified
|
|
4998
|
+
[[logicalexpression|logical expression]].
|
|
4927
4999
|
EOT
|
|
4928
5000
|
)
|
|
4929
5001
|
end
|
|
@@ -4933,8 +5005,8 @@ EOT
|
|
|
4933
5005
|
@property.set('rollupResource', @val[1])
|
|
4934
5006
|
})
|
|
4935
5007
|
doc('rollupresource', <<'EOT'
|
|
4936
|
-
Do not show sub-resources of resources that match the specified
|
|
4937
|
-
expression.
|
|
5008
|
+
Do not show sub-resources of resources that match the specified
|
|
5009
|
+
[[logicalexpression|logical expression]].
|
|
4938
5010
|
EOT
|
|
4939
5011
|
)
|
|
4940
5012
|
example('RollupResource')
|
|
@@ -4945,7 +5017,8 @@ EOT
|
|
|
4945
5017
|
@property.set('rollupTask', @val[1])
|
|
4946
5018
|
})
|
|
4947
5019
|
doc('rolluptask', <<'EOT'
|
|
4948
|
-
Do not show sub-tasks of tasks that match the specified
|
|
5020
|
+
Do not show sub-tasks of tasks that match the specified
|
|
5021
|
+
[[logicalexpression|logical expression]].
|
|
4949
5022
|
EOT
|
|
4950
5023
|
)
|
|
4951
5024
|
end
|
|
@@ -5053,6 +5126,10 @@ EOT
|
|
|
5053
5126
|
end
|
|
5054
5127
|
@property = Scenario.new(@project, @val[1], @val[2], @property)
|
|
5055
5128
|
@property.inheritAttributes
|
|
5129
|
+
|
|
5130
|
+
if @project.scenarios.length > 1
|
|
5131
|
+
MessageHandlerInstance.instance.hideScenario = false
|
|
5132
|
+
end
|
|
5056
5133
|
})
|
|
5057
5134
|
arg(1, 'id', 'The ID of the scenario')
|
|
5058
5135
|
arg(2, 'name', 'The name of the scenario')
|
|
@@ -5103,8 +5180,9 @@ EOT
|
|
|
5103
5180
|
})
|
|
5104
5181
|
doc('shift', <<'EOT'
|
|
5105
5182
|
A shift combines several workhours related settings in a reusable entity.
|
|
5106
|
-
Besides the weekly working hours it can also hold information such as
|
|
5107
|
-
|
|
5183
|
+
Besides the weekly working hours it can also hold information such as leaves
|
|
5184
|
+
and a time zone. It lets you create a work time calendar that can be used to
|
|
5185
|
+
limit the working time for resources or tasks.
|
|
5108
5186
|
|
|
5109
5187
|
Shifts have a global name space. All IDs must be unique within the shifts of
|
|
5110
5188
|
the project.
|
|
@@ -5182,10 +5260,7 @@ EOT
|
|
|
5182
5260
|
|
|
5183
5261
|
def rule_shiftScenarioAttributes
|
|
5184
5262
|
pattern(%w( !leaves ), lambda {
|
|
5185
|
-
|
|
5186
|
-
@property['leaves', @scenarioIdx] += @val[0]
|
|
5187
|
-
rescue AttributeOverwrite
|
|
5188
|
-
end
|
|
5263
|
+
@property['leaves', @scenarioIdx] += @val[0]
|
|
5189
5264
|
})
|
|
5190
5265
|
|
|
5191
5266
|
pattern(%w( _replace ), lambda {
|
|
@@ -5224,11 +5299,8 @@ EOT
|
|
|
5224
5299
|
|
|
5225
5300
|
pattern(%w( _vacation !vacationName !intervalsOptional ), lambda {
|
|
5226
5301
|
@val[2].each do |interval|
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
@property['leaves', @scenarioIdx] += [ Leave.new(:holiday, interval) ]
|
|
5230
|
-
rescue AttributeOverwrite
|
|
5231
|
-
end
|
|
5302
|
+
# We map the old 'vacation' attribute to public holidays.
|
|
5303
|
+
@property['leaves', @scenarioIdx] += [ Leave.new(:holiday, interval) ]
|
|
5232
5304
|
end
|
|
5233
5305
|
})
|
|
5234
5306
|
doc('vacation.shift', <<'EOT'
|
|
@@ -5377,22 +5449,23 @@ EOT
|
|
|
5377
5449
|
end
|
|
5378
5450
|
def rule_ssReportHeader
|
|
5379
5451
|
pattern(%w( _statussheetreport !optionalID $STRING ), lambda {
|
|
5380
|
-
newReport(@val[1], @val[2], :statusSheet, @sourceFileInfo[0])
|
|
5381
|
-
|
|
5452
|
+
newReport(@val[1], @val[2], :statusSheet, @sourceFileInfo[0]) do
|
|
5453
|
+
@property.set('formats', [ :tjp ])
|
|
5382
5454
|
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5388
|
-
|
|
5389
|
-
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5455
|
+
unless (@project['trackingScenarioIdx'])
|
|
5456
|
+
error('ss_no_tracking_scenario',
|
|
5457
|
+
'You must have a tracking scenario defined to use status sheets.')
|
|
5458
|
+
end
|
|
5459
|
+
# Show all tasks, sorted by id-up.
|
|
5460
|
+
@property.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
|
5461
|
+
@property.set('sortTasks', [ [ 'id', true, -1 ] ])
|
|
5462
|
+
# Show all resources, sorted by seqno-up.
|
|
5463
|
+
@property.set('hideResource',
|
|
5464
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
5465
|
+
@property.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
5466
|
+
@property.set('loadUnit', :hours)
|
|
5467
|
+
@property.set('definitions', [])
|
|
5468
|
+
end
|
|
5396
5469
|
})
|
|
5397
5470
|
arg(2, 'file name', <<'EOT'
|
|
5398
5471
|
The name of the status sheet report file to generate. It must end with a .tji
|
|
@@ -5681,16 +5754,17 @@ EOT
|
|
|
5681
5754
|
|
|
5682
5755
|
def rule_tagfileHeader
|
|
5683
5756
|
pattern(%w( _tagfile !optionalID $STRING ), lambda {
|
|
5684
|
-
newReport(@val[1], @val[2], :tagfile, @sourceFileInfo[0])
|
|
5685
|
-
|
|
5757
|
+
newReport(@val[1], @val[2], :tagfile, @sourceFileInfo[0]) do
|
|
5758
|
+
@property.set('formats', [ :ctags ])
|
|
5686
5759
|
|
|
5687
|
-
|
|
5688
|
-
|
|
5689
|
-
|
|
5690
|
-
|
|
5691
|
-
|
|
5692
|
-
|
|
5693
|
-
|
|
5760
|
+
# Include all tasks.
|
|
5761
|
+
@property.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
|
5762
|
+
@property.set('sortTasks', [ [ 'seqno', true, -1 ] ])
|
|
5763
|
+
# Include all resources.
|
|
5764
|
+
@property.set('hideResource',
|
|
5765
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
5766
|
+
@property.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
5767
|
+
end
|
|
5694
5768
|
})
|
|
5695
5769
|
arg(2, 'file name', <<'EOT'
|
|
5696
5770
|
The name of the tagfile to generate. Use ''''tags'''' if you want vim and
|
|
@@ -6017,33 +6091,33 @@ EOT
|
|
|
6017
6091
|
|
|
6018
6092
|
def rule_taskReportHeader
|
|
6019
6093
|
pattern(%w( _taskreport !optionalID !reportName ), lambda {
|
|
6020
|
-
newReport(@val[1], @val[2], :taskreport, @sourceFileInfo[0])
|
|
6021
|
-
|
|
6022
|
-
|
|
6023
|
-
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
|
|
6094
|
+
newReport(@val[1], @val[2], :taskreport, @sourceFileInfo[0]) do
|
|
6095
|
+
unless @property.modified?('columns')
|
|
6096
|
+
# Set the default columns for this report.
|
|
6097
|
+
%w( bsi name start end effort chart ).each do |col|
|
|
6098
|
+
@property.get('columns') <<
|
|
6099
|
+
TableColumnDefinition.new(col, columnTitle(col))
|
|
6100
|
+
end
|
|
6101
|
+
end
|
|
6102
|
+
# Show all tasks, sorted by tree, start-up, seqno-up.
|
|
6103
|
+
unless @property.modified?('hideTask')
|
|
6104
|
+
@property.set('hideTask',
|
|
6105
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
6106
|
+
end
|
|
6107
|
+
unless @property.modified?('sortTasks')
|
|
6108
|
+
@property.set('sortTasks',
|
|
6109
|
+
[ [ 'tree', true, -1 ],
|
|
6110
|
+
[ 'start', true, 0 ],
|
|
6111
|
+
[ 'seqno', true, -1 ] ])
|
|
6112
|
+
end
|
|
6113
|
+
# Show no resources, but set sorting to id-up.
|
|
6114
|
+
unless @property.modified?('hideResource')
|
|
6115
|
+
@property.set('hideResource',
|
|
6116
|
+
LogicalExpression.new(LogicalOperation.new(1)))
|
|
6117
|
+
end
|
|
6118
|
+
unless @property.modified?('sortResources')
|
|
6119
|
+
@property.set('sortResources', [ [ 'id', true, -1 ] ])
|
|
6027
6120
|
end
|
|
6028
|
-
end
|
|
6029
|
-
# Show all tasks, sorted by tree, start-up, seqno-up.
|
|
6030
|
-
unless @property.modified?('hideTask')
|
|
6031
|
-
@property.set('hideTask',
|
|
6032
|
-
LogicalExpression.new(LogicalOperation.new(0)))
|
|
6033
|
-
end
|
|
6034
|
-
unless @property.modified?('sortTasks')
|
|
6035
|
-
@property.set('sortTasks',
|
|
6036
|
-
[ [ 'tree', true, -1 ],
|
|
6037
|
-
[ 'start', true, 0 ],
|
|
6038
|
-
[ 'seqno', true, -1 ] ])
|
|
6039
|
-
end
|
|
6040
|
-
# Show no resources, but set sorting to id-up.
|
|
6041
|
-
unless @property.modified?('hideResource')
|
|
6042
|
-
@property.set('hideResource',
|
|
6043
|
-
LogicalExpression.new(LogicalOperation.new(1)))
|
|
6044
|
-
end
|
|
6045
|
-
unless @property.modified?('sortResources')
|
|
6046
|
-
@property.set('sortResources', [ [ 'id', true, -1 ] ])
|
|
6047
6121
|
end
|
|
6048
6122
|
})
|
|
6049
6123
|
end
|
|
@@ -6114,12 +6188,8 @@ EOT
|
|
|
6114
6188
|
mode = :perDiem
|
|
6115
6189
|
amount = @val[1] / 7.0
|
|
6116
6190
|
end
|
|
6117
|
-
|
|
6118
|
-
|
|
6119
|
-
@property['charge', @scenarioIdx] +=
|
|
6120
|
-
[ Charge.new(amount, mode, @property, @scenarioIdx) ]
|
|
6121
|
-
rescue AttributeOverwrite
|
|
6122
|
-
end
|
|
6191
|
+
@property['charge', @scenarioIdx] +=
|
|
6192
|
+
[ Charge.new(amount, mode, @property, @scenarioIdx) ]
|
|
6123
6193
|
})
|
|
6124
6194
|
doc('charge', <<'EOT'
|
|
6125
6195
|
Specify a one-time or per-period charge to a certain account. The charge can
|
|
@@ -6156,9 +6226,8 @@ EOT
|
|
|
6156
6226
|
|
|
6157
6227
|
pattern(%w( _depends !taskDepList ), lambda {
|
|
6158
6228
|
checkContainer('depends')
|
|
6229
|
+
@property['depends', @scenarioIdx] += @val[1]
|
|
6159
6230
|
begin
|
|
6160
|
-
@property['depends', @scenarioIdx] =
|
|
6161
|
-
@property['depends', @scenarioIdx] + @val[1]
|
|
6162
6231
|
@property['forward', @scenarioIdx] = true
|
|
6163
6232
|
rescue AttributeOverwrite
|
|
6164
6233
|
end
|
|
@@ -6263,9 +6332,9 @@ EOT
|
|
|
6263
6332
|
setDurationAttribute('length', @val[1])
|
|
6264
6333
|
})
|
|
6265
6334
|
doc('length', <<'EOT'
|
|
6266
|
-
Specifies the
|
|
6267
|
-
|
|
6268
|
-
|
|
6335
|
+
Specifies the duration of this task as working time, not calendar time. 7d
|
|
6336
|
+
means 7 working days, or 7 times 8 hours (assuming default settings), not one
|
|
6337
|
+
week.
|
|
6269
6338
|
|
|
6270
6339
|
A task with a length specification may have resource allocations. Resources
|
|
6271
6340
|
are allocated when they are available. There is no guarantee that the task
|
|
@@ -6274,12 +6343,14 @@ on the duration of the task. A time slot where none of the specified resources
|
|
|
6274
6343
|
is available is still considered working time, if there is no global vacation
|
|
6275
6344
|
and global working hours are defined accordingly.
|
|
6276
6345
|
|
|
6277
|
-
For the length calculation,
|
|
6278
|
-
|
|
6279
|
-
|
|
6280
|
-
|
|
6281
|
-
|
|
6282
|
-
|
|
6346
|
+
For the length calculation, the global working hours and the global leaves
|
|
6347
|
+
matter unless the task has [[shifts.task|shifts]] assigned. In the latter case
|
|
6348
|
+
the working hours and leaves of the shift apply for the specified period to
|
|
6349
|
+
determine if a slot is working time or not. If a resource has additinal
|
|
6350
|
+
working hours defined, it's quite possible that a task with a length of 5d
|
|
6351
|
+
will have an allocated effort larger than 40 hours. Resource working hours
|
|
6352
|
+
only have an impact on whether an allocation is made or not for a particular
|
|
6353
|
+
time slot. They don't effect the resulting duration of the task.
|
|
6283
6354
|
|
|
6284
6355
|
Tasks may not have subtasks if this attribute is used. Setting this attribute
|
|
6285
6356
|
will reset the [[duration]], [[effort]] and [[milestone]] attributes.
|
|
@@ -6368,8 +6439,8 @@ EOT
|
|
|
6368
6439
|
|
|
6369
6440
|
pattern(%w( _precedes !taskPredList ), lambda {
|
|
6370
6441
|
checkContainer('precedes')
|
|
6371
|
-
begin
|
|
6372
6442
|
@property['precedes', @scenarioIdx] += @val[1]
|
|
6443
|
+
begin
|
|
6373
6444
|
@property['forward', @scenarioIdx] = false
|
|
6374
6445
|
rescue AttributeOverwrite
|
|
6375
6446
|
end
|
|
@@ -6814,10 +6885,13 @@ EOT
|
|
|
6814
6885
|
@timeSheetRecord = nil
|
|
6815
6886
|
})
|
|
6816
6887
|
doc('newtask', <<'EOT'
|
|
6817
|
-
The keyword can be used
|
|
6818
|
-
further parent task that don't exist yet, these tasks will be
|
|
6819
|
-
If the task exists already, an error
|
|
6820
|
-
immediately to report progress and status
|
|
6888
|
+
The keyword can be used to request a new task to the project. If the task ID
|
|
6889
|
+
requires further parent task that don't exist yet, these tasks will be
|
|
6890
|
+
requested as well. If the task exists already, an error will be generated. The
|
|
6891
|
+
newly requested task can be used immediately to report progress and status
|
|
6892
|
+
against it. These tasks will not automatically be added to the project plan.
|
|
6893
|
+
The project manager has to manually create them after reviewing the request
|
|
6894
|
+
during the time sheet reviews.
|
|
6821
6895
|
EOT
|
|
6822
6896
|
)
|
|
6823
6897
|
example('TimeSheet1', '3')
|
|
@@ -6979,51 +7053,51 @@ EOT
|
|
|
6979
7053
|
|
|
6980
7054
|
def rule_traceReportHeader
|
|
6981
7055
|
pattern(%w( _tracereport !optionalID !reportName ), lambda {
|
|
6982
|
-
newReport(@val[1], @val[2], :tracereport, @sourceFileInfo[0])
|
|
6983
|
-
|
|
6984
|
-
|
|
6985
|
-
|
|
6986
|
-
|
|
6987
|
-
|
|
6988
|
-
|
|
6989
|
-
|
|
6990
|
-
|
|
6991
|
-
|
|
6992
|
-
|
|
6993
|
-
|
|
6994
|
-
|
|
6995
|
-
|
|
6996
|
-
|
|
7056
|
+
newReport(@val[1], @val[2], :tracereport, @sourceFileInfo[0]) do
|
|
7057
|
+
# The top-level always inherits the global timeFormat setting. This is
|
|
7058
|
+
# not desireable in this case, so we ignore this.
|
|
7059
|
+
if (@property.level == 0 && !@property.provided('timeFormat')) ||
|
|
7060
|
+
(@property.level > 0 && !@property.modified?('timeFormat'))
|
|
7061
|
+
# CSV readers such of Libre-/OpenOffice can't deal with time zones. We
|
|
7062
|
+
# probably also don't need seconds.
|
|
7063
|
+
@property.set('timeFormat', '%Y-%m-%d-%H:%M')
|
|
7064
|
+
end
|
|
7065
|
+
unless @property.modified?('columns')
|
|
7066
|
+
# Set the default columns for this report.
|
|
7067
|
+
%w( end ).each do |col|
|
|
7068
|
+
@property.get('columns') <<
|
|
7069
|
+
TableColumnDefinition.new(col, columnTitle(col))
|
|
7070
|
+
end
|
|
7071
|
+
end
|
|
7072
|
+
# Hide all accounts.
|
|
7073
|
+
unless @property.modified?('hideAccount')
|
|
7074
|
+
@property.set('hideAccount',
|
|
7075
|
+
LogicalExpression.new(LogicalOperation.new(1)))
|
|
7076
|
+
end
|
|
7077
|
+
unless @property.modified?('sortAccounts')
|
|
7078
|
+
@property.set('sortAccounts',
|
|
7079
|
+
[ [ 'tree', true, -1 ],
|
|
7080
|
+
[ 'seqno', true, -1 ] ])
|
|
7081
|
+
end
|
|
7082
|
+
# Show all tasks, sorted by tree, start-up, seqno-up.
|
|
7083
|
+
unless @property.modified?('hideTask')
|
|
7084
|
+
@property.set('hideTask',
|
|
7085
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
7086
|
+
end
|
|
7087
|
+
unless @property.modified?('sortTasks')
|
|
7088
|
+
@property.set('sortTasks',
|
|
7089
|
+
[ [ 'tree', true, -1 ],
|
|
7090
|
+
[ 'start', true, 0 ],
|
|
7091
|
+
[ 'seqno', true, -1 ] ])
|
|
7092
|
+
end
|
|
7093
|
+
# Show no resources, but set sorting to id-up.
|
|
7094
|
+
unless @property.modified?('hideResource')
|
|
7095
|
+
@property.set('hideResource',
|
|
7096
|
+
LogicalExpression.new(LogicalOperation.new(1)))
|
|
7097
|
+
end
|
|
7098
|
+
unless @property.modified?('sortResources')
|
|
7099
|
+
@property.set('sortResources', [ [ 'id', true, -1 ] ])
|
|
6997
7100
|
end
|
|
6998
|
-
end
|
|
6999
|
-
# Hide all accounts.
|
|
7000
|
-
unless @property.modified?('hideAccount')
|
|
7001
|
-
@property.set('hideAccount',
|
|
7002
|
-
LogicalExpression.new(LogicalOperation.new(1)))
|
|
7003
|
-
end
|
|
7004
|
-
unless @property.modified?('sortAccounts')
|
|
7005
|
-
@property.set('sortAccounts',
|
|
7006
|
-
[ [ 'tree', true, -1 ],
|
|
7007
|
-
[ 'seqno', true, -1 ] ])
|
|
7008
|
-
end
|
|
7009
|
-
# Show all tasks, sorted by tree, start-up, seqno-up.
|
|
7010
|
-
unless @property.modified?('hideTask')
|
|
7011
|
-
@property.set('hideTask',
|
|
7012
|
-
LogicalExpression.new(LogicalOperation.new(0)))
|
|
7013
|
-
end
|
|
7014
|
-
unless @property.modified?('sortTasks')
|
|
7015
|
-
@property.set('sortTasks',
|
|
7016
|
-
[ [ 'tree', true, -1 ],
|
|
7017
|
-
[ 'start', true, 0 ],
|
|
7018
|
-
[ 'seqno', true, -1 ] ])
|
|
7019
|
-
end
|
|
7020
|
-
# Show no resources, but set sorting to id-up.
|
|
7021
|
-
unless @property.modified?('hideResource')
|
|
7022
|
-
@property.set('hideResource',
|
|
7023
|
-
LogicalExpression.new(LogicalOperation.new(1)))
|
|
7024
|
-
end
|
|
7025
|
-
unless @property.modified?('sortResources')
|
|
7026
|
-
@property.set('sortResources', [ [ 'id', true, -1 ] ])
|
|
7027
7101
|
end
|
|
7028
7102
|
})
|
|
7029
7103
|
end
|
|
@@ -7038,23 +7112,24 @@ EOT
|
|
|
7038
7112
|
end
|
|
7039
7113
|
def rule_tsReportHeader
|
|
7040
7114
|
pattern(%w( _timesheetreport !optionalID $STRING ), lambda {
|
|
7041
|
-
newReport(@val[1], @val[2], :timeSheet, @sourceFileInfo[0])
|
|
7042
|
-
|
|
7115
|
+
newReport(@val[1], @val[2], :timeSheet, @sourceFileInfo[0]) do
|
|
7116
|
+
@property.set('formats', [ :tjp ])
|
|
7043
7117
|
|
|
7044
|
-
|
|
7045
|
-
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
|
|
7049
|
-
|
|
7050
|
-
|
|
7051
|
-
|
|
7052
|
-
|
|
7053
|
-
|
|
7054
|
-
|
|
7055
|
-
|
|
7056
|
-
|
|
7057
|
-
|
|
7118
|
+
unless (scenarioIdx = @project['trackingScenarioIdx'])
|
|
7119
|
+
error('ts_no_tracking_scenario',
|
|
7120
|
+
'You must have a tracking scenario defined to use time sheets.')
|
|
7121
|
+
end
|
|
7122
|
+
@property.set('scenarios', [ scenarioIdx ])
|
|
7123
|
+
# Show all tasks, sorted by seqno-up.
|
|
7124
|
+
@property.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
|
7125
|
+
@property.set('sortTasks', [ [ 'seqno', true, -1 ] ])
|
|
7126
|
+
# Show all resources, sorted by seqno-up.
|
|
7127
|
+
@property.set('hideResource',
|
|
7128
|
+
LogicalExpression.new(LogicalOperation.new(0)))
|
|
7129
|
+
@property.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
|
7130
|
+
@property.set('loadUnit', :hours)
|
|
7131
|
+
@property.set('definitions', [])
|
|
7132
|
+
end
|
|
7058
7133
|
})
|
|
7059
7134
|
arg(2, 'file name', <<'EOT'
|
|
7060
7135
|
The name of the time sheet report file to generate. It must end with a .tji
|
|
@@ -7354,10 +7429,10 @@ EOT
|
|
|
7354
7429
|
end
|
|
7355
7430
|
})
|
|
7356
7431
|
doc('warn', <<'EOT'
|
|
7357
|
-
The warn attribute adds a logical expression to the
|
|
7358
|
-
described by the logical expression is checked after
|
|
7359
|
-
warning is generated if the condition evaluates to true.
|
|
7360
|
-
primarily intended for testing purposes.
|
|
7432
|
+
The warn attribute adds a [[logicalexpression|logical expression]] to the
|
|
7433
|
+
property. The condition described by the logical expression is checked after
|
|
7434
|
+
the scheduling and an warning is generated if the condition evaluates to true.
|
|
7435
|
+
This attribute is primarily intended for testing purposes.
|
|
7361
7436
|
EOT
|
|
7362
7437
|
)
|
|
7363
7438
|
end
|