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/manual/Day_To_Day_Juggling
CHANGED
@@ -32,6 +32,8 @@ but it needs your help. You have to provide the additional information in the
|
|
32
32
|
project file. In return you get current status reports and an updated project
|
33
33
|
plan based on the current status of the project.
|
34
34
|
|
35
|
+
==== Using completion values ====
|
36
|
+
|
35
37
|
The most simple form of capturing the current status of the project is to use
|
36
38
|
the complete attribute.
|
37
39
|
|
@@ -43,27 +45,602 @@ the complete attribute.
|
|
43
45
|
}
|
44
46
|
|
45
47
|
This tells TaskJuggler that 50% of the task's effort has been completed by the
|
46
|
-
current date. Tasks that have no completion specification will
|
47
|
-
on track. TaskJuggler calculates the
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
48
|
+
[[now|current date]]. Tasks that have no completion specification will
|
49
|
+
be assumed to be on track. TaskJuggler calculates the expected
|
50
|
+
completion degree based on the current date. Completion specifications
|
51
|
+
only need to be supplied for tasks that are either ahead of schedule
|
52
|
+
or behind schedule. Please be aware that the completion degree does
|
53
|
+
not affect the scheduling and resource allocation. It is only for
|
54
|
+
reporting purposes. It also does not tell TaskJuggler which resource
|
55
|
+
actually worked on the tasks, nor does it update the total or
|
56
|
+
remaining effort.
|
57
|
+
|
58
|
+
==== Using bookings ====
|
59
|
+
|
60
|
+
When TaskJuggler schedules your plan, it can tell you who should work
|
61
|
+
when on what. Now, that's the plan. But reality might be different.
|
62
|
+
To tell TaskJuggler what really happened, you can use
|
63
|
+
[[booking.task|booking statements]]. When the past is exactly
|
64
|
+
described by providing booking statements, you can enable
|
65
|
+
[[projection|projection mode]].
|
66
|
+
|
67
|
+
Entering all the bookings for each resource and task may sound like a
|
68
|
+
daunting task at first. If you do it manually, it certainly is.
|
69
|
+
Fortunately, TaskJuggler can generate them for you by using
|
70
|
+
[[export|export reports]]. Before we discuss this in more detail, we
|
71
|
+
need to make sure that the plan is up-to-date.
|
72
|
+
|
73
|
+
=== Tracking status and actuals ===
|
74
|
+
|
75
|
+
Creating a good project plan is one thing. Executing it is a whole
|
76
|
+
new story. Usually, the first plan is never fully correct and the
|
77
|
+
only way to make sure that you are making progress according to plan
|
78
|
+
is to regularly get status updates from all resources.
|
79
|
+
|
80
|
+
Status updates should be provided by all project contributors on a
|
81
|
+
regular basis, usually once a week. These updates should tell project
|
82
|
+
managers who really worked how much on what tasks and how much work
|
83
|
+
the contributors believe is really left now. There are two categories
|
84
|
+
of tasks in a project that need to be treated slightly differently.
|
85
|
+
|
86
|
+
A task can either be effort based or duration based. In the former
|
87
|
+
case, the contributors must tell how much effort is left. For
|
88
|
+
duration based task, this doesn't make much sense. For these task,
|
89
|
+
the expected end date should be reported.
|
90
|
+
|
91
|
+
In addition to those numbers, managers in the reporting chain usually
|
92
|
+
want to have a textual status that describes what happened and what
|
93
|
+
kind of issues were encountered. Usually, these textual status
|
94
|
+
reports are combined with alert levels like green, yellow and red.
|
95
|
+
Green means everything is progressing according to plan, yellow means
|
96
|
+
there is some schedule risk and red means serious trouble. Usually
|
97
|
+
first line managers like to get all the details while people further
|
98
|
+
up in the reporting chain only like to see summaries varying level of
|
99
|
+
details.
|
100
|
+
|
101
|
+
All of this creates additional overhead but is usually inevitable to
|
102
|
+
ensure that you complete the project within time and budget. As a
|
103
|
+
comprehensive project management solution, TaskJuggler provides full
|
104
|
+
support for all those tracking and reporting steps. It comes with a
|
105
|
+
powerful email and web based communication system that simplifies the
|
106
|
+
tracking process for individual contributors as well as managers.
|
107
|
+
|
108
|
+
As a side note we would like to mention that the recording of the work
|
109
|
+
time of employees is regulated by labor law in certain countries. You
|
110
|
+
might also require approval from a Worker's Council before you can
|
111
|
+
deploy time recording tools.
|
112
|
+
|
113
|
+
We also would like to point out that introducing status reporting and
|
114
|
+
time sheets is usually a big change for every staff. Don't
|
115
|
+
underestimate the psychological impact and the training requirements.
|
116
|
+
We also recommend to test the described process with a small group of
|
117
|
+
employees first to get familiar with the process and to adapt it to
|
118
|
+
your needs. Don't rush a deployment! You usually only have one chance
|
119
|
+
to roll-out such a process.
|
120
|
+
|
121
|
+
==== The reporting and tracking cycle ====
|
122
|
+
|
123
|
+
In this description, we assume that you are using a weekly reporting
|
124
|
+
cycle. TaskJuggler does support arbitrary cycles, but we highly
|
125
|
+
recommend the described weekly cycle.
|
126
|
+
|
127
|
+
# '''Time sheets''': Every project contributor needs to fill out a
|
128
|
+
[[timesheet|time sheet]] once a week. To simplify this task as much
|
129
|
+
as possible, a template will be send out by email. The template
|
130
|
+
already lists all tasks that were planned for this week to work on
|
131
|
+
with the respective effort values and end dates. It also provides
|
132
|
+
sections for textual status reports. The contributor needs to review
|
133
|
+
and complete the time sheet and has to send it back via email.
|
134
|
+
TaskJuggler validates the submission and returns an email with either
|
135
|
+
an error message or a nicely formatted version of the time sheet.
|
136
|
+
|
137
|
+
# All time sheets must be submitted by a certain deadline, e. g.
|
138
|
+
midnight on Sunday. TaskJuggler will then compile a summary report
|
139
|
+
and sent it out to a list of interested parties. It will also detect
|
140
|
+
missing time sheets and will send out a reminder to those
|
141
|
+
contributors that have not submitted their report.
|
142
|
+
|
143
|
+
# On Monday the project managers need to review the time sheets and
|
144
|
+
update the plan accordingly. TaskJuggler can compile a list changes
|
145
|
+
compared to the plan. This makes it easy to update the plan according
|
146
|
+
to the actual progress that was made. The close the actuals match the
|
147
|
+
plan the less work this is. The project managers now generate
|
148
|
+
bookings for the last week and add them to the database with previous
|
149
|
+
bookings. Doing so, will prevent changes to the plan to affect the
|
150
|
+
past. Only the future will be modified.
|
151
|
+
|
152
|
+
# Once the plan has been updated, managers will receive their status
|
153
|
+
sheet templates per email. Each manager will get the information for
|
154
|
+
the tasks that they are [[responsible]] for. To consolidate the
|
155
|
+
information for the next manager in the reporting chain they can
|
156
|
+
moderate the reports in three ways. Consolidated manager reports are
|
157
|
+
called dashboard reports.
|
158
|
+
|
159
|
+
## A status report for a task can be removed from the dashboard.
|
160
|
+
|
161
|
+
## A status report for a task can be corrected or updated.
|
162
|
+
|
163
|
+
## All reports for sub tasks of a task can be summarized by creating
|
164
|
+
a new status for that task. This will remove all reports for sub
|
165
|
+
tasks of that particular tasks from the dashboard.
|
166
|
+
|
167
|
+
# Managers than need to send back the edited status report via email.
|
168
|
+
Like with time sheets, TaskJuggler will check them and return either
|
169
|
+
an error message or a plain text version of the dashboard report of
|
170
|
+
the manager.
|
171
|
+
|
172
|
+
In addition to the plain text versions of the time sheet summaries
|
173
|
+
and the dashboards, TaskJuggler provides support for publishing them
|
174
|
+
as HTML pages from a web server.
|
175
|
+
|
176
|
+
=== Implementing the status tracking system ===
|
177
|
+
|
178
|
+
==== Prerequesites ====
|
179
|
+
|
180
|
+
The .tjp and .tji files of your project plan should be managed by a
|
181
|
+
revision control system. TaskJuggler does not require a particular
|
182
|
+
software, but for this manual we illustrate the implementation with
|
183
|
+
[http://subversion.apache.org Subversion]. It should be obvious how
|
184
|
+
to do this with other software though.
|
185
|
+
|
186
|
+
All communication of time sheets and status sheets is done via email.
|
187
|
+
TaskJuggler has built-in support for sending emails. To receive
|
188
|
+
emails and to feed them to the correct program, TaskJuggler needs
|
189
|
+
support from a mail transfer agent (MTA) and a mail processor. In
|
190
|
+
this documentation we describe the setup with
|
191
|
+
[http://www.postfix.org/ postfix] as MTA and
|
192
|
+
[http://www.procmail.org/ procmail] as mail processor. These are
|
193
|
+
standard parts of any Linux distribution and should be easy to setup.
|
194
|
+
It's certainly possible to use other MTAs and mail processors, but
|
195
|
+
this is not the scope of this manual.
|
196
|
+
|
197
|
+
Finally, you need a web server to publish your reports. This can
|
198
|
+
really be any web server. The generated reports are static HTML pages
|
199
|
+
that can simply be put into a directory that the web server is
|
200
|
+
serving.
|
201
|
+
|
202
|
+
For the email based communication you need to provide email addresses
|
203
|
+
for all project contributors. This is done in the project plan in the
|
204
|
+
resource definition by using the [[email]] attribute.
|
205
|
+
|
206
|
+
resource joe "Joe Avergage" {
|
207
|
+
email "joe@your_company.com
|
64
208
|
}
|
65
209
|
|
66
|
-
|
210
|
+
In this manual, we assume you have a dedicated Linux machine with a
|
211
|
+
local user called ''''taskjuggler''''. Your project files (*.tjp and
|
212
|
+
<nowiki>*</nowiki>.tji) is under Subversion control and the
|
213
|
+
taskjuggler user has a checked-out version in
|
214
|
+
''''/home/taskjuggler/projects/prj''''. You can use another user name,
|
215
|
+
another source code management system and even another operating
|
216
|
+
system like Windows or MacOS. This is all possible, but not the scope
|
217
|
+
of this manual.
|
218
|
+
|
219
|
+
==== The TaskJuggler Server ====
|
220
|
+
|
221
|
+
Depending on the size of your project the scheduling time can take
|
222
|
+
several minutes or more. Since all operations need to be done on the
|
223
|
+
data of a scheduled project, it makes sense to have this data readily
|
224
|
+
available. This is the job of the TaskJuggler server or daemon in
|
225
|
+
Linux lingo. The program is called ''''tj3d''''. When started, it
|
226
|
+
automatically disconnects from the terminal and runs in the
|
227
|
+
background. All interactions with the server are done via the TCP/IP
|
228
|
+
protocol. For security reasons, only connections from the same
|
229
|
+
machine (localhost) are accepted. To get access all clients must
|
230
|
+
provide an authentication key. A TaskJuggler server can serve any
|
231
|
+
number of projects. Once a project has been loaded successfully,
|
232
|
+
clients can retrieve the data in form of reports. Projects are
|
233
|
+
identified by their project ID. If a newly added project has the same
|
234
|
+
ID such as an already loaded project, the new project will replace
|
235
|
+
the old project once it was scheduled successfully. Before you start
|
236
|
+
the server, you need to provide a configuration file with some basic
|
237
|
+
settings.
|
238
|
+
|
239
|
+
All taskjuggler components can use the same TaskJuggler configuration
|
240
|
+
file. The format is a simple plain text format that follows the
|
241
|
+
[http://www.yaml.org/ YAML specification]. The file should be called
|
242
|
+
''''.taskjuglerrc'''' or ''''taskjuggler.rc''''. The settings are
|
243
|
+
structured by sections. Section names always start with an underscore.
|
244
|
+
|
245
|
+
_global:
|
246
|
+
authKey: topsecret
|
247
|
+
_log:
|
248
|
+
logLevel: 3
|
249
|
+
outputLevel: 3
|
250
|
+
|
251
|
+
This file sets the authentication key for all TaskJuggler components.
|
252
|
+
You must replace ''topsecret'' with your own random character
|
253
|
+
sequence.
|
254
|
+
|
255
|
+
For the purpose of this documentation we assume you have a local user
|
256
|
+
called ''taskjuggler'' and your project data in
|
257
|
+
''''/home/taskjuggler/project/prj''''. Your TaskJuggler configuration
|
258
|
+
should then be put into
|
259
|
+
''''/home/taskjuggler/project/prj/.taskjugglerrc''''.
|
260
|
+
|
261
|
+
The log section controls the content of the log file. Since the
|
262
|
+
daemon does not have a terminal attached to it, all messages are
|
263
|
+
stored in a file called ''''tj3d.log''''. For debugging purposes, you
|
264
|
+
can use the ''''-d'''' option to prevent the daemon from
|
265
|
+
disconnecting from the terminal. In this case the ''''outputLevel''''
|
266
|
+
configuration option controls the amount of details to be printed out.
|
267
|
+
|
268
|
+
* 0: No output
|
269
|
+
* 1: Only fatal errors
|
270
|
+
* 2: Fatal and normal errors
|
271
|
+
* 3: Like 2, but additionally with information messages
|
272
|
+
* 4: Like 3, but additionally with debug messages
|
273
|
+
|
274
|
+
The configuration file will be searched in the current directory,
|
275
|
+
the current user's home directory or ''''/etc''''. You can also
|
276
|
+
explicitly tell the server where to find the configuration file with
|
277
|
+
the ''''-c'''' option. See
|
278
|
+
|
279
|
+
tj3d --help
|
280
|
+
|
281
|
+
for details.
|
282
|
+
|
283
|
+
==== The TaskJuggler Client ====
|
284
|
+
|
285
|
+
To control the TaskJuggler server, you need to use the TaskJuggler
|
286
|
+
client. You can use the client to add or remove projects from the
|
287
|
+
server, inquire the status of loaded projects. It can also be used to
|
288
|
+
show the available reports for each project and to generate report or
|
289
|
+
check time or status sheets.
|
290
|
+
|
291
|
+
The client must provide the correct authentication key to the server.
|
292
|
+
You need to ensure that it can find the proper configuration file
|
293
|
+
with the authentication key.
|
294
|
+
|
295
|
+
tj3client --help
|
296
|
+
|
297
|
+
will provide a full lust of supported commands. To load a project
|
298
|
+
simply type
|
299
|
+
|
300
|
+
tj3client add yourproject.tjp
|
301
|
+
|
302
|
+
In case there were no errors
|
303
|
+
|
304
|
+
tj3client status
|
305
|
+
|
306
|
+
should now list your project.
|
307
|
+
|
308
|
+
tj3client list-reports <project_id>
|
309
|
+
|
310
|
+
shows a list of available reports for the project with the provided
|
311
|
+
ID. To generate a report, you can type
|
312
|
+
|
313
|
+
tj3client report <project_id> <report_id>
|
314
|
+
|
315
|
+
==== The Time Sheet Template Sender ====
|
316
|
+
|
317
|
+
Each project contributor needs to fill out a time sheet each week. To
|
318
|
+
simplify the process each contributor will receive a template that
|
319
|
+
already contains a lot of the information they need to provide.
|
320
|
+
|
321
|
+
To send out the time sheets, the command ''''tj3ts_sender'''' must be
|
322
|
+
used. It will call ''''tj3client'''' with appropriate parameters. To
|
323
|
+
use it, you need to have a properly configured daemon running and the
|
324
|
+
appropriate project loaded. Then you need to add the configuration
|
325
|
+
data for ''''tj3ts_sender'''' to your TaskJuggler configuration file.
|
326
|
+
The time sheet related settings have their own top-level section:
|
327
|
+
|
328
|
+
_global:
|
329
|
+
smtpServer: smtp.your_company.com
|
330
|
+
authKey: topsecret
|
331
|
+
scmCommand: "svn add %f ; svn commit -m '%m' %f"
|
332
|
+
projectId: prj
|
333
|
+
_timesheets:
|
334
|
+
senderEmail: 'TaskJuggler <timesheets@taskjuggler.your_company.com>'
|
335
|
+
_sender:
|
336
|
+
hideResource: '~isleaf()'
|
337
|
+
_summary:
|
338
|
+
sheetRecipients:
|
339
|
+
- team@your_company.com
|
340
|
+
digestRecipients:
|
341
|
+
- managers@your_company.com
|
342
|
+
|
343
|
+
The ''''smtpServer'''' defines which host will handle your emails. Replace the
|
344
|
+
host name with your local SMTP server. The 'scmCommand' setting contains the
|
345
|
+
command to add and commit new and old files to the source code management
|
346
|
+
system. The command in this example works for Subversion.
|
347
|
+
|
348
|
+
The TaskJuggler server may serve multiple projects. With the
|
349
|
+
''''projectId'''' option you have to specify which project you would
|
350
|
+
like to work with. ''''senderEmail'''' is the email address the time
|
351
|
+
sheet infrastructure will use. Outgoing emails will have this address
|
352
|
+
as sender so that replies will come back to this email address. We'll
|
353
|
+
cover later how these are processed.
|
354
|
+
|
355
|
+
The hideResource option works similarly to the [[hideresource]]
|
356
|
+
attribute in the report definitions of the project plan. It allows
|
357
|
+
you to restrict the sending of time sheet templates to a subset of
|
358
|
+
your defined resources. In this example, we only want to send
|
359
|
+
templates to individual resources and not the teams you might have
|
360
|
+
defined.
|
361
|
+
|
362
|
+
By default the time sheets will cover the week from Monday morning
|
363
|
+
0:00 to Sunday night 24:00. When called without the ''''-e''''
|
364
|
+
option, ''''tj3ts_sender'''' will send out templates for the current
|
365
|
+
week.
|
366
|
+
|
367
|
+
To call the ''''tj3ts_sender'''' command you either need to be in the
|
368
|
+
''''/home/taskjuggler/projects/prj'''' directory or use the
|
369
|
+
''''-c'''' command line option to point it to the configuration file
|
370
|
+
to use. In the latter case you also need to call it with the
|
371
|
+
''''-d'''' option to change the output directory to your project
|
372
|
+
directory.
|
373
|
+
|
374
|
+
To test the command without sending out actual emails you can use the
|
375
|
+
''''--dryrun'''' option on the command line. To do its job,
|
376
|
+
''''tj3ts_sender'''' needs to generate a number of files and
|
377
|
+
directories. A copy of the generated templates will be stored in
|
378
|
+
''''TimeSheetTemplates/<date>/'''' under
|
379
|
+
''''<resource_id>-date.tji''''. ''''<date>'''' is replaced with the
|
380
|
+
end date of the reporting interval and ''''<resoruce_id>'''' is the ID
|
381
|
+
of the resource.
|
382
|
+
|
383
|
+
If you re-run the command existing templates will not be regenerated
|
384
|
+
nor will they be sent out again. You can use the ''''-f''''
|
385
|
+
command line option to force them to be generated and sent out again.
|
386
|
+
|
387
|
+
The ''''tj3ts_sender'''' command will also add the reporting interval
|
388
|
+
to a file called ''''TimeSheetTemplates/acceptable_invervals''''.
|
389
|
+
We'll cover this file later on when we deal with the time sheet
|
390
|
+
receiver.
|
391
|
+
|
392
|
+
==== The Time Sheet Receiver ====
|
393
|
+
|
394
|
+
To receive the filled-out time sheets and to process them
|
395
|
+
automatically you need to create a special user. TaskJuggler requires
|
396
|
+
a number of email addresses to be setup to receive emails. We
|
397
|
+
recommend to use the following setup. Create a special user called
|
398
|
+
''''taskjuggler'''' on a dedicated Linux machine. Then create the
|
399
|
+
following email aliases for this user.
|
400
|
+
|
401
|
+
timesheets
|
402
|
+
timesheet-request
|
403
|
+
statussheets
|
404
|
+
statussheet-request
|
405
|
+
|
406
|
+
Your MTA must be configured to use procmail for email delivery. See
|
407
|
+
the manual of your MTA for details on how to configure aliases and
|
408
|
+
for using procmail for delivery. If you have a resident MTA expert
|
409
|
+
you should ask him or her for support.
|
410
|
+
|
411
|
+
The next step is to configure procmail to forward the incoming emails
|
412
|
+
to the appropriate TaskJuggler components. Create a file called
|
413
|
+
''''.procmailrc'''' in the home directory of the taskjuggler user and
|
414
|
+
put in the following content:
|
415
|
+
|
416
|
+
For debugging and testing purposes, all incoming emails are archived
|
417
|
+
in a directory called ''''Mail''''. If there is no such directory in
|
418
|
+
the taskjuggler home directory, you need to create it now.
|
419
|
+
|
420
|
+
PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin
|
421
|
+
MAILDIR=$HOME/Mail/
|
422
|
+
DEFAULT=$HOME/Mail/all
|
423
|
+
LOGFILE=$MAILDIR/procmail.log
|
424
|
+
SHELL=/bin/sh
|
425
|
+
PROJECTDIR=/home/taskjuggler/projects/prj
|
426
|
+
LANG=en_US.UTF-8
|
427
|
+
LC_ALL=en_US.UTF-8
|
428
|
+
|
429
|
+
# Archive all incoming emails in a file called all
|
430
|
+
:0 c
|
431
|
+
all
|
432
|
+
|
433
|
+
:0
|
434
|
+
* ^Subject:.*Out of Office.*
|
435
|
+
/dev/null
|
436
|
+
|
437
|
+
:0
|
438
|
+
* ^To:.*timesheets@taskjuggler\.your_company\.com
|
439
|
+
{
|
440
|
+
:0 c:
|
441
|
+
timesheets
|
442
|
+
|
443
|
+
:0 w: tj3ts_receiver.lock
|
444
|
+
| tj3ts_receiver --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
445
|
+
|
446
|
+
:0
|
447
|
+
failed_sheets
|
448
|
+
}
|
449
|
+
|
450
|
+
:0
|
451
|
+
* ^To:.*timesheet-request@taskjuggler\.your_company\.com
|
452
|
+
{
|
453
|
+
ID=`formail -xSubject:`
|
454
|
+
|
455
|
+
:0 c:
|
456
|
+
timesheet-request
|
457
|
+
|
458
|
+
:0 w: tj3ts_sender.lock
|
459
|
+
| tj3ts_sender -r $ID -f --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
460
|
+
}
|
461
|
+
|
462
|
+
:0
|
463
|
+
* ^To:.*statussheets@taskjuggler\.your_company\.com
|
464
|
+
{
|
465
|
+
:0 c:
|
466
|
+
statussheets
|
467
|
+
|
468
|
+
:0 w: tj3ss_receiver.lock
|
469
|
+
| tj3ss_receiver --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
470
|
+
|
471
|
+
:0
|
472
|
+
failed_sheets
|
473
|
+
}
|
474
|
+
|
475
|
+
:0
|
476
|
+
* ^To:.*statussheet-request@taskjuggler\.your_company\.com
|
477
|
+
{
|
478
|
+
ID=`formail -xSubject:`
|
479
|
+
|
480
|
+
:0 c:
|
481
|
+
statussheet-request
|
482
|
+
|
483
|
+
:0 w: tj3ss_sender.lock
|
484
|
+
| tj3ss_sender -r $ID -f --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
|
485
|
+
}
|
486
|
+
|
487
|
+
# Forward a copy to project admins
|
488
|
+
:0 c
|
489
|
+
! taskjuggler-admin@your_company.com
|
490
|
+
|
491
|
+
# Since we have archived a copy we can discard all mails here.
|
492
|
+
:0
|
493
|
+
/dev/null
|
494
|
+
|
495
|
+
This procmail configuration will cause incoming emails that are
|
496
|
+
addressed to timesheets@taskjuggler.your_company.com to be forwarded
|
497
|
+
to the ''''tj3ts_receiver'''' program. Of course you need to replace
|
498
|
+
''your_comany.com'' with whatever domain you are using.
|
499
|
+
|
500
|
+
The received emails are then checked for syntactical and logical
|
501
|
+
errors. If such are found, an email is sent back with an appropriate
|
502
|
+
error message. The time sheet contains the resource ID of the
|
503
|
+
reporting resource. As soon as this has been detected, all email
|
504
|
+
communication will be sent to the email address in the project plan.
|
505
|
+
Only when the resource ID could not be identified, the sender of the
|
506
|
+
email will get the answer. This was implemented as a security measure
|
507
|
+
so other users cannot easily retrieve project related information
|
508
|
+
from other users.
|
509
|
+
|
510
|
+
Correct time sheets are archived in the ''''TimeSheets/<date>/''''
|
511
|
+
directory where ''''<date>'''' is the end date of the reporting
|
512
|
+
period. If the directory does not exist yet, it will be created. The
|
513
|
+
file will be called ''''<resource_id>-<date>.tji''''. If
|
514
|
+
a SCM command was specified, the file will be automatically put under
|
515
|
+
revision control. Subsequent submission of the same time sheet will
|
516
|
+
simply overwrite the earlier submissions. The file name will also be
|
517
|
+
added to a file called ''''all.tji'''' which consists of include
|
518
|
+
statements of all time sheet files in the directory. There also is an
|
519
|
+
automatically maintained file ''''all.tji'''' in the
|
520
|
+
''''TimeSheets'''' directory that includes all the ''''<date>/all.tji''''
|
521
|
+
files. To add all the submitted time sheets to your project plan,
|
522
|
+
simply include the top-level ''''all.tji''''.
|
523
|
+
|
524
|
+
''''tj3ts_receiver'''' will only accept time sheets for the time
|
525
|
+
periods listed in ''''TimeSheetTemplates/acceptable_intervals''''.
|
526
|
+
''''tj3ts_sender'''' will automatically enable the current period
|
527
|
+
when it sends out the templates. If you want to stop receiving time
|
528
|
+
sheet updates for a certain period, simply remove the period from the
|
529
|
+
''''acceptable_intervals'''' file.
|
530
|
+
|
531
|
+
==== Time Sheet Template Requests ====
|
532
|
+
|
533
|
+
Normally, the time sheets are sent out once a week automatically. In
|
534
|
+
case a project contributor leaves earlier for vacation or has lost
|
535
|
+
the template, they can request the template for the current week
|
536
|
+
again.
|
537
|
+
|
538
|
+
By sending an email to
|
539
|
+
''''timesheet-request@taskjuggler.your_company.com'''' and putting
|
540
|
+
their resource ID in the subject of the email, they will receive an
|
541
|
+
email with the time sheet template. The email will be sent to the
|
542
|
+
email address in the project plan, not the sender of the request
|
543
|
+
email.
|
544
|
+
|
545
|
+
==== Time Sheet Summaries ====
|
546
|
+
|
547
|
+
All time sheets should be successfully submitted by Sunday 24:00.
|
548
|
+
After this deadline, your can send out a summary of all submitted
|
549
|
+
time sheets. This summary will also contain a list of those project
|
550
|
+
contributors that have not submitted their time sheet. These
|
551
|
+
individuals will also get a reminder to submit their time sheets
|
552
|
+
immediately.
|
553
|
+
|
554
|
+
To send out the summary report, the program ''''tj3ts_summary'''' is
|
555
|
+
used. Before you can use it, you need to add a few settings to the
|
556
|
+
TaskJuggler configuration file.
|
557
|
+
|
558
|
+
_global:
|
559
|
+
smtpServer: smtp.your_company.com
|
560
|
+
authKey: topsecret
|
561
|
+
projectId: prj
|
562
|
+
_timesheets:
|
563
|
+
senderEmail: 'TaskJuggler <timesheets@taskjuggler.your_company.com>'
|
564
|
+
_summary:
|
565
|
+
sheetRecipients:
|
566
|
+
- team@your_company.com
|
567
|
+
digestRecipients:
|
568
|
+
- managers@your_company.com
|
569
|
+
|
570
|
+
''''sheetRecipients'''' is a list of email addresses that should
|
571
|
+
receive a copy of the submitted time sheet. Each email address must
|
572
|
+
be put on a separate, properly indented line that starts with a dash
|
573
|
+
followed by a space. The emails will have the email of the original
|
574
|
+
time sheet author as sender address.
|
575
|
+
|
576
|
+
==== Updating the Project Plan ====
|
577
|
+
|
578
|
+
The time sheets contain two kind of information that are intended for
|
579
|
+
two sets of audiences. Project managers will be interested primarily
|
580
|
+
in the scheduling related information but surely like to look at the
|
581
|
+
task status as well.
|
582
|
+
|
583
|
+
Managers responsible for certain parts of the project will be
|
584
|
+
primarily interested in the status reports for the ongoing tasks.
|
585
|
+
We'll cover the processing of the status information in the next
|
586
|
+
sections.
|
587
|
+
|
588
|
+
This section deals with the processing of the scheduling related
|
589
|
+
information. Project contributors can specify several deviations of
|
590
|
+
the current project plan.
|
591
|
+
|
592
|
+
* Task may need more effort or time than was originally planned for.
|
593
|
+
|
594
|
+
* They may have not worked the planned amounts on the tasks.
|
595
|
+
|
596
|
+
* They may have started to work on new tasks that are not even in the
|
597
|
+
project plan. The is usually a sign of project discipline and should
|
598
|
+
be avoided. But in reality this will happen and TaskJuggler is able
|
599
|
+
to handle it.
|
600
|
+
|
601
|
+
TaskJuggler can print a summary of all the deltas between the plan
|
602
|
+
and the actual reports in the time sheets.
|
603
|
+
|
604
|
+
tj3 --warn-ts-deltas YourProject.tjp TimeSheets/all.tji
|
605
|
+
|
606
|
+
In this example call ''''YourProject.tjp'''' is your main project
|
607
|
+
file and all submitted time sheets are included by
|
608
|
+
TimeSheets/all.tji. This file and all subsequent include files are
|
609
|
+
automatically generated and updated by ''''tj3ts_receiver''''.
|
610
|
+
|
611
|
+
Project managers should use the printed output of this command to
|
612
|
+
update the project plan accordingly. The specified deltas of existing
|
613
|
+
tasks must be updated in the main project plan. For new tasks in the
|
614
|
+
time sheets, the task has to be created in the project plan. Then the
|
615
|
+
newtask statement in the time sheet needs to be converted into a
|
616
|
+
normal task report.
|
617
|
+
|
618
|
+
newtask some.task.id "My new task" {
|
619
|
+
...
|
620
|
+
}
|
621
|
+
|
622
|
+
Needs to be converted into
|
623
|
+
|
624
|
+
task some.task.id {
|
625
|
+
...
|
626
|
+
}
|
627
|
+
|
628
|
+
The task ID in the status sheet must match the newly created task in
|
629
|
+
the project plan.
|
630
|
+
|
631
|
+
To check that all deltas were properly processed, re-run the check
|
632
|
+
command.
|
633
|
+
|
634
|
+
tj3 --warn-ts-deltas YourProject.tjp TimeSheets/all.tji
|
635
|
+
|
636
|
+
You may also want to remove the interval from the
|
637
|
+
''''TimeSheetTemplates/acceptable_intervals'''' file to prevent
|
638
|
+
further submissions of time sheets for this time period.
|
639
|
+
|
640
|
+
=== Recording actual Resource Usage ===
|
641
|
+
|
642
|
+
To ensure that future changes won't change the past of the project,
|
643
|
+
you should follow the procedure described in this section.
|
67
644
|
|
68
645
|
The initial project plan should be made by entering the minimum amount of
|
69
646
|
required information such as task dependencies and efforts. TaskJuggler will
|
@@ -96,15 +673,30 @@ The sloppy attribute defines the accuracy of your bookings. If it's missing or
|
|
96
673
|
hours. With higher values the interval may overlap with off-hour or vacation
|
97
674
|
time slots. See details on sloppy.
|
98
675
|
|
676
|
+
The booking statements are designed to describe actual work performed
|
677
|
+
by resources at a very accurate level. Many project managers are too
|
678
|
+
lazy to record information at such a level of detail. TaskJuggler
|
679
|
+
offers some mechanisms to simplify your work. Using ''''sloppy'''' is
|
680
|
+
one of them, but you should read very carefully what it does. In
|
681
|
+
almost every case we recommend to use the procedure described below
|
682
|
+
instead.
|
683
|
+
|
684
|
+
Another popular mistake is that user forget that dates for bookings
|
685
|
+
behave just like every other date in TaskJuggler.
|
686
|
+
|
687
|
+
resource dev1 "Developer 1" {
|
688
|
+
booking impl 2005-04-11 +8h { sloppy 2 }
|
689
|
+
}
|
690
|
+
|
691
|
+
This is almost a classic on the mailing list. 2005-04-11 means
|
692
|
+
2005-04-11-0:00. So you are trying to allocate dev1 from midnight to
|
693
|
+
8am. Since dev1 is usually is off duty at this time no allocations
|
694
|
+
will be performed. By using the ''''sloppy 2'''' attribute you won't
|
695
|
+
even get a warning for this mistake.
|
696
|
+
|
99
697
|
If you don't like to mix the resource definitions and their bookings, you can
|
100
698
|
specify the bookings with supplement statements. These supplement statements
|
101
|
-
can even reside in an other file.
|
102
|
-
for their developers to report the completed work against the project plan. The
|
103
|
-
reports are stored in a database and include files for TaskJuggler are
|
104
|
-
generated from this database. This way the project manager gets a very current
|
105
|
-
status of the project and can compute the current project plan based on these
|
106
|
-
data without much effort. If you are interested in this you should have a look
|
107
|
-
at the download section of the TaskJuggler web site.
|
699
|
+
can even reside in an other file.
|
108
700
|
|
109
701
|
It is ok to specify bookings beyond the effort value found in the task
|
110
702
|
definition. In case you want to declare a task as done, even if the bookings do
|
@@ -114,11 +706,6 @@ not reach the specified effort or length, you can use the scheduled property.
|
|
114
706
|
actual:scheduled
|
115
707
|
}
|
116
708
|
|
117
|
-
As a side note we would like to mention that the recording of the work time of
|
118
|
-
employees is regulated by labor law in certain countries. You might also
|
119
|
-
require approval from a Worker's Council before you can deploy time recording
|
120
|
-
tools.
|
121
|
-
|
122
709
|
In case your actual progress does not deviate a lot from your project plan, you
|
123
710
|
can generate the file with the booking statements automatically.
|
124
711
|
|
@@ -126,7 +713,7 @@ can generate the file with the booking statements automatically.
|
|
126
713
|
hideresource 0
|
127
714
|
start 2005-04-11
|
128
715
|
end 2005-04-16
|
129
|
-
|
716
|
+
taskattributes *
|
130
717
|
}
|
131
718
|
|
132
719
|
This will generate a TaskJuggler include file that contains all bookings
|
@@ -166,3 +753,145 @@ Each time you review your project status you should generate such an include
|
|
166
753
|
file for the period that you are reviewing. Then you sync the content with the
|
167
754
|
feedback that you get from your resources and add the file to the project plan.
|
168
755
|
|
756
|
+
==== Status Sheets =====
|
757
|
+
|
758
|
+
For larger projects with many contributors the flood of time sheets
|
759
|
+
can become hard to manage. Higher level managers are usually not
|
760
|
+
interested in all the details as long as the project executes
|
761
|
+
according to plan. To keep the managers on each level informed with
|
762
|
+
the proper amount and content TaskJuggler provides the concept of
|
763
|
+
status sheets.
|
764
|
+
|
765
|
+
To use status sheets, the reporting chains must be reflected in the
|
766
|
+
task hierarchy of the project. The [[responsible]] attribute must be
|
767
|
+
used to assign tasks to managers. Leaf tasks or whole sub trees must
|
768
|
+
be assigned to the lowest level of management. The responsibility for
|
769
|
+
one or more level of parent tasks must be assigned to the next level
|
770
|
+
of managers and so on.
|
771
|
+
|
772
|
+
When all time sheets have been submitted, the reports for all tasks
|
773
|
+
are sent to the responsible managers for these tasks. The information
|
774
|
+
is generated by the ''''tj3ss_sender'''' program and is called a status
|
775
|
+
report template. Each manager will get one template that includes the
|
776
|
+
status reports for the tasks they are responsible for.
|
777
|
+
|
778
|
+
It's not the managers task to prepare the report for the next level
|
779
|
+
of management. To do this, the manager has 3 options:
|
780
|
+
|
781
|
+
* Forward the status report of a task directly to the next level. The
|
782
|
+
original authorship can be keep or removed. The content can also be
|
783
|
+
edited if needed.
|
784
|
+
|
785
|
+
* Similar reports for a task or a whole task sub-tree can be combined
|
786
|
+
into just one report. To achieve this a new task report must be
|
787
|
+
created for the parent tasks of these lower-level tasks. This will
|
788
|
+
replace all reports for sub tasks with this newly created report.
|
789
|
+
|
790
|
+
* A task report can simply be removed from the status report.
|
791
|
+
|
792
|
+
The status sheet template is designed to perform all three actions in
|
793
|
+
a simple manner. The original reports are commented out. To remove a
|
794
|
+
report, it needs to be uncommented and the headline must be set to an
|
795
|
+
empty string. To change a report, the text must be edited after
|
796
|
+
the comment marks have been removed. To create a summary report for a
|
797
|
+
group of tasks, a new report for the common parent task must be
|
798
|
+
created.
|
799
|
+
|
800
|
+
==== The Status Sheet Template Sender ====
|
801
|
+
|
802
|
+
To send out the time sheets, the command ''''tj3ts_sender'''' must be
|
803
|
+
used. It will use the ''''tj3client'''' program to do retrieve the
|
804
|
+
necessary data from the TaskJuggler server.
|
805
|
+
|
806
|
+
Before the program can be used, a new section must be added to the
|
807
|
+
TaskJuggelr configuration file.
|
808
|
+
|
809
|
+
_statussheets:
|
810
|
+
projectId: prj
|
811
|
+
_sender:
|
812
|
+
senderEmail: 'TaskJuggler <statussheets@taskjuggler.amd.com>'
|
813
|
+
hideResource: '~(isleaf() & manager)'
|
814
|
+
|
815
|
+
If you are using status sheets for only one level of management you
|
816
|
+
can hardcode that like in the example above. For multiple level of
|
817
|
+
management you need to specify which group of managers should the
|
818
|
+
report templates be generated for and pass that information on the
|
819
|
+
command line. Use the ''''--hideresource'''' option to specify a
|
820
|
+
logicalexpression to filter away the resources you don't want
|
821
|
+
templates to be generated for. The easiest way to achieve this is by
|
822
|
+
using unique flags for each management level. In the example above we
|
823
|
+
assume you have assigned the flag ''''manager'''' to each first-level
|
824
|
+
manager.
|
825
|
+
|
826
|
+
For the override mechanism to work, the manager reports must always
|
827
|
+
have a newer date than the original report. So, the end date of the
|
828
|
+
first-level manager status sheets must be after the time sheet
|
829
|
+
interval. The second-level mangers must use a later date than the
|
830
|
+
first-level managers and so on.
|
831
|
+
|
832
|
+
By default ''''tj3ss_sender'''' will use the next Wednesday as end
|
833
|
+
date. If you need a different date, you must use the ''''-e''''
|
834
|
+
option to specify that date.
|
835
|
+
|
836
|
+
Let's say you have two levels of managers that use status sheets. The
|
837
|
+
time sheets are due midnight on Sunday. The project managers can work
|
838
|
+
in the deltas and new tasks on Monday. After that you generate the
|
839
|
+
reports for the first level managers with and end date of Wednesday.
|
840
|
+
This implies a submission deadline of midnight on Tuesday. The second
|
841
|
+
level manager templates will be sent out right after this deadline
|
842
|
+
with an end date of Thursday. That would be the deadline for the
|
843
|
+
second-level managers. The final report can than be generated by
|
844
|
+
TaskJuggler automatically right after that deadline.
|
845
|
+
|
846
|
+
==== Requesting Status Sheet Templates ====
|
847
|
+
|
848
|
+
Usually the status sheets templates should be send out automatically.
|
849
|
+
But sometimes a manager needs them earlier or needs an updated
|
850
|
+
version due to a late incoming downstream report.
|
851
|
+
|
852
|
+
The above provided procmail configuration supports the generation of
|
853
|
+
status sheets templates on request by email.
|
854
|
+
|
855
|
+
By sending an email to statussheet-request@taskjuggler.your_company.com
|
856
|
+
and putting their resource ID in the subject of the email, managers will
|
857
|
+
receive an email with the status sheet template. The email will be sent
|
858
|
+
to the email address in the project plan, not the sender of the
|
859
|
+
request email.
|
860
|
+
|
861
|
+
The setup described here only works for first-level managers. By
|
862
|
+
adding more email addresses, this can easily be extended for more
|
863
|
+
levels of management. You just need to make sure that
|
864
|
+
''''tj3ss_sender'''' is called with the proper parameters to change
|
865
|
+
the resource selection and end date.
|
866
|
+
|
867
|
+
==== The Status Sheet Receiver ====
|
868
|
+
|
869
|
+
Similarly to the time sheets a the completed status sheets must be
|
870
|
+
send back by email. We already described how the necessary email
|
871
|
+
aliases should be configured. For status sheets the address
|
872
|
+
''''statussheets@taskjuggler.your_company.com'''' can be used.
|
873
|
+
|
874
|
+
The incoming emails will then be forwarded to the
|
875
|
+
''''tj3ss_receiver'''' program that will process them. To use it, you
|
876
|
+
first need to add the following settings to the ''''statussheets''''
|
877
|
+
section of your TaskJuggler configuration file:
|
878
|
+
|
879
|
+
_statussheets:
|
880
|
+
projectId: prj
|
881
|
+
_receiver:
|
882
|
+
senderEmail: 'TaskJuggler <statussheets@taskjuggler.amd.com>'
|
883
|
+
|
884
|
+
This will set the sender email of outgoing emails. Every incoming
|
885
|
+
status sheet will be checked and either an error message will be
|
886
|
+
returned or a consolidated status report for all tasks that the
|
887
|
+
resource is responsible for. This report can either be directly
|
888
|
+
forwarded to the next level manager or interested groups, or an HTML
|
889
|
+
report can be generated and shared. This is especially useful in case
|
890
|
+
the next level management is not getting status sheet templates.
|
891
|
+
|
892
|
+
Usually status reports only contain task reports for the current
|
893
|
+
reporting period. But if there were tasks with an elevated status,
|
894
|
+
these will be carried forward until they were removed by providing an
|
895
|
+
empty headline or replaced with a new report for the same task or a
|
896
|
+
parent task.
|
897
|
+
|