taskjuggler 0.0.2 → 0.0.3
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/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