taskjuggler 0.0.4 → 0.0.5
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/README +1 -1
- data/bin/tj3client +3 -0
- data/bin/tj3d +3 -0
- data/bin/tj3ts_receiver +3 -0
- data/bin/tj3ts_sender +3 -0
- data/bin/tj3ts_summary +3 -0
- data/data/css/tjmanual.css +14 -0
- data/data/css/tjreport.css +233 -21
- data/data/scripts/wz_tooltip.js +20 -20
- data/doc/AppConfig.html +1389 -0
- data/doc/Arguments.html +678 -0
- data/doc/COPYING.html +837 -0
- data/doc/Object.html +996 -0
- data/doc/README.html +523 -0
- data/doc/RuntimeConfig.html +762 -0
- data/doc/String.html +872 -0
- data/doc/TaskJuggler/Account.html +691 -0
- data/doc/TaskJuggler/AccountAttribute.html +707 -0
- data/doc/TaskJuggler/AccountScenario.html +650 -0
- data/doc/TaskJuggler/Allocation.html +898 -0
- data/doc/TaskJuggler/AllocationAttribute.html +737 -0
- data/doc/TaskJuggler/AttributeBase.html +1193 -0
- data/doc/TaskJuggler/AttributeDefinition.html +753 -0
- data/doc/TaskJuggler/BatchProcessor.html +1112 -0
- data/doc/TaskJuggler/Booking.html +797 -0
- data/doc/TaskJuggler/BookingListAttribute.html +709 -0
- data/doc/TaskJuggler/BooleanAttribute.html +707 -0
- data/doc/TaskJuggler/CSVFile.html +924 -0
- data/doc/TaskJuggler/CellSettingPattern.html +638 -0
- data/doc/TaskJuggler/CellSettingPatternList.html +687 -0
- data/doc/TaskJuggler/Charge.html +715 -0
- data/doc/TaskJuggler/ChargeListAttribute.html +671 -0
- data/doc/TaskJuggler/ChargeSet.html +887 -0
- data/doc/TaskJuggler/ChargeSetListAttribute.html +718 -0
- data/doc/TaskJuggler/ColumnListAttribute.html +673 -0
- data/doc/TaskJuggler/ColumnTable.html +701 -0
- data/doc/TaskJuggler/Daemon.html +728 -0
- data/doc/TaskJuggler/DateAttribute.html +675 -0
- data/doc/TaskJuggler/DefinitionListAttribute.html +593 -0
- data/doc/TaskJuggler/DependencyListAttribute.html +713 -0
- data/doc/TaskJuggler/DurationAttribute.html +707 -0
- data/doc/TaskJuggler/FixnumAttribute.html +629 -0
- data/doc/TaskJuggler/FlagListAttribute.html +709 -0
- data/doc/TaskJuggler/FloatAttribute.html +671 -0
- data/doc/TaskJuggler/FormatListAttribute.html +635 -0
- data/doc/TaskJuggler/GanttChart.html +1473 -0
- data/doc/TaskJuggler/GanttContainer.html +885 -0
- data/doc/TaskJuggler/GanttHeader.html +886 -0
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +700 -0
- data/doc/TaskJuggler/GanttLine.html +1263 -0
- data/doc/TaskJuggler/GanttLoadStack.html +766 -0
- data/doc/TaskJuggler/GanttMilestone.html +865 -0
- data/doc/TaskJuggler/GanttRouter.html +1433 -0
- data/doc/TaskJuggler/GanttTaskBar.html +880 -0
- data/doc/TaskJuggler/HTMLDocument.html +719 -0
- data/doc/TaskJuggler/HTMLGraphics.html +775 -0
- data/doc/TaskJuggler/Interval.html +1016 -0
- data/doc/TaskJuggler/IntervalListAttribute.html +713 -0
- data/doc/TaskJuggler/JobInfo.html +881 -0
- data/doc/TaskJuggler/Journal.html +991 -0
- data/doc/TaskJuggler/JournalEntry.html +779 -0
- data/doc/TaskJuggler/JournalEntryList.html +952 -0
- data/doc/TaskJuggler/KeywordArray.html +628 -0
- data/doc/TaskJuggler/KeywordDocumentation.html +1662 -0
- data/doc/TaskJuggler/Limits/Limit.html +826 -0
- data/doc/TaskJuggler/Limits.html +966 -0
- data/doc/TaskJuggler/LimitsAttribute.html +707 -0
- data/doc/TaskJuggler/ListAttributeBase.html +641 -0
- data/doc/TaskJuggler/Log.html +1103 -0
- data/doc/TaskJuggler/LogFile.html +918 -0
- data/doc/TaskJuggler/LogicalAttribute.html +698 -0
- data/doc/TaskJuggler/LogicalExpression.html +739 -0
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +629 -0
- data/doc/TaskJuggler/LogicalFlag.html +681 -0
- data/doc/TaskJuggler/LogicalFunction.html +1218 -0
- data/doc/TaskJuggler/LogicalOperation.html +1078 -0
- data/doc/TaskJuggler/Macro.html +646 -0
- data/doc/TaskJuggler/MacroParser.html +810 -0
- data/doc/TaskJuggler/MacroTable.html +810 -0
- data/doc/TaskJuggler/ManagerResponsibilities.html +674 -0
- data/doc/TaskJuggler/ManagerStatusRecord.html +678 -0
- data/doc/TaskJuggler/Message.html +757 -0
- data/doc/TaskJuggler/MessageHandler.html +679 -0
- data/doc/TaskJuggler/Navigator.html +867 -0
- data/doc/TaskJuggler/NavigatorElement.html +932 -0
- data/doc/TaskJuggler/NikuProject.html +662 -0
- data/doc/TaskJuggler/NikuReport.html +1316 -0
- data/doc/TaskJuggler/NikuResource.html +632 -0
- data/doc/TaskJuggler/OnShiftCache.html +864 -0
- data/doc/TaskJuggler/ProcessIntercom.html +847 -0
- data/doc/TaskJuggler/ProcessIntercomIface.html +664 -0
- data/doc/TaskJuggler/Project.html +3056 -0
- data/doc/TaskJuggler/ProjectBroker.html +1260 -0
- data/doc/TaskJuggler/ProjectBrokerIface.html +734 -0
- data/doc/TaskJuggler/ProjectFileParser.html +1951 -0
- data/doc/TaskJuggler/ProjectRecord.html +859 -0
- data/doc/TaskJuggler/ProjectServer.html +1092 -0
- data/doc/TaskJuggler/ProjectServerIface.html +768 -0
- data/doc/TaskJuggler/PropertyAttribute.html +629 -0
- data/doc/TaskJuggler/PropertyList.html +1336 -0
- data/doc/TaskJuggler/PropertySet.html +1785 -0
- data/doc/TaskJuggler/PropertyTreeNode.html +2482 -0
- data/doc/TaskJuggler/Query.html +1831 -0
- data/doc/TaskJuggler/RTFNavigator.html +729 -0
- data/doc/TaskJuggler/RTFQuery.html +1038 -0
- data/doc/TaskJuggler/RTFReport.html +740 -0
- data/doc/TaskJuggler/RealFormat.html +743 -0
- data/doc/TaskJuggler/RealFormatAttribute.html +593 -0
- data/doc/TaskJuggler/ReferenceAttribute.html +782 -0
- data/doc/TaskJuggler/Report.html +1255 -0
- data/doc/TaskJuggler/ReportBase.html +1198 -0
- data/doc/TaskJuggler/ReportContext.html +711 -0
- data/doc/TaskJuggler/ReportServer.html +988 -0
- data/doc/TaskJuggler/ReportServerIface.html +838 -0
- data/doc/TaskJuggler/ReportServerRecord.html +716 -0
- data/doc/TaskJuggler/ReportTable.html +1106 -0
- data/doc/TaskJuggler/ReportTableCell.html +1536 -0
- data/doc/TaskJuggler/ReportTableColumn.html +828 -0
- data/doc/TaskJuggler/ReportTableLegend.html +999 -0
- data/doc/TaskJuggler/ReportTableLine.html +1003 -0
- data/doc/TaskJuggler/Resource.html +938 -0
- data/doc/TaskJuggler/ResourceListAttribute.html +752 -0
- data/doc/TaskJuggler/ResourceListRE.html +674 -0
- data/doc/TaskJuggler/ResourceScenario.html +2457 -0
- data/doc/TaskJuggler/RichText.html +791 -0
- data/doc/TaskJuggler/RichTextAttribute.html +743 -0
- data/doc/TaskJuggler/RichTextDocument.html +972 -0
- data/doc/TaskJuggler/RichTextElement.html +1615 -0
- data/doc/TaskJuggler/RichTextException.html +667 -0
- data/doc/TaskJuggler/RichTextFunctionExample.html +737 -0
- data/doc/TaskJuggler/RichTextFunctionHandler.html +689 -0
- data/doc/TaskJuggler/RichTextImage.html +650 -0
- data/doc/TaskJuggler/RichTextIntermediate.html +1161 -0
- data/doc/TaskJuggler/RichTextParser.html +756 -0
- data/doc/TaskJuggler/RichTextScanner.html +2010 -0
- data/doc/TaskJuggler/RichTextSnip.html +942 -0
- data/doc/TaskJuggler/RichTextSyntaxRules.html +1722 -0
- data/doc/TaskJuggler/Scenario.html +594 -0
- data/doc/TaskJuggler/ScenarioData.html +815 -0
- data/doc/TaskJuggler/ScenarioListAttribute.html +671 -0
- data/doc/TaskJuggler/Scoreboard.html +1114 -0
- data/doc/TaskJuggler/SheetHandlerBase.html +1115 -0
- data/doc/TaskJuggler/SheetReceiver.html +1293 -0
- data/doc/TaskJuggler/SheetSender.html +1089 -0
- data/doc/TaskJuggler/Shift.html +689 -0
- data/doc/TaskJuggler/ShiftAssignment.html +950 -0
- data/doc/TaskJuggler/ShiftAssignments.html +1379 -0
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +707 -0
- data/doc/TaskJuggler/ShiftScenario.html +720 -0
- data/doc/TaskJuggler/SortListAttribute.html +631 -0
- data/doc/TaskJuggler/SourceFileInfo.html +698 -0
- data/doc/TaskJuggler/StatusSheetReceiver.html +615 -0
- data/doc/TaskJuggler/StatusSheetReport.html +872 -0
- data/doc/TaskJuggler/StatusSheetSender.html +654 -0
- data/doc/TaskJuggler/StringAttribute.html +671 -0
- data/doc/TaskJuggler/SymbolAttribute.html +629 -0
- data/doc/TaskJuggler/SyntaxReference.html +1155 -0
- data/doc/TaskJuggler/TOCEntry.html +723 -0
- data/doc/TaskJuggler/TSResourceRecord.html +670 -0
- data/doc/TaskJuggler/TSTaskRecord.html +682 -0
- data/doc/TaskJuggler/TableColumnDefinition.html +830 -0
- data/doc/TaskJuggler/TableOfContents.html +692 -0
- data/doc/TaskJuggler/TableReport.html +2444 -0
- data/doc/TaskJuggler/Task.html +781 -0
- data/doc/TaskJuggler/TaskDependency.html +730 -0
- data/doc/TaskJuggler/TaskListAttribute.html +713 -0
- data/doc/TaskJuggler/TaskListRE.html +673 -0
- data/doc/TaskJuggler/TaskScenario.html +4380 -0
- data/doc/TaskJuggler/TextFormatter.html +911 -0
- data/doc/TaskJuggler/TextParser/Pattern.html +1482 -0
- data/doc/TaskJuggler/TextParser/Rule.html +1288 -0
- data/doc/TaskJuggler/TextParser/StackElement.html +726 -0
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +648 -0
- data/doc/TaskJuggler/TextParser/TokenDoc.html +680 -0
- data/doc/TaskJuggler/TextParser.html +1670 -0
- data/doc/TaskJuggler/TextReport.html +856 -0
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +831 -0
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +832 -0
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +737 -0
- data/doc/TaskJuggler/TextScanner.html +2430 -0
- data/doc/TaskJuggler/TimeSheet.html +1233 -0
- data/doc/TaskJuggler/TimeSheetReceiver.html +612 -0
- data/doc/TaskJuggler/TimeSheetRecord.html +1352 -0
- data/doc/TaskJuggler/TimeSheetReport.html +948 -0
- data/doc/TaskJuggler/TimeSheetSender.html +637 -0
- data/doc/TaskJuggler/TimeSheetSummary.html +865 -0
- data/doc/TaskJuggler/TimeSheets.html +674 -0
- data/doc/TaskJuggler/Tj3AppBase.html +782 -0
- data/doc/TaskJuggler/Tj3Client.html +1455 -0
- data/doc/TaskJuggler/Tj3Daemon.html +767 -0
- data/doc/TaskJuggler/Tj3SheetAppBase.html +696 -0
- data/doc/TaskJuggler/Tj3SsReceiver.html +682 -0
- data/doc/TaskJuggler/Tj3SsSender.html +708 -0
- data/doc/TaskJuggler/Tj3TsReceiver.html +681 -0
- data/doc/TaskJuggler/Tj3TsSender.html +702 -0
- data/doc/TaskJuggler/Tj3TsSummary.html +710 -0
- data/doc/TaskJuggler/TjException.html +630 -0
- data/doc/TaskJuggler/TjTime.html +2590 -0
- data/doc/TaskJuggler/TjpExample.html +835 -0
- data/doc/TaskJuggler/TjpExportRE.html +1581 -0
- data/doc/TaskJuggler/TjpSyntaxRules.html +13004 -0
- data/doc/TaskJuggler/UserManual.html +1145 -0
- data/doc/TaskJuggler/WorkingHours.html +1101 -0
- data/doc/TaskJuggler/WorkingHoursAttribute.html +694 -0
- data/doc/TaskJuggler/XMLBlob.html +645 -0
- data/doc/TaskJuggler/XMLComment.html +640 -0
- data/doc/TaskJuggler/XMLDocument.html +732 -0
- data/doc/TaskJuggler/XMLElement.html +900 -0
- data/doc/TaskJuggler/XMLNamedText.html +601 -0
- data/doc/TaskJuggler/XMLText.html +655 -0
- data/doc/TaskJuggler.html +2243 -0
- data/doc/index.html +3778 -17
- data/doc/lib/AccountScenario_rb.html +67 -0
- data/doc/lib/Account_rb.html +69 -0
- data/doc/lib/Allocation_rb.html +69 -0
- data/doc/lib/AppConfig_rb.html +69 -0
- data/doc/lib/AttributeBase_rb.html +67 -0
- data/doc/lib/AttributeDefinition_rb.html +65 -0
- data/doc/lib/Attributes_rb.html +81 -0
- data/doc/lib/BatchProcessor_rb.html +69 -0
- data/doc/lib/Booking_rb.html +65 -0
- data/doc/lib/ChargeSet_rb.html +67 -0
- data/doc/lib/Charge_rb.html +67 -0
- data/doc/lib/HTMLDocument_rb.html +67 -0
- data/doc/lib/Interval_rb.html +67 -0
- data/doc/lib/Journal_rb.html +65 -0
- data/doc/lib/KeywordArray_rb.html +65 -0
- data/doc/lib/KeywordDocumentation_rb.html +75 -0
- data/doc/lib/Limits_rb.html +67 -0
- data/doc/lib/LogFile_rb.html +67 -0
- data/doc/lib/Log_rb.html +69 -0
- data/doc/lib/LogicalExpression_rb.html +71 -0
- data/doc/lib/LogicalFunction_rb.html +67 -0
- data/doc/lib/LogicalOperation_rb.html +67 -0
- data/doc/lib/MacroParser_rb.html +69 -0
- data/doc/lib/MacroTable_rb.html +73 -0
- data/doc/lib/MessageHandler_rb.html +65 -0
- data/doc/lib/Message_rb.html +67 -0
- data/doc/lib/ProjectFileParser_rb.html +79 -0
- data/doc/lib/Project_rb.html +109 -0
- data/doc/lib/PropertyList_rb.html +65 -0
- data/doc/lib/PropertySet_rb.html +69 -0
- data/doc/lib/PropertyTreeNode_rb.html +65 -0
- data/doc/lib/Query_rb.html +67 -0
- data/doc/lib/RTFNavigator_rb.html +71 -0
- data/doc/lib/RTFQuery_rb.html +71 -0
- data/doc/lib/RTFReport_rb.html +69 -0
- data/doc/lib/RealFormat_rb.html +65 -0
- data/doc/lib/ResourceScenario_rb.html +67 -0
- data/doc/lib/Resource_rb.html +69 -0
- data/doc/lib/RichTextDocument_rb.html +71 -0
- data/doc/lib/RichTextElement_rb.html +73 -0
- data/doc/lib/RichTextFunctionExample_rb.html +71 -0
- data/doc/lib/RichTextFunctionHandler_rb.html +65 -0
- data/doc/lib/RichTextParser_rb.html +71 -0
- data/doc/lib/RichTextScanner_rb.html +67 -0
- data/doc/lib/RichTextSnip_rb.html +69 -0
- data/doc/lib/RichTextSyntaxRules_rb.html +65 -0
- data/doc/lib/RichText_rb.html +69 -0
- data/doc/lib/RuntimeConfig_rb.html +67 -0
- data/doc/lib/ScenarioData_rb.html +69 -0
- data/doc/lib/Scenario_rb.html +67 -0
- data/doc/lib/Scoreboard_rb.html +65 -0
- data/doc/lib/SheetHandlerBase_rb.html +69 -0
- data/doc/lib/SheetReceiver_rb.html +75 -0
- data/doc/lib/SheetSender_rb.html +73 -0
- data/doc/lib/ShiftAssignments_rb.html +67 -0
- data/doc/lib/ShiftScenario_rb.html +67 -0
- data/doc/lib/Shift_rb.html +69 -0
- data/doc/lib/SourceFileInfo_rb.html +65 -0
- data/doc/lib/StatusSheetReceiver_rb.html +67 -0
- data/doc/lib/StatusSheetSender_rb.html +67 -0
- data/doc/lib/SyntaxReference_rb.html +73 -0
- data/doc/lib/TOCEntry_rb.html +69 -0
- data/doc/lib/TableColumnDefinition_rb.html +65 -0
- data/doc/lib/TableOfContents_rb.html +69 -0
- data/doc/lib/TaskDependency_rb.html +65 -0
- data/doc/lib/TaskJuggler_rb.html +73 -0
- data/doc/lib/TaskScenario_rb.html +67 -0
- data/doc/lib/Task_rb.html +69 -0
- data/doc/lib/TextFormatter_rb.html +67 -0
- data/doc/lib/TextParser/Pattern_rb.html +67 -0
- data/doc/lib/TextParser/Rule_rb.html +65 -0
- data/doc/lib/TextParser/StackElement_rb.html +65 -0
- data/doc/lib/TextParser/TokenDoc_rb.html +65 -0
- data/doc/lib/TextParser_rb.html +75 -0
- data/doc/lib/TextScanner_rb.html +79 -0
- data/doc/lib/TimeSheetReceiver_rb.html +67 -0
- data/doc/lib/TimeSheetSender_rb.html +67 -0
- data/doc/lib/TimeSheetSummary_rb.html +67 -0
- data/doc/lib/TimeSheets_rb.html +65 -0
- data/doc/lib/Tj3AppBase_rb.html +77 -0
- data/doc/lib/Tj3Config_rb.html +69 -0
- data/doc/lib/Tj3SheetAppBase_rb.html +67 -0
- data/doc/lib/TjException_rb.html +65 -0
- data/doc/lib/TjTime_rb.html +69 -0
- data/doc/lib/TjpExample_rb.html +67 -0
- data/doc/lib/TjpSyntaxRules_rb.html +65 -0
- data/doc/lib/UTF8String_rb.html +65 -0
- data/doc/lib/UserManual_rb.html +77 -0
- data/doc/lib/WorkingHours_rb.html +67 -0
- data/doc/lib/XMLDocument_rb.html +67 -0
- data/doc/lib/XMLElement_rb.html +67 -0
- data/doc/lib/daemon/Daemon_rb.html +67 -0
- data/doc/lib/daemon/ProcessIntercom_rb.html +67 -0
- data/doc/lib/daemon/ProjectBroker_rb.html +79 -0
- data/doc/lib/daemon/ProjectServer_rb.html +83 -0
- data/doc/lib/daemon/ReportServer_rb.html +73 -0
- data/doc/lib/deep_copy_rb.html +65 -0
- data/doc/lib/reports/CSVFile_rb.html +67 -0
- data/doc/lib/reports/ColumnTable_rb.html +67 -0
- data/doc/lib/reports/GanttChart_rb.html +73 -0
- data/doc/lib/reports/GanttContainer_rb.html +67 -0
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +65 -0
- data/doc/lib/reports/GanttHeader_rb.html +67 -0
- data/doc/lib/reports/GanttLine_rb.html +77 -0
- data/doc/lib/reports/GanttLoadStack_rb.html +67 -0
- data/doc/lib/reports/GanttMilestone_rb.html +67 -0
- data/doc/lib/reports/GanttRouter_rb.html +65 -0
- data/doc/lib/reports/GanttTaskBar_rb.html +67 -0
- data/doc/lib/reports/HTMLGraphics_rb.html +65 -0
- data/doc/lib/reports/Navigator_rb.html +67 -0
- data/doc/lib/reports/NikuReport_rb.html +69 -0
- data/doc/lib/reports/ReportBase_rb.html +65 -0
- data/doc/lib/reports/ReportContext_rb.html +65 -0
- data/doc/lib/reports/ReportTableCell_rb.html +65 -0
- data/doc/lib/reports/ReportTableColumn_rb.html +65 -0
- data/doc/lib/reports/ReportTableLegend_rb.html +65 -0
- data/doc/lib/reports/ReportTableLine_rb.html +67 -0
- data/doc/lib/reports/ReportTable_rb.html +69 -0
- data/doc/lib/reports/Report_rb.html +91 -0
- data/doc/lib/reports/ResourceListRE_rb.html +73 -0
- data/doc/lib/reports/StatusSheetReport_rb.html +67 -0
- data/doc/lib/reports/TableReport_rb.html +75 -0
- data/doc/lib/reports/TaskListRE_rb.html +73 -0
- data/doc/lib/reports/TextReport_rb.html +67 -0
- data/doc/lib/reports/TimeSheetReport_rb.html +67 -0
- data/doc/lib/reports/TjpExportRE_rb.html +67 -0
- data/doc/lib/ruby-signal-bug_rb.html +54 -0
- data/doc/lib/taskjuggler3_rb.html +73 -0
- data/doc/lib/tj3client_rb.html +73 -0
- data/doc/lib/tj3d_rb.html +73 -0
- data/doc/lib/tj3man_rb.html +73 -0
- data/doc/lib/tj3ss_receiver_rb.html +69 -0
- data/doc/lib/tj3ss_sender_rb.html +69 -0
- data/doc/lib/tj3ts_receiver_rb.html +69 -0
- data/doc/lib/tj3ts_sender_rb.html +69 -0
- data/doc/lib/tj3ts_summary_rb.html +69 -0
- data/doc/rdoc.css +701 -0
- data/examples/tutorial.tjp +25 -6
- data/lib/Attributes.rb +6 -2
- data/lib/HTMLDocument.rb +18 -2
- data/lib/Journal.rb +47 -4
- data/lib/KeywordArray.rb +1 -1
- data/lib/KeywordDocumentation.rb +17 -77
- data/lib/Log.rb +3 -1
- data/lib/LogFile.rb +72 -0
- data/lib/LogicalExpression.rb +5 -10
- data/lib/LogicalFunction.rb +34 -18
- data/lib/LogicalOperation.rb +32 -18
- data/lib/Project.rb +85 -13
- data/lib/ProjectFileParser.rb +19 -6
- data/lib/PropertyList.rb +12 -2
- data/lib/PropertyTreeNode.rb +23 -9
- data/lib/Query.rb +51 -13
- data/lib/RTFReport.rb +2 -2
- data/lib/Resource.rb +157 -0
- data/lib/ResourceScenario.rb +215 -68
- data/lib/RichText.rb +15 -3
- data/lib/RichTextDocument.rb +2 -4
- data/lib/RichTextElement.rb +87 -25
- data/lib/RichTextScanner.rb +32 -5
- data/lib/RichTextSnip.rb +6 -4
- data/lib/RichTextSyntaxRules.rb +44 -8
- data/lib/RuntimeConfig.rb +93 -0
- data/lib/Scoreboard.rb +6 -6
- data/lib/SheetHandlerBase.rb +215 -0
- data/lib/SheetReceiver.rb +355 -0
- data/lib/SheetSender.rb +264 -0
- data/lib/ShiftAssignments.rb +35 -27
- data/lib/StatusSheetReceiver.rb +45 -0
- data/lib/StatusSheetSender.rb +54 -0
- data/lib/SyntaxReference.rb +2 -7
- data/lib/Task.rb +70 -0
- data/lib/TaskJuggler.rb +114 -12
- data/lib/TaskScenario.rb +131 -22
- data/lib/TextFormatter.rb +177 -0
- data/lib/TextParser.rb +10 -1
- data/lib/TextScanner.rb +63 -33
- data/lib/TimeSheetReceiver.rb +42 -0
- data/lib/TimeSheetSender.rb +55 -0
- data/lib/TimeSheetSummary.rb +149 -0
- data/lib/TimeSheets.rb +406 -0
- data/lib/Tj3AppBase.rb +114 -0
- data/lib/Tj3Config.rb +1 -1
- data/lib/Tj3SheetAppBase.rb +59 -0
- data/lib/TjTime.rb +14 -1
- data/lib/TjpSyntaxRules.rb +573 -211
- data/lib/UTF8String.rb +4 -0
- data/lib/UserManual.rb +8 -7
- data/lib/XMLElement.rb +27 -19
- data/lib/daemon/Daemon.rb +70 -0
- data/lib/daemon/ProcessIntercom.rb +117 -0
- data/lib/daemon/ProjectBroker.rb +450 -0
- data/lib/daemon/ProjectServer.rb +348 -0
- data/lib/daemon/ReportServer.rb +194 -0
- data/lib/reports/ColumnTable.rb +2 -0
- data/lib/reports/GanttChart.rb +5 -7
- data/lib/reports/GanttContainer.rb +5 -8
- data/lib/reports/GanttHeader.rb +1 -1
- data/lib/reports/GanttLine.rb +89 -53
- data/lib/reports/GanttMilestone.rb +7 -4
- data/lib/reports/GanttTaskBar.rb +7 -3
- data/lib/reports/HTMLGraphics.rb +24 -9
- data/lib/reports/NikuReport.rb +414 -0
- data/lib/reports/Report.rb +54 -20
- data/lib/reports/ReportBase.rb +21 -0
- data/lib/reports/ReportTable.rb +29 -11
- data/lib/reports/ReportTableCell.rb +154 -86
- data/lib/reports/ReportTableLegend.rb +77 -80
- data/lib/reports/ResourceListRE.rb +2 -3
- data/lib/reports/StatusSheetReport.rb +231 -0
- data/lib/reports/TableReport.rb +74 -65
- data/lib/reports/TaskListRE.rb +2 -4
- data/lib/reports/TextReport.rb +18 -12
- data/lib/reports/TimeSheetReport.rb +145 -80
- data/lib/reports/TjpExportRE.rb +4 -4
- data/lib/ruby-signal-bug.rb +43 -0
- data/lib/taskjuggler3.rb +27 -10
- data/lib/tj3client.rb +411 -77
- data/lib/tj3d.rb +110 -0
- data/lib/tj3ss_receiver.rb +56 -0
- data/lib/tj3ss_sender.rb +84 -0
- data/lib/tj3ts_receiver.rb +59 -0
- data/lib/tj3ts_sender.rb +78 -0
- data/lib/tj3ts_summary.rb +87 -0
- data/manual/Day_To_Day_Juggling +761 -32
- data/manual/Getting_Started +12 -12
- data/manual/Rich_Text_Attributes +13 -1
- data/manual/TaskJuggler_2x_Migration +41 -3
- data/manual/TaskJuggler_Internals +87 -0
- data/manual/The_TaskJuggler_Syntax +1 -2
- data/manual/Tutorial +10 -10
- data/test/TestSuite/CSV-Reports/celltext.tjp +1 -1
- data/test/TestSuite/HTML-Reports/TimeSheet.html +79 -0
- data/test/TestSuite/HTML-Reports/icons/trend-down.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/trend-flat.png +0 -0
- data/test/TestSuite/HTML-Reports/icons/trend-up.png +0 -0
- data/test/TestSuite/HTML-Reports/reference.html +51 -0
- data/test/TestSuite/Scheduler/Correct/Booking2.html +603 -0
- data/test/TestSuite/Scheduler/Correct/Booking2.tjp +57 -0
- data/test/TestSuite/Scheduler/Correct/Duration.tjp +32 -18
- data/test/TestSuite/Scheduler/Correct/Manager.tjp +9 -0
- data/test/TestSuite/Scheduler/Correct/Shift.html +429 -0
- data/test/TestSuite/Scheduler/Correct/Shift2.html +162 -0
- data/test/TestSuite/Scheduler/Correct/Shift2.tjp +67 -0
- data/test/TestSuite/{Syntax/Correct/TimeSheet.tjp → Scheduler/Correct/TimeSheet2.tjp} +21 -8
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +52 -0
- data/test/TestSuite/Scheduler/Correct/css/tjreport.css +195 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/details.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/resource.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/resourcegroup.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/task.png +0 -0
- data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/taskgroup.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
- data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
- data/test/TestSuite/{HTML-Reports/scripts → Scheduler/Correct}/scripts/wz_tooltip.js +0 -0
- data/test/TestSuite/Scheduler/Errors/manager_is_group.tjp +15 -0
- data/test/TestSuite/Scheduler/Errors/manager_is_self.tjp +11 -0
- data/test/TestSuite/Scheduler/Errors/resource_fail_check.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/resource_warn_check.tjp +12 -0
- data/test/TestSuite/Scheduler/Errors/task_fail_check.tjp +8 -0
- data/test/TestSuite/Scheduler/Errors/task_warn_check.tjp +8 -0
- data/test/TestSuite/Scheduler/Errors/ts_alert1_more_details.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/ts_alert2_more_details.tjp +21 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_expected_end.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_headline1.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_rem_or_end.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_remaining.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_status_work.tjp +18 -0
- data/test/TestSuite/Scheduler/Errors/ts_no_work.tjp +26 -0
- data/test/TestSuite/Scheduler/Errors/ts_res_new_task.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/ts_work_too_high.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/ts_work_too_low.tjp +27 -0
- data/test/TestSuite/StatusSheets/boss.tji +45 -0
- data/test/TestSuite/StatusSheets/boss_mail +51 -0
- data/test/TestSuite/StatusSheets/dev2_mail +37 -0
- data/test/TestSuite/StatusSheets/project.tjp +275 -0
- data/test/TestSuite/StatusSheets/run +50 -0
- data/test/TestSuite/Syntax/Correct/Include.tjp +4 -0
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +10 -1
- data/test/TestSuite/Syntax/Correct/Manager.tjp +30 -0
- data/test/TestSuite/Syntax/Correct/Niku.tjp +66 -0
- data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +83 -0
- data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +1 -0
- data/test/TestSuite/Syntax/Correct/include/dir2/file3.tji +2 -0
- data/test/TestSuite/Syntax/Correct/include/file1.tji +3 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +29 -8
- data/test/TestSuite/Syntax/Errors/ts_bad_priority.tjp +19 -0
- data/test/TestSuite/Syntax/Errors/ts_default_details.tjp +22 -0
- data/test/TestSuite/Syntax/Errors/ts_default_summary.tjp +22 -0
- data/test/TestSuite/Syntax/Errors/ts_duplicate_task.tjp +23 -0
- data/test/TestSuite/Syntax/Errors/ts_end_too_early.tjp +18 -0
- data/test/TestSuite/Syntax/Errors/ts_headline_too_long.tjp +19 -0
- data/test/TestSuite/Syntax/Errors/ts_no_headline2.tjp +27 -0
- data/test/TestSuite/Syntax/Errors/ts_summary_too_long.tjp +29 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +36 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +48 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +67 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +67 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +48 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +31 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +36 -0
- data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +1 -0
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +1 -0
- data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +54 -0
- data/test/TestSuite/TimeSheets/TimeSheets/all.tji +2 -0
- data/test/TestSuite/TimeSheets/dev2_mail1 +84 -0
- data/test/TestSuite/TimeSheets/dev2_mail2 +87 -0
- data/test/TestSuite/TimeSheets/project.tjp +271 -0
- data/test/TestSuite/TimeSheets/receiver.log +102 -0
- data/test/TestSuite/TimeSheets/run +75 -0
- data/test/TestSuite/TimeSheets/sender.log +794 -0
- data/test/TestSuite/TimeSheets/summary.log +884 -0
- data/test/TestSuite/TimeSheets/timesheets.log +45 -0
- data/test/TestSuite/TimeSheets/tj3d.log +292 -0
- data/test/test_CSV-Reports.rb +5 -3
- data/test/test_RichText.rb +264 -56
- data/test/test_Scheduler.rb +1 -0
- data/test/test_TextFormatter.rb +142 -0
- data/test/test_TjTime.rb +15 -0
- metadata +816 -644
- data/benchmarks/UTF-8-Strings.rb +0 -58
- data/doc/classes/AppConfig.html +0 -880
- data/doc/classes/Arguments.html +0 -230
- data/doc/classes/Object.html +0 -229
- data/doc/classes/String.html +0 -399
- data/doc/classes/TaskJuggler/Account.html +0 -257
- data/doc/classes/TaskJuggler/AccountAttribute.html +0 -261
- data/doc/classes/TaskJuggler/AccountScenario.html +0 -218
- data/doc/classes/TaskJuggler/Allocation.html +0 -423
- data/doc/classes/TaskJuggler/AllocationAttribute.html +0 -291
- data/doc/classes/TaskJuggler/AttributeBase.html +0 -704
- data/doc/classes/TaskJuggler/AttributeDefinition.html +0 -276
- data/doc/classes/TaskJuggler/BatchProcessor.html +0 -347
- data/doc/classes/TaskJuggler/Booking.html +0 -311
- data/doc/classes/TaskJuggler/BookingListAttribute.html +0 -263
- data/doc/classes/TaskJuggler/BooleanAttribute.html +0 -261
- data/doc/classes/TaskJuggler/CSVFile.html +0 -329
- data/doc/classes/TaskJuggler/CellSettingPattern.html +0 -201
- data/doc/classes/TaskJuggler/CellSettingPatternList.html +0 -253
- data/doc/classes/TaskJuggler/Charge.html +0 -283
- data/doc/classes/TaskJuggler/ChargeListAttribute.html +0 -229
- data/doc/classes/TaskJuggler/ChargeSet.html +0 -444
- data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +0 -276
- data/doc/classes/TaskJuggler/ColumnListAttribute.html +0 -231
- data/doc/classes/TaskJuggler/ColumnTable.html +0 -262
- data/doc/classes/TaskJuggler/DateAttribute.html +0 -233
- data/doc/classes/TaskJuggler/DefinitionListAttribute.html +0 -162
- data/doc/classes/TaskJuggler/DependencyListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/DurationAttribute.html +0 -229
- data/doc/classes/TaskJuggler/FixnumAttribute.html +0 -194
- data/doc/classes/TaskJuggler/FlagListAttribute.html +0 -263
- data/doc/classes/TaskJuggler/FloatAttribute.html +0 -229
- data/doc/classes/TaskJuggler/FormatListAttribute.html +0 -197
- data/doc/classes/TaskJuggler/GanttChart.html +0 -696
- data/doc/classes/TaskJuggler/GanttContainer.html +0 -445
- data/doc/classes/TaskJuggler/GanttHeader.html +0 -284
- data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +0 -249
- data/doc/classes/TaskJuggler/GanttLine.html +0 -402
- data/doc/classes/TaskJuggler/GanttLoadStack.html +0 -331
- data/doc/classes/TaskJuggler/GanttMilestone.html +0 -419
- data/doc/classes/TaskJuggler/GanttRouter.html +0 -431
- data/doc/classes/TaskJuggler/GanttTaskBar.html +0 -433
- data/doc/classes/TaskJuggler/HTMLDocument.html +0 -240
- data/doc/classes/TaskJuggler/HTMLGraphics.html +0 -231
- data/doc/classes/TaskJuggler/Interval.html +0 -558
- data/doc/classes/TaskJuggler/IntervalListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/JobInfo.html +0 -340
- data/doc/classes/TaskJuggler/Journal.html +0 -443
- data/doc/classes/TaskJuggler/JournalEntry.html +0 -274
- data/doc/classes/TaskJuggler/JournalEntryList.html +0 -454
- data/doc/classes/TaskJuggler/KeywordArray.html +0 -179
- data/doc/classes/TaskJuggler/KeywordDocumentation.html +0 -846
- data/doc/classes/TaskJuggler/Limits/Limit.html +0 -385
- data/doc/classes/TaskJuggler/Limits.html +0 -422
- data/doc/classes/TaskJuggler/LimitsAttribute.html +0 -261
- data/doc/classes/TaskJuggler/ListAttributeBase.html +0 -207
- data/doc/classes/TaskJuggler/Log.html +0 -655
- data/doc/classes/TaskJuggler/LogicalAttribute.html +0 -259
- data/doc/classes/TaskJuggler/LogicalExpression.html +0 -292
- data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +0 -194
- data/doc/classes/TaskJuggler/LogicalFlag.html +0 -209
- data/doc/classes/TaskJuggler/LogicalFunction.html +0 -339
- data/doc/classes/TaskJuggler/LogicalOperation.html +0 -351
- data/doc/classes/TaskJuggler/Macro.html +0 -198
- data/doc/classes/TaskJuggler/MacroParser.html +0 -360
- data/doc/classes/TaskJuggler/MacroTable.html +0 -370
- data/doc/classes/TaskJuggler/Message.html +0 -285
- data/doc/classes/TaskJuggler/MessageHandler.html +0 -231
- data/doc/classes/TaskJuggler/Navigator.html +0 -313
- data/doc/classes/TaskJuggler/NavigatorElement.html +0 -449
- data/doc/classes/TaskJuggler/OnShiftCache.html +0 -316
- data/doc/classes/TaskJuggler/Project.html +0 -2257
- data/doc/classes/TaskJuggler/ProjectFileParser.html +0 -420
- data/doc/classes/TaskJuggler/PropertyAttribute.html +0 -194
- data/doc/classes/TaskJuggler/PropertyList.html +0 -668
- data/doc/classes/TaskJuggler/PropertySet.html +0 -1286
- data/doc/classes/TaskJuggler/PropertyTreeNode.html +0 -1742
- data/doc/classes/TaskJuggler/Query.html +0 -870
- data/doc/classes/TaskJuggler/RTFNavigator.html +0 -293
- data/doc/classes/TaskJuggler/RTFQuery.html +0 -343
- data/doc/classes/TaskJuggler/RTFReport.html +0 -304
- data/doc/classes/TaskJuggler/RealFormat.html +0 -309
- data/doc/classes/TaskJuggler/RealFormatAttribute.html +0 -162
- data/doc/classes/TaskJuggler/ReferenceAttribute.html +0 -328
- data/doc/classes/TaskJuggler/RemoteServiceManager.html +0 -335
- data/doc/classes/TaskJuggler/Report.html +0 -321
- data/doc/classes/TaskJuggler/ReportBase.html +0 -437
- data/doc/classes/TaskJuggler/ReportContext.html +0 -248
- data/doc/classes/TaskJuggler/ReportServer.html +0 -320
- data/doc/classes/TaskJuggler/ReportTable.html +0 -526
- data/doc/classes/TaskJuggler/ReportTableCell.html +0 -614
- data/doc/classes/TaskJuggler/ReportTableColumn.html +0 -368
- data/doc/classes/TaskJuggler/ReportTableLegend.html +0 -347
- data/doc/classes/TaskJuggler/ReportTableLine.html +0 -481
- data/doc/classes/TaskJuggler/Resource.html +0 -211
- data/doc/classes/TaskJuggler/ResourceListAttribute.html +0 -302
- data/doc/classes/TaskJuggler/ResourceListRE.html +0 -245
- data/doc/classes/TaskJuggler/ResourceScenario.html +0 -1229
- data/doc/classes/TaskJuggler/RichText.html +0 -357
- data/doc/classes/TaskJuggler/RichTextAttribute.html +0 -293
- data/doc/classes/TaskJuggler/RichTextDocument.html +0 -424
- data/doc/classes/TaskJuggler/RichTextElement.html +0 -932
- data/doc/classes/TaskJuggler/RichTextException.html +0 -212
- data/doc/classes/TaskJuggler/RichTextFunctionExample.html +0 -301
- data/doc/classes/TaskJuggler/RichTextFunctionHandler.html +0 -245
- data/doc/classes/TaskJuggler/RichTextIntermediate.html +0 -563
- data/doc/classes/TaskJuggler/RichTextParser.html +0 -321
- data/doc/classes/TaskJuggler/RichTextScanner.html +0 -424
- data/doc/classes/TaskJuggler/RichTextSnip.html +0 -404
- data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +0 -1105
- data/doc/classes/TaskJuggler/Scenario.html +0 -163
- data/doc/classes/TaskJuggler/ScenarioData.html +0 -358
- data/doc/classes/TaskJuggler/ScenarioListAttribute.html +0 -229
- data/doc/classes/TaskJuggler/Scoreboard.html +0 -642
- data/doc/classes/TaskJuggler/Shift.html +0 -255
- data/doc/classes/TaskJuggler/ShiftAssignment.html +0 -492
- data/doc/classes/TaskJuggler/ShiftAssignments.html +0 -719
- data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +0 -261
- data/doc/classes/TaskJuggler/ShiftScenario.html +0 -282
- data/doc/classes/TaskJuggler/SortListAttribute.html +0 -196
- data/doc/classes/TaskJuggler/SourceFileInfo.html +0 -251
- data/doc/classes/TaskJuggler/StringAttribute.html +0 -229
- data/doc/classes/TaskJuggler/SymbolAttribute.html +0 -194
- data/doc/classes/TaskJuggler/SyntaxReference.html +0 -520
- data/doc/classes/TaskJuggler/TOCEntry.html +0 -246
- data/doc/classes/TaskJuggler/TSResourceRecord.html +0 -197
- data/doc/classes/TaskJuggler/TSTaskRecord.html +0 -215
- data/doc/classes/TaskJuggler/TableColumnDefinition.html +0 -309
- data/doc/classes/TaskJuggler/TableOfContents.html +0 -260
- data/doc/classes/TaskJuggler/TableReport.html +0 -1015
- data/doc/classes/TaskJuggler/Task.html +0 -203
- data/doc/classes/TaskJuggler/TaskDependency.html +0 -255
- data/doc/classes/TaskJuggler/TaskListAttribute.html +0 -267
- data/doc/classes/TaskJuggler/TaskListRE.html +0 -245
- data/doc/classes/TaskJuggler/TaskScenario.html +0 -2543
- data/doc/classes/TaskJuggler/TextParser/Pattern.html +0 -927
- data/doc/classes/TaskJuggler/TextParser/Rule.html +0 -783
- data/doc/classes/TaskJuggler/TextParser/StackElement.html +0 -272
- data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +0 -212
- data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +0 -225
- data/doc/classes/TaskJuggler/TextParser.html +0 -754
- data/doc/classes/TaskJuggler/TextReport.html +0 -367
- data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +0 -355
- data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +0 -348
- data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +0 -264
- data/doc/classes/TaskJuggler/TextScanner.html +0 -815
- data/doc/classes/TaskJuggler/TimeSheetReport.html +0 -406
- data/doc/classes/TaskJuggler/TjException.html +0 -185
- data/doc/classes/TaskJuggler/TjTime.html +0 -1904
- data/doc/classes/TaskJuggler/TjpExample.html +0 -314
- data/doc/classes/TaskJuggler/TjpExportRE.html +0 -306
- data/doc/classes/TaskJuggler/TjpSyntaxRules.html +0 -10812
- data/doc/classes/TaskJuggler/UserManual.html +0 -605
- data/doc/classes/TaskJuggler/WorkingHours.html +0 -586
- data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +0 -252
- data/doc/classes/TaskJuggler/XMLBlob.html +0 -207
- data/doc/classes/TaskJuggler/XMLComment.html +0 -206
- data/doc/classes/TaskJuggler/XMLDocument.html +0 -298
- data/doc/classes/TaskJuggler/XMLElement.html +0 -389
- data/doc/classes/TaskJuggler/XMLNamedText.html +0 -174
- data/doc/classes/TaskJuggler/XMLText.html +0 -221
- data/doc/classes/TaskJuggler.html +0 -1573
- data/doc/files/COPYING.html +0 -448
- data/doc/files/README.html +0 -134
- data/doc/files/lib/AccountScenario_rb.html +0 -117
- data/doc/files/lib/Account_rb.html +0 -119
- data/doc/files/lib/Allocation_rb.html +0 -119
- data/doc/files/lib/AppConfig_rb.html +0 -119
- data/doc/files/lib/AttributeBase_rb.html +0 -117
- data/doc/files/lib/AttributeDefinition_rb.html +0 -107
- data/doc/files/lib/Attributes_rb.html +0 -131
- data/doc/files/lib/BatchProcessor_rb.html +0 -119
- data/doc/files/lib/Booking_rb.html +0 -107
- data/doc/files/lib/ChargeSet_rb.html +0 -117
- data/doc/files/lib/Charge_rb.html +0 -117
- data/doc/files/lib/HTMLDocument_rb.html +0 -117
- data/doc/files/lib/Interval_rb.html +0 -117
- data/doc/files/lib/Journal_rb.html +0 -107
- data/doc/files/lib/KeywordArray_rb.html +0 -107
- data/doc/files/lib/KeywordDocumentation_rb.html +0 -123
- data/doc/files/lib/Limits_rb.html +0 -117
- data/doc/files/lib/Log_rb.html +0 -117
- data/doc/files/lib/LogicalExpression_rb.html +0 -121
- data/doc/files/lib/LogicalFunction_rb.html +0 -117
- data/doc/files/lib/LogicalOperation_rb.html +0 -117
- data/doc/files/lib/MacroParser_rb.html +0 -119
- data/doc/files/lib/MacroTable_rb.html +0 -123
- data/doc/files/lib/MessageHandler_rb.html +0 -107
- data/doc/files/lib/Message_rb.html +0 -117
- data/doc/files/lib/ProjectFileParser_rb.html +0 -129
- data/doc/files/lib/Project_rb.html +0 -153
- data/doc/files/lib/PropertyList_rb.html +0 -107
- data/doc/files/lib/PropertySet_rb.html +0 -119
- data/doc/files/lib/PropertyTreeNode_rb.html +0 -107
- data/doc/files/lib/Query_rb.html +0 -117
- data/doc/files/lib/RTFNavigator_rb.html +0 -121
- data/doc/files/lib/RTFQuery_rb.html +0 -121
- data/doc/files/lib/RTFReport_rb.html +0 -119
- data/doc/files/lib/RealFormat_rb.html +0 -107
- data/doc/files/lib/RemoteServiceManager_rb.html +0 -117
- data/doc/files/lib/ReportServer_rb.html +0 -107
- data/doc/files/lib/ResourceScenario_rb.html +0 -117
- data/doc/files/lib/Resource_rb.html +0 -119
- data/doc/files/lib/RichTextDocument_rb.html +0 -121
- data/doc/files/lib/RichTextElement_rb.html +0 -121
- data/doc/files/lib/RichTextFunctionExample_rb.html +0 -121
- data/doc/files/lib/RichTextFunctionHandler_rb.html +0 -107
- data/doc/files/lib/RichTextParser_rb.html +0 -121
- data/doc/files/lib/RichTextScanner_rb.html +0 -117
- data/doc/files/lib/RichTextSnip_rb.html +0 -119
- data/doc/files/lib/RichTextSyntaxRules_rb.html +0 -107
- data/doc/files/lib/RichText_rb.html +0 -119
- data/doc/files/lib/ScenarioData_rb.html +0 -119
- data/doc/files/lib/Scenario_rb.html +0 -117
- data/doc/files/lib/Scoreboard_rb.html +0 -107
- data/doc/files/lib/ShiftAssignments_rb.html +0 -117
- data/doc/files/lib/ShiftScenario_rb.html +0 -117
- data/doc/files/lib/Shift_rb.html +0 -119
- data/doc/files/lib/SourceFileInfo_rb.html +0 -107
- data/doc/files/lib/SyntaxReference_rb.html +0 -123
- data/doc/files/lib/TOCEntry_rb.html +0 -119
- data/doc/files/lib/TableColumnDefinition_rb.html +0 -107
- data/doc/files/lib/TableOfContents_rb.html +0 -119
- data/doc/files/lib/TaskDependency_rb.html +0 -107
- data/doc/files/lib/TaskJuggler_rb.html +0 -125
- data/doc/files/lib/TaskScenario_rb.html +0 -117
- data/doc/files/lib/Task_rb.html +0 -119
- data/doc/files/lib/TextParser/Pattern_rb.html +0 -117
- data/doc/files/lib/TextParser/Rule_rb.html +0 -107
- data/doc/files/lib/TextParser/StackElement_rb.html +0 -107
- data/doc/files/lib/TextParser/TokenDoc_rb.html +0 -107
- data/doc/files/lib/TextParser_rb.html +0 -125
- data/doc/files/lib/TextScanner_rb.html +0 -129
- data/doc/files/lib/Tj3Config_rb.html +0 -119
- data/doc/files/lib/TjException_rb.html +0 -107
- data/doc/files/lib/TjTime_rb.html +0 -119
- data/doc/files/lib/TjpExample_rb.html +0 -117
- data/doc/files/lib/TjpSyntaxRules_rb.html +0 -107
- data/doc/files/lib/UTF8String_rb.html +0 -140
- data/doc/files/lib/UserManual_rb.html +0 -127
- data/doc/files/lib/WorkingHours_rb.html +0 -117
- data/doc/files/lib/XMLDocument_rb.html +0 -117
- data/doc/files/lib/XMLElement_rb.html +0 -117
- data/doc/files/lib/deep_copy_rb.html +0 -107
- data/doc/files/lib/reports/CSVFile_rb.html +0 -117
- data/doc/files/lib/reports/ColumnTable_rb.html +0 -117
- data/doc/files/lib/reports/GanttChart_rb.html +0 -123
- data/doc/files/lib/reports/GanttContainer_rb.html +0 -117
- data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +0 -107
- data/doc/files/lib/reports/GanttHeader_rb.html +0 -117
- data/doc/files/lib/reports/GanttLine_rb.html +0 -127
- data/doc/files/lib/reports/GanttLoadStack_rb.html +0 -117
- data/doc/files/lib/reports/GanttMilestone_rb.html +0 -117
- data/doc/files/lib/reports/GanttRouter_rb.html +0 -107
- data/doc/files/lib/reports/GanttTaskBar_rb.html +0 -117
- data/doc/files/lib/reports/HTMLGraphics_rb.html +0 -107
- data/doc/files/lib/reports/Navigator_rb.html +0 -117
- data/doc/files/lib/reports/ReportBase_rb.html +0 -107
- data/doc/files/lib/reports/ReportContext_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableCell_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableColumn_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableLegend_rb.html +0 -107
- data/doc/files/lib/reports/ReportTableLine_rb.html +0 -117
- data/doc/files/lib/reports/ReportTable_rb.html +0 -119
- data/doc/files/lib/reports/Report_rb.html +0 -137
- data/doc/files/lib/reports/ResourceListRE_rb.html +0 -123
- data/doc/files/lib/reports/TableReport_rb.html +0 -125
- data/doc/files/lib/reports/TaskListRE_rb.html +0 -123
- data/doc/files/lib/reports/TextReport_rb.html +0 -117
- data/doc/files/lib/reports/TimeSheetReport_rb.html +0 -117
- data/doc/files/lib/reports/TjpExportRE_rb.html +0 -117
- data/doc/files/lib/taskjuggler3_rb.html +0 -298
- data/doc/files/lib/tj3client_rb.html +0 -280
- data/doc/files/lib/tj3man_rb.html +0 -190
- data/doc/fr_class_index.html +0 -345
- data/doc/fr_file_index.html +0 -247
- data/doc/fr_method_index.html +0 -2355
- data/doc/rdoc-style.css +0 -299
- data/lib/RemoteServiceManager.rb +0 -80
- data/lib/ReportServer.rb +0 -66
- data/test/TestSuite/HTML-Reports/Alerts.html +0 -172
- data/test/TestSuite/HTML-Reports/CellText.html +0 -758
- data/test/TestSuite/HTML-Reports/ColumnPeriods.html +0 -156
- data/test/TestSuite/HTML-Reports/IsOngoing.html +0 -172
- data/test/TestSuite/HTML-Reports/LogicalFunctions.html +0 -80
- data/test/TestSuite/HTML-Reports/Query.html +0 -31
- data/test/TestSuite/HTML-Reports/depArrows.html +0 -842
- data/test/TestSuite/Syntax/Correct/RawHTML.tjp +0 -31
- 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/scripts/wz_tooltip.js +0 -1301
- data/test/TestSuite/Syntax/Errors/export_bad_extn.tjp +0 -9
data/lib/Resource.rb
CHANGED
@@ -36,6 +36,163 @@ class TaskJuggler
|
|
36
36
|
@data[scenarioIdx].method(func).call(*args)
|
37
37
|
end
|
38
38
|
|
39
|
+
def query_journal(query)
|
40
|
+
journalMessages(query, true)
|
41
|
+
end
|
42
|
+
|
43
|
+
def query_dashboard(query)
|
44
|
+
dashboard(query)
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# Create a blog-style list of all alert messages that match the Query.
|
50
|
+
def journalMessages(query, longVersion)
|
51
|
+
# The components of the message are either UTF-8 text or RichText. For
|
52
|
+
# the RichText components, we use the originally provided markup since
|
53
|
+
# we compose the result as RichText markup first.
|
54
|
+
rText = ''
|
55
|
+
list = @project['journal'].entriesByResource(self, query.start, query.end)
|
56
|
+
# Sort all entries in buckets by their alert level.
|
57
|
+
numberOfLevels = project['alertLevels'].length
|
58
|
+
listByLevel = []
|
59
|
+
0.upto(numberOfLevels - 1) { |i| listByLevel[i] = [] }
|
60
|
+
list.each do |entry|
|
61
|
+
listByLevel[entry.alertLevel] << entry
|
62
|
+
end
|
63
|
+
(numberOfLevels - 1).downto(0) do |level|
|
64
|
+
levelList = listByLevel[level]
|
65
|
+
levelRecord = @project['alertLevels'][level]
|
66
|
+
alertName = "[[File:icons/flag-#{levelRecord[0]}.png|" +
|
67
|
+
"alt=[#{levelRecord[1]}]|text-bottom]]"
|
68
|
+
levelList.each do |entry|
|
69
|
+
# The TimeSheetRecords associated with this entry.
|
70
|
+
tsRecord = entry.timeSheetRecord
|
71
|
+
if entry.property.is_a?(Task)
|
72
|
+
rText += "== #{alertName} <nowiki>#{entry.property.name}</nowiki> "+
|
73
|
+
"(ID: #{entry.property.fullId}) ==\n\n"
|
74
|
+
if tsRecord
|
75
|
+
rText += "'''Work:''' #{tsRecord.actualWorkPercent.to_i}% "
|
76
|
+
if tsRecord.actualWorkPercent != tsRecord.planWorkPercent
|
77
|
+
rText += "(#{tsRecord.planWorkPercent.to_i}%) "
|
78
|
+
end
|
79
|
+
if tsRecord.remaining
|
80
|
+
rText += "'''Remaining:''' #{tsRecord.actualRemaining}d "
|
81
|
+
if tsRecord.actualRemaining != tsRecord.planRemaining
|
82
|
+
rText += "(#{tsRecord.planRemaining}d) "
|
83
|
+
end
|
84
|
+
else
|
85
|
+
rText += "'''End:''' " +
|
86
|
+
"#{tsRecord.actualEnd.to_s(query.timeFormat)} "
|
87
|
+
if tsRecord.actualEnd != tsRecord.planEnd
|
88
|
+
rText += "(#{tsRecord.planEnd.to_s(query.timeFormat)}) "
|
89
|
+
end
|
90
|
+
end
|
91
|
+
rText += "\n\n"
|
92
|
+
end
|
93
|
+
elsif !(tsRecord = entry.timeSheetRecord).nil? &&
|
94
|
+
entry.timeSheetRecord.task.is_a?(String)
|
95
|
+
rText += "== #{alertName} <nowiki>[New Task] #{tsRecord.name} " +
|
96
|
+
"</nowiki> "+
|
97
|
+
"(ID: #{tsRecord.task}) ==\n\n"
|
98
|
+
if tsRecord
|
99
|
+
rText += "'''Work:''' #{tsRecord.actualWorkPercent}% "
|
100
|
+
if tsRecord.remaining
|
101
|
+
rText += "'''Remaining:''' #{tsRecord.actualRemaining}d "
|
102
|
+
else
|
103
|
+
rText += "'''End:''' " +
|
104
|
+
"#{tsRecord.actualEnd.to_s(query.timeFormat)} "
|
105
|
+
end
|
106
|
+
rText += "\n\n"
|
107
|
+
end
|
108
|
+
else
|
109
|
+
rText += "== #{alertName} Personal Notes ==\n\n"
|
110
|
+
end
|
111
|
+
unless entry.headline.empty?
|
112
|
+
rText += "'''<nowiki>#{entry.headline}</nowiki>'''\n\n"
|
113
|
+
end
|
114
|
+
if entry.summary
|
115
|
+
rText += entry.summary.richText.inputText + "\n\n"
|
116
|
+
end
|
117
|
+
if longVersion && entry.details
|
118
|
+
rText += entry.details.richText.inputText + "\n\n"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Now convert the RichText markup String into RichTextIntermediate
|
124
|
+
# format.
|
125
|
+
handlers = [
|
126
|
+
RTFNavigator.new(@project),
|
127
|
+
RTFQuery.new(@project),
|
128
|
+
RTFReport.new(@project)
|
129
|
+
]
|
130
|
+
begin
|
131
|
+
rti = RichText.new(rText, handlers).generateIntermediateFormat
|
132
|
+
rescue RichTextException => msg
|
133
|
+
$stderr.puts "Error while processing Rich Text\n" +
|
134
|
+
"Line #{msg.lineNo}: #{msg.text}\n" +
|
135
|
+
"#{msg.line}"
|
136
|
+
return nil
|
137
|
+
end
|
138
|
+
# No section numbers, please!
|
139
|
+
rti.sectionNumbers = false
|
140
|
+
# We use a special class to allow CSS formating.
|
141
|
+
rti.cssClass = 'tj_journal'
|
142
|
+
query.rti = rti
|
143
|
+
end
|
144
|
+
|
145
|
+
# Create a dashboard-like list of all task that have a current alert
|
146
|
+
# status.
|
147
|
+
def dashboard(query)
|
148
|
+
scenarioIdx = @project['trackingScenarioIdx']
|
149
|
+
taskList = []
|
150
|
+
@project.tasks.each do |task|
|
151
|
+
if task['responsible', scenarioIdx].include?(self) &&
|
152
|
+
!@project['journal'].currentEntries(query.end, task,
|
153
|
+
0, query.start).empty?
|
154
|
+
taskList << task
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
if taskList.empty?
|
159
|
+
rText = "We have no current status for any task that #{name} " +
|
160
|
+
"is responsible for."
|
161
|
+
else
|
162
|
+
# The components of the message are either UTF-8 text or RichText. For
|
163
|
+
# the RichText components, we use the originally provided markup since
|
164
|
+
# we compose the result as RichText markup first.
|
165
|
+
rText = ''
|
166
|
+
|
167
|
+
taskList.each do |task|
|
168
|
+
rText += "== <nowiki>[#{task.query_alert(query)}] Task: " +
|
169
|
+
"#{task.name}</nowiki> (#{task.fullId}) ==\n\n"
|
170
|
+
rText += task.query_alertmessage(query).richText.inputText + "\n\n"
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
# Now convert the RichText markup String into RichTextIntermediate
|
175
|
+
# format.
|
176
|
+
handlers = [
|
177
|
+
RTFNavigator.new(@project),
|
178
|
+
RTFQuery.new(@project),
|
179
|
+
RTFReport.new(@project)
|
180
|
+
]
|
181
|
+
begin
|
182
|
+
rti = RichText.new(rText, handlers).generateIntermediateFormat
|
183
|
+
rescue RichTextException => msg
|
184
|
+
$stderr.puts "Error while processing Rich Text\n" +
|
185
|
+
"Line #{msg.lineNo}: #{msg.text}\n" +
|
186
|
+
"#{msg.line}"
|
187
|
+
return nil
|
188
|
+
end
|
189
|
+
# No section numbers, please!
|
190
|
+
rti.sectionNumbers = false
|
191
|
+
# We use a special class to allow CSS formating.
|
192
|
+
rti.cssClass = 'tj_journal'
|
193
|
+
query.rti = rti
|
194
|
+
end
|
195
|
+
|
39
196
|
end
|
40
197
|
|
41
198
|
end
|
data/lib/ResourceScenario.rb
CHANGED
@@ -20,11 +20,18 @@ class TaskJuggler
|
|
20
20
|
def initialize(resource, scenarioIdx, attributes)
|
21
21
|
super
|
22
22
|
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
23
|
+
# Scoreboard may be nil, a Task, or a bit vector encoded as a Fixnum
|
24
|
+
# nil: Value has not been determined yet.
|
25
|
+
# Task: A reference to a Task object
|
26
|
+
# Bit 0: Reserved
|
27
|
+
# Bit 1: 0: Work time
|
28
|
+
# 1: Off time
|
29
|
+
# Bit 2 - 5: 0: No vacation or leave time
|
30
|
+
# 1: Regular vacation
|
31
|
+
# 2 - 15: Reserved
|
32
|
+
# Bit 6: Reserved
|
33
|
+
# Bit 7: 0: No global override
|
34
|
+
# 1: Override global setting
|
28
35
|
# The scoreboard is only created when needed to save memory for projects
|
29
36
|
# which read-in the coporate employee database but only need a small
|
30
37
|
# subset.
|
@@ -39,6 +46,8 @@ class TaskJuggler
|
|
39
46
|
def prepareScheduling
|
40
47
|
@property['effort', @scenarioIdx] = 0
|
41
48
|
initScoreboard
|
49
|
+
|
50
|
+
setDirectReports
|
42
51
|
end
|
43
52
|
|
44
53
|
# The criticalness of a resource is a measure for the probabilty that all
|
@@ -60,6 +69,72 @@ class TaskJuggler
|
|
60
69
|
end
|
61
70
|
end
|
62
71
|
|
72
|
+
def setDirectReports
|
73
|
+
# Only leaf resources have reporting lines.
|
74
|
+
return unless @property.leaf?
|
75
|
+
|
76
|
+
# The 'directreports' attribute is the reverse link for the 'managers'
|
77
|
+
# attribute. In contrast to the 'managers' attribute, the
|
78
|
+
# 'directreports' list has no duplicate entries.
|
79
|
+
a('managers').each do |manager|
|
80
|
+
unless manager['directreports', @scenarioIdx].include?(@property)
|
81
|
+
manager['directreports', @scenarioIdx] << @property
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def setReports
|
87
|
+
return unless a('directreports').empty?
|
88
|
+
|
89
|
+
a('managers').each do |r|
|
90
|
+
r.setReports_i(@scenarioIdx, [ @property ])
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
def preScheduleCheck
|
96
|
+
a('managers').each do |manager|
|
97
|
+
unless manager.leaf?
|
98
|
+
error('manager_is_group',
|
99
|
+
"Resource #{@property.fullId} has group #{manager.fullId} " +
|
100
|
+
"assigned as manager. Managers must be leaf resources.")
|
101
|
+
end
|
102
|
+
if manager == @property
|
103
|
+
error('manager_is_self',
|
104
|
+
"Resource #{@property.fullId} cannot manage itself.")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def postScheduleCheck
|
110
|
+
if a('fail') || a('warn')
|
111
|
+
queryAttrs = { 'project' => @project,
|
112
|
+
'scenarioIdx' => @scenarioIdx,
|
113
|
+
'property' => @property,
|
114
|
+
'scopeProperty' => nil,
|
115
|
+
'start' => @project['start'],
|
116
|
+
'end' => @project['end'],
|
117
|
+
'loadUnit' => :days,
|
118
|
+
'numberFormat' => @project['numberFormat'],
|
119
|
+
'timeFormat' => @project['timeFormat'],
|
120
|
+
'currencyFormat' => @project['currencyFormat'] }
|
121
|
+
query = Query.new(queryAttrs)
|
122
|
+
if a('fail') && a('fail').eval(query)
|
123
|
+
error('resource_fail_check',
|
124
|
+
"User defined check failed for resource #{@property.fullId} \n" +
|
125
|
+
"Condition: #{a('fail').to_s}\n" +
|
126
|
+
"Result: #{a('fail').to_s(query)}")
|
127
|
+
end
|
128
|
+
if a('warn') && a('warn').eval(query)
|
129
|
+
warning('resource_warn_check',
|
130
|
+
"User defined warning triggered for resource " +
|
131
|
+
"#{@property.fullId} \n" +
|
132
|
+
"Condition: #{a('warn').to_s}\n" +
|
133
|
+
"Result: #{a('warn').to_s(query)}")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
63
138
|
# Returns true if the resource is available at the time specified by
|
64
139
|
# _sbIdx_.
|
65
140
|
def available?(sbIdx)
|
@@ -96,7 +171,9 @@ class TaskJuggler
|
|
96
171
|
a('limits').inc(@scoreboard.idxToDate(sbIdx)) if a('limits')
|
97
172
|
|
98
173
|
# Make sure the task is in the list of duties.
|
99
|
-
|
174
|
+
unless a('duties').include?(task)
|
175
|
+
@property['duties', @scenarioIdx] << task
|
176
|
+
end
|
100
177
|
|
101
178
|
if @firstBookedSlot.nil? || @firstBookedSlot > sbIdx
|
102
179
|
@firstBookedSlot = sbIdx
|
@@ -118,14 +195,22 @@ class TaskJuggler
|
|
118
195
|
"conflicting tasks are #{@scoreboard[sbIdx].fullId} and " +
|
119
196
|
"#{booking.task.fullId}.", true, booking.sourceFileInfo)
|
120
197
|
end
|
121
|
-
|
122
|
-
|
198
|
+
val = @scoreboard[sbIdx]
|
199
|
+
if ((val & 2) != 0 && booking.overtime < 1)
|
200
|
+
# The booking is blocked due to the overtime attribute. Now let's
|
201
|
+
# see if the user wants to be warned about it.
|
202
|
+
if booking.sloppy < 1
|
123
203
|
error('booking_no_duty',
|
124
204
|
"Resource #{@property.fullId} has no duty at " +
|
125
205
|
"#{@scoreboard.idxToDate(sbIdx)}.", true,
|
126
206
|
booking.sourceFileInfo)
|
127
207
|
end
|
128
|
-
|
208
|
+
return false
|
209
|
+
end
|
210
|
+
if ((val & 0x3C) != 0 && booking.overtime < 2)
|
211
|
+
# The booking is blocked due to the overtime attribute. Now let's
|
212
|
+
# see if the user wants to be warned about it.
|
213
|
+
if booking.sloppy < 2
|
129
214
|
error('booking_on_vacation',
|
130
215
|
"Resource #{@property.fullId} is on vacation at " +
|
131
216
|
"#{@scoreboard.idxToDate(sbIdx)}.", true,
|
@@ -195,6 +280,14 @@ class TaskJuggler
|
|
195
280
|
end
|
196
281
|
end
|
197
282
|
|
283
|
+
# The work time of the Resource that was blocked by a vacation during the
|
284
|
+
# specified Interval. The result is in working days (effort).
|
285
|
+
def query_vacationdays(query)
|
286
|
+
query.sortable = query.numerical = time =
|
287
|
+
getVacationDays(query.startIdx, query.endIdx)
|
288
|
+
query.string = query.scaleLoad(time)
|
289
|
+
end
|
290
|
+
|
198
291
|
# Returns the work of the resource (and its children) weighted by their
|
199
292
|
# efficiency.
|
200
293
|
def getEffectiveWork(startIdx, endIdx, task = nil)
|
@@ -272,8 +365,6 @@ class TaskJuggler
|
|
272
365
|
endIdx)
|
273
366
|
end
|
274
367
|
else
|
275
|
-
initScoreboard if @scoreboard.nil?
|
276
|
-
|
277
368
|
freeTime = getFreeSlots(startIdx, endIdx) *
|
278
369
|
@project['scheduleGranularity']
|
279
370
|
end
|
@@ -293,8 +384,6 @@ class TaskJuggler
|
|
293
384
|
work += resource.getEffectiveFreeWork(@scenarioIdx, startIdx, endIdx)
|
294
385
|
end
|
295
386
|
else
|
296
|
-
initScoreboard if @scoreboard.nil?
|
297
|
-
|
298
387
|
work = @project.convertToDailyLoad(
|
299
388
|
getFreeSlots(startIdx, endIdx) *
|
300
389
|
@project['scheduleGranularity']) * a('efficiency')
|
@@ -302,6 +391,28 @@ class TaskJuggler
|
|
302
391
|
work
|
303
392
|
end
|
304
393
|
|
394
|
+
# Return the number of working days that are blocked by vacations.
|
395
|
+
def getVacationDays(startIdx, endIdx)
|
396
|
+
# Convert the interval dates to indexes if needed.
|
397
|
+
startIdx = @project.dateToIdx(startIdx, true) if startIdx.is_a?(TjTime)
|
398
|
+
endIdx = @project.dateToIdx(endIdx, true) if endIdx.is_a?(TjTime)
|
399
|
+
|
400
|
+
vacationDays = 0.0
|
401
|
+
if @property.container?
|
402
|
+
@property.children.each do |resource|
|
403
|
+
vacationDays += resource.getVacationDays(@scenarioIdx,
|
404
|
+
startIdx, endIdx)
|
405
|
+
end
|
406
|
+
else
|
407
|
+
initScoreboard if @scoreboard.nil?
|
408
|
+
|
409
|
+
vacationDays = @project.convertToDailyLoad(
|
410
|
+
getVacationSlots(startIdx, endIdx) *
|
411
|
+
@project['scheduleGranularity']) * a('efficiency')
|
412
|
+
end
|
413
|
+
vacationDays
|
414
|
+
end
|
415
|
+
|
305
416
|
def turnover(startIdx, endIdx, account, task = nil)
|
306
417
|
amount = 0.0
|
307
418
|
if @property.container?
|
@@ -391,12 +502,63 @@ class TaskJuggler
|
|
391
502
|
end
|
392
503
|
|
393
504
|
# Return a list of scoreboard intervals that are at least _minDuration_ long
|
394
|
-
# and contain only
|
395
|
-
#
|
505
|
+
# and contain only off-duty and vacation slots. The result is an Array of
|
506
|
+
# [ start, end ] TjTime values.
|
396
507
|
def collectTimeOffIntervals(iv, minDuration)
|
397
508
|
initScoreboard if @scoreboard.nil?
|
398
509
|
|
399
|
-
@scoreboard.
|
510
|
+
@scoreboard.collectIntervals(iv, minDuration) do |val|
|
511
|
+
val.is_a?(Fixnum) && (val & 0x3E) != 0
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
# Count the booked slots between the start and end index. If _task_ is not
|
516
|
+
# nil count only those slots that are assigned to this particular task.
|
517
|
+
def getAllocatedSlots(startIdx, endIdx, task)
|
518
|
+
# To speedup the counting we start with the first booked slot and end
|
519
|
+
# with the last booked slot.
|
520
|
+
startIdx = @firstBookedSlot if @firstBookedSlot &&
|
521
|
+
startIdx < @firstBookedSlot
|
522
|
+
endIdx = @lastBookedSlot + 1 if @lastBookedSlot &&
|
523
|
+
endIdx > @lastBookedSlot + 1
|
524
|
+
|
525
|
+
initScoreboard if @scoreboard.nil?
|
526
|
+
bookedSlots = 0
|
527
|
+
startIdx.upto(endIdx - 1) do |idx|
|
528
|
+
if (task.nil? && @scoreboard[idx].is_a?(Task)) ||
|
529
|
+
(task && @scoreboard[idx] == task)
|
530
|
+
bookedSlots += 1
|
531
|
+
end
|
532
|
+
end
|
533
|
+
|
534
|
+
bookedSlots
|
535
|
+
end
|
536
|
+
|
537
|
+
# Count the free slots between the start and end index.
|
538
|
+
def getFreeSlots(startIdx, endIdx)
|
539
|
+
initScoreboard if @scoreboard.nil?
|
540
|
+
|
541
|
+
freeSlots = 0
|
542
|
+
startIdx.upto(endIdx - 1) do |idx|
|
543
|
+
freeSlots += 1 if @scoreboard[idx].nil?
|
544
|
+
end
|
545
|
+
|
546
|
+
freeSlots
|
547
|
+
end
|
548
|
+
|
549
|
+
# Count the regular work time slots between the start and end index that
|
550
|
+
# have been blocked by a vacation.
|
551
|
+
def getVacationSlots(startIdx, endIdx)
|
552
|
+
initScoreboard if @scoreboard.nil?
|
553
|
+
|
554
|
+
vacationSlots = 0
|
555
|
+
startIdx.upto(endIdx - 1) do |idx|
|
556
|
+
val = @scoreboard[idx]
|
557
|
+
# Bit 1 needs to be unset and the vacation bits must not be 0.
|
558
|
+
vacationSlots += 1 if val.is_a?(Fixnum) && (val & 0x2) == 0 &&
|
559
|
+
(val & 0x3C) != 0
|
560
|
+
end
|
561
|
+
vacationSlots
|
400
562
|
end
|
401
563
|
|
402
564
|
private
|
@@ -404,7 +566,7 @@ class TaskJuggler
|
|
404
566
|
def initScoreboard
|
405
567
|
# Create scoreboard and mark all slots as unavailable
|
406
568
|
@scoreboard = Scoreboard.new(@project['start'], @project['end'],
|
407
|
-
@project['scheduleGranularity'],
|
569
|
+
@project['scheduleGranularity'], 2)
|
408
570
|
|
409
571
|
# We'll need this frequently and can savely cache it here.
|
410
572
|
@shifts = a('shifts')
|
@@ -418,21 +580,24 @@ class TaskJuggler
|
|
418
580
|
date += delta
|
419
581
|
end
|
420
582
|
|
421
|
-
# Mark all resource specific vacation slots as such
|
583
|
+
# Mark all resource specific vacation slots as such
|
422
584
|
a('vacations').each do |vacation|
|
423
585
|
startIdx = @scoreboard.dateToIdx(vacation.start, true)
|
424
586
|
endIdx = @scoreboard.dateToIdx(vacation.end, true)
|
425
587
|
startIdx.upto(endIdx - 1) do |i|
|
426
|
-
|
588
|
+
# If the slot is nil, we don't set the time-off bit.
|
589
|
+
@scoreboard[i] = (@scoreboard[i].nil? ? 0 : 2) | (1 << 2)
|
427
590
|
end
|
428
591
|
end
|
429
592
|
|
430
|
-
# Mark all global vacation slots as such
|
593
|
+
# Mark all global vacation slots as such
|
431
594
|
@project['vacations'].each do |vacation|
|
432
595
|
startIdx = @scoreboard.dateToIdx(vacation.start, true)
|
433
596
|
endIdx = @scoreboard.dateToIdx(vacation.end, true)
|
434
597
|
startIdx.upto(endIdx - 1) do |i|
|
435
|
-
|
598
|
+
# If the slot is nil or set to 4 then don't set the time-off bit.
|
599
|
+
sb = @scoreboard[i]
|
600
|
+
@scoreboard[i] = ((sb.nil? || sb == 4) ? 0 : 2) | (1 << 2)
|
436
601
|
end
|
437
602
|
end
|
438
603
|
|
@@ -441,65 +606,47 @@ class TaskJuggler
|
|
441
606
|
@project.scoreboardSize.times do |i|
|
442
607
|
v = @shifts.getSbSlot(@scoreboard.idxToDate(i))
|
443
608
|
# Check if the vacation replacement bit is set. In that case we copy
|
444
|
-
# the
|
609
|
+
# the whole interval over to the resource scoreboard overriding any
|
445
610
|
# global vacations.
|
446
|
-
if (v & (1 << 8))
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
elsif (
|
453
|
-
|
454
|
-
|
611
|
+
if (v & (1 << 8)) != 0
|
612
|
+
if (v & 0x3E) == 0
|
613
|
+
@scoreboard[i] = nil
|
614
|
+
else
|
615
|
+
@scoreboard[i] = v & 0x3E
|
616
|
+
end
|
617
|
+
elsif ((sbV = @scoreboard[i]).nil? || (sbV & 0x3C) == 0) &&
|
618
|
+
(v & 0x3C) != 0
|
619
|
+
# We only add the shift vacations but don't turn global vacation
|
620
|
+
# slots into working slots again.
|
621
|
+
@scoreboard[i] = v & 0x3E
|
455
622
|
end
|
456
623
|
end
|
457
624
|
end
|
458
625
|
end
|
459
626
|
|
460
|
-
def
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
# end
|
467
|
-
if @shifts && (v = (@shifts.getSbSlot(date) & 0xFF)) > 0
|
468
|
-
v == 1
|
469
|
-
else
|
470
|
-
@workinghours.onShift?(date)
|
627
|
+
def setReports_i(reports)
|
628
|
+
if reports.include?(@property)
|
629
|
+
# A manager must never show up in the list of his/her own reports.
|
630
|
+
error('manager_loop',
|
631
|
+
"Management loop detected. #{@property.fullId} has self " +
|
632
|
+
"in list of reports")
|
471
633
|
end
|
472
|
-
|
634
|
+
@property['reports', @scenarioIdx] += reports
|
635
|
+
# Resources can end up multiple times in the list if they have multiple
|
636
|
+
# reporting chains. We only need them once in the list.
|
637
|
+
a('reports').uniq!
|
473
638
|
|
474
|
-
|
475
|
-
|
476
|
-
def getAllocatedSlots(startIdx, endIdx, task)
|
477
|
-
# To speedup the counting we start with the first booked slot and end
|
478
|
-
# with the last booked slot.
|
479
|
-
startIdx = @firstBookedSlot if @firstBookedSlot &&
|
480
|
-
startIdx < @firstBookedSlot
|
481
|
-
endIdx = @lastBookedSlot + 1 if @lastBookedSlot &&
|
482
|
-
endIdx > @lastBookedSlot + 1
|
483
|
-
|
484
|
-
bookedSlots = 0
|
485
|
-
startIdx.upto(endIdx - 1) do |idx|
|
486
|
-
if (task.nil? && @scoreboard[idx].is_a?(Task)) ||
|
487
|
-
(task && @scoreboard[idx] == task)
|
488
|
-
bookedSlots += 1
|
489
|
-
end
|
639
|
+
a('managers').each do |r|
|
640
|
+
r.setReports_i(@scenarioIdx, a('reports'))
|
490
641
|
end
|
491
|
-
|
492
|
-
bookedSlots
|
493
642
|
end
|
494
643
|
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
644
|
+
def onShift?(date)
|
645
|
+
if @shifts && @shifts.assigned?(date)
|
646
|
+
return @shifts.onShift?(date)
|
647
|
+
else
|
648
|
+
@workinghours.onShift?(date)
|
500
649
|
end
|
501
|
-
|
502
|
-
freeSlots
|
503
650
|
end
|
504
651
|
|
505
652
|
# Returns true if the resource or any of its children is allocated during
|
data/lib/RichText.rb
CHANGED
@@ -125,8 +125,10 @@ class TaskJuggler
|
|
125
125
|
class RichTextIntermediate
|
126
126
|
|
127
127
|
attr_reader :richText
|
128
|
-
attr_accessor :blockMode, :sectionNumbers,
|
129
|
-
:
|
128
|
+
attr_accessor :blockMode, :sectionNumbers,
|
129
|
+
:lineWidth, :indent, :titleIndent, :parIndent, :listIndent,
|
130
|
+
:preIndent,
|
131
|
+
:linkTarget, :cssClass, :tree
|
130
132
|
|
131
133
|
def initialize(richText)
|
132
134
|
# A reference to the corresponding RichText object the RTI is derived
|
@@ -140,8 +142,18 @@ class TaskJuggler
|
|
140
142
|
@blockMode = true
|
141
143
|
# Set this to false to disable automatically generated section numbers.
|
142
144
|
@sectionNumbers = true
|
143
|
-
# Set this to the width
|
145
|
+
# Set this to the maximum width used for text output.
|
144
146
|
@lineWidth = 80
|
147
|
+
# The indentation used for all text output.
|
148
|
+
@indent = 0
|
149
|
+
# Additional indentation used for titles in text output.
|
150
|
+
@titleIndent = 0
|
151
|
+
# Additional indentation used for paragraph text output.
|
152
|
+
@parIndent = 0
|
153
|
+
# Additional indentation used for lists in text output.
|
154
|
+
@listIndent = 1
|
155
|
+
# Additional indentation used for <pre> sections in text output.
|
156
|
+
@preIndent = 0
|
145
157
|
# The target used for hypertext links.
|
146
158
|
@linkTarget = nil
|
147
159
|
# The CSS class used for some key HTML elements.
|
data/lib/RichTextDocument.rb
CHANGED
@@ -47,6 +47,7 @@ class TaskJuggler
|
|
47
47
|
@snippets << (snippet = RichTextSnip.new(self, file, @sectionCounter))
|
48
48
|
snippet.linkTarget = @linkTarget
|
49
49
|
@dirty = true
|
50
|
+
snippet
|
50
51
|
end
|
51
52
|
|
52
53
|
# Call this method to generate a table of contents for all files that were
|
@@ -119,10 +120,7 @@ class TaskJuggler
|
|
119
120
|
# Generate a HTML file with the table of contense for all registered files.
|
120
121
|
def generateHTMLTableOfContents(directory)
|
121
122
|
html = HTMLDocument.new
|
122
|
-
|
123
|
-
head << XMLNamedText.new('Index', 'title') <<
|
124
|
-
XMLElement.new('meta', 'http-equiv' => 'Content-Type',
|
125
|
-
'content' => 'text/html; charset=utf-8')
|
123
|
+
head = html.generateHead('Index')
|
126
124
|
html << (body = XMLElement.new('body'))
|
127
125
|
|
128
126
|
body << generateHTMLCover <<
|