taskjuggler 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/benchmarks/depends.tjp +2 -1
- data/benchmarks/htmltaskreport.tjp +2 -1
- data/doc/classes/AppConfig.html +124 -120
- data/doc/classes/Arguments.html +10 -6
- data/doc/classes/Object.html +229 -0
- data/doc/classes/String.html +35 -31
- data/doc/classes/TaskJuggler/Account.html +18 -18
- data/doc/classes/TaskJuggler/AccountAttribute.html +261 -0
- data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
- data/doc/classes/TaskJuggler/Allocation.html +34 -30
- data/doc/classes/TaskJuggler/AllocationAttribute.html +70 -70
- data/doc/classes/TaskJuggler/AttributeBase.html +131 -147
- data/doc/classes/TaskJuggler/AttributeDefinition.html +38 -21
- data/doc/classes/TaskJuggler/BatchProcessor.html +313 -0
- data/doc/classes/TaskJuggler/Booking.html +22 -18
- data/doc/classes/TaskJuggler/BookingListAttribute.html +42 -42
- data/doc/classes/TaskJuggler/BooleanAttribute.html +40 -40
- data/doc/classes/TaskJuggler/CSVFile.html +28 -24
- data/doc/classes/TaskJuggler/Charge.html +22 -18
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +30 -30
- data/doc/classes/TaskJuggler/ChargeSet.html +41 -37
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +231 -0
- data/doc/classes/TaskJuggler/ColumnTable.html +23 -21
- data/doc/classes/TaskJuggler/DateAttribute.html +20 -20
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +162 -0
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
- data/doc/classes/TaskJuggler/FlagListAttribute.html +42 -42
- data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FormatListAttribute.html +197 -0
- data/doc/classes/TaskJuggler/GanttChart.html +236 -207
- data/doc/classes/TaskJuggler/GanttContainer.html +46 -42
- data/doc/classes/TaskJuggler/GanttHeader.html +16 -12
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +16 -12
- data/doc/classes/TaskJuggler/GanttLine.html +28 -24
- data/doc/classes/TaskJuggler/GanttLoadStack.html +22 -18
- data/doc/classes/TaskJuggler/GanttMilestone.html +46 -42
- data/doc/classes/TaskJuggler/GanttRouter.html +104 -98
- data/doc/classes/TaskJuggler/GanttTaskBar.html +46 -42
- data/doc/classes/TaskJuggler/HTMLDocument.html +12 -12
- data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
- data/doc/classes/TaskJuggler/Interval.html +126 -120
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/JobInfo.html +284 -0
- data/doc/classes/TaskJuggler/Journal.html +197 -0
- data/doc/classes/TaskJuggler/JournalEntry.html +218 -0
- data/doc/classes/TaskJuggler/KeywordArray.html +179 -0
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +445 -396
- data/doc/classes/TaskJuggler/Limits/Limit.html +34 -30
- data/doc/classes/TaskJuggler/Limits.html +68 -62
- data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ListAttributeBase.html +207 -0
- data/doc/classes/TaskJuggler/Log.html +72 -68
- data/doc/classes/TaskJuggler/LogicalAttribute.html +38 -34
- data/doc/classes/TaskJuggler/LogicalExpression.html +16 -12
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +194 -0
- data/doc/classes/TaskJuggler/LogicalFlag.html +32 -32
- data/doc/classes/TaskJuggler/LogicalFunction.html +28 -24
- data/doc/classes/TaskJuggler/LogicalOperation.html +17 -13
- data/doc/classes/TaskJuggler/Macro.html +10 -6
- data/doc/classes/TaskJuggler/MacroParser.html +36 -36
- data/doc/classes/TaskJuggler/MacroTable.html +40 -36
- data/doc/classes/TaskJuggler/Message.html +16 -12
- data/doc/classes/TaskJuggler/MessageHandler.html +16 -12
- data/doc/classes/TaskJuggler/Navigator.html +249 -0
- data/doc/classes/TaskJuggler/OnShiftCache.html +316 -0
- data/doc/classes/TaskJuggler/Project.html +1064 -678
- data/doc/classes/TaskJuggler/ProjectFileParser.html +90 -85
- data/doc/classes/TaskJuggler/PropertyAttribute.html +194 -0
- data/doc/classes/TaskJuggler/PropertyList.html +114 -113
- data/doc/classes/TaskJuggler/PropertySet.html +355 -312
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +527 -474
- data/doc/classes/TaskJuggler/Query.html +90 -85
- data/doc/classes/TaskJuggler/RTPNavigator.html +292 -0
- data/doc/classes/TaskJuggler/RTPReport.html +301 -0
- data/doc/classes/TaskJuggler/RealFormat.html +114 -57
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +162 -0
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +87 -20
- data/doc/classes/TaskJuggler/Report.html +82 -291
- data/doc/classes/TaskJuggler/ReportBase.html +448 -0
- data/doc/classes/TaskJuggler/ReportContext.html +243 -0
- data/doc/classes/TaskJuggler/ReportTable.html +158 -129
- data/doc/classes/TaskJuggler/ReportTableCell.html +30 -26
- data/doc/classes/TaskJuggler/ReportTableColumn.html +29 -25
- data/doc/classes/TaskJuggler/ReportTableLegend.html +28 -24
- data/doc/classes/TaskJuggler/ReportTableLine.html +34 -30
- data/doc/classes/TaskJuggler/Resource.html +12 -12
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/ResourceListRE.html +49 -57
- data/doc/classes/TaskJuggler/ResourceScenario.html +126 -126
- data/doc/classes/TaskJuggler/RichText.html +52 -48
- data/doc/classes/TaskJuggler/RichTextAttribute.html +30 -30
- data/doc/classes/TaskJuggler/RichTextDocument.html +41 -37
- data/doc/classes/TaskJuggler/RichTextElement.html +274 -264
- data/doc/classes/TaskJuggler/RichTextException.html +13 -13
- data/doc/classes/TaskJuggler/RichTextParser.html +48 -47
- data/doc/classes/TaskJuggler/RichTextProtocolExample.html +52 -55
- data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +55 -10
- data/doc/classes/TaskJuggler/RichTextScanner.html +106 -245
- data/doc/classes/TaskJuggler/RichTextSnip.html +28 -24
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +381 -301
- data/doc/classes/TaskJuggler/Scenario.html +6 -6
- data/doc/classes/TaskJuggler/ScenarioData.html +40 -36
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +229 -0
- data/doc/classes/TaskJuggler/Scoreboard.html +70 -66
- data/doc/classes/TaskJuggler/Shift.html +18 -18
- data/doc/classes/TaskJuggler/ShiftAssignment.html +58 -54
- data/doc/classes/TaskJuggler/ShiftAssignments.html +82 -78
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
- data/doc/classes/TaskJuggler/SortListAttribute.html +196 -0
- data/doc/classes/TaskJuggler/SourceFileInfo.html +16 -12
- data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
- data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
- data/doc/classes/TaskJuggler/SyntaxReference.html +46 -42
- data/doc/classes/TaskJuggler/TOCEntry.html +16 -12
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +48 -33
- data/doc/classes/TaskJuggler/TableOfContents.html +22 -18
- data/doc/classes/TaskJuggler/TableReport.html +1036 -0
- data/doc/classes/TaskJuggler/Task.html +12 -12
- data/doc/classes/TaskJuggler/TaskDependency.html +16 -12
- data/doc/classes/TaskJuggler/TaskListAttribute.html +46 -46
- data/doc/classes/TaskJuggler/TaskListRE.html +49 -58
- data/doc/classes/TaskJuggler/TaskScenario.html +1270 -1180
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +100 -96
- data/doc/classes/TaskJuggler/TextParser/Rule.html +88 -84
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -12
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +10 -6
- data/doc/classes/TaskJuggler/TextParser.html +203 -140
- data/doc/classes/TaskJuggler/TextReport.html +364 -0
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +50 -42
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +16 -12
- data/doc/classes/TaskJuggler/TextScanner.html +334 -240
- data/doc/classes/TaskJuggler/TjException.html +6 -6
- data/doc/classes/TaskJuggler/TjTime.html +547 -497
- data/doc/classes/TaskJuggler/TjpExample.html +29 -25
- data/doc/classes/TaskJuggler/TjpExportRE.html +77 -97
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +3911 -3886
- data/doc/classes/TaskJuggler/UserManual.html +54 -54
- data/doc/classes/TaskJuggler/WorkingHours.html +53 -49
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -85
- data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
- data/doc/classes/TaskJuggler/XMLComment.html +21 -21
- data/doc/classes/TaskJuggler/XMLDocument.html +28 -24
- data/doc/classes/TaskJuggler/XMLElement.html +70 -58
- data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
- data/doc/classes/TaskJuggler/XMLText.html +36 -36
- data/doc/classes/TaskJuggler.html +266 -183
- data/doc/files/COPYING.html +1 -1
- data/doc/files/README.html +1 -1
- data/doc/files/lib/AccountScenario_rb.html +1 -1
- data/doc/files/lib/Account_rb.html +1 -1
- data/doc/files/lib/Allocation_rb.html +1 -1
- data/doc/files/lib/AppConfig_rb.html +1 -1
- data/doc/files/lib/AttributeBase_rb.html +11 -1
- data/doc/files/lib/AttributeDefinition_rb.html +1 -1
- data/doc/files/lib/Attributes_rb.html +1 -1
- data/doc/files/lib/{LogicalFlag_rb.html → BatchProcessor_rb.html} +8 -6
- data/doc/files/lib/Booking_rb.html +1 -1
- data/doc/files/lib/ChargeSet_rb.html +1 -1
- data/doc/files/lib/Charge_rb.html +1 -1
- data/doc/files/lib/HTMLDocument_rb.html +1 -1
- data/doc/files/lib/Interval_rb.html +1 -1
- data/doc/files/lib/Journal_rb.html +106 -0
- data/doc/files/lib/KeywordArray_rb.html +106 -0
- data/doc/files/lib/KeywordDocumentation_rb.html +1 -1
- data/doc/files/lib/Limits_rb.html +1 -1
- data/doc/files/lib/Log_rb.html +1 -1
- data/doc/files/lib/LogicalExpression_rb.html +1 -3
- data/doc/files/lib/LogicalFunction_rb.html +1 -1
- data/doc/files/lib/LogicalOperation_rb.html +1 -1
- data/doc/files/lib/MacroParser_rb.html +1 -1
- data/doc/files/lib/MacroTable_rb.html +1 -1
- data/doc/files/lib/MessageHandler_rb.html +1 -1
- data/doc/files/lib/Message_rb.html +1 -1
- data/doc/files/lib/ProjectFileParser_rb.html +5 -1
- data/doc/files/lib/Project_rb.html +5 -1
- data/doc/files/lib/PropertyList_rb.html +1 -1
- data/doc/files/lib/PropertySet_rb.html +1 -1
- data/doc/files/lib/PropertyTreeNode_rb.html +1 -1
- data/doc/files/lib/Query_rb.html +1 -1
- data/doc/files/lib/RTPNavigator_rb.html +120 -0
- data/doc/files/lib/RTPReport_rb.html +118 -0
- data/doc/files/lib/RealFormat_rb.html +1 -1
- data/doc/files/lib/ResourceScenario_rb.html +1 -1
- data/doc/files/lib/Resource_rb.html +1 -1
- data/doc/files/lib/RichTextDocument_rb.html +1 -1
- data/doc/files/lib/RichTextElement_rb.html +1 -1
- data/doc/files/lib/RichTextParser_rb.html +1 -1
- data/doc/files/lib/RichTextProtocolExample_rb.html +1 -1
- data/doc/files/lib/RichTextProtocolHandler_rb.html +1 -1
- data/doc/files/lib/RichTextScanner_rb.html +1 -1
- data/doc/files/lib/RichTextSnip_rb.html +1 -1
- data/doc/files/lib/RichTextSyntaxRules_rb.html +1 -1
- data/doc/files/lib/RichText_rb.html +1 -1
- data/doc/files/lib/ScenarioData_rb.html +1 -1
- data/doc/files/lib/Scenario_rb.html +1 -1
- data/doc/files/lib/Scoreboard_rb.html +1 -1
- data/doc/files/lib/ShiftAssignments_rb.html +1 -1
- data/doc/files/lib/ShiftScenario_rb.html +1 -1
- data/doc/files/lib/Shift_rb.html +1 -1
- data/doc/files/lib/SourceFileInfo_rb.html +1 -1
- data/doc/files/lib/SyntaxReference_rb.html +1 -1
- data/doc/files/lib/TOCEntry_rb.html +1 -1
- data/doc/files/lib/TableColumnDefinition_rb.html +1 -1
- data/doc/files/lib/TableOfContents_rb.html +1 -1
- data/doc/files/lib/TaskDependency_rb.html +1 -1
- data/doc/files/lib/TaskJuggler_rb.html +1 -1
- data/doc/files/lib/TaskScenario_rb.html +1 -1
- data/doc/files/lib/Task_rb.html +1 -1
- data/doc/files/lib/TextParser/Pattern_rb.html +1 -1
- data/doc/files/lib/TextParser/Rule_rb.html +1 -1
- data/doc/files/lib/TextParser/StackElement_rb.html +1 -1
- data/doc/files/lib/TextParser/TokenDoc_rb.html +1 -1
- data/doc/files/lib/TextParser_rb.html +1 -1
- data/doc/files/lib/TextScanner_rb.html +1 -1
- data/doc/files/lib/Tj3Config_rb.html +1 -1
- data/doc/files/lib/TjException_rb.html +1 -1
- data/doc/files/lib/TjTime_rb.html +1 -1
- data/doc/files/lib/TjpExample_rb.html +1 -1
- data/doc/files/lib/TjpSyntaxRules_rb.html +1 -1
- data/doc/files/lib/UTF8String_rb.html +1 -1
- data/doc/files/lib/UserManual_rb.html +1 -1
- data/doc/files/lib/WorkingHours_rb.html +1 -1
- data/doc/files/lib/XMLDocument_rb.html +1 -1
- data/doc/files/lib/XMLElement_rb.html +1 -1
- data/doc/files/lib/deep_copy_rb.html +106 -0
- data/doc/files/lib/ms_test_rb.html +90 -0
- data/doc/files/lib/reports/CSVFile_rb.html +1 -1
- data/doc/files/lib/reports/ColumnTable_rb.html +1 -1
- data/doc/files/lib/reports/GanttChart_rb.html +1 -1
- data/doc/files/lib/reports/GanttContainer_rb.html +1 -1
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
- data/doc/files/lib/reports/GanttHeader_rb.html +1 -1
- data/doc/files/lib/reports/GanttLine_rb.html +1 -1
- data/doc/files/lib/reports/GanttLoadStack_rb.html +1 -1
- data/doc/files/lib/reports/GanttMilestone_rb.html +1 -1
- data/doc/files/lib/reports/GanttRouter_rb.html +1 -1
- data/doc/files/lib/reports/GanttTaskBar_rb.html +1 -1
- data/doc/files/lib/reports/HTMLGraphics_rb.html +1 -1
- data/doc/files/lib/reports/{ReportElement_rb.html → Navigator_rb.html} +6 -8
- data/doc/files/lib/reports/ReportBase_rb.html +106 -0
- data/doc/files/lib/reports/ReportContext_rb.html +106 -0
- data/doc/files/lib/reports/ReportTableCell_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableColumn_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableLegend_rb.html +1 -1
- data/doc/files/lib/reports/ReportTableLine_rb.html +1 -1
- data/doc/files/lib/reports/ReportTable_rb.html +1 -1
- data/doc/files/lib/reports/Report_rb.html +8 -2
- data/doc/files/lib/reports/ResourceListRE_rb.html +2 -2
- data/doc/files/lib/reports/{ReportTableElement_rb.html → TableReport_rb.html} +7 -5
- data/doc/files/lib/reports/TaskListRE_rb.html +2 -2
- data/doc/files/lib/reports/TextReport_rb.html +116 -0
- data/doc/files/lib/reports/TjpExportRE_rb.html +2 -2
- data/doc/files/lib/taskjuggler3_rb.html +61 -56
- data/doc/files/lib/tj3man_rb.html +1 -1
- data/doc/fr_class_index.html +41 -3
- data/doc/fr_file_index.html +21 -5
- data/doc/fr_method_index.html +1069 -959
- data/examples/ContactList.html +1467 -0
- data/examples/Deliveries.html +485 -0
- data/examples/Development.html +2525 -0
- data/examples/Overview.html +747 -0
- data/examples/Resource Graph.html +616 -0
- data/examples/tutorial.tjp +63 -67
- data/lib/AttributeBase.rb +27 -31
- data/lib/AttributeDefinition.rb +12 -7
- data/lib/Attributes.rb +134 -34
- data/lib/Interval.rb +2 -0
- data/lib/Journal.rb +44 -0
- data/lib/{LogicalFlag.rb → KeywordArray.rb} +5 -13
- data/lib/KeywordDocumentation.rb +84 -47
- data/lib/Limits.rb +7 -5
- data/lib/LogicalExpression.rb +1 -1
- data/lib/LogicalOperation.rb +33 -0
- data/lib/Project.rb +313 -99
- data/lib/ProjectFileParser.rb +88 -11
- data/lib/PropertyList.rb +2 -1
- data/lib/PropertySet.rb +13 -4
- data/lib/PropertyTreeNode.rb +34 -15
- data/lib/Query.rb +2 -1
- data/lib/RTPNavigator.rb +53 -0
- data/lib/RTPReport.rb +62 -0
- data/lib/RealFormat.rb +28 -10
- data/lib/RichTextElement.rb +18 -12
- data/lib/RichTextParser.rb +1 -0
- data/lib/RichTextProtocolExample.rb +8 -11
- data/lib/RichTextProtocolHandler.rb +11 -1
- data/lib/RichTextScanner.rb +308 -164
- data/lib/RichTextSyntaxRules.rb +24 -0
- data/lib/TableColumnDefinition.rb +5 -1
- data/lib/TaskJuggler.rb +3 -2
- data/lib/TaskScenario.rb +123 -31
- data/lib/TextParser.rb +14 -3
- data/lib/TextScanner.rb +210 -34
- data/lib/Tj3Config.rb +1 -1
- data/lib/TjTime.rb +15 -0
- data/lib/TjpExample.rb +1 -1
- data/lib/TjpSyntaxRules.rb +674 -473
- data/lib/WorkingHours.rb +1 -1
- data/lib/XMLElement.rb +11 -3
- data/lib/deep_copy.rb +72 -0
- data/lib/ms_test.rb +27 -0
- data/lib/reports/ColumnTable.rb +7 -5
- data/lib/reports/GanttChart.rb +60 -34
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttRouter.rb +7 -5
- data/lib/reports/Navigator.rb +72 -0
- data/lib/reports/Report.rb +58 -73
- data/lib/reports/ReportBase.rb +241 -0
- data/lib/reports/ReportContext.rb +41 -0
- data/lib/reports/ReportTable.rb +7 -2
- data/lib/reports/ReportTableCell.rb +3 -3
- data/lib/reports/ResourceListRE.rb +19 -26
- data/lib/reports/{ReportTableElement.rb → TableReport.rb} +297 -97
- data/lib/reports/TaskListRE.rb +16 -24
- data/lib/reports/TextReport.rb +87 -0
- data/lib/reports/TjpExportRE.rb +55 -50
- data/lib/taskjuggler3.rb +6 -1
- data/manual/Getting_Started +57 -6
- data/manual/How_To_Contribute +2 -4
- data/manual/Intro +2 -2
- data/manual/Reporting_Bugs +9 -2
- data/manual/Rich_Text_Attributes +41 -0
- data/manual/Tutorial +219 -173
- data/tasks/test.rake +3 -0
- data/test/TestSuite/CSV-Reports/celltext.tjp +2 -1
- data/test/TestSuite/CSV-Reports/resourcereport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortByTree.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +2 -1
- data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
- data/test/TestSuite/HTML-Reports/depArrows.tjp +72 -0
- data/test/TestSuite/HTML-Reports/reference-export.html +187 -0
- data/test/TestSuite/HTML-Reports/reference.tjp +21 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -1
- data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
- data/test/TestSuite/Scheduler/Correct/Container-2.tjp +37 -0
- data/test/TestSuite/Scheduler/Correct/Container.tjp +40 -0
- data/test/TestSuite/Scheduler/Correct/Depends.tjp +9 -14
- data/test/TestSuite/Scheduler/Correct/Duration.tjp +2 -1
- data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +20 -29
- data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -13
- data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +6 -5
- data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +10 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +9 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +9 -6
- data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +13 -10
- data/test/TestSuite/Scheduler/Correct/Precedes.tjp +9 -14
- data/test/TestSuite/Scheduler/Correct/Shift.tjp +9 -8
- data/test/TestSuite/Scheduler/Correct/checks.tji +4 -0
- data/test/TestSuite/Scheduler/Errors/weak_end_dep.tjp +16 -0
- data/test/TestSuite/Scheduler/Errors/weak_start_dep.tjp +16 -0
- data/test/TestSuite/Syntax/Correct/Account.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/AutoID.tjp +21 -0
- data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Caption.tjp +7 -6
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +7 -4
- data/test/TestSuite/Syntax/Correct/Comments.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/CompletedWork.tji +11 -19
- data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +4 -3
- data/test/TestSuite/Syntax/Correct/Export.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Flags.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +18 -0
- data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +16 -0
- data/test/TestSuite/Syntax/Correct/Period.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/RawHTML.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Reports.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tji +2 -0
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +23 -0
- data/test/TestSuite/Syntax/Correct/Responsible.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Simple.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/String.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +92 -70
- data/test/TestSuite/Syntax/Errors/bad_comment.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/bad_include.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/bad_time_zone.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/bad_timing_res.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/container_attribute.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +3 -2
- data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/eof_in_istring1.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring2.tjp +5 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring3.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring4.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/eof_in_istring5.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/include_recursion.tji +1 -0
- data/test/TestSuite/Syntax/Errors/include_recursion.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/junk_after_cut.tjp +6 -0
- data/test/TestSuite/Syntax/Errors/navigator_exists.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/report_end.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/report_exists.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/report_start.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sort_direction.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/too_large_timing_res.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +1 -1
- data/test/TestSuite/Syntax/Errors/unknown_task.tjp +1 -1
- data/test/all.rb +1 -16
- data/test/test_CSV-Reports.rb +8 -5
- data/test/test_Query.rb +2 -2
- data/test/test_RichText.rb +95 -0
- data/test/test_Scheduler.rb +8 -4
- data/test/test_Syntax.rb +8 -4
- data/test/test_deep_copy.rb +83 -0
- metadata +549 -487
- data/benchmarks/UTF-8-Strings.rb +0 -58
- data/doc/classes/TaskJuggler/ReportElement.html +0 -1070
- data/doc/classes/TaskJuggler/ReportTableElement.html +0 -644
- data/lib/reports/ReportElement.rb +0 -427
- data/test/TestSuite/Syntax/Correct/csvtest +0 -16
- data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +0 -10
- data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +0 -10
- data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +0 -10
data/manual/Tutorial
CHANGED
@@ -9,31 +9,33 @@ demonstrates some of the commonly used features of TaskJuggler. The
|
|
9
9
|
complete example can be downloaded
|
10
10
|
[http://www.taskjuggler.org/tj3/examples/tutorial.tjp here]. The
|
11
11
|
resulting reports can be found
|
12
|
-
[http://www.taskjuggler.org/tj3/examples/
|
12
|
+
[http://www.taskjuggler.org/tj3/examples/Overview.html
|
13
13
|
here].
|
14
14
|
|
15
15
|
=== Starting the project ===
|
16
16
|
|
17
17
|
To start a TaskJuggler project file you need to use the [[project]]
|
18
|
-
property. It tells TaskJuggler the
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
to fit
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
18
|
+
property. It tells TaskJuggler the name of your project and a start
|
19
|
+
and end date. The start and end dates don't need to be exact, but must
|
20
|
+
fit all tasks of the project. It is the time interval the TaskJuggler
|
21
|
+
scheduler will use to fit the tasks in. So, make it large enough for
|
22
|
+
all your tasks to fit in. But don't make it too large, because this
|
23
|
+
will result in longer scheduling times and higher memory consumption.
|
24
|
+
|
25
|
+
<[example file="tutorial" tag="header1"]>
|
26
|
+
|
27
|
+
All TaskJuggler properties have two required attributes, a unique ID
|
28
|
+
and a name, and a set of optional attributes. The name must always be
|
29
|
+
specified. The ID can be omitted if you never have to reference the
|
30
|
+
property from another context. If you omit the ID, TaskJuggler will
|
31
|
+
automatically generate a unique ID. The other optional attributes are
|
32
|
+
always enclosed in curly braces. If no optional attributes are
|
33
|
+
specified, the braces can be omitted as well. In this example we will
|
34
|
+
introduce a number of there attributes that may or may not matter to
|
35
|
+
you. If you don't see an immediate need for a specific attribute, feel
|
36
|
+
free to ignore it for now. You can always come back to them later. A
|
37
|
+
full list of the supported attributes can be found in the
|
38
|
+
''attributes'' section of the [[project]] property documentation.
|
37
39
|
|
38
40
|
Attributes always start with a keyword that is unique in the context.
|
39
41
|
A context is delimited by a set of curly braces that enclose optional
|
@@ -46,7 +48,7 @@ of this manual.
|
|
46
48
|
|
47
49
|
The [[currency]] attribute specifies the unit of currency values.
|
48
50
|
|
49
|
-
[
|
51
|
+
<[example file="tutorial" tag="currency"]>
|
50
52
|
|
51
53
|
Because each culture has its own way of specifying dates and numbers,
|
52
54
|
the format for these are configurable. Use the [[timeformat]]
|
@@ -55,7 +57,7 @@ for reports, it does not affect the way you specify dates in the
|
|
55
57
|
project files. Here you always need to use the [[date ISO standardized
|
56
58
|
notation]].
|
57
59
|
|
58
|
-
[
|
60
|
+
<[example file="tutorial" tag="formats"]>
|
59
61
|
|
60
62
|
We also can specify the way numbers or currency values are shown in
|
61
63
|
the reports. Use the [[numberformat]] and [[currencyformat]]
|
@@ -69,7 +71,7 @@ defined result for the reports in this example we've picked a specific
|
|
69
71
|
date that fits our purpose here. In your projects, you would use
|
70
72
|
[[now]] to generate status reports for the date you specify.
|
71
73
|
|
72
|
-
[
|
74
|
+
<[example file="tutorial" tag="now"]>
|
73
75
|
|
74
76
|
In this tutorial we would like to compare two scenarios of the
|
75
77
|
project. The first scenario is the one that we have planned. The
|
@@ -85,13 +87,13 @@ impact of certain changes to the plan of record. We'll see further
|
|
85
87
|
below, how to specify values for a scenario and how to compare the
|
86
88
|
results.
|
87
89
|
|
88
|
-
[
|
90
|
+
<[example file="tutorial" tag="scenario"]>
|
89
91
|
|
90
92
|
To summarize the above, let's look at the complete header again.
|
91
93
|
Don't get scared by the wealth of attributes here. They are all
|
92
94
|
optional and mostly used to illustrate the flexibility of TaskJuggler.
|
93
95
|
|
94
|
-
[
|
96
|
+
<[example file="tutorial" tag="header2"]>
|
95
97
|
|
96
98
|
=== Global Attributes ===
|
97
99
|
|
@@ -107,7 +109,7 @@ further below, what this actually means. Right after the project
|
|
107
109
|
property we are at top-level scope, so this is the default for all
|
108
110
|
following properties.
|
109
111
|
|
110
|
-
[
|
112
|
+
<[example file="tutorial" tag="rate"]>
|
111
113
|
|
112
114
|
The [[rate]] attribute can be used to specify the daily costs of
|
113
115
|
resources. All subsequent resources will get this rate. But it can be
|
@@ -117,7 +119,7 @@ You may also want to tell TaskJuggler about holidays that affect
|
|
117
119
|
all resources. Global vacations are time periods where TaskJuggler
|
118
120
|
does not do any resource assignments to tasks.
|
119
121
|
|
120
|
-
[
|
122
|
+
<[example file="tutorial" tag="vacation"]>
|
121
123
|
|
122
124
|
Use the [[vacation]] attribute to define a global vacation. Global
|
123
125
|
vacations must have a name and a date or date range. This is slightly
|
@@ -133,7 +135,7 @@ Macros are text patterns that can be defined once and inserted
|
|
133
135
|
multiple times in the project file. A [[macro]] always has a name and the
|
134
136
|
text pattern is enclosed by square brackets.
|
135
137
|
|
136
|
-
[
|
138
|
+
<[example file="tutorial" tag="macro"]>
|
137
139
|
|
138
140
|
To use the macro you simply have to write
|
139
141
|
''''${allocate_developers}'''' and TaskJuggler will replace the term
|
@@ -149,7 +151,7 @@ generate reports of the TaskJuggler results, you can use the flags to
|
|
149
151
|
filter out information and limit the report to exactly those details
|
150
152
|
that you want to have included.
|
151
153
|
|
152
|
-
[
|
154
|
+
<[example file="tutorial" tag="flags"]>
|
153
155
|
|
154
156
|
This is flag declaration. All [[flags]] need to be declared, before they
|
155
157
|
can be used to avoid hard to find errors due to misspelled flag
|
@@ -165,15 +167,16 @@ In order not to get lost with all the various amounts, we declare 3
|
|
165
167
|
for the development costs, one for the documentation costs, and one
|
166
168
|
for the customer payments.
|
167
169
|
|
168
|
-
[
|
170
|
+
<[example file="tutorial" tag="accounts"]>
|
169
171
|
|
170
172
|
Like all TaskJuggler properties, the account needs an ID and a name.
|
171
|
-
IDs may only consist of
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
or double
|
173
|
+
IDs may only consist of the characters a to z, A to Z and the
|
174
|
+
underscore. All but the first character may also be digits 0 to 9.
|
175
|
+
All global TaskJuggler properties have IDs. The ID is necessary so
|
176
|
+
that we can reference the property again later without having to write
|
177
|
+
the potentially much longer name. The name may contain space
|
178
|
+
characters and therefore has to be enclosed with single or double
|
179
|
+
quotes.
|
177
180
|
|
178
181
|
Accounts can be grouped by nesting them. You can use this feature to
|
179
182
|
create sets of accounts. Such sets can then be balanced against each
|
@@ -181,7 +184,7 @@ other to create a profit and loss analysis. When you have specified
|
|
181
184
|
accounts in your project, you must at least define one default
|
182
185
|
[[balance]].
|
183
186
|
|
184
|
-
[
|
187
|
+
<[example file="tutorial" tag="balance"]>
|
185
188
|
|
186
189
|
=== Declaring Resources ===
|
187
190
|
|
@@ -189,7 +192,7 @@ While the above introduced account property is only needed if you
|
|
189
192
|
want to do a P&L analysis, resources are usually found in almost any
|
190
193
|
project.
|
191
194
|
|
192
|
-
[
|
195
|
+
<[example file="tutorial" tag="resources"]>
|
193
196
|
|
194
197
|
This snippet of the example shows the use of the [[resource
|
195
198
|
resource property]]. Just like accounts, resources always have an ID
|
@@ -242,7 +245,7 @@ complicated, we break it down into several subtasks. We need to do a
|
|
242
245
|
specification, develop the software, test the software, and write a
|
243
246
|
manual. Using the [[task task property]], thiis would look as follows:
|
244
247
|
|
245
|
-
[
|
248
|
+
<[example file="tutorial" tag="task1"]>
|
246
249
|
|
247
250
|
Similar to resources, tasks are declared by using the task keyword
|
248
251
|
followed by an ID and a name string. All TaskJuggler properties have
|
@@ -263,7 +266,7 @@ some subtasks later on.
|
|
263
266
|
We consider the specification task simple enough, so we don't have to
|
264
267
|
break it into further subtasks. So let's add some more details to it.
|
265
268
|
|
266
|
-
[
|
269
|
+
<[example file="tutorial" tag="spec"]>
|
267
270
|
|
268
271
|
The [[effort]] to complete the task is specified with 20 man-days.
|
269
272
|
Alternatively we could have used the [[length]] attribute or
|
@@ -286,7 +289,7 @@ sub tasks.
|
|
286
289
|
Here we use the allocate_developers macro mentioned above. The
|
287
290
|
expression ''''${allocate_developers}'''' is simply expanded to
|
288
291
|
|
289
|
-
[
|
292
|
+
<[example file="tutorial" tag="expandedmacro"]>
|
290
293
|
|
291
294
|
If you need to [[allocate]] the same bunch of people to several tasks,
|
292
295
|
the macro saves you some typing. You could have written the allocate
|
@@ -328,7 +331,7 @@ dependency specifications of relative IDs.
|
|
328
331
|
The software development task is still too complex to specify it
|
329
332
|
directly. So we split it further into subtasks.
|
330
333
|
|
331
|
-
[
|
334
|
+
<[example file="tutorial" tag="software"]>
|
332
335
|
|
333
336
|
We use the [[priority]] attribute to mark the importance of
|
334
337
|
the tasks. 500 is the default priority of top-level tasks. Setting the
|
@@ -339,7 +342,7 @@ if specified before the subtasks' declaration. So all subtasks of
|
|
339
342
|
software have a priority of 1000 as well, unless they have their own
|
340
343
|
priority definition.
|
341
344
|
|
342
|
-
[
|
345
|
+
<[example file="tutorial" tag="database"]>
|
343
346
|
|
344
347
|
The work on the database coupling should not start before the
|
345
348
|
specification has been finished. So we again use the [[depends]]
|
@@ -349,7 +352,7 @@ scope of the enclosing software task. The second one is to get into
|
|
349
352
|
the AcSo scope that contains the spec tasks. For a change, we
|
350
353
|
[[allocate]] resources directly without using a macro.
|
351
354
|
|
352
|
-
[
|
355
|
+
<[example file="tutorial" tag="gui"]>
|
353
356
|
|
354
357
|
TaskJuggler can schedule your project for two different [[scenario
|
355
358
|
scenarios]]. We have called the first scenario ''''plan'''' scenario
|
@@ -366,7 +369,7 @@ man-days. It turned out that we actually needed 40 man-days. By
|
|
366
369
|
prefixing the [[effort]] attribute with ''''delayed:'''', the
|
367
370
|
effort value for the ''''delayed'''' scenario can be specified.
|
368
371
|
|
369
|
-
[
|
372
|
+
<[example file="tutorial" tag="backend"]>
|
370
373
|
|
371
374
|
By default, TaskJuggler assumes that all tasks are on schedule.
|
372
375
|
Sometimes you want to generate reports that show how much of a task
|
@@ -378,7 +381,7 @@ of the task have been completed up to the current date. In our case
|
|
378
381
|
the back-end implementation is slightly ahead of schedule as we will
|
379
382
|
see from the report.
|
380
383
|
|
381
|
-
[
|
384
|
+
<[example file="tutorial" tag="test"]>
|
382
385
|
|
383
386
|
The software testing task has been split up into an alpha and
|
384
387
|
a beta test task. The interesting thing here is, that efforts can not
|
@@ -398,7 +401,7 @@ for the lease on the building and the equipment. To compensate this,
|
|
398
401
|
we charge a daily rate of USD 170 per day using the [[charge]]
|
399
402
|
attribute.
|
400
403
|
|
401
|
-
[
|
404
|
+
<[example file="tutorial" tag="charge"]>
|
402
405
|
|
403
406
|
Since we specify the attribute for the top-level task before we
|
404
407
|
declare any subtasks, this attribute will be inherited by all subtasks
|
@@ -406,7 +409,7 @@ and their subtasks and so on. The only exception is the writing of the
|
|
406
409
|
manual. We need to change the chargeset for this task again, as it is
|
407
410
|
also a subtask of AcSo and we want to use a different account for it.
|
408
411
|
|
409
|
-
[
|
412
|
+
<[example file="tutorial" tag="manual"]>
|
410
413
|
|
411
414
|
=== Specifying Milestones ===
|
412
415
|
|
@@ -420,7 +423,7 @@ progress of the project.
|
|
420
423
|
TaskJuggler has support for milestones as well. Milestones are leaf
|
421
424
|
tasks that don't have a duration specification.
|
422
425
|
|
423
|
-
[
|
426
|
+
<[example file="tutorial" tag="deliveries"]>
|
424
427
|
|
425
428
|
We have put all important milestones of the project as subtasks of the
|
426
429
|
deliveries task. This way they show up nicely grouped in the reports.
|
@@ -452,128 +455,171 @@ Now the project has been completely specified. Stopping here would
|
|
452
455
|
result in a valid TaskJuggler file that could be processed and
|
453
456
|
scheduled. But no reports would be generated to visualize the results.
|
454
457
|
|
455
|
-
===
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
[[
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
report
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
458
|
+
=== Visualizing the Project ===
|
459
|
+
|
460
|
+
To see and share the project data you reports can be generated. You
|
461
|
+
can generate any number of reports and you can select from a variety
|
462
|
+
of report types and output formats. To have a report generated after
|
463
|
+
the project scheduling has been completed, you need include a report
|
464
|
+
definition into the project description. Report definitions are
|
465
|
+
properties that are very similar to the task and resource properties
|
466
|
+
that you are already familiar with. Just like these, report
|
467
|
+
definitions can be nested to take advantage of the attribute
|
468
|
+
inheritance mechanism. Every report definition starts with the type
|
469
|
+
of the report. Each type of report has a particular focus. A
|
470
|
+
[[taskreport]] lists the project data in the form of a task list.
|
471
|
+
A [[resourcereport]] does the same in form of a resource list. For a
|
472
|
+
more generic report, you can use the [[textreport]].
|
473
|
+
|
474
|
+
A ''''textreport'''' does not directly present the data in form of a
|
475
|
+
task or resource list. It just consists of text building blocks that
|
476
|
+
are described by [[Rich_Text_Attributes Rich Text]]. There can be a
|
477
|
+
building block at the top and bottom, as well as three columns in
|
478
|
+
the center. The column are called ''''left'''', ''''center'''' and
|
479
|
+
''''right''''.
|
480
|
+
|
481
|
+
For our first report, we'll just use the center column for now. Like
|
482
|
+
every property, you need to specify a name. This name will be the
|
483
|
+
base name of the generated report file. Depending on the output
|
484
|
+
format, the proper suffix is appended. For this report, we only chose
|
485
|
+
to generate a web page in HTML format. There is no default format
|
486
|
+
defined for reports. If the [[formats]] attribute is not specified,
|
487
|
+
no output file will be generated for the report specification.
|
488
|
+
|
489
|
+
This may seem odd at first glance since TaskJuggler syntax always
|
490
|
+
tries to use the most compact and readable syntax for the common
|
491
|
+
case. As you will see in a minute, reports may be composed of several
|
492
|
+
report specifications. One report specification can include the
|
493
|
+
output of another report specification as well. In this case, the
|
494
|
+
included report does not need to generate it's own file. The output
|
495
|
+
will be included within the output of another report specification.
|
496
|
+
In case of such composed reports, the output format specification of
|
497
|
+
the top-level format will be used for all included reports as well.
|
498
|
+
|
499
|
+
<[example file="tutorial" tag="overview_report1"]>
|
500
|
+
|
501
|
+
Web browsers usually look for a file called ''''Overview.html'''' when
|
502
|
+
they are pointed to a directory. For the main report, we choose the
|
503
|
+
file name ''''Overview'''' and the format ''''html''''.
|
504
|
+
|
505
|
+
As we've mentioned before, the sections of a ''''textreport'''' are
|
506
|
+
defined in Rich Text format. Here we use a so called block generator
|
507
|
+
to include the HTML output of another report definition. The
|
508
|
+
''''report'''' block generator allows us to compose reports by
|
509
|
+
combining their output into a single report. You must provide the
|
510
|
+
''''id'''' parameter to specify which report definition you would
|
511
|
+
like to use. In this case, it is a report definition with the ID
|
512
|
+
''''overview''''. Note that generator parameters need to be enclosed
|
513
|
+
in single or double quotes. We are essentially marking a string
|
514
|
+
within a string. This can only work out, if we don't use the same
|
515
|
+
parameter for both. Let's define this report first.
|
516
|
+
|
517
|
+
<[example file="tutorial" tag="overview1"]>
|
518
|
+
|
519
|
+
Instead of another [[textreport]] definition we are now using a
|
520
|
+
[[taskreport]]. A task report contains a list of tasks in a table
|
521
|
+
structure. By default, it contains all tasks of the project. As we
|
522
|
+
will see later on, we can use filter expressions to limit the content
|
523
|
+
to a well defined subset of tasks. The table contains a line for each
|
524
|
+
task and comes by default with a few columns like the name of the
|
525
|
+
task, and the start and end dates. For this project overview report,
|
526
|
+
we like to have also the effort for each task, the duration, the
|
527
|
+
effort, the cost and revenue numbers included. To top it off, we also
|
528
|
+
include a column with a Gantt chart.
|
529
|
+
|
530
|
+
By including the cost and revenue column, we are able to do a simple
|
531
|
+
profit and loss analysis on the project. This P&L is computed from
|
532
|
+
the accounts that we have provided above. For this to work, we need
|
533
|
+
to tell TaskJuggler which accounts are cost accounts and which are
|
534
|
+
revenue accounts. We have already conveniently grouped the accounts
|
535
|
+
and the [[balance]] attribute specifies which accounts are used for
|
536
|
+
the P&L in this report.
|
537
|
+
|
538
|
+
<[example file="tutorial" tag="overview2"]>
|
539
|
+
|
540
|
+
We have chosen to include the start and end date of each task in the
|
541
|
+
report. By default, TaskJuggler lists dates as day, month and year.
|
542
|
+
We like the format to be similar to the format that the project
|
543
|
+
syntax uses, but also like to include the weekday. To change the date
|
544
|
+
format, the [[timeformat]] attribute can be used.
|
545
|
+
|
546
|
+
The project will last a few weeks. The most convenient unit to list
|
547
|
+
efforts in is man or resource days. The [[loadunit]] attribute tells
|
548
|
+
TaskJuggler to list the load of each task or resource in man days.
|
549
|
+
Since this will just be a number without a unit, it is advisable to
|
550
|
+
include a small hint for the reader that these values are indeed man
|
551
|
+
or resource days. The caption of the table is a convenient place to
|
552
|
+
put this information by using the [[caption]] attribute.
|
553
|
+
|
554
|
+
<[example file="tutorial" tag="overview3"]>
|
555
|
+
|
556
|
+
The ''''taskreport'''' can contain more than just the table. It is
|
557
|
+
not as flexible as the ''''textreport'''', but still has support for
|
558
|
+
a header and footer. Let's look at the header first. We not only
|
559
|
+
like to put a headline here, but several paragraphs of text. The
|
560
|
+
[[header]] attribute is a [[Rich_Text_Attributes Rich Text]]
|
561
|
+
attribute just like [[center]]. We could enclose it in single or
|
562
|
+
double quotes again. But for Strings that span multiple lines and
|
563
|
+
potentially include single or double quotes as well, scissor-marks or
|
564
|
+
cut-here-marks are recommended. These marks look like a pair of
|
565
|
+
scissors that cut along a dashed line. Use ''''-8<-'''' to begin a
|
566
|
+
string and ''''->8-'''' to terminate it. The opening cut mark must be
|
567
|
+
immediately followed by a line break. The indentation of the
|
568
|
+
following line defines the indentation that will be ignored for all
|
569
|
+
lines of the string. The following lines must have at least the same
|
570
|
+
indentation. The indentation that exceeds the indentation of the
|
571
|
+
first line will be kept in the resulting string. With this feature,
|
572
|
+
you can define multi-line Rich Text strings without disturbing the
|
573
|
+
indentation structure of your project file.
|
574
|
+
|
575
|
+
<[example file="tutorial" tag="overview4"]>
|
576
|
+
|
577
|
+
Section headers are surrounded by ''''<nowiki>==</nowiki>''''. The
|
578
|
+
number of equal signs, define the section level. You need to start
|
579
|
+
with two equal characters for the first level. Text that is surrounded
|
580
|
+
by blank lines will create a paragraph. Bullet lists can be made by
|
581
|
+
starting a line with a ''''#'''' character. Remember that the
|
582
|
+
indentation of cut-mark strings will be ignored. Your ''''#''''
|
583
|
+
character must not be the first character in the line as long it is
|
584
|
+
only preceded by the exact same number of blanks as the first line of
|
585
|
+
the cut-mark string.
|
586
|
+
|
587
|
+
If you want to reference other reports from this report, you can
|
588
|
+
include the file name of this report by ''''<nowiki>[[</nowiki>''''
|
589
|
+
and ''''<nowiki>]]</nowiki>''''. Don't include the extension of the
|
590
|
+
file name, it will be automatically appended. The actual
|
591
|
+
representation of the reference depends on the chosen output format.
|
592
|
+
For HTML output, the reference is a click-able link to the referenced
|
593
|
+
report file.
|
594
|
+
|
595
|
+
For the [[footer]] we can proceed accordingly. We just add a few more
|
596
|
+
paragraphs of text the describe certain aspects of the project. By
|
597
|
+
putting it all together, we end up with the following report
|
598
|
+
definition.
|
599
|
+
|
600
|
+
<[example file="tutorial" tag="overview"]>
|
601
|
+
|
602
|
+
The generated report can be found
|
603
|
+
[http://www.taskjuggler.org/tj3/examples/Overview.html
|
604
|
+
here]. It servers as an entry page for the other reports. While it
|
605
|
+
already contains some references, a navigator bar would be handy as
|
606
|
+
well. Fortunately, there is a block generator called 'navigator' to
|
607
|
+
take care of this. But before we can include the navigator in the
|
608
|
+
report, we need to define it first.
|
609
|
+
|
610
|
+
<[example file="tutorial" tag="navigator"]>
|
611
|
+
|
612
|
+
[[hidereport]] is a filter attribute. The logical expression
|
613
|
+
determines which reports will be included in the navigator bar. A
|
614
|
+
logical expression of 0 means hide no reports, so all are included.
|
615
|
+
|
616
|
+
The best place to put a navigator bar in the report is right at the
|
617
|
+
top. We use two horizontal lines to separate the navigator from the
|
618
|
+
main headline and the rest of the report.
|
619
|
+
''''<nowiki>----</nowiki>'''' at the begin of the line create such a
|
620
|
+
horizontal separation line.
|
621
|
+
|
622
|
+
<[example file="tutorial" tag="overview_report2"]>
|
623
|
+
|
624
|
+
|
579
625
|
|
data/tasks/test.rake
CHANGED