taskjuggler 0.0.3 → 0.0.4
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/benchmarks/UTF-8-Strings.rb +58 -0
- data/data/css/tjmanual.css +52 -0
- data/data/css/tjreport.css +195 -0
- data/data/icons/details.png +0 -0
- data/data/icons/flag-green.png +0 -0
- data/data/icons/flag-red.png +0 -0
- data/data/icons/flag-yellow.png +0 -0
- data/data/icons/resource.png +0 -0
- data/data/icons/resourcegroup.png +0 -0
- data/data/icons/task.png +0 -0
- data/data/icons/taskgroup.png +0 -0
- data/data/icons/trend-down.png +0 -0
- data/data/icons/trend-flat.png +0 -0
- data/data/icons/trend-up.png +0 -0
- data/data/scripts/wz_tooltip.js +1301 -0
- data/doc/classes/AppConfig.html +298 -230
- data/doc/classes/Arguments.html +8 -8
- data/doc/classes/Object.html +7 -7
- data/doc/classes/String.html +89 -89
- data/doc/classes/TaskJuggler.html +396 -264
- data/doc/classes/TaskJuggler/Account.html +18 -18
- data/doc/classes/TaskJuggler/AccountAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
- data/doc/classes/TaskJuggler/Allocation.html +30 -30
- data/doc/classes/TaskJuggler/AllocationAttribute.html +26 -26
- data/doc/classes/TaskJuggler/AttributeBase.html +227 -115
- data/doc/classes/TaskJuggler/AttributeDefinition.html +6 -6
- data/doc/classes/TaskJuggler/BatchProcessor.html +117 -83
- data/doc/classes/TaskJuggler/Booking.html +18 -18
- data/doc/classes/TaskJuggler/BookingListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/BooleanAttribute.html +26 -26
- data/doc/classes/TaskJuggler/CSVFile.html +24 -24
- data/doc/classes/TaskJuggler/CellSettingPattern.html +201 -0
- data/doc/classes/TaskJuggler/CellSettingPatternList.html +253 -0
- data/doc/classes/TaskJuggler/Charge.html +18 -18
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ChargeSet.html +37 -37
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +26 -26
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +20 -20
- data/doc/classes/TaskJuggler/ColumnTable.html +40 -40
- data/doc/classes/TaskJuggler/DateAttribute.html +54 -15
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +10 -10
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
- data/doc/classes/TaskJuggler/FlagListAttribute.html +43 -43
- data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
- data/doc/classes/TaskJuggler/FormatListAttribute.html +21 -21
- data/doc/classes/TaskJuggler/GanttChart.html +48 -48
- data/doc/classes/TaskJuggler/GanttContainer.html +42 -42
- data/doc/classes/TaskJuggler/GanttHeader.html +12 -12
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +12 -12
- data/doc/classes/TaskJuggler/GanttLine.html +24 -24
- data/doc/classes/TaskJuggler/GanttLoadStack.html +18 -18
- data/doc/classes/TaskJuggler/GanttMilestone.html +42 -42
- data/doc/classes/TaskJuggler/GanttRouter.html +24 -24
- data/doc/classes/TaskJuggler/GanttTaskBar.html +42 -42
- data/doc/classes/TaskJuggler/HTMLDocument.html +13 -13
- data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
- data/doc/classes/TaskJuggler/Interval.html +57 -57
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/JobInfo.html +68 -12
- data/doc/classes/TaskJuggler/Journal.html +266 -20
- data/doc/classes/TaskJuggler/JournalEntry.html +79 -23
- data/doc/classes/TaskJuggler/JournalEntryList.html +454 -0
- data/doc/classes/TaskJuggler/KeywordArray.html +10 -10
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +171 -170
- data/doc/classes/TaskJuggler/Limits.html +36 -36
- data/doc/classes/TaskJuggler/Limits/Limit.html +30 -30
- data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ListAttributeBase.html +20 -20
- data/doc/classes/TaskJuggler/Log.html +145 -107
- data/doc/classes/TaskJuggler/LogicalAttribute.html +65 -36
- data/doc/classes/TaskJuggler/LogicalExpression.html +61 -24
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +20 -20
- data/doc/classes/TaskJuggler/LogicalFlag.html +31 -51
- data/doc/classes/TaskJuggler/LogicalFunction.html +64 -53
- data/doc/classes/TaskJuggler/LogicalOperation.html +103 -55
- data/doc/classes/TaskJuggler/Macro.html +6 -6
- data/doc/classes/TaskJuggler/MacroParser.html +36 -36
- data/doc/classes/TaskJuggler/MacroTable.html +37 -37
- data/doc/classes/TaskJuggler/Message.html +12 -12
- data/doc/classes/TaskJuggler/MessageHandler.html +32 -20
- data/doc/classes/TaskJuggler/Navigator.html +110 -46
- data/doc/classes/TaskJuggler/NavigatorElement.html +449 -0
- data/doc/classes/TaskJuggler/OnShiftCache.html +24 -24
- data/doc/classes/TaskJuggler/Project.html +1158 -893
- data/doc/classes/TaskJuggler/ProjectFileParser.html +94 -91
- data/doc/classes/TaskJuggler/PropertyAttribute.html +20 -20
- data/doc/classes/TaskJuggler/PropertyList.html +225 -155
- data/doc/classes/TaskJuggler/PropertySet.html +375 -332
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +750 -510
- data/doc/classes/TaskJuggler/Query.html +404 -139
- data/doc/classes/TaskJuggler/{RTPNavigator.html → RTFNavigator.html} +57 -56
- data/doc/classes/TaskJuggler/RTFQuery.html +343 -0
- data/doc/classes/TaskJuggler/{RTPReport.html → RTFReport.html} +70 -67
- data/doc/classes/TaskJuggler/RealFormat.html +18 -18
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +10 -10
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +107 -40
- data/doc/classes/TaskJuggler/RemoteServiceManager.html +335 -0
- data/doc/classes/TaskJuggler/Report.html +66 -64
- data/doc/classes/TaskJuggler/ReportBase.html +112 -123
- data/doc/classes/TaskJuggler/ReportContext.html +43 -38
- data/doc/classes/TaskJuggler/ReportServer.html +320 -0
- data/doc/classes/TaskJuggler/ReportTable.html +42 -42
- data/doc/classes/TaskJuggler/ReportTableCell.html +221 -129
- data/doc/classes/TaskJuggler/ReportTableColumn.html +27 -27
- data/doc/classes/TaskJuggler/ReportTableLegend.html +24 -24
- data/doc/classes/TaskJuggler/ReportTableLine.html +126 -80
- data/doc/classes/TaskJuggler/Resource.html +12 -12
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +82 -47
- data/doc/classes/TaskJuggler/ResourceListRE.html +43 -39
- data/doc/classes/TaskJuggler/ResourceScenario.html +413 -321
- data/doc/classes/TaskJuggler/RichText.html +64 -248
- data/doc/classes/TaskJuggler/RichTextAttribute.html +94 -30
- data/doc/classes/TaskJuggler/RichTextDocument.html +87 -85
- data/doc/classes/TaskJuggler/RichTextElement.html +456 -363
- data/doc/classes/TaskJuggler/RichTextException.html +13 -13
- data/doc/classes/TaskJuggler/{RichTextProtocolExample.html → RichTextFunctionExample.html} +64 -63
- data/doc/classes/TaskJuggler/{RichTextProtocolHandler.html → RichTextFunctionHandler.html} +42 -36
- data/doc/classes/TaskJuggler/RichTextIntermediate.html +563 -0
- data/doc/classes/TaskJuggler/RichTextParser.html +54 -51
- data/doc/classes/TaskJuggler/RichTextScanner.html +94 -92
- data/doc/classes/TaskJuggler/RichTextSnip.html +96 -60
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +369 -227
- data/doc/classes/TaskJuggler/Scenario.html +6 -6
- data/doc/classes/TaskJuggler/ScenarioData.html +37 -37
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +31 -31
- data/doc/classes/TaskJuggler/Scoreboard.html +66 -66
- data/doc/classes/TaskJuggler/Shift.html +18 -18
- data/doc/classes/TaskJuggler/ShiftAssignment.html +54 -54
- data/doc/classes/TaskJuggler/ShiftAssignments.html +78 -78
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
- data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
- data/doc/classes/TaskJuggler/SortListAttribute.html +22 -22
- data/doc/classes/TaskJuggler/SourceFileInfo.html +12 -12
- data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
- data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
- data/doc/classes/TaskJuggler/SyntaxReference.html +42 -42
- data/doc/classes/TaskJuggler/TOCEntry.html +12 -12
- data/doc/classes/TaskJuggler/TSResourceRecord.html +197 -0
- data/doc/classes/TaskJuggler/TSTaskRecord.html +215 -0
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +64 -43
- data/doc/classes/TaskJuggler/TableOfContents.html +18 -18
- data/doc/classes/TaskJuggler/TableReport.html +447 -468
- data/doc/classes/TaskJuggler/Task.html +12 -12
- data/doc/classes/TaskJuggler/TaskDependency.html +12 -12
- data/doc/classes/TaskJuggler/TaskListAttribute.html +47 -47
- data/doc/classes/TaskJuggler/TaskListRE.html +43 -39
- data/doc/classes/TaskJuggler/TaskScenario.html +529 -282
- data/doc/classes/TaskJuggler/TextParser.html +215 -194
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +97 -97
- data/doc/classes/TaskJuggler/TextParser/Rule.html +84 -84
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -15
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +6 -6
- data/doc/classes/TaskJuggler/TextReport.html +77 -74
- data/doc/classes/TaskJuggler/TextScanner.html +294 -281
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +59 -60
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +12 -12
- data/doc/classes/TaskJuggler/TimeSheetReport.html +406 -0
- data/doc/classes/TaskJuggler/TjException.html +6 -6
- data/doc/classes/TaskJuggler/TjTime.html +522 -513
- data/doc/classes/TaskJuggler/TjpExample.html +25 -25
- data/doc/classes/TaskJuggler/TjpExportRE.html +21 -24
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +6177 -4318
- data/doc/classes/TaskJuggler/UserManual.html +212 -213
- data/doc/classes/TaskJuggler/WorkingHours.html +49 -49
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -53
- data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
- data/doc/classes/TaskJuggler/XMLComment.html +21 -21
- data/doc/classes/TaskJuggler/XMLDocument.html +27 -26
- data/doc/classes/TaskJuggler/XMLElement.html +86 -50
- data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
- data/doc/classes/TaskJuggler/XMLText.html +36 -36
- data/doc/files/COPYING.html +1 -1
- data/doc/files/README.html +1 -1
- data/doc/files/lib/AccountScenario_rb.html +3 -2
- data/doc/files/lib/Account_rb.html +3 -2
- data/doc/files/lib/Allocation_rb.html +3 -2
- data/doc/files/lib/AppConfig_rb.html +5 -2
- data/doc/files/lib/AttributeBase_rb.html +3 -2
- data/doc/files/lib/AttributeDefinition_rb.html +3 -2
- data/doc/files/lib/Attributes_rb.html +3 -2
- data/doc/files/lib/BatchProcessor_rb.html +4 -3
- data/doc/files/lib/Booking_rb.html +3 -2
- data/doc/files/lib/ChargeSet_rb.html +3 -2
- data/doc/files/lib/Charge_rb.html +3 -2
- data/doc/files/lib/HTMLDocument_rb.html +3 -2
- data/doc/files/lib/Interval_rb.html +3 -2
- data/doc/files/lib/Journal_rb.html +4 -3
- data/doc/files/lib/KeywordArray_rb.html +3 -2
- data/doc/files/lib/KeywordDocumentation_rb.html +3 -2
- data/doc/files/lib/Limits_rb.html +3 -2
- data/doc/files/lib/Log_rb.html +3 -2
- data/doc/files/lib/LogicalExpression_rb.html +3 -2
- data/doc/files/lib/LogicalFunction_rb.html +3 -2
- data/doc/files/lib/LogicalOperation_rb.html +3 -2
- data/doc/files/lib/MacroParser_rb.html +3 -2
- data/doc/files/lib/MacroTable_rb.html +3 -2
- data/doc/files/lib/MessageHandler_rb.html +3 -2
- data/doc/files/lib/Message_rb.html +3 -2
- data/doc/files/lib/ProjectFileParser_rb.html +7 -4
- data/doc/files/lib/Project_rb.html +3 -2
- data/doc/files/lib/PropertyList_rb.html +3 -2
- data/doc/files/lib/PropertySet_rb.html +3 -2
- data/doc/files/lib/PropertyTreeNode_rb.html +3 -2
- data/doc/files/lib/Query_rb.html +3 -2
- data/doc/files/lib/{RTPNavigator_rb.html → RTFNavigator_rb.html} +8 -7
- data/doc/files/lib/RTFQuery_rb.html +121 -0
- data/doc/files/lib/{RTPReport_rb.html → RTFReport_rb.html} +8 -7
- data/doc/files/lib/RealFormat_rb.html +3 -2
- data/doc/files/lib/RemoteServiceManager_rb.html +117 -0
- data/doc/files/lib/ReportServer_rb.html +107 -0
- data/doc/files/lib/ResourceScenario_rb.html +3 -2
- data/doc/files/lib/Resource_rb.html +3 -2
- data/doc/files/lib/RichTextDocument_rb.html +4 -3
- data/doc/files/lib/RichTextElement_rb.html +3 -2
- data/doc/files/lib/{RichTextProtocolExample_rb.html → RichTextFunctionExample_rb.html} +8 -7
- data/doc/files/lib/{RichTextProtocolHandler_rb.html → RichTextFunctionHandler_rb.html} +7 -6
- data/doc/files/lib/RichTextParser_rb.html +3 -2
- data/doc/files/lib/RichTextScanner_rb.html +3 -2
- data/doc/files/lib/RichTextSnip_rb.html +3 -2
- data/doc/files/lib/RichTextSyntaxRules_rb.html +3 -2
- data/doc/files/lib/RichText_rb.html +3 -2
- data/doc/files/lib/ScenarioData_rb.html +3 -2
- data/doc/files/lib/Scenario_rb.html +3 -2
- data/doc/files/lib/Scoreboard_rb.html +3 -2
- data/doc/files/lib/ShiftAssignments_rb.html +3 -2
- data/doc/files/lib/ShiftScenario_rb.html +3 -2
- data/doc/files/lib/Shift_rb.html +3 -2
- data/doc/files/lib/SourceFileInfo_rb.html +3 -2
- data/doc/files/lib/SyntaxReference_rb.html +3 -2
- data/doc/files/lib/TOCEntry_rb.html +3 -2
- data/doc/files/lib/TableColumnDefinition_rb.html +3 -2
- data/doc/files/lib/TableOfContents_rb.html +3 -2
- data/doc/files/lib/TaskDependency_rb.html +3 -2
- data/doc/files/lib/TaskJuggler_rb.html +7 -2
- data/doc/files/lib/TaskScenario_rb.html +3 -2
- data/doc/files/lib/Task_rb.html +3 -2
- data/doc/files/lib/TextParser/Pattern_rb.html +4 -3
- data/doc/files/lib/TextParser/Rule_rb.html +4 -3
- data/doc/files/lib/TextParser/StackElement_rb.html +4 -3
- data/doc/files/lib/TextParser/TokenDoc_rb.html +4 -3
- data/doc/files/lib/TextParser_rb.html +3 -2
- data/doc/files/lib/TextScanner_rb.html +3 -2
- data/doc/files/lib/Tj3Config_rb.html +3 -2
- data/doc/files/lib/TjException_rb.html +3 -2
- data/doc/files/lib/TjTime_rb.html +3 -2
- data/doc/files/lib/TjpExample_rb.html +3 -2
- data/doc/files/lib/TjpSyntaxRules_rb.html +3 -2
- data/doc/files/lib/UTF8String_rb.html +14 -6
- data/doc/files/lib/UserManual_rb.html +6 -3
- data/doc/files/lib/WorkingHours_rb.html +3 -2
- data/doc/files/lib/XMLDocument_rb.html +3 -2
- data/doc/files/lib/XMLElement_rb.html +3 -2
- data/doc/files/lib/deep_copy_rb.html +3 -2
- data/doc/files/lib/reports/CSVFile_rb.html +3 -2
- data/doc/files/lib/reports/ColumnTable_rb.html +3 -2
- data/doc/files/lib/reports/GanttChart_rb.html +3 -2
- data/doc/files/lib/reports/GanttContainer_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +3 -2
- data/doc/files/lib/reports/GanttHeader_rb.html +3 -2
- data/doc/files/lib/reports/GanttLine_rb.html +3 -2
- data/doc/files/lib/reports/GanttLoadStack_rb.html +3 -2
- data/doc/files/lib/reports/GanttMilestone_rb.html +3 -2
- data/doc/files/lib/reports/GanttRouter_rb.html +3 -2
- data/doc/files/lib/reports/GanttTaskBar_rb.html +3 -2
- data/doc/files/lib/reports/HTMLGraphics_rb.html +3 -2
- data/doc/files/lib/reports/Navigator_rb.html +3 -2
- data/doc/files/lib/reports/ReportBase_rb.html +3 -2
- data/doc/files/lib/reports/ReportContext_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableCell_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableColumn_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLegend_rb.html +3 -2
- data/doc/files/lib/reports/ReportTableLine_rb.html +3 -2
- data/doc/files/lib/reports/ReportTable_rb.html +3 -2
- data/doc/files/lib/reports/Report_rb.html +7 -2
- data/doc/files/lib/reports/ResourceListRE_rb.html +3 -2
- data/doc/files/lib/reports/TableReport_rb.html +3 -2
- data/doc/files/lib/reports/TaskListRE_rb.html +3 -2
- data/doc/files/lib/reports/TextReport_rb.html +4 -3
- data/doc/files/lib/reports/TimeSheetReport_rb.html +117 -0
- data/doc/files/lib/reports/TjpExportRE_rb.html +3 -2
- data/doc/files/lib/taskjuggler3_rb.html +94 -77
- data/doc/files/lib/tj3client_rb.html +280 -0
- data/doc/files/lib/tj3man_rb.html +10 -9
- data/doc/fr_class_index.html +27 -5
- data/doc/fr_file_index.html +15 -7
- data/doc/fr_method_index.html +1312 -1020
- data/examples/tutorial.tjp +113 -14
- data/gem_spec.rb +2 -1
- data/lib/Account.rb +1 -1
- data/lib/AccountScenario.rb +1 -1
- data/lib/Allocation.rb +1 -1
- data/lib/AppConfig.rb +23 -10
- data/lib/AttributeBase.rb +34 -6
- data/lib/AttributeDefinition.rb +1 -1
- data/lib/Attributes.rb +51 -16
- data/lib/BatchProcessor.rb +204 -77
- data/lib/Booking.rb +1 -1
- data/lib/Charge.rb +1 -1
- data/lib/ChargeSet.rb +1 -1
- data/lib/HTMLDocument.rb +2 -2
- data/lib/Interval.rb +1 -1
- data/lib/Journal.rb +231 -9
- data/lib/KeywordArray.rb +1 -1
- data/lib/KeywordDocumentation.rb +6 -4
- data/lib/Limits.rb +1 -1
- data/lib/Log.rb +8 -1
- data/lib/LogicalExpression.rb +14 -13
- data/lib/LogicalFunction.rb +88 -14
- data/lib/LogicalOperation.rb +124 -53
- data/lib/MacroParser.rb +1 -1
- data/lib/MacroTable.rb +2 -2
- data/lib/Message.rb +1 -1
- data/lib/MessageHandler.rb +7 -3
- data/lib/Project.rb +93 -14
- data/lib/ProjectFileParser.rb +30 -15
- data/lib/PropertyList.rb +103 -36
- data/lib/PropertySet.rb +22 -10
- data/lib/PropertyTreeNode.rb +120 -15
- data/lib/Query.rb +119 -48
- data/lib/{RTPNavigator.rb → RTFNavigator.rb} +11 -10
- data/lib/RTFQuery.rb +166 -0
- data/lib/{RTPReport.rb → RTFReport.rb} +11 -8
- data/lib/RealFormat.rb +1 -1
- data/lib/RemoteServiceManager.rb +80 -0
- data/lib/ReportServer.rb +66 -0
- data/lib/Resource.rb +1 -1
- data/lib/ResourceScenario.rb +48 -19
- data/lib/RichText.rb +98 -41
- data/lib/RichTextDocument.rb +10 -8
- data/lib/RichTextElement.rb +72 -28
- data/lib/{RichTextProtocolExample.rb → RichTextFunctionExample.rb} +8 -7
- data/lib/{RichTextProtocolHandler.rb → RichTextFunctionHandler.rb} +12 -14
- data/lib/RichTextParser.rb +6 -3
- data/lib/RichTextScanner.rb +91 -19
- data/lib/RichTextSnip.rb +8 -3
- data/lib/RichTextSyntaxRules.rb +103 -45
- data/lib/Scenario.rb +1 -1
- data/lib/ScenarioData.rb +2 -2
- data/lib/Scoreboard.rb +1 -1
- data/lib/Shift.rb +1 -1
- data/lib/ShiftAssignments.rb +1 -1
- data/lib/ShiftScenario.rb +1 -1
- data/lib/SourceFileInfo.rb +1 -1
- data/lib/SyntaxReference.rb +2 -2
- data/lib/TOCEntry.rb +1 -1
- data/lib/TableColumnDefinition.rb +59 -16
- data/lib/TableOfContents.rb +1 -1
- data/lib/Task.rb +1 -1
- data/lib/TaskDependency.rb +1 -1
- data/lib/TaskJuggler.rb +31 -8
- data/lib/TaskScenario.rb +165 -16
- data/lib/TextParser.rb +36 -22
- data/lib/TextParser/Pattern.rb +3 -3
- data/lib/TextParser/Rule.rb +2 -2
- data/lib/TextParser/StackElement.rb +4 -3
- data/lib/TextParser/TokenDoc.rb +2 -2
- data/lib/TextScanner.rb +52 -37
- data/lib/Tj3Config.rb +6 -5
- data/lib/TjException.rb +1 -1
- data/lib/TjTime.rb +12 -3
- data/lib/TjpExample.rb +1 -1
- data/lib/TjpSyntaxRules.rb +1044 -150
- data/lib/UTF8String.rb +2 -1
- data/lib/UserManual.rb +18 -70
- data/lib/WorkingHours.rb +3 -3
- data/lib/XMLDocument.rb +3 -2
- data/lib/XMLElement.rb +6 -1
- data/lib/deep_copy.rb +1 -1
- data/lib/reports/CSVFile.rb +1 -1
- data/lib/reports/ColumnTable.rb +9 -9
- data/lib/reports/GanttChart.rb +1 -1
- data/lib/reports/GanttContainer.rb +1 -1
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttHeaderScaleItem.rb +1 -1
- data/lib/reports/GanttLine.rb +40 -40
- data/lib/reports/GanttLoadStack.rb +1 -1
- data/lib/reports/GanttMilestone.rb +1 -1
- data/lib/reports/GanttRouter.rb +1 -1
- data/lib/reports/GanttTaskBar.rb +1 -1
- data/lib/reports/HTMLGraphics.rb +1 -1
- data/lib/reports/Navigator.rb +149 -22
- data/lib/reports/Report.rb +115 -172
- data/lib/reports/ReportBase.rb +22 -27
- data/lib/reports/ReportContext.rb +29 -15
- data/lib/reports/ReportTable.rb +1 -1
- data/lib/reports/ReportTableCell.rb +120 -27
- data/lib/reports/ReportTableColumn.rb +3 -3
- data/lib/reports/ReportTableLegend.rb +1 -1
- data/lib/reports/ReportTableLine.rb +10 -2
- data/lib/reports/ResourceListRE.rb +5 -1
- data/lib/reports/TableReport.rb +237 -287
- data/lib/reports/TaskListRE.rb +5 -1
- data/lib/reports/TextReport.rb +7 -4
- data/lib/reports/TimeSheetReport.rb +233 -0
- data/lib/reports/TjpExportRE.rb +2 -2
- data/lib/taskjuggler3.rb +27 -11
- data/lib/tj3client.rb +110 -0
- data/lib/tj3man.rb +4 -4
- data/manual/Getting_Started +0 -50
- data/manual/How_To_Contribute +6 -13
- data/manual/Installation +102 -28
- data/manual/Intro +11 -1
- data/manual/Reporting_Bugs +23 -7
- data/manual/Rich_Text_Attributes +59 -6
- data/manual/TaskJuggler_2x_Migration +27 -0
- data/manual/The_TaskJuggler_Syntax +104 -0
- data/manual/Tutorial +10 -9
- data/prj_cfg.rb +8 -2
- data/tasks/csts.rake +1 -1
- data/tasks/manual.rake +5 -3
- data/test/MessageChecker.rb +1 -1
- data/test/TestSuite/HTML-Reports/Alerts.html +172 -0
- data/test/TestSuite/HTML-Reports/Alerts.tjp +77 -0
- data/test/TestSuite/HTML-Reports/CellText.html +758 -0
- data/test/TestSuite/HTML-Reports/CellText.tjp +75 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
- data/test/TestSuite/HTML-Reports/ColumnPeriods.tjp +44 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
- data/test/TestSuite/HTML-Reports/IsOngoing.tjp +34 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +80 -0
- data/test/TestSuite/HTML-Reports/LogicalFunctions.tjp +20 -0
- data/test/TestSuite/HTML-Reports/Query.html +31 -0
- data/test/TestSuite/HTML-Reports/Query.tjp +28 -0
- data/test/TestSuite/HTML-Reports/Sorting.tjp +68 -0
- data/test/TestSuite/HTML-Reports/TimeSheet.tjp +69 -0
- data/test/TestSuite/HTML-Reports/UDAQuery.tjp +27 -0
- data/test/TestSuite/HTML-Reports/css/tjmanual.css +52 -0
- data/test/TestSuite/HTML-Reports/css/tjreport.css +195 -0
- data/test/TestSuite/HTML-Reports/depArrows.html +842 -0
- data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
- data/test/TestSuite/HTML-Reports/reference.tjp +7 -8
- data/test/TestSuite/HTML-Reports/scripts/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +34 -0
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -2
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +20 -0
- data/test/TestSuite/Syntax/Correct/Query.tjp +18 -0
- data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +45 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet.tjp +49 -0
- data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
- data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +113 -14
- data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +28 -0
- data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +12 -0
- data/test/all.rb +2 -2
- data/test/test_BatchProcessor.rb +42 -13
- data/test/test_CSV-Reports.rb +1 -1
- data/test/test_Journal.rb +176 -0
- data/test/test_Limits.rb +1 -1
- data/test/test_LogicalExpression.rb +14 -5
- data/test/test_MacroTable.rb +1 -1
- data/test/test_Project.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +1 -1
- data/test/test_RealFormat.rb +1 -1
- data/test/test_RichText.rb +30 -20
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +2 -2
- data/test/test_Syntax.rb +1 -1
- data/test/test_TextScanner.rb +1 -1
- data/test/test_TjTime.rb +1 -1
- data/test/test_TjpExample.rb +1 -1
- data/test/test_UTF8String.rb +1 -1
- data/test/test_WorkingHours.rb +1 -1
- data/test/test_deep_copy.rb +2 -2
- metadata +610 -532
- data/doc/files/lib/ms_test_rb.html +0 -90
- data/examples/ContactList.html +0 -1467
- data/examples/Deliveries.html +0 -485
- data/examples/Development.html +0 -2525
- data/examples/Overview.html +0 -747
- data/examples/Resource Graph.html +0 -616
- data/lib/ms_test.rb +0 -27
- data/test/TestSuite/HTML-Reports/reference-export.html +0 -187
data/lib/Scenario.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Scenario.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/ScenarioData.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ScenarioData.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -56,7 +56,7 @@ class TaskJuggler
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def query_id(query)
|
|
59
|
-
query.
|
|
59
|
+
query.sortable = query.string = @property.fullId
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
end
|
data/lib/Scoreboard.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Scoreboard.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/Shift.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Shift.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/ShiftAssignments.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ShiftAssignments.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/ShiftScenario.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ShiftScenario.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/SourceFileInfo.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = SourceFileInfo.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/SyntaxReference.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = SyntaxReference.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -234,7 +234,7 @@ class TaskJuggler
|
|
|
234
234
|
# If it's a terminal symbol, we found what we are looking for. We add
|
|
235
235
|
# it to the attrs hash and mark it as non scenario specific.
|
|
236
236
|
attrs[pattern] = scenarioSpecific
|
|
237
|
-
elsif pattern[0] == '!
|
|
237
|
+
elsif pattern[0] == '!scenarioIdCol'
|
|
238
238
|
# A reference to the !scenarioId rule marks the next token of the
|
|
239
239
|
# pattern as a reference to a rule with all scenario specific
|
|
240
240
|
# attributes.
|
data/lib/TOCEntry.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TOCEntry.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TableColumnDefinition.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -12,40 +12,83 @@
|
|
|
12
12
|
|
|
13
13
|
class TaskJuggler
|
|
14
14
|
|
|
15
|
+
# A CellSettingPattern is used to store alternative settings for
|
|
16
|
+
# ReportTableCell settings. These could be the cell text, the tooltip or a
|
|
17
|
+
# color setting. The user can provide multiple options and the
|
|
18
|
+
# LogicalExpression is used to select the pattern for a given cell.
|
|
19
|
+
class CellSettingPattern
|
|
20
|
+
|
|
21
|
+
attr_reader :setting, :logExpr
|
|
22
|
+
|
|
23
|
+
def initialize(setting, logExpr)
|
|
24
|
+
@setting = setting
|
|
25
|
+
@logExpr = logExpr
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# The CellSettingPatternList holds a list of possible test pattern for a cell
|
|
31
|
+
# or tooltip. The first entry who's LogicalExpression matches is used.
|
|
32
|
+
class CellSettingPatternList
|
|
33
|
+
|
|
34
|
+
def initialize
|
|
35
|
+
@patterns = []
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Add a new pattern to the list.
|
|
39
|
+
def addPattern(pattern)
|
|
40
|
+
@patterns << pattern
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Get the RichText that matches the _property_ and _scopeProperty_.
|
|
44
|
+
def getPattern(query)
|
|
45
|
+
@patterns.each do |pattern|
|
|
46
|
+
if pattern.logExpr.eval(query)
|
|
47
|
+
return pattern.setting
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
15
55
|
# This class holds the definition of a column of a report. This is the user
|
|
16
56
|
# specified data that is later used to generate the actual ReportTableColumn.
|
|
17
57
|
# The column is uniquely identified by an ID.
|
|
18
58
|
class TableColumnDefinition
|
|
19
59
|
|
|
20
|
-
attr_reader :id
|
|
21
|
-
attr_accessor :
|
|
22
|
-
:title, :scale, :width,
|
|
23
|
-
:content, :column
|
|
60
|
+
attr_reader :id, :cellText, :tooltip, :cellColor, :fontColor
|
|
61
|
+
attr_accessor :title, :start, :end, :scale, :width, :content, :column
|
|
24
62
|
|
|
25
63
|
def initialize(id, title)
|
|
26
64
|
# The column ID. It must be unique within the report.
|
|
27
65
|
@id = id
|
|
28
66
|
# An alternative title for the column header.
|
|
29
67
|
@title = title
|
|
68
|
+
# An alternative start date for columns with time-variant values.
|
|
69
|
+
@start = nil
|
|
70
|
+
# An alternative end date for columns with time-variant values.
|
|
71
|
+
@end = nil
|
|
30
72
|
# For regular columns (non-calendar and non-chart) the user can override
|
|
31
73
|
# the actual cell content.
|
|
32
|
-
@cellText =
|
|
33
|
-
# A LogicalExpression that is evaluated for every cell. If it evaluates to
|
|
34
|
-
# true, the cell will remain empty.
|
|
35
|
-
@hideCellText = nil
|
|
36
|
-
# The cell text can be associated with a hyperlink.
|
|
37
|
-
@cellURL = nil
|
|
38
|
-
# A LogicalExpression that is evaluated for every cell. If the result is
|
|
39
|
-
# true, the cellURL will be ignored.
|
|
40
|
-
@hideCellURL = nil
|
|
74
|
+
@cellText = CellSettingPatternList.new
|
|
41
75
|
# The content attribute is only used for calendar columns. It specifies
|
|
42
76
|
# what content should be displayed in the colendar columns.
|
|
43
77
|
@content = 'load'
|
|
78
|
+
# An alternative content for the tooltip message. It should be a
|
|
79
|
+
# RichText object.
|
|
80
|
+
@tooltip = CellSettingPatternList.new
|
|
81
|
+
# An alternative background color for the cell. The color setting is
|
|
82
|
+
# stored as "#RGB" or "#RRGGBB" String.
|
|
83
|
+
@cellColor = CellSettingPatternList.new
|
|
84
|
+
# An alternative font color for the cell. The format is equivalent to
|
|
85
|
+
# the @cellColor setting.
|
|
86
|
+
@fontColor = CellSettingPatternList.new
|
|
44
87
|
# The scale attribute is only used for Gantt chart columns. It specifies
|
|
45
88
|
# the minimum resolution of the chart.
|
|
46
89
|
@scale = 'week'
|
|
47
|
-
# The
|
|
48
|
-
@width =
|
|
90
|
+
# The width of columns.
|
|
91
|
+
@width = nil
|
|
49
92
|
|
|
50
93
|
# Reference to the ReportTableColumn object that was created based on this
|
|
51
94
|
# definition.
|
data/lib/TableOfContents.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TableOfContents.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/Task.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Task.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/TaskDependency.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TaskDependency.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/TaskJuggler.rb
CHANGED
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TaskJuggler.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
10
10
|
# published by the Free Software Foundation.
|
|
11
11
|
#
|
|
12
12
|
|
|
13
|
+
require 'drb'
|
|
13
14
|
require 'Project'
|
|
14
15
|
require 'MessageHandler'
|
|
16
|
+
require 'RemoteServiceManager'
|
|
15
17
|
require 'Log'
|
|
16
18
|
|
|
17
19
|
# The TaskJuggler class models the object that provides access to the
|
|
@@ -26,6 +28,7 @@ class TaskJuggler
|
|
|
26
28
|
# whether or not messsages can be written to $stderr.
|
|
27
29
|
def initialize(console)
|
|
28
30
|
@project = nil
|
|
31
|
+
@parser = nil
|
|
29
32
|
@messageHandler = MessageHandler.new(console)
|
|
30
33
|
@maxCpuCores = 1
|
|
31
34
|
end
|
|
@@ -33,29 +36,33 @@ class TaskJuggler
|
|
|
33
36
|
# Read in the files passed as file names in _files_, parse them and
|
|
34
37
|
# construct a Project object. In case of success true is returned.
|
|
35
38
|
# Otherwise false.
|
|
36
|
-
def parse(files)
|
|
39
|
+
def parse(files, keepParser = false)
|
|
37
40
|
Log.enter('parser', 'Parsing files ...')
|
|
38
41
|
master = true
|
|
39
42
|
@project = nil
|
|
40
43
|
|
|
41
|
-
parser = ProjectFileParser.new(@messageHandler)
|
|
44
|
+
@parser = ProjectFileParser.new(@messageHandler)
|
|
42
45
|
files.each do |file|
|
|
43
46
|
begin
|
|
44
|
-
parser.open(file, master)
|
|
47
|
+
@parser.open(file, master)
|
|
45
48
|
rescue TjException
|
|
46
49
|
Log.exit('parser')
|
|
47
50
|
return false
|
|
48
51
|
end
|
|
49
52
|
if master
|
|
50
|
-
@project = parser.parse('project')
|
|
53
|
+
@project = @parser.parse('project')
|
|
51
54
|
master = false
|
|
52
55
|
else
|
|
53
|
-
parser.setGlobalMacros
|
|
54
|
-
parser.parse('properties')
|
|
56
|
+
@parser.setGlobalMacros
|
|
57
|
+
@parser.parse('properties')
|
|
55
58
|
end
|
|
56
|
-
parser.close
|
|
59
|
+
@parser.close
|
|
57
60
|
end
|
|
58
61
|
|
|
62
|
+
# For the report server mode we may need to keep the parser. Otherwise,
|
|
63
|
+
# destroy it.
|
|
64
|
+
@parser = nil unless keepParser
|
|
65
|
+
|
|
59
66
|
Log.exit('parser')
|
|
60
67
|
@messageHandler.messages.empty?
|
|
61
68
|
end
|
|
@@ -81,5 +88,21 @@ class TaskJuggler
|
|
|
81
88
|
res
|
|
82
89
|
end
|
|
83
90
|
|
|
91
|
+
def serveReports
|
|
92
|
+
$SAFE = 1
|
|
93
|
+
Log.enter('reportserver', 'Starting Server Mode ...')
|
|
94
|
+
Log.status("Report Server is now active!")
|
|
95
|
+
serviceManager = RemoteServiceManager.new(@parser, @project)
|
|
96
|
+
DRb.start_service('druby://localhost:8474', serviceManager)
|
|
97
|
+
DRb.thread.join
|
|
98
|
+
# We'll probably never get here. The DRb threads may call exit().
|
|
99
|
+
Log.exit('reportserver')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Return the number of errors that had been reported during processing.
|
|
103
|
+
def errors
|
|
104
|
+
@project.messageHandler.errors
|
|
105
|
+
end
|
|
106
|
+
|
|
84
107
|
end
|
|
85
108
|
|
data/lib/TaskScenario.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TaskScenario.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009 by Chris Schlaeger <cs@kde.org>
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010 by Chris Schlaeger <cs@kde.org>
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -1060,10 +1060,10 @@ class TaskJuggler
|
|
|
1060
1060
|
|
|
1061
1061
|
def query_complete(query)
|
|
1062
1062
|
if @property.leaf?
|
|
1063
|
-
query.
|
|
1064
|
-
query.
|
|
1063
|
+
query.sortable = query.numerical = complete = a('complete').to_i
|
|
1064
|
+
query.string = "#{complete}%"
|
|
1065
1065
|
else
|
|
1066
|
-
query.
|
|
1066
|
+
query.string = ''
|
|
1067
1067
|
end
|
|
1068
1068
|
end
|
|
1069
1069
|
|
|
@@ -1072,30 +1072,57 @@ class TaskJuggler
|
|
|
1072
1072
|
# directly generated by the resource is taken into account.
|
|
1073
1073
|
def query_cost(query)
|
|
1074
1074
|
if query.costAccount
|
|
1075
|
-
query.
|
|
1075
|
+
query.sortable = query.numerical = cost =
|
|
1076
1076
|
turnover(query.startIdx, query.endIdx, query.costAccount,
|
|
1077
1077
|
query.scopeProperty)
|
|
1078
|
-
query.
|
|
1078
|
+
query.string = query.currencyFormat.format(cost)
|
|
1079
1079
|
else
|
|
1080
|
-
query.
|
|
1080
|
+
query.string = 'No cost account'
|
|
1081
1081
|
end
|
|
1082
1082
|
end
|
|
1083
1083
|
|
|
1084
1084
|
# The duration of the task. After scheduling, it can be determined for
|
|
1085
1085
|
# all tasks. Also for those who did not have a 'duration' attribute.
|
|
1086
1086
|
def query_duration(query)
|
|
1087
|
-
query.
|
|
1087
|
+
query.sortable = query.numerical = duration =
|
|
1088
1088
|
(a('end') - a('start')) / (60 * 60 * 24)
|
|
1089
|
-
query.
|
|
1089
|
+
query.string = query.scaleDuration(duration)
|
|
1090
|
+
end
|
|
1091
|
+
|
|
1092
|
+
# The completed (as of 'now') effort allocated for the task in the
|
|
1093
|
+
# specified interval. In case a Resource is given as scope property only
|
|
1094
|
+
# the effort allocated for this resource is taken into account.
|
|
1095
|
+
def query_effortdone(query)
|
|
1096
|
+
# For this query, we always override the query period.
|
|
1097
|
+
query.sortable = query.numerical = effort =
|
|
1098
|
+
getEffectiveWork(@project.dateToIdx(@project['start']),
|
|
1099
|
+
@project.dateToIdx(@project['now']),
|
|
1100
|
+
query.scopeProperty)
|
|
1101
|
+
query.string = query.scaleLoad(effort)
|
|
1102
|
+
end
|
|
1103
|
+
|
|
1104
|
+
|
|
1105
|
+
# The remaining (as of 'now') effort allocated for the task in the
|
|
1106
|
+
# specified interval. In case a Resource is given as scope property only
|
|
1107
|
+
# the effort allocated for this resource is taken into account.
|
|
1108
|
+
def query_effortleft(query)
|
|
1109
|
+
# For this query, we always override the query period.
|
|
1110
|
+
query.start = @project['now']
|
|
1111
|
+
query.end = @project['end']
|
|
1112
|
+
query.sortable = query.numerical = effort =
|
|
1113
|
+
getEffectiveWork(@project.dateToIdx(@project['now']),
|
|
1114
|
+
@project.dateToIdx(@project['end']),
|
|
1115
|
+
query.scopeProperty)
|
|
1116
|
+
query.string = query.scaleLoad(effort)
|
|
1090
1117
|
end
|
|
1091
1118
|
|
|
1092
1119
|
# The effort allocated for the task in the specified interval. In case a
|
|
1093
1120
|
# Resource is given as scope property only the effort allocated for this
|
|
1094
1121
|
# resource is taken into account.
|
|
1095
1122
|
def query_effort(query)
|
|
1096
|
-
query.
|
|
1123
|
+
query.sortable = query.numerical = work =
|
|
1097
1124
|
getEffectiveWork(query.startIdx, query.endIdx, query.scopeProperty)
|
|
1098
|
-
query.
|
|
1125
|
+
query.string = query.scaleLoad(work)
|
|
1099
1126
|
end
|
|
1100
1127
|
|
|
1101
1128
|
# A list of the resources that have been allocated to work on the task in
|
|
@@ -1105,10 +1132,12 @@ class TaskJuggler
|
|
|
1105
1132
|
a('assignedresources').each do |resource|
|
|
1106
1133
|
if getAllocatedTime(query.startIdx, query.endIdx, resource) > 0.0
|
|
1107
1134
|
list += ', ' unless list.empty?
|
|
1108
|
-
list += resource.
|
|
1135
|
+
list += "#{resource.name} (#{resource.fullId})"
|
|
1109
1136
|
end
|
|
1110
1137
|
end
|
|
1111
|
-
query.
|
|
1138
|
+
query.sortable = query.string = list
|
|
1139
|
+
rText = RichText.new(list)
|
|
1140
|
+
query.rti = rText.generateIntermediateFormat
|
|
1112
1141
|
end
|
|
1113
1142
|
|
|
1114
1143
|
# Compute the revenue generated by this Task for a given Account during a
|
|
@@ -1116,15 +1145,33 @@ class TaskJuggler
|
|
|
1116
1145
|
# revenue directly generated by the resource is taken into account.
|
|
1117
1146
|
def query_revenue(query)
|
|
1118
1147
|
if query.revenueAccount
|
|
1119
|
-
query.
|
|
1148
|
+
query.sortable = query.numerical = revenue =
|
|
1120
1149
|
turnover(query.startIdx, query.endIdx, query.revenueAccount,
|
|
1121
1150
|
query.scopeProperty)
|
|
1122
|
-
query.
|
|
1151
|
+
query.string = query.currencyFormat.format(revenue)
|
|
1123
1152
|
else
|
|
1124
|
-
query.
|
|
1153
|
+
query.string = 'No revenue account'
|
|
1125
1154
|
end
|
|
1126
1155
|
end
|
|
1127
1156
|
|
|
1157
|
+
def query_targets(query)
|
|
1158
|
+
targetList = PropertyList.new(@project.tasks, false)
|
|
1159
|
+
targets(targetList)
|
|
1160
|
+
targetList.delete(@property)
|
|
1161
|
+
targetList.setSorting([['start', true, @scenarioIdx],
|
|
1162
|
+
['seqno', true, -1 ]])
|
|
1163
|
+
targetList.sort!
|
|
1164
|
+
|
|
1165
|
+
res = ''
|
|
1166
|
+
targetList.each do |task|
|
|
1167
|
+
date = task['start', @scenarioIdx].to_s(@property.project['timeFormat'])
|
|
1168
|
+
res += "# #{task.name} (#{task.fullId}) #{date}\n"
|
|
1169
|
+
end
|
|
1170
|
+
rText = RichText.new(res)
|
|
1171
|
+
query.rti = rText.generateIntermediateFormat
|
|
1172
|
+
end
|
|
1173
|
+
|
|
1174
|
+
|
|
1128
1175
|
# Compute the total time _resource_ or all resources are allocated during
|
|
1129
1176
|
# interval specified by _startIdx_ and _endIdx_.
|
|
1130
1177
|
def getAllocatedTime(startIdx, endIdx, resource = nil)
|
|
@@ -1187,6 +1234,53 @@ class TaskJuggler
|
|
|
1187
1234
|
end
|
|
1188
1235
|
end
|
|
1189
1236
|
|
|
1237
|
+
# Check if the Task _task_ depends on this task. _depth_ specifies how
|
|
1238
|
+
# many dependent task are traversed at max. A value of 0 means no limit.
|
|
1239
|
+
def isDependencyOf(task, depth)
|
|
1240
|
+
return true if task == @property
|
|
1241
|
+
|
|
1242
|
+
# Check if any of the parent tasks is a dependency of _task_.
|
|
1243
|
+
t = @property.parent
|
|
1244
|
+
while t
|
|
1245
|
+
# If the parent is a dependency, than all childs are as well.
|
|
1246
|
+
return true if t.isDependencyOf(@scenarioIdx, task, depth)
|
|
1247
|
+
t = t.parent
|
|
1248
|
+
end
|
|
1249
|
+
|
|
1250
|
+
|
|
1251
|
+
a('startsuccs').each do |dep|
|
|
1252
|
+
unless dep[1]
|
|
1253
|
+
# must be a start->start dependency
|
|
1254
|
+
return true if dep[0].isDependencyOf(@scenarioIdx, task, depth)
|
|
1255
|
+
end
|
|
1256
|
+
end
|
|
1257
|
+
|
|
1258
|
+
return false if depth == 1
|
|
1259
|
+
|
|
1260
|
+
a('endsuccs').each do |dep|
|
|
1261
|
+
unless dep[1]
|
|
1262
|
+
# must be an end->start dependency
|
|
1263
|
+
return true if dep[0].isDependencyOf(@scenarioIdx, task, depth - 1)
|
|
1264
|
+
end
|
|
1265
|
+
end
|
|
1266
|
+
|
|
1267
|
+
false
|
|
1268
|
+
end
|
|
1269
|
+
|
|
1270
|
+
# Returns true of the _resource_ is assigned to this task or any of its
|
|
1271
|
+
# children.
|
|
1272
|
+
def hasResourceAllocated?(interval, resource)
|
|
1273
|
+
if @property.leaf?
|
|
1274
|
+
return resource.allocated?(@scenarioIdx, interval, @property)
|
|
1275
|
+
else
|
|
1276
|
+
@property.children.each do |t|
|
|
1277
|
+
return true if t.hasResourceAllocated?(@scenarioIdx, interval,
|
|
1278
|
+
resource)
|
|
1279
|
+
end
|
|
1280
|
+
end
|
|
1281
|
+
false
|
|
1282
|
+
end
|
|
1283
|
+
|
|
1190
1284
|
private
|
|
1191
1285
|
def scheduleSlot(slot, slotDuration)
|
|
1192
1286
|
# Tasks must always be scheduled in a single contigous fashion. @lastSlot
|
|
@@ -1480,6 +1574,18 @@ class TaskJuggler
|
|
|
1480
1574
|
!a(thisEnd + 'succs').empty? || !a(thisEnd + 'preds').empty?
|
|
1481
1575
|
end
|
|
1482
1576
|
|
|
1577
|
+
# Return true if this task or any of its parent tasks has at least one
|
|
1578
|
+
# sucessor task.
|
|
1579
|
+
def hasSuccessors
|
|
1580
|
+
t = @property
|
|
1581
|
+
while t
|
|
1582
|
+
return true unless t['endsuccs', @scenarioIdx].empty?
|
|
1583
|
+
t = t.parent
|
|
1584
|
+
end
|
|
1585
|
+
|
|
1586
|
+
false
|
|
1587
|
+
end
|
|
1588
|
+
|
|
1483
1589
|
def markAsRunaway
|
|
1484
1590
|
warning('runaway', "Task #{@property.fullId} does not fit into " +
|
|
1485
1591
|
"project time frame")
|
|
@@ -1620,19 +1726,31 @@ class TaskJuggler
|
|
|
1620
1726
|
def calcCompletion
|
|
1621
1727
|
# If the user provided a completion degree we are not touching it.
|
|
1622
1728
|
if @property.provided('complete', @scenarioIdx)
|
|
1729
|
+
calcStatus
|
|
1623
1730
|
return
|
|
1624
1731
|
end
|
|
1625
1732
|
|
|
1626
1733
|
if a('start').nil? || a('end').nil?
|
|
1627
1734
|
@property['complete', @scenarioIdx] = 0.0
|
|
1735
|
+
@property['status', @scenarioIdx] = 'unknown'
|
|
1628
1736
|
return
|
|
1629
1737
|
end
|
|
1630
1738
|
|
|
1631
1739
|
if a('milestone')
|
|
1632
1740
|
@property['complete', @scenarioIdx] =
|
|
1633
1741
|
@property['end', @scenarioIdx] <= @project['now'] ? 100.0 : 0.0
|
|
1742
|
+
@property['status', @scenarioIdx] =
|
|
1743
|
+
a('end') <= @project['now'] ? 'done' : 'not reached'
|
|
1634
1744
|
elsif @property.container?
|
|
1635
1745
|
#TODO
|
|
1746
|
+
@property['status', @scenarioIdx] =
|
|
1747
|
+
if a('end') < @project['now']
|
|
1748
|
+
'done'
|
|
1749
|
+
elsif a('start') > @project['now']
|
|
1750
|
+
'not started'
|
|
1751
|
+
else
|
|
1752
|
+
'in progress'
|
|
1753
|
+
end
|
|
1636
1754
|
else
|
|
1637
1755
|
# Normal leaf task
|
|
1638
1756
|
if a('end') <= @project['now']
|
|
@@ -1647,7 +1765,38 @@ class TaskJuggler
|
|
|
1647
1765
|
(a('end') - a('start'))) * 100.0
|
|
1648
1766
|
end
|
|
1649
1767
|
@property['complete', @scenarioIdx] = completion
|
|
1768
|
+
calcStatus
|
|
1769
|
+
end
|
|
1770
|
+
end
|
|
1771
|
+
|
|
1772
|
+
# Calculate the status of the task based on the 'complete' attribute.
|
|
1773
|
+
def calcStatus
|
|
1774
|
+
@property['status', @scenarioIdx] =
|
|
1775
|
+
if a('complete') == 0.0
|
|
1776
|
+
'not started'
|
|
1777
|
+
elsif a('complete') >= 100.0
|
|
1778
|
+
'done'
|
|
1779
|
+
else
|
|
1780
|
+
'in progress'
|
|
1781
|
+
end
|
|
1782
|
+
end
|
|
1783
|
+
|
|
1784
|
+
# Recursively compile a list of Task properties which depend on the
|
|
1785
|
+
# current task.
|
|
1786
|
+
def targets(list)
|
|
1787
|
+
# A target must be a leaf function that has no direct or indirect
|
|
1788
|
+
# (through parent) following tasks.
|
|
1789
|
+
if @property.leaf? && !hasSuccessors && !list.include?(@property)
|
|
1790
|
+
list << @property
|
|
1791
|
+
return
|
|
1650
1792
|
end
|
|
1793
|
+
|
|
1794
|
+
a('endsuccs').each do |t, onEnd|
|
|
1795
|
+
t.targets(@scenarioIdx, list)
|
|
1796
|
+
end
|
|
1797
|
+
|
|
1798
|
+
# Check of indirect followers.
|
|
1799
|
+
@property.parent.targets(@scenarioIdx, list) if @property.parent
|
|
1651
1800
|
end
|
|
1652
1801
|
|
|
1653
1802
|
# Compute the turnover generated by this Task for a given Account _account_
|