taskjuggler 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +1144 -2047
- data/README +1 -1
- data/Rakefile +6 -6
- data/data/css/tjmanual.css +20 -0
- data/data/css/tjreport.css +7 -6
- data/doc/AppConfig.html +136 -130
- data/doc/Arguments.html +46 -40
- data/doc/CHANGELOG.html +1162 -2057
- data/doc/COPYING.html +8 -2
- data/doc/Object.html +205 -199
- data/doc/README.html +9 -3
- data/doc/RuntimeConfig.html +75 -69
- data/doc/String.html +69 -63
- data/doc/TaskJuggler.html +350 -291
- data/doc/TaskJuggler/Account.html +26 -20
- data/doc/TaskJuggler/AccountAttribute.html +24 -18
- data/doc/TaskJuggler/AccountScenario.html +24 -18
- data/doc/TaskJuggler/Allocation.html +74 -68
- data/doc/TaskJuggler/AllocationAttribute.html +54 -48
- data/doc/TaskJuggler/AttributeBase.html +172 -93
- data/doc/TaskJuggler/AttributeDefinition.html +22 -16
- data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
- data/doc/TaskJuggler/BatchProcessor.html +263 -257
- data/doc/TaskJuggler/Booking.html +44 -38
- data/doc/TaskJuggler/BookingListAttribute.html +25 -21
- data/doc/TaskJuggler/BooleanAttribute.html +24 -18
- data/doc/TaskJuggler/CSVFile.html +193 -187
- data/doc/TaskJuggler/CellSettingPattern.html +13 -7
- data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
- data/doc/TaskJuggler/Charge.html +49 -43
- data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
- data/doc/TaskJuggler/ChargeSet.html +94 -88
- data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
- data/doc/TaskJuggler/CollisionDetector.html +142 -136
- data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
- data/doc/TaskJuggler/ColumnTable.html +50 -44
- data/doc/TaskJuggler/Daemon.html +71 -50
- data/doc/TaskJuggler/DataCache.html +110 -58
- data/doc/TaskJuggler/DataCacheEntry.html +22 -16
- data/doc/TaskJuggler/DateAttribute.html +24 -18
- data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
- data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
- data/doc/TaskJuggler/DurationAttribute.html +25 -19
- data/doc/TaskJuggler/FileList.html +25 -19
- data/doc/TaskJuggler/FileRecord.html +17 -11
- data/doc/TaskJuggler/FixnumAttribute.html +16 -10
- data/doc/TaskJuggler/FlagListAttribute.html +25 -21
- data/doc/TaskJuggler/FloatAttribute.html +20 -14
- data/doc/TaskJuggler/FormatListAttribute.html +17 -11
- data/doc/TaskJuggler/GanttChart.html +242 -236
- data/doc/TaskJuggler/GanttContainer.html +71 -67
- data/doc/TaskJuggler/GanttHeader.html +113 -107
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
- data/doc/TaskJuggler/GanttLine.html +217 -210
- data/doc/TaskJuggler/GanttLoadStack.html +89 -83
- data/doc/TaskJuggler/GanttMilestone.html +11 -6
- data/doc/TaskJuggler/GanttRouter.html +194 -186
- data/doc/TaskJuggler/GanttTaskBar.html +41 -34
- data/doc/TaskJuggler/HTMLDocument.html +52 -46
- data/doc/TaskJuggler/HTMLGraphics.html +58 -52
- data/doc/TaskJuggler/Interval.html +90 -84
- data/doc/TaskJuggler/IntervalList.html +777 -0
- data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
- data/doc/TaskJuggler/JobInfo.html +36 -30
- data/doc/TaskJuggler/Journal.html +188 -177
- data/doc/TaskJuggler/JournalEntry.html +36 -30
- data/doc/TaskJuggler/JournalEntryList.html +88 -82
- data/doc/TaskJuggler/KeywordArray.html +12 -6
- data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
- data/doc/TaskJuggler/Limits.html +111 -105
- data/doc/TaskJuggler/Limits/Limit.html +71 -65
- data/doc/TaskJuggler/LimitsAttribute.html +21 -15
- data/doc/TaskJuggler/ListAttributeBase.html +16 -10
- data/doc/TaskJuggler/Log.html +111 -105
- data/doc/TaskJuggler/LogFile.html +54 -48
- data/doc/TaskJuggler/LogicalAttribute.html +35 -29
- data/doc/TaskJuggler/LogicalExpression.html +32 -26
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
- data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
- data/doc/TaskJuggler/LogicalFlag.html +24 -18
- data/doc/TaskJuggler/LogicalFunction.html +164 -158
- data/doc/TaskJuggler/LogicalOperation.html +138 -132
- data/doc/TaskJuggler/Macro.html +14 -8
- data/doc/TaskJuggler/MacroTable.html +42 -36
- data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
- data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
- data/doc/TaskJuggler/Message.html +56 -50
- data/doc/TaskJuggler/MessageHandler.html +73 -67
- data/doc/TaskJuggler/Navigator.html +92 -86
- data/doc/TaskJuggler/NavigatorElement.html +88 -82
- data/doc/TaskJuggler/NikuProject.html +15 -9
- data/doc/TaskJuggler/NikuReport.html +405 -370
- data/doc/TaskJuggler/NikuResource.html +13 -7
- data/doc/TaskJuggler/NodeListAttribute.html +13 -9
- data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
- data/doc/TaskJuggler/ProcessIntercom.html +116 -110
- data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
- data/doc/TaskJuggler/Project.html +1064 -895
- data/doc/TaskJuggler/ProjectBroker.html +439 -366
- data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
- data/doc/TaskJuggler/ProjectFileParser.html +329 -319
- data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
- data/doc/TaskJuggler/ProjectRecord.html +66 -60
- data/doc/TaskJuggler/ProjectServer.html +287 -280
- data/doc/TaskJuggler/ProjectServerIface.html +43 -37
- data/doc/TaskJuggler/PropertyAttribute.html +16 -10
- data/doc/TaskJuggler/PropertyList.html +205 -199
- data/doc/TaskJuggler/PropertySet.html +264 -296
- data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
- data/doc/TaskJuggler/Query.html +309 -524
- data/doc/TaskJuggler/RTFHandlers.html +17 -11
- data/doc/TaskJuggler/RTFNavigator.html +33 -27
- data/doc/TaskJuggler/RTFQuery.html +135 -129
- data/doc/TaskJuggler/RTFReport.html +63 -57
- data/doc/TaskJuggler/RTFReportLink.html +55 -49
- data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
- data/doc/TaskJuggler/RealFormat.html +64 -58
- data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
- data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
- data/doc/TaskJuggler/Report.html +294 -249
- data/doc/TaskJuggler/ReportBase.html +229 -223
- data/doc/TaskJuggler/ReportContext.html +52 -46
- data/doc/TaskJuggler/ReportServer.html +143 -137
- data/doc/TaskJuggler/ReportServerIface.html +51 -43
- data/doc/TaskJuggler/ReportServerRecord.html +36 -30
- data/doc/TaskJuggler/ReportServlet.html +167 -140
- data/doc/TaskJuggler/ReportTable.html +137 -131
- data/doc/TaskJuggler/ReportTableCell.html +332 -292
- data/doc/TaskJuggler/ReportTableColumn.html +46 -40
- data/doc/TaskJuggler/ReportTableLegend.html +43 -38
- data/doc/TaskJuggler/ReportTableLine.html +66 -60
- data/doc/TaskJuggler/Resource.html +166 -160
- data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
- data/doc/TaskJuggler/ResourceListRE.html +47 -41
- data/doc/TaskJuggler/ResourceScenario.html +671 -644
- data/doc/TaskJuggler/RichText.html +51 -45
- data/doc/TaskJuggler/RichTextAttribute.html +28 -22
- data/doc/TaskJuggler/RichTextDocument.html +96 -90
- data/doc/TaskJuggler/RichTextElement.html +503 -497
- data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
- data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
- data/doc/TaskJuggler/RichTextImage.html +14 -8
- data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
- data/doc/TaskJuggler/RichTextParser.html +59 -53
- data/doc/TaskJuggler/RichTextScanner.html +184 -178
- data/doc/TaskJuggler/RichTextSnip.html +69 -63
- data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
- data/doc/TaskJuggler/Scenario.html +13 -7
- data/doc/TaskJuggler/ScenarioData.html +40 -34
- data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
- data/doc/TaskJuggler/Scoreboard.html +129 -107
- data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
- data/doc/TaskJuggler/SheetReceiver.html +333 -327
- data/doc/TaskJuggler/SheetSender.html +227 -221
- data/doc/TaskJuggler/Shift.html +26 -20
- data/doc/TaskJuggler/ShiftAssignment.html +45 -39
- data/doc/TaskJuggler/ShiftAssignments.html +178 -172
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
- data/doc/TaskJuggler/ShiftScenario.html +29 -23
- data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
- data/doc/TaskJuggler/SortListAttribute.html +17 -13
- data/doc/TaskJuggler/SourceFileInfo.html +19 -13
- data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
- data/doc/TaskJuggler/StatusSheetReport.html +166 -159
- data/doc/TaskJuggler/StatusSheetSender.html +80 -74
- data/doc/TaskJuggler/StringAttribute.html +20 -14
- data/doc/TaskJuggler/SymbolAttribute.html +16 -10
- data/doc/TaskJuggler/SyntaxReference.html +231 -225
- data/doc/TaskJuggler/TOCEntry.html +46 -40
- data/doc/TaskJuggler/TSResourceRecord.html +15 -9
- data/doc/TaskJuggler/TSTaskRecord.html +16 -10
- data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
- data/doc/TaskJuggler/TableOfContents.html +28 -22
- data/doc/TaskJuggler/TableReport.html +906 -866
- data/doc/TaskJuggler/Task.html +99 -93
- data/doc/TaskJuggler/TaskDependency.html +24 -18
- data/doc/TaskJuggler/TaskListAttribute.html +29 -25
- data/doc/TaskJuggler/TaskListRE.html +46 -39
- data/doc/TaskJuggler/TaskScenario.html +2218 -1965
- data/doc/TaskJuggler/TextFormatter.html +154 -148
- data/doc/TaskJuggler/TextParser.html +362 -348
- data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
- data/doc/TaskJuggler/TextParser/Rule.html +147 -141
- data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
- data/doc/TaskJuggler/TextParser/State.html +88 -82
- data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
- data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
- data/doc/TaskJuggler/TextReport.html +80 -74
- data/doc/TaskJuggler/TextScanner.html +284 -272
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
- data/doc/TaskJuggler/TimeSheet.html +123 -117
- data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
- data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
- data/doc/TaskJuggler/TimeSheetReport.html +206 -199
- data/doc/TaskJuggler/TimeSheetSender.html +27 -21
- data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
- data/doc/TaskJuggler/TimeSheets.html +20 -14
- data/doc/TaskJuggler/Tj3AppBase.html +100 -94
- data/doc/TaskJuggler/Tj3Client.html +407 -483
- data/doc/TaskJuggler/Tj3Daemon.html +116 -107
- data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
- data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
- data/doc/TaskJuggler/Tj3SsSender.html +64 -58
- data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
- data/doc/TaskJuggler/Tj3TsSender.html +51 -45
- data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
- data/doc/TaskJuggler/TjException.html +13 -7
- data/doc/TaskJuggler/TjTime.html +444 -438
- data/doc/TaskJuggler/TjpExample.html +84 -78
- data/doc/TaskJuggler/TjpExportRE.html +356 -349
- data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
- data/doc/TaskJuggler/URLParameter.html +16 -10
- data/doc/TaskJuggler/UserManual.html +185 -179
- data/doc/TaskJuggler/VimSyntax.html +144 -138
- data/doc/TaskJuggler/WebServer.html +46 -39
- data/doc/TaskJuggler/WelcomePage.html +769 -0
- data/doc/TaskJuggler/WorkingHours.html +185 -179
- data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
- data/doc/TaskJuggler/XMLBlob.html +21 -15
- data/doc/TaskJuggler/XMLComment.html +17 -11
- data/doc/TaskJuggler/XMLDocument.html +33 -27
- data/doc/TaskJuggler/XMLElement.html +97 -91
- data/doc/TaskJuggler/XMLNamedText.html +13 -7
- data/doc/TaskJuggler/XMLText.html +32 -26
- data/doc/index.html +601 -563
- data/doc/lib/AccountScenario_rb.html +5 -3
- data/doc/lib/Account_rb.html +5 -3
- data/doc/lib/Allocation_rb.html +5 -3
- data/doc/lib/AppConfig_rb.html +5 -3
- data/doc/lib/AttributeBase_rb.html +5 -3
- data/doc/lib/AttributeDefinition_rb.html +5 -3
- data/doc/lib/Attributes_rb.html +5 -3
- data/doc/lib/BatchProcessor_rb.html +5 -3
- data/doc/lib/Booking_rb.html +5 -3
- data/doc/lib/ChargeSet_rb.html +5 -3
- data/doc/lib/Charge_rb.html +5 -3
- data/doc/lib/DataCache_rb.html +5 -3
- data/doc/lib/FileList_rb.html +5 -3
- data/doc/lib/HTMLDocument_rb.html +5 -3
- data/doc/lib/IntervalList_rb.html +69 -0
- data/doc/lib/Interval_rb.html +5 -3
- data/doc/lib/Journal_rb.html +5 -3
- data/doc/lib/KeywordArray_rb.html +5 -3
- data/doc/lib/KeywordDocumentation_rb.html +5 -3
- data/doc/lib/Limits_rb.html +5 -3
- data/doc/lib/LogFile_rb.html +5 -3
- data/doc/lib/Log_rb.html +5 -3
- data/doc/lib/LogicalExpression_rb.html +5 -3
- data/doc/lib/LogicalFunction_rb.html +5 -3
- data/doc/lib/LogicalOperation_rb.html +5 -3
- data/doc/lib/MacroTable_rb.html +5 -3
- data/doc/lib/MessageHandler_rb.html +5 -3
- data/doc/lib/ProjectFileParser_rb.html +5 -3
- data/doc/lib/ProjectFileScanner_rb.html +5 -3
- data/doc/lib/Project_rb.html +5 -3
- data/doc/lib/PropertyList_rb.html +5 -3
- data/doc/lib/PropertySet_rb.html +5 -3
- data/doc/lib/PropertyTreeNode_rb.html +5 -3
- data/doc/lib/Query_rb.html +5 -3
- data/doc/lib/RTFHandlers_rb.html +5 -3
- data/doc/lib/RTFNavigator_rb.html +5 -3
- data/doc/lib/RTFQuery_rb.html +5 -3
- data/doc/lib/RTFReportLink_rb.html +5 -3
- data/doc/lib/RTFReport_rb.html +5 -3
- data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
- data/doc/lib/RealFormat_rb.html +5 -3
- data/doc/lib/ResourceScenario_rb.html +5 -3
- data/doc/lib/Resource_rb.html +5 -3
- data/doc/lib/RichTextDocument_rb.html +5 -3
- data/doc/lib/RichTextElement_rb.html +5 -3
- data/doc/lib/RichTextFunctionExample_rb.html +5 -3
- data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
- data/doc/lib/RichTextParser_rb.html +5 -3
- data/doc/lib/RichTextScanner_rb.html +5 -3
- data/doc/lib/RichTextSnip_rb.html +5 -3
- data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
- data/doc/lib/RichText_rb.html +5 -3
- data/doc/lib/RuntimeConfig_rb.html +5 -3
- data/doc/lib/ScenarioData_rb.html +5 -3
- data/doc/lib/Scenario_rb.html +5 -3
- data/doc/lib/Scoreboard_rb.html +7 -3
- data/doc/lib/SheetHandlerBase_rb.html +5 -3
- data/doc/lib/SheetReceiver_rb.html +5 -3
- data/doc/lib/SheetSender_rb.html +5 -3
- data/doc/lib/ShiftAssignments_rb.html +5 -3
- data/doc/lib/ShiftScenario_rb.html +5 -3
- data/doc/lib/Shift_rb.html +5 -3
- data/doc/lib/SimpleQueryExpander_rb.html +5 -3
- data/doc/lib/SourceFileInfo_rb.html +5 -3
- data/doc/lib/StatusSheetReceiver_rb.html +5 -3
- data/doc/lib/StatusSheetSender_rb.html +5 -3
- data/doc/lib/SyntaxReference_rb.html +5 -3
- data/doc/lib/TOCEntry_rb.html +5 -3
- data/doc/lib/TableColumnDefinition_rb.html +5 -3
- data/doc/lib/TableOfContents_rb.html +5 -3
- data/doc/lib/TaskDependency_rb.html +5 -3
- data/doc/lib/TaskJuggler_rb.html +5 -3
- data/doc/lib/TaskScenario_rb.html +5 -3
- data/doc/lib/Task_rb.html +5 -3
- data/doc/lib/TextFormatter_rb.html +6 -4
- data/doc/lib/TextParser/Pattern_rb.html +5 -3
- data/doc/lib/TextParser/Rule_rb.html +5 -3
- data/doc/lib/TextParser/StackElement_rb.html +5 -3
- data/doc/lib/TextParser/State_rb.html +6 -4
- data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
- data/doc/lib/TextParser_rb.html +5 -3
- data/doc/lib/TextScanner_rb.html +5 -3
- data/doc/lib/TimeSheetReceiver_rb.html +5 -3
- data/doc/lib/TimeSheetSender_rb.html +5 -3
- data/doc/lib/TimeSheetSummary_rb.html +6 -4
- data/doc/lib/TimeSheets_rb.html +5 -3
- data/doc/lib/Tj3AppBase_rb.html +5 -3
- data/doc/lib/Tj3Config_rb.html +5 -3
- data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
- data/doc/lib/TjException_rb.html +5 -3
- data/doc/lib/TjTime_rb.html +5 -3
- data/doc/lib/TjpExample_rb.html +5 -3
- data/doc/lib/TjpSyntaxRules_rb.html +5 -3
- data/doc/lib/URLParameter_rb.html +5 -3
- data/doc/lib/UTF8String_rb.html +5 -3
- data/doc/lib/UserManual_rb.html +5 -3
- data/doc/lib/VimSyntax_rb.html +6 -4
- data/doc/lib/WorkingHours_rb.html +5 -3
- data/doc/lib/XMLDocument_rb.html +5 -3
- data/doc/lib/XMLElement_rb.html +5 -3
- data/doc/lib/daemon/Daemon_rb.html +5 -3
- data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
- data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
- data/doc/lib/daemon/ProjectServer_rb.html +5 -3
- data/doc/lib/daemon/ReportServer_rb.html +5 -3
- data/doc/lib/daemon/ReportServlet_rb.html +69 -0
- data/doc/lib/daemon/WebServer_rb.html +9 -3
- data/doc/lib/daemon/WelcomePage_rb.html +71 -0
- data/doc/lib/deep_copy_rb.html +5 -3
- data/doc/lib/reports/CSVFile_rb.html +5 -3
- data/doc/lib/reports/CollisionDetector_rb.html +5 -3
- data/doc/lib/reports/ColumnTable_rb.html +5 -3
- data/doc/lib/reports/GanttChart_rb.html +5 -3
- data/doc/lib/reports/GanttContainer_rb.html +5 -3
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
- data/doc/lib/reports/GanttHeader_rb.html +5 -3
- data/doc/lib/reports/GanttLine_rb.html +5 -3
- data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
- data/doc/lib/reports/GanttMilestone_rb.html +5 -3
- data/doc/lib/reports/GanttRouter_rb.html +5 -3
- data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
- data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
- data/doc/lib/reports/Navigator_rb.html +5 -3
- data/doc/lib/reports/NikuReport_rb.html +5 -3
- data/doc/lib/reports/ReportBase_rb.html +5 -3
- data/doc/lib/reports/ReportContext_rb.html +5 -3
- data/doc/lib/reports/ReportTableCell_rb.html +5 -3
- data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
- data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
- data/doc/lib/reports/ReportTableLine_rb.html +5 -3
- data/doc/lib/reports/ReportTable_rb.html +5 -3
- data/doc/lib/reports/Report_rb.html +5 -3
- data/doc/lib/reports/ResourceListRE_rb.html +5 -3
- data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
- data/doc/lib/reports/TableReport_rb.html +5 -3
- data/doc/lib/reports/TaskListRE_rb.html +5 -3
- data/doc/lib/reports/TextReport_rb.html +5 -3
- data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
- data/doc/lib/reports/TjpExportRE_rb.html +5 -3
- data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
- data/doc/lib/tj3client_rb.html +5 -3
- data/doc/lib/tj3d_rb.html +6 -4
- data/doc/lib/tj3man_rb.html +5 -3
- data/doc/lib/tj3ss_receiver_rb.html +5 -3
- data/doc/lib/tj3ss_sender_rb.html +5 -3
- data/doc/lib/tj3ts_receiver_rb.html +5 -3
- data/doc/lib/tj3ts_sender_rb.html +5 -3
- data/doc/lib/tj3ts_summary_rb.html +5 -3
- data/examples/tutorial.tjp +13 -5
- data/gem_spec.rb +3 -0
- data/lib/Account.rb +2 -1
- data/lib/AccountScenario.rb +2 -1
- data/lib/Allocation.rb +2 -1
- data/lib/AppConfig.rb +2 -1
- data/lib/AttributeBase.rb +19 -5
- data/lib/AttributeDefinition.rb +2 -1
- data/lib/Attributes.rb +49 -38
- data/lib/BatchProcessor.rb +2 -1
- data/lib/Booking.rb +2 -1
- data/lib/Charge.rb +2 -1
- data/lib/ChargeSet.rb +2 -1
- data/lib/DataCache.rb +15 -1
- data/lib/FileList.rb +2 -1
- data/lib/HTMLDocument.rb +2 -1
- data/lib/Interval.rb +2 -1
- data/lib/IntervalList.rb +100 -0
- data/lib/Journal.rb +8 -2
- data/lib/KeywordArray.rb +2 -1
- data/lib/KeywordDocumentation.rb +10 -6
- data/lib/Limits.rb +2 -1
- data/lib/Log.rb +3 -2
- data/lib/LogFile.rb +2 -1
- data/lib/LogicalExpression.rb +2 -1
- data/lib/LogicalFunction.rb +2 -1
- data/lib/LogicalOperation.rb +2 -1
- data/lib/MacroTable.rb +2 -1
- data/lib/MessageHandler.rb +2 -1
- data/lib/Project.rb +92 -25
- data/lib/ProjectFileParser.rb +7 -2
- data/lib/ProjectFileScanner.rb +2 -1
- data/lib/PropertyList.rb +2 -1
- data/lib/PropertySet.rb +2 -6
- data/lib/PropertyTreeNode.rb +22 -44
- data/lib/Query.rb +32 -13
- data/lib/RTFHandlers.rb +2 -1
- data/lib/RTFNavigator.rb +2 -1
- data/lib/RTFQuery.rb +3 -2
- data/lib/RTFReport.rb +2 -1
- data/lib/RTFReportLink.rb +2 -1
- data/lib/RTFWithQuerySupport.rb +2 -1
- data/lib/RealFormat.rb +2 -1
- data/lib/Resource.rb +2 -1
- data/lib/ResourceScenario.rb +35 -14
- data/lib/RichText.rb +2 -1
- data/lib/RichTextDocument.rb +2 -1
- data/lib/RichTextElement.rb +2 -1
- data/lib/RichTextFunctionExample.rb +2 -1
- data/lib/RichTextFunctionHandler.rb +2 -1
- data/lib/RichTextParser.rb +2 -1
- data/lib/RichTextScanner.rb +2 -1
- data/lib/RichTextSnip.rb +2 -1
- data/lib/RichTextSyntaxRules.rb +2 -1
- data/lib/RuntimeConfig.rb +2 -1
- data/lib/Scenario.rb +2 -1
- data/lib/ScenarioData.rb +2 -1
- data/lib/Scoreboard.rb +27 -8
- data/lib/SheetHandlerBase.rb +2 -1
- data/lib/SheetReceiver.rb +2 -1
- data/lib/SheetSender.rb +2 -1
- data/lib/Shift.rb +2 -1
- data/lib/ShiftAssignments.rb +2 -1
- data/lib/ShiftScenario.rb +2 -1
- data/lib/SimpleQueryExpander.rb +2 -1
- data/lib/SourceFileInfo.rb +2 -1
- data/lib/StatusSheetReceiver.rb +2 -1
- data/lib/StatusSheetSender.rb +2 -1
- data/lib/SyntaxReference.rb +2 -1
- data/lib/TOCEntry.rb +2 -1
- data/lib/TableColumnDefinition.rb +9 -2
- data/lib/TableOfContents.rb +2 -1
- data/lib/Task.rb +2 -1
- data/lib/TaskDependency.rb +2 -1
- data/lib/TaskJuggler.rb +8 -6
- data/lib/TaskScenario.rb +337 -153
- data/lib/TextFormatter.rb +3 -2
- data/lib/TextParser.rb +7 -2
- data/lib/TextParser/Pattern.rb +2 -1
- data/lib/TextParser/Rule.rb +2 -1
- data/lib/TextParser/StackElement.rb +2 -1
- data/lib/TextParser/State.rb +3 -2
- data/lib/TextParser/TokenDoc.rb +2 -1
- data/lib/TextScanner.rb +12 -5
- data/lib/TimeSheetReceiver.rb +2 -1
- data/lib/TimeSheetSender.rb +2 -1
- data/lib/TimeSheetSummary.rb +3 -2
- data/lib/TimeSheets.rb +2 -1
- data/lib/Tj3AppBase.rb +6 -5
- data/lib/Tj3Config.rb +5 -4
- data/lib/Tj3SheetAppBase.rb +2 -1
- data/lib/TjException.rb +2 -1
- data/lib/TjTime.rb +2 -1
- data/lib/TjpExample.rb +2 -1
- data/lib/TjpSyntaxRules.rb +264 -65
- data/lib/URLParameter.rb +2 -1
- data/lib/UTF8String.rb +2 -1
- data/lib/UserManual.rb +2 -1
- data/lib/VimSyntax.rb +3 -2
- data/lib/WorkingHours.rb +2 -1
- data/lib/XMLDocument.rb +2 -1
- data/lib/XMLElement.rb +2 -1
- data/lib/daemon/Daemon.rb +3 -1
- data/lib/daemon/ProcessIntercom.rb +3 -1
- data/lib/daemon/ProjectBroker.rb +84 -32
- data/lib/daemon/ProjectServer.rb +5 -3
- data/lib/daemon/ReportServer.rb +8 -5
- data/lib/daemon/ReportServlet.rb +166 -0
- data/lib/daemon/WebServer.rb +6 -150
- data/lib/daemon/WelcomePage.rb +80 -0
- data/lib/deep_copy.rb +2 -1
- data/lib/reports/CSVFile.rb +2 -1
- data/lib/reports/CollisionDetector.rb +2 -1
- data/lib/reports/ColumnTable.rb +2 -1
- data/lib/reports/GanttChart.rb +2 -1
- data/lib/reports/GanttContainer.rb +3 -4
- data/lib/reports/GanttHeader.rb +2 -1
- data/lib/reports/GanttHeaderScaleItem.rb +2 -1
- data/lib/reports/GanttLine.rb +12 -10
- data/lib/reports/GanttLoadStack.rb +2 -1
- data/lib/reports/GanttMilestone.rb +3 -3
- data/lib/reports/GanttRouter.rb +4 -1
- data/lib/reports/GanttTaskBar.rb +9 -7
- data/lib/reports/HTMLGraphics.rb +2 -1
- data/lib/reports/Navigator.rb +2 -1
- data/lib/reports/NikuReport.rb +79 -49
- data/lib/reports/Report.rb +42 -10
- data/lib/reports/ReportBase.rb +2 -1
- data/lib/reports/ReportContext.rb +2 -1
- data/lib/reports/ReportTable.rb +2 -1
- data/lib/reports/ReportTableCell.rb +63 -28
- data/lib/reports/ReportTableColumn.rb +2 -1
- data/lib/reports/ReportTableLegend.rb +5 -5
- data/lib/reports/ReportTableLine.rb +2 -1
- data/lib/reports/ResourceListRE.rb +2 -1
- data/lib/reports/StatusSheetReport.rb +4 -2
- data/lib/reports/TableReport.rb +42 -38
- data/lib/reports/TaskListRE.rb +4 -2
- data/lib/reports/TextReport.rb +2 -1
- data/lib/reports/TimeSheetReport.rb +4 -2
- data/lib/reports/TjpExportRE.rb +4 -2
- data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
- data/lib/tj3client.rb +19 -36
- data/lib/tj3d.rb +6 -2
- data/lib/tj3man.rb +4 -3
- data/lib/tj3ss_receiver.rb +2 -1
- data/lib/tj3ss_sender.rb +2 -1
- data/lib/tj3ts_receiver.rb +2 -1
- data/lib/tj3ts_sender.rb +2 -1
- data/lib/tj3ts_summary.rb +2 -1
- data/manual/Day_To_Day_Juggling +36 -0
- data/manual/How_To_Contribute +9 -4
- data/manual/Installation +10 -3
- data/manual/TaskJuggler_Internals +0 -2
- data/manual/Tutorial +25 -3
- data/prj_cfg.rb +4 -2
- data/spec/IntervalList_spec.rb +138 -0
- data/spec/ProjectBroker_spec.rb +133 -0
- data/tasks/changelog.rake +41 -24
- data/tasks/csts.rake +1 -0
- data/tasks/gem.rake +1 -0
- data/tasks/rcov.rake +1 -1
- data/tasks/spec.rake +7 -0
- data/tasks/test.rake +1 -0
- data/test/MessageChecker.rb +2 -1
- data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
- data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
- data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
- data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
- data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
- data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
- data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
- data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
- data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
- data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
- data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
- data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
- data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
- data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
- data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
- data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
- data/test/TestSuite/StatusSheets/sender.log +256 -0
- data/test/TestSuite/StatusSheets/statussheets.log +9 -0
- data/test/TestSuite/StatusSheets/tj3d.log +395 -0
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
- data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
- data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
- data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
- data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
- data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
- data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
- data/test/all.rb +2 -4
- data/test/test_BatchProcessor.rb +2 -1
- data/test/test_CSV-Reports.rb +34 -23
- data/test/test_CSVFile.rb +2 -1
- data/test/test_CollisionDetector.rb +3 -2
- data/test/test_Journal.rb +2 -1
- data/test/test_Limits.rb +2 -1
- data/test/test_LogicalExpression.rb +2 -1
- data/test/test_MacroTable.rb +2 -1
- data/test/test_Project.rb +3 -2
- data/test/test_ProjectFileScanner.rb +2 -1
- data/test/test_PropertySet.rb +2 -1
- data/test/test_Query.rb +2 -1
- data/test/test_RealFormat.rb +2 -1
- data/test/test_ReportGenerator.rb +2 -1
- data/test/test_RichText.rb +2 -1
- data/test/test_Scheduler.rb +2 -1
- data/test/test_ShiftAssignments.rb +2 -1
- data/test/test_SimpleQueryExpander.rb +2 -1
- data/test/test_Syntax.rb +2 -1
- data/test/test_TextFormatter.rb +3 -2
- data/test/test_TjTime.rb +2 -1
- data/test/test_TjpExample.rb +2 -1
- data/test/test_URLParameter.rb +2 -1
- data/test/test_UTF8String.rb +2 -1
- data/test/test_WorkingHours.rb +2 -1
- data/test/test_deep_copy.rb +2 -1
- metadata +74 -20
- data/doc/StringIO.html +0 -595
- data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
- data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
- data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
data/lib/reports/GanttRouter.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = GanttRouter.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -47,6 +48,8 @@ class TaskJuggler
|
|
|
47
48
|
# Hash objects.
|
|
48
49
|
routes = []
|
|
49
50
|
fromToPoints.each do |touple|
|
|
51
|
+
# Ignore lines where start is after end.
|
|
52
|
+
next if touple[0] > touple[2]
|
|
50
53
|
routes << {
|
|
51
54
|
:startX => touple[0],
|
|
52
55
|
:startY => touple[1],
|
data/lib/reports/GanttTaskBar.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = GanttTaskBar.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -25,9 +26,8 @@ class TaskJuggler
|
|
|
25
26
|
# Create a GanttContainer object based on the following information: _line_
|
|
26
27
|
# is a reference to the GanttLine. _xStart_ is the left edge of the task in
|
|
27
28
|
# chart coordinates. _xEnd_ is the right edge.
|
|
28
|
-
def initialize(
|
|
29
|
-
@
|
|
30
|
-
@scenarioIdx = scenarioIdx
|
|
29
|
+
def initialize(query, lineHeight, xStart, xEnd, y)
|
|
30
|
+
@query = query
|
|
31
31
|
@lineHeight = lineHeight
|
|
32
32
|
@start = xStart
|
|
33
33
|
@end = xEnd
|
|
@@ -87,9 +87,11 @@ class TaskJuggler
|
|
|
87
87
|
# The we draw the filling.
|
|
88
88
|
html << rectToHTML(xStart + 1, yCenter - @@size + 1, width - 2,
|
|
89
89
|
2 * @@size - 2, 'taskbar')
|
|
90
|
-
# And then the progress bar. If
|
|
91
|
-
if @
|
|
92
|
-
|
|
90
|
+
# And then the progress bar. If query is null we assume 50% completion.
|
|
91
|
+
if @query
|
|
92
|
+
@query.attributeId = 'complete'
|
|
93
|
+
@query.process
|
|
94
|
+
completion = @query.result / 100.0
|
|
93
95
|
else
|
|
94
96
|
completion = 0.5
|
|
95
97
|
end
|
data/lib/reports/HTMLGraphics.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = HTMLGraphics.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/reports/Navigator.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Navigator.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
data/lib/reports/NikuReport.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = NikuReport.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -61,6 +62,10 @@ class TaskJuggler
|
|
|
61
62
|
# A Hash to map ClarityRID to Resource
|
|
62
63
|
@resources = {}
|
|
63
64
|
|
|
65
|
+
# Unallocated and vacation time during the report period for all
|
|
66
|
+
# resources hashed by ClarityId. Values are in days.
|
|
67
|
+
@resourcesFreeWork = {}
|
|
68
|
+
|
|
64
69
|
# Resources total effort during the report period hashed by ClarityId
|
|
65
70
|
@resourcesTotalEffort = {}
|
|
66
71
|
|
|
@@ -90,7 +95,7 @@ class TaskJuggler
|
|
|
90
95
|
thead << (tr = XMLElement.new('tr', 'class' => 'tabline'))
|
|
91
96
|
# First line
|
|
92
97
|
tr << htmlTabCell('Project', true, 'right')
|
|
93
|
-
@projects.
|
|
98
|
+
@projects.keys.sort.each do |projectId|
|
|
94
99
|
# Don't include projects without allocations.
|
|
95
100
|
next if projectTotal(projectId) <= 0.0
|
|
96
101
|
name = @projects[projectId].name
|
|
@@ -104,7 +109,7 @@ class TaskJuggler
|
|
|
104
109
|
# Second line
|
|
105
110
|
thead << (tr = XMLElement.new('tr', 'class' => 'tabline'))
|
|
106
111
|
tr << htmlTabCell('Resource', true, 'left')
|
|
107
|
-
@projects.
|
|
112
|
+
@projects.keys.sort.each do |projectId|
|
|
108
113
|
# Don't include projects without allocations.
|
|
109
114
|
next if projectTotal(projectId) <= 0.0
|
|
110
115
|
tr << htmlTabCell(projectId, true, 'center')
|
|
@@ -113,12 +118,12 @@ class TaskJuggler
|
|
|
113
118
|
|
|
114
119
|
# The actual content. One line per resource.
|
|
115
120
|
table << (tbody = XMLElement.new('tbody'))
|
|
116
|
-
@resourcesTotalEffort.
|
|
121
|
+
@resourcesTotalEffort.keys.sort.each do |resourceId|
|
|
117
122
|
tbody << (tr = XMLElement.new('tr', 'class' => 'tabline'))
|
|
118
123
|
tr << htmlTabCell("#{@resources[resourceId].name} (#{resourceId})",
|
|
119
124
|
true, 'left')
|
|
120
125
|
|
|
121
|
-
@projects.
|
|
126
|
+
@projects.keys.sort.each do |projectId|
|
|
122
127
|
next if projectTotal(projectId) <= 0.0
|
|
123
128
|
value = sum(projectId, resourceId)
|
|
124
129
|
tr << htmlTabCell(value >= 0.01 ? format("%.2f", value) : '')
|
|
@@ -130,7 +135,7 @@ class TaskJuggler
|
|
|
130
135
|
# Project totals
|
|
131
136
|
tbody << (tr = XMLElement.new('tr', 'class' => 'tabline'))
|
|
132
137
|
tr << htmlTabCell('Total', 'true', 'left')
|
|
133
|
-
@projects.
|
|
138
|
+
@projects.keys.sort.each do |projectId|
|
|
134
139
|
next if projectTotal(projectId) <= 0.0
|
|
135
140
|
tr << htmlTabCell(format("%.2f", projectTotal(projectId)), true,
|
|
136
141
|
'right')
|
|
@@ -161,16 +166,15 @@ EOT
|
|
|
161
166
|
nikuDataBus << (projects = XMLElement.new('Projects'))
|
|
162
167
|
|
|
163
168
|
timeFormat = '%Y-%m-%dT%H:%M:%S'
|
|
164
|
-
@projects.
|
|
165
|
-
|
|
166
|
-
next if projectTotal(prj.id) <= 0.0
|
|
167
|
-
|
|
169
|
+
@projects.keys.sort.each do |projectId|
|
|
170
|
+
prj = @projects[projectId]
|
|
168
171
|
projects << (project =
|
|
169
172
|
XMLElement.new('Project',
|
|
170
173
|
'name' => prj.name,
|
|
171
174
|
'projectID' => prj.id))
|
|
172
175
|
project << (resources = XMLElement.new('Resources'))
|
|
173
|
-
prj.resources.
|
|
176
|
+
prj.resources.keys.sort.each do |resourceId|
|
|
177
|
+
res = prj.resources[resourceId]
|
|
174
178
|
resources << (resource =
|
|
175
179
|
XMLElement.new('Resource',
|
|
176
180
|
'resourceID' => res.id,
|
|
@@ -199,22 +203,23 @@ EOT
|
|
|
199
203
|
table << (row = [])
|
|
200
204
|
# First column is the resource name and ID.
|
|
201
205
|
row << ""
|
|
202
|
-
@projects.
|
|
206
|
+
projectIds = @projects.keys.sort
|
|
207
|
+
projectIds.each do |projectId|
|
|
203
208
|
row << @projects[projectId].name
|
|
204
209
|
end
|
|
205
210
|
|
|
206
211
|
# Header line with project IDs
|
|
207
212
|
table << (row = [])
|
|
208
213
|
row << "Resource"
|
|
209
|
-
|
|
214
|
+
projectIds.each do |projectId|
|
|
210
215
|
row << projectId
|
|
211
216
|
end
|
|
212
217
|
|
|
213
|
-
@resourcesTotalEffort.
|
|
218
|
+
@resourcesTotalEffort.keys.sort.each do |resourceId|
|
|
214
219
|
# Add one line per resource.
|
|
215
220
|
table << (row = [])
|
|
216
221
|
row << "#{@resources[resourceId].name} (#{resourceId})"
|
|
217
|
-
|
|
222
|
+
projectIds.each do |projectId|
|
|
218
223
|
row << sum(projectId, resourceId)
|
|
219
224
|
end
|
|
220
225
|
end
|
|
@@ -282,6 +287,22 @@ EOT
|
|
|
282
287
|
@report.get('rollupResource'),
|
|
283
288
|
@report.get('openNodes'))
|
|
284
289
|
|
|
290
|
+
# Prepare a template for the Query we will use to get all the data.
|
|
291
|
+
queryAttrs = { 'project' => @project,
|
|
292
|
+
'scopeProperty' => nil,
|
|
293
|
+
'scenarioIdx' => @scenarioIdx,
|
|
294
|
+
'loadUnit' => a('loadUnit'),
|
|
295
|
+
'numberFormat' => a('numberFormat'),
|
|
296
|
+
'timeFormat' => a('timeFormat'),
|
|
297
|
+
'currencyFormat' => a('currencyFormat'),
|
|
298
|
+
'start' => a('start'), 'end' => a('end'),
|
|
299
|
+
'costAccount' => a('costAccount'),
|
|
300
|
+
'revenueAccount' => a('revenueAccount') }
|
|
301
|
+
query = Query.new(queryAttrs)
|
|
302
|
+
|
|
303
|
+
# Calculate the number of working days in the report interval.
|
|
304
|
+
workingDays = @project.workingDays(Interval.new(a('start'), a('end')))
|
|
305
|
+
|
|
285
306
|
resourceList.each do |resource|
|
|
286
307
|
# We only care about leaf resources that have the custom attribute
|
|
287
308
|
# 'ClarityRID' set.
|
|
@@ -289,33 +310,28 @@ EOT
|
|
|
289
310
|
(resourceId = resource.get('ClarityRID')).nil? ||
|
|
290
311
|
resourceId.empty?
|
|
291
312
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
'property' => resource,
|
|
295
|
-
'scopeProperty' => nil,
|
|
296
|
-
'scenarioIdx' => @scenarioIdx,
|
|
297
|
-
'loadUnit' => a('loadUnit'),
|
|
298
|
-
'numberFormat' => a('numberFormat'),
|
|
299
|
-
'timeFormat' => a('timeFormat'),
|
|
300
|
-
'currencyFormat' => a('currencyFormat'),
|
|
301
|
-
'start' => a('start'), 'end' => a('end'),
|
|
302
|
-
'costAccount' => a('costAccount'),
|
|
303
|
-
'revenueAccount' => a('revenueAccount') }
|
|
304
|
-
|
|
305
|
-
query = Query.new(queryAttrs)
|
|
313
|
+
|
|
314
|
+
query.property = resource
|
|
306
315
|
|
|
307
316
|
# First get the allocated effort.
|
|
308
317
|
query.attributeId = 'effort'
|
|
309
318
|
query.process
|
|
319
|
+
# Effort in resource days
|
|
310
320
|
total = query.to_num
|
|
311
321
|
|
|
312
|
-
#
|
|
313
|
-
query.attributeId = 'freework'
|
|
314
|
-
query.process
|
|
315
|
-
total += query.to_num
|
|
316
|
-
|
|
322
|
+
# Ignore resources that have no work allocations.
|
|
317
323
|
next if total <= 0.0
|
|
318
324
|
|
|
325
|
+
# A fully allocated resource should always have a total of 1.0 per
|
|
326
|
+
# working day. If the total is larger, we assume unpaid overtime. If
|
|
327
|
+
# it's less, the resource was either not fully allocated or had less
|
|
328
|
+
# working hours or was on vacation.
|
|
329
|
+
if total >= workingDays
|
|
330
|
+
@resourcesFreeWork[resourceId] = 0.0
|
|
331
|
+
else
|
|
332
|
+
@resourcesFreeWork[resourceId] = workingDays - total
|
|
333
|
+
total = workingDays
|
|
334
|
+
end
|
|
319
335
|
@resources[resourceId] = resource
|
|
320
336
|
|
|
321
337
|
# This is the maximum possible work of this resource in the report
|
|
@@ -337,7 +353,8 @@ EOT
|
|
|
337
353
|
taskList = PropertyList.new(@project.tasks)
|
|
338
354
|
taskList.setSorting(@report.get('sortTasks'))
|
|
339
355
|
taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
|
|
340
|
-
@report.get('rollupTask'),
|
|
356
|
+
@report.get('rollupTask'),
|
|
357
|
+
@report.get('openNodes'))
|
|
341
358
|
|
|
342
359
|
|
|
343
360
|
taskList.each do |task|
|
|
@@ -390,33 +407,46 @@ EOT
|
|
|
390
407
|
'No tasks with the custom attributes ClarityPID and ClarityPName ' +
|
|
391
408
|
'were found!'
|
|
392
409
|
end
|
|
410
|
+
|
|
411
|
+
# If the user did specify a project ID and name to collect the vacation
|
|
412
|
+
# time, we'll add this as a project as well.
|
|
413
|
+
if (id = @report.get('timeOffId')) && (name = @report.get('timeOffName'))
|
|
414
|
+
@projects[id] = project = NikuProject.new(id, name)
|
|
415
|
+
@resources.each do |resourceId, resource|
|
|
416
|
+
project.resources[resourceId] = r = NikuResource.new(resourceId)
|
|
417
|
+
r.sum = @resourcesFreeWork[resourceId]
|
|
418
|
+
end
|
|
419
|
+
end
|
|
393
420
|
end
|
|
394
421
|
|
|
395
422
|
# Compute the total effort each Resource is allocated to the Task objects
|
|
396
423
|
# that have the same ClarityPID.
|
|
397
424
|
def computeProjectAllocations
|
|
425
|
+
# Prepare a template for the Query we will use to get all the data.
|
|
426
|
+
queryAttrs = { 'project' => @project,
|
|
427
|
+
'scenarioIdx' => @scenarioIdx,
|
|
428
|
+
'loadUnit' => a('loadUnit'),
|
|
429
|
+
'numberFormat' => a('numberFormat'),
|
|
430
|
+
'timeFormat' => a('timeFormat'),
|
|
431
|
+
'currencyFormat' => a('currencyFormat'),
|
|
432
|
+
'start' => a('start'), 'end' => a('end'),
|
|
433
|
+
'costAccount' => a('costAccount'),
|
|
434
|
+
'revenueAccount' => a('revenueAccount') }
|
|
435
|
+
query = Query.new(queryAttrs)
|
|
436
|
+
|
|
437
|
+
timeOffId = @report.get('timeOffId')
|
|
398
438
|
@projects.each_value do |project|
|
|
439
|
+
next if project.id == timeOffId
|
|
399
440
|
project.tasks.each do |task|
|
|
400
441
|
task['assignedresources', @scenarioIdx].each do |resource|
|
|
401
442
|
# Only consider resources that are in the filtered resource list.
|
|
402
443
|
next unless @resources[resource.get('ClarityRID')]
|
|
403
444
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
'property' => task,
|
|
407
|
-
'scopeProperty' => resource,
|
|
408
|
-
'scenarioIdx' => @scenarioIdx,
|
|
409
|
-
'loadUnit' => a('loadUnit'),
|
|
410
|
-
'numberFormat' => a('numberFormat'),
|
|
411
|
-
'timeFormat' => a('timeFormat'),
|
|
412
|
-
'currencyFormat' => a('currencyFormat'),
|
|
413
|
-
'start' => a('start'), 'end' => a('end'),
|
|
414
|
-
'costAccount' => a('costAccount'),
|
|
415
|
-
'revenueAccount' => a('revenueAccount') }
|
|
416
|
-
|
|
417
|
-
query = Query.new(queryAttrs)
|
|
445
|
+
query.property = task
|
|
446
|
+
query.scopeProperty = resource
|
|
418
447
|
query.attributeId = 'effort'
|
|
419
448
|
query.process
|
|
449
|
+
|
|
420
450
|
work = query.to_num
|
|
421
451
|
|
|
422
452
|
# If the resource was not actually working on this task during the
|
data/lib/reports/Report.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Report.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -46,11 +47,20 @@ class TaskJuggler
|
|
|
46
47
|
# The generate function is where the action happens in this class. The
|
|
47
48
|
# report defined by all the class attributes and report elements is
|
|
48
49
|
# generated according the the requested output format(s).
|
|
49
|
-
|
|
50
|
+
# _requestedFormats_ can be a list of formats that should be generated (e.
|
|
51
|
+
# g. :html, :csv, etc.).
|
|
52
|
+
def generate(requestedFormats = nil)
|
|
50
53
|
generateIntermediateFormat
|
|
51
54
|
|
|
52
|
-
#
|
|
53
|
-
|
|
55
|
+
# We either generate the requested formats or the list of formats that
|
|
56
|
+
# was specified in the report definition.
|
|
57
|
+
(requestedFormats || get('formats')).each do |format|
|
|
58
|
+
if @name.empty?
|
|
59
|
+
error('empty_report_file_name',
|
|
60
|
+
"Report #{@id} has output formats requested, but the " +
|
|
61
|
+
"file name is empty.")
|
|
62
|
+
end
|
|
63
|
+
|
|
54
64
|
case format
|
|
55
65
|
when :html
|
|
56
66
|
generateHTML
|
|
@@ -132,6 +142,15 @@ class TaskJuggler
|
|
|
132
142
|
|
|
133
143
|
# Generate an HTML version of the report.
|
|
134
144
|
def generateHTML
|
|
145
|
+
return nil unless @content
|
|
146
|
+
|
|
147
|
+
unless @content.respond_to?('to_html')
|
|
148
|
+
warning('html_not_supported',
|
|
149
|
+
"HTML format is not supported for report #{@id} of " +
|
|
150
|
+
"type #{@typeSpec}.")
|
|
151
|
+
return nil
|
|
152
|
+
end
|
|
153
|
+
|
|
135
154
|
html = HTMLDocument.new(:strict)
|
|
136
155
|
head = html.generateHead("TaskJuggler Report - #{@name}",
|
|
137
156
|
'description' => 'TaskJuggler Report',
|
|
@@ -145,10 +164,9 @@ class TaskJuggler
|
|
|
145
164
|
end
|
|
146
165
|
cssFile = IO.read(cssFileName)
|
|
147
166
|
if cssFile.empty?
|
|
148
|
-
|
|
149
|
-
Cannot read '#{cssFileName}'. Make sure the file is not
|
|
150
|
-
read access permission.
|
|
151
|
-
EOT
|
|
167
|
+
error('css_file_error',
|
|
168
|
+
"Cannot read '#{cssFileName}'. Make sure the file is not " +
|
|
169
|
+
"empty and you have read access permission.")
|
|
152
170
|
end
|
|
153
171
|
head << XMLElement.new('meta', 'http-equiv' => 'Content-Style-Type',
|
|
154
172
|
'content' => 'text/css; charset=utf-8')
|
|
@@ -181,7 +199,7 @@ EOT
|
|
|
181
199
|
# Make sure we have some margins around the report.
|
|
182
200
|
body << (frame = XMLElement.new('div', 'class' => 'tj_page'))
|
|
183
201
|
|
|
184
|
-
frame << @content.to_html
|
|
202
|
+
frame << @content.to_html
|
|
185
203
|
|
|
186
204
|
# The footer with some administrative information.
|
|
187
205
|
frame << (div = XMLElement.new('div', 'class' => 'copyright'))
|
|
@@ -209,9 +227,16 @@ EOT
|
|
|
209
227
|
|
|
210
228
|
# Generate a CSV version of the report.
|
|
211
229
|
def generateCSV
|
|
230
|
+
# The CSV format can only handle the first element of a report.
|
|
212
231
|
return nil unless @content
|
|
213
232
|
|
|
214
|
-
|
|
233
|
+
unless @content.respond_to?('to_csv')
|
|
234
|
+
warning('csv_not_supported',
|
|
235
|
+
"CSV format is not supported for report #{@id} of " +
|
|
236
|
+
"type #{@typeSpec}.")
|
|
237
|
+
return nil
|
|
238
|
+
end
|
|
239
|
+
|
|
215
240
|
return nil unless (csv = @content.to_csv)
|
|
216
241
|
|
|
217
242
|
# Use the CSVFile class to write the Array of Arrays to a colon
|
|
@@ -245,6 +270,13 @@ EOT
|
|
|
245
270
|
|
|
246
271
|
# Generate Niku report
|
|
247
272
|
def generateNiku
|
|
273
|
+
unless @content.respond_to?('to_niku')
|
|
274
|
+
warning('niku_not_supported',
|
|
275
|
+
"niku format is not supported for report #{@id} of " +
|
|
276
|
+
"type #{@typeSpec}.")
|
|
277
|
+
return nil
|
|
278
|
+
end
|
|
279
|
+
|
|
248
280
|
begin
|
|
249
281
|
f = @name == '.' ? $stdout :
|
|
250
282
|
File.new(((@name[0] == '/' ? '' : @project.outputDir) +
|
data/lib/reports/ReportBase.rb
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ReportBase.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ReportContext.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
7
|
+
# by Chris Schlaeger <chris@linux.com>
|
|
7
8
|
#
|
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|