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/TjpSyntaxRules.rb
CHANGED
@@ -352,7 +352,16 @@ EOT
|
|
352
352
|
@booking.overtime = @val[1]
|
353
353
|
})
|
354
354
|
doc('overtime.booking', <<'EOT'
|
355
|
-
This attribute enables bookings
|
355
|
+
This attribute enables bookings during off-hours and vacations. It implicitly
|
356
|
+
sets the [[sloppy.booking|sloppy]] attribute accordingly.
|
357
|
+
EOT
|
358
|
+
)
|
359
|
+
arg(1, 'value', <<'EOT'
|
360
|
+
* '''0''': You can only book available working time. (Default)
|
361
|
+
|
362
|
+
* '''1''': You can book off-hours as well.
|
363
|
+
|
364
|
+
* '''2''': You can book working time, off-hours and vacation time.
|
356
365
|
EOT
|
357
366
|
)
|
358
367
|
|
@@ -365,9 +374,20 @@ EOT
|
|
365
374
|
})
|
366
375
|
doc('sloppy.booking', <<'EOT'
|
367
376
|
Controls how strict TaskJuggler checks booking intervals for conflicts with
|
368
|
-
|
369
|
-
|
370
|
-
|
377
|
+
working periods and vacations. This attribute only affects the check for
|
378
|
+
conflicts. No assignments will be made unless the [[overtime.booking|
|
379
|
+
overtime]] attribute is set accordingly.
|
380
|
+
EOT
|
381
|
+
)
|
382
|
+
arg(1, 'sloppyness', <<'EOT'
|
383
|
+
* '''0''': Period may not contain any off-duty hours, vacation or other task
|
384
|
+
assignments. (default)
|
385
|
+
|
386
|
+
* '''1''': Period may contain off-duty hours, but no vacation time or other
|
387
|
+
task assignments.
|
388
|
+
|
389
|
+
* '''2''': Period may contain off-duty hours and vacation time, but no other
|
390
|
+
task assignments.
|
371
391
|
EOT
|
372
392
|
)
|
373
393
|
end
|
@@ -508,8 +528,8 @@ EOT
|
|
508
528
|
@column = TableColumnDefinition.new(@val[0], title)
|
509
529
|
})
|
510
530
|
doc('columnid', <<'EOT'
|
511
|
-
|
512
|
-
column IDs.
|
531
|
+
This is a comprehensive list of all pre-defined [[columns]]. In addition to
|
532
|
+
the listed IDs all user defined attributes can be used as column IDs.
|
513
533
|
EOT
|
514
534
|
)
|
515
535
|
end
|
@@ -531,7 +551,7 @@ provided for a column, the first matching one is taken for each cell.
|
|
531
551
|
EOT
|
532
552
|
)
|
533
553
|
arg(1, 'text',
|
534
|
-
'Alterntive cell text specified as [[Rich_Text_Attributes
|
554
|
+
'Alterntive cell text specified as [[Rich_Text_Attributes|Rich Text]]')
|
535
555
|
|
536
556
|
pattern(%w( _cellcolor !logicalExpression !color ), lambda {
|
537
557
|
@column.cellColor.addPattern(
|
@@ -574,8 +594,8 @@ EOT
|
|
574
594
|
@column.end = @val[1].end
|
575
595
|
})
|
576
596
|
doc('period.column', <<'EOT'
|
577
|
-
This property is a shortcut for setting the [[start.column
|
578
|
-
[[end.column
|
597
|
+
This property is a shortcut for setting the [[start.column|start]] and
|
598
|
+
[[end.column|end]] property at the same time.
|
579
599
|
EOT
|
580
600
|
)
|
581
601
|
|
@@ -621,7 +641,7 @@ column, the first matching one is taken for each cell.
|
|
621
641
|
EOT
|
622
642
|
)
|
623
643
|
arg(2, 'text', <<'EOT'
|
624
|
-
The content of the tooltip. The text is interpreted as [[Rich_Text_Attributes
|
644
|
+
The content of the tooltip. The text is interpreted as [[Rich_Text_Attributes|
|
625
645
|
Rich Text]].
|
626
646
|
EOT
|
627
647
|
)
|
@@ -688,10 +708,16 @@ EOT
|
|
688
708
|
|
689
709
|
def rule_details
|
690
710
|
pattern(%w( _details $STRING ), lambda {
|
711
|
+
return if @val[1].empty?
|
712
|
+
|
691
713
|
rtTokenSetMore =
|
692
714
|
%w( LINEBREAK SPACE WORD BOLD ITALIC CODE BOLDITALIC PRE HREF HREFEND
|
693
715
|
REF REFEND HLINE TITLE2 TITLE3 TITLE2END TITLE3END BULLET1 BULLET2
|
694
716
|
BULLET3 NUMBER1 NUMBER2 NUMBER3 )
|
717
|
+
if @val[1] == "Some more details\n"
|
718
|
+
error('ts_default_details',
|
719
|
+
"'Some more details' is not a valid value")
|
720
|
+
end
|
695
721
|
@journalEntry.details = newRichText(@val[1], rtTokenSetMore)
|
696
722
|
})
|
697
723
|
doc('details', <<'EOT'
|
@@ -700,7 +726,7 @@ can be several paragraphs long.
|
|
700
726
|
EOT
|
701
727
|
)
|
702
728
|
arg(1, 'text', <<'EOT'
|
703
|
-
The text will be interpreted as [[Rich_Text_Attributes
|
729
|
+
The text will be interpreted as [[Rich_Text_Attributes|Rich Text]]. Only a
|
704
730
|
subset of the markup is supported for this attribute. You can use word
|
705
731
|
formatting, paragraphs, hyperlinks, lists, section and subsection
|
706
732
|
headers.
|
@@ -728,8 +754,24 @@ EOT
|
|
728
754
|
descr('years')
|
729
755
|
end
|
730
756
|
|
757
|
+
def rule_durationUnitOrPercent
|
758
|
+
pattern(%w( _% ), lambda { -1 })
|
759
|
+
descr('percentage of reported period')
|
760
|
+
|
761
|
+
pattern(%w( _min ), lambda { 0 })
|
762
|
+
descr('minutes')
|
763
|
+
|
764
|
+
pattern(%w( _h ), lambda { 1 })
|
765
|
+
descr('hours')
|
766
|
+
|
767
|
+
pattern(%w( _d ), lambda { 2 })
|
768
|
+
descr('days')
|
769
|
+
end
|
770
|
+
|
731
771
|
def rule_export
|
732
|
-
pattern(%w( !exportHeader !exportBody )
|
772
|
+
pattern(%w( !exportHeader !exportBody ), lambda {
|
773
|
+
@property = nil
|
774
|
+
})
|
733
775
|
doc('export', <<'EOT'
|
734
776
|
The export report looks like a regular TaskJuggler file but contains fixed
|
735
777
|
start and end dates for all tasks. The tasks only have start and end times,
|
@@ -754,22 +796,8 @@ EOT
|
|
754
796
|
end
|
755
797
|
|
756
798
|
def rule_exportHeader
|
757
|
-
pattern(%w( _export $STRING ), lambda {
|
758
|
-
|
759
|
-
suffix = @val[1][-4, 4]
|
760
|
-
if suffix != '.tjp' && suffix != '.tji'
|
761
|
-
error('export_bad_extn',
|
762
|
-
'Export report files must have a .tjp or .tji extension.')
|
763
|
-
end
|
764
|
-
# File name without extension.
|
765
|
-
name = @val[1][0..-5]
|
766
|
-
end
|
767
|
-
|
768
|
-
if @project.reports[@val[1]]
|
769
|
-
error('report_redefinition',
|
770
|
-
"A report with the name #{name} has already been defined.")
|
771
|
-
end
|
772
|
-
newReport(@val[1], :export, sourceFileInfo)
|
799
|
+
pattern(%w( _export !optionalID $STRING ), lambda {
|
800
|
+
newReport(@val[1], @val[2], :export, sourceFileInfo)
|
773
801
|
})
|
774
802
|
arg(1, 'file name', <<'EOT'
|
775
803
|
The name of the report file to generate. It must end with a .tjp or .tji
|
@@ -786,11 +814,14 @@ EOT
|
|
786
814
|
@property.set('definitions', @val[1])
|
787
815
|
})
|
788
816
|
doc('definitions', <<"EOT"
|
789
|
-
This attributes controls what definitions will be contained in the report.
|
817
|
+
This attributes controls what definitions will be contained in the report. If
|
818
|
+
the list includes ''project'', the generated file will have a ''''.tjp''''
|
819
|
+
extension. Otherwise it will have a ''''.tji'''' extension.
|
790
820
|
EOT
|
791
821
|
)
|
792
822
|
allOrNothingListRule('exportDefinitions',
|
793
823
|
{ 'flags' => 'Include flag definitions',
|
824
|
+
'project' => 'Include project header',
|
794
825
|
'projecids' => 'Include project IDs',
|
795
826
|
'tasks' => 'Include task definitions',
|
796
827
|
'resources' => 'Include resource definitions' })
|
@@ -966,6 +997,19 @@ EOT
|
|
966
997
|
singlePattern('_resource')
|
967
998
|
end
|
968
999
|
|
1000
|
+
def rule_fail
|
1001
|
+
pattern(%w( _fail !logicalExpression ), lambda {
|
1002
|
+
@property['fail', @scenarioIdx] = @val[1]
|
1003
|
+
})
|
1004
|
+
doc('fail', <<'EOT'
|
1005
|
+
The fail attribute adds a logical expression to the property. The condition
|
1006
|
+
described by the logical expression is checked after the scheduling and an
|
1007
|
+
error is raised if the condition evaluates to true. This attribute is
|
1008
|
+
primarily intended for testing purpuses.
|
1009
|
+
EOT
|
1010
|
+
)
|
1011
|
+
end
|
1012
|
+
|
969
1013
|
def rule_flag
|
970
1014
|
pattern(%w( $ID ), lambda {
|
971
1015
|
unless @project['flags'].include?(@val[0])
|
@@ -990,6 +1034,22 @@ EOT
|
|
990
1034
|
listRule('moreFlagList', '!flag')
|
991
1035
|
end
|
992
1036
|
|
1037
|
+
def rule_formats
|
1038
|
+
pattern(%w( _formats !outputFormats ), lambda {
|
1039
|
+
@property.set('formats', @val[1])
|
1040
|
+
})
|
1041
|
+
doc('formats', <<'EOT'
|
1042
|
+
This attribute defines for which output formats the report should be
|
1043
|
+
generated. By default, this list is empty. Unless a formats attribute was
|
1044
|
+
added to a report definition, no output will be generated for this report.
|
1045
|
+
|
1046
|
+
As reports are composable, a report may include other report definitions. A
|
1047
|
+
format definition is only needed for the outermost report that includes the
|
1048
|
+
others.
|
1049
|
+
EOT
|
1050
|
+
)
|
1051
|
+
end
|
1052
|
+
|
993
1053
|
def rule_functions
|
994
1054
|
# This rule is not used by the parser. It's only for the documentation.
|
995
1055
|
pattern(%w( !functionsBody ))
|
@@ -1098,6 +1158,21 @@ EOT
|
|
1098
1158
|
)
|
1099
1159
|
end
|
1100
1160
|
|
1161
|
+
def rule_headline
|
1162
|
+
pattern(%w( _headline $STRING ), lambda {
|
1163
|
+
@property.set('headline', newRichText(@val[1]))
|
1164
|
+
})
|
1165
|
+
doc('headline', <<'EOT'
|
1166
|
+
Specifies the headline for a report.
|
1167
|
+
EOT
|
1168
|
+
)
|
1169
|
+
arg(1, 'text', <<'EOT'
|
1170
|
+
The text used for the headline. It is interpreted as
|
1171
|
+
[[Rich_Text_Attributes|Rich Text]].
|
1172
|
+
EOT
|
1173
|
+
)
|
1174
|
+
end
|
1175
|
+
|
1101
1176
|
def rule_hideresource
|
1102
1177
|
pattern(%w( _hideresource !logicalExpression ), lambda {
|
1103
1178
|
@property.set('hideResource', @val[1])
|
@@ -1245,6 +1320,10 @@ EOT
|
|
1245
1320
|
mode = @val[1][0]
|
1246
1321
|
endSpec = @val[1][1]
|
1247
1322
|
if mode == 0
|
1323
|
+
unless @val[0] < endSpec
|
1324
|
+
error('start_before_end', "The end date (#{endSpec}) must be after " +
|
1325
|
+
"the start date (#{@val[0]}).")
|
1326
|
+
end
|
1248
1327
|
Interval.new(@val[0], endSpec)
|
1249
1328
|
else
|
1250
1329
|
Interval.new(@val[0], @val[0] + endSpec)
|
@@ -1272,12 +1351,15 @@ EOT
|
|
1272
1351
|
60 * 60 * 24 * 30.4167, # months
|
1273
1352
|
60 * 60 * 24 * 365 # years
|
1274
1353
|
]
|
1354
|
+
if @val[0] == 0.0
|
1355
|
+
error('zero_duration', "The interval duration may not be 0.")
|
1356
|
+
end
|
1275
1357
|
duration = @val[0] * convFactors[@val[1]]
|
1276
1358
|
resolution = @project.nil? ? 60 * 60 : @project['scheduleGranularity']
|
1277
1359
|
# Make sure the interval aligns with the timing resolution.
|
1278
1360
|
(duration / resolution).to_i * resolution
|
1279
1361
|
})
|
1280
|
-
arg(0, 'duration', 'The duration of the interval')
|
1362
|
+
arg(0, 'duration', 'The duration of the interval. May not be 0.')
|
1281
1363
|
end
|
1282
1364
|
|
1283
1365
|
def rule_intervalEnd
|
@@ -1357,13 +1439,9 @@ EOT
|
|
1357
1439
|
|
1358
1440
|
pattern(%w( !author ))
|
1359
1441
|
|
1360
|
-
pattern(%w( !summary )
|
1361
|
-
@journalEntry.summary = @val[0]
|
1362
|
-
})
|
1442
|
+
pattern(%w( !summary ))
|
1363
1443
|
|
1364
|
-
pattern(%w( !details )
|
1365
|
-
@journalEntry.details = @val[0]
|
1366
|
-
})
|
1444
|
+
pattern(%w( !details ))
|
1367
1445
|
end
|
1368
1446
|
|
1369
1447
|
def rule_journalEntryBody
|
@@ -1377,7 +1455,7 @@ EOT
|
|
1377
1455
|
})
|
1378
1456
|
arg(2, 'headline', <<'EOT'
|
1379
1457
|
The headline of the journal entry. It will be interpreted as
|
1380
|
-
[[Rich_Text_Attributes
|
1458
|
+
[[Rich_Text_Attributes|Rich Text]].
|
1381
1459
|
EOT
|
1382
1460
|
)
|
1383
1461
|
end
|
@@ -1404,7 +1482,7 @@ EOT
|
|
1404
1482
|
pattern(%w( _end !valDate ), lambda {
|
1405
1483
|
@limitInterval.end = @val[1]
|
1406
1484
|
})
|
1407
|
-
doc('limit
|
1485
|
+
doc('end.limit', <<'EOT'
|
1408
1486
|
The end date of the limit interval. It must be within the project time frame.
|
1409
1487
|
EOT
|
1410
1488
|
)
|
@@ -1412,7 +1490,7 @@ EOT
|
|
1412
1490
|
pattern(%w( _period !valInterval ), lambda {
|
1413
1491
|
@limitInterval = @val[1]
|
1414
1492
|
})
|
1415
|
-
doc('limit
|
1493
|
+
doc('period.limit', <<'EOT'
|
1416
1494
|
This property is a shortcut for setting the start and end dates of the limit
|
1417
1495
|
interval. Both dates must be within the project time frame.
|
1418
1496
|
EOT
|
@@ -1421,19 +1499,20 @@ EOT
|
|
1421
1499
|
pattern(%w( _resources !resourceLeafList ), lambda {
|
1422
1500
|
@limitResources = @val[1]
|
1423
1501
|
})
|
1424
|
-
doc('limit
|
1502
|
+
doc('resources.limit', <<'EOT'
|
1425
1503
|
When [[limits]] are used in a [[task]] context, the limits can be restricted
|
1426
1504
|
to a list of resources that are allocated to the task. In that case each
|
1427
|
-
resource will not be allocated more than the specified upper limit.
|
1428
|
-
limits have no impact on the scheduler but do generate a warning when
|
1429
|
-
All specified resources must be leaf resources.
|
1505
|
+
listed resource will not be allocated more than the specified upper limit.
|
1506
|
+
Lower limits have no impact on the scheduler but do generate a warning when
|
1507
|
+
not met. All specified resources must be leaf resources.
|
1430
1508
|
EOT
|
1431
1509
|
)
|
1510
|
+
example('Limits-1', '5')
|
1432
1511
|
|
1433
1512
|
pattern(%w( _start !valDate ), lambda {
|
1434
1513
|
@limitInterval.start = @val[1]
|
1435
1514
|
})
|
1436
|
-
doc('limit
|
1515
|
+
doc('start.limit', <<'EOT'
|
1437
1516
|
The start date of the limit interval. It must be within the project time frame.
|
1438
1517
|
EOT
|
1439
1518
|
)
|
@@ -1611,9 +1690,17 @@ attributes like [[hidetask]] or [[hideresource]] the logical expression
|
|
1611
1690
|
evaluates to true for a certain property, this property is hidden or rolled-up
|
1612
1691
|
in the report.
|
1613
1692
|
|
1614
|
-
Operands can be declared flags, built-in [[functions]], property
|
1615
|
-
(specified as scenario.attribute) or another logical expression.
|
1616
|
-
|
1693
|
+
Operands can be previously declared flags, built-in [[functions]], property
|
1694
|
+
attributes (specified as scenario.attribute) or another logical expression.
|
1695
|
+
When you combine logical operations to a more complex expression, the
|
1696
|
+
operators are evaluated from left to right. '''a | b & c''' is identical to
|
1697
|
+
'''(a | b) & c'''. It's highly recommended that you always use brackets to
|
1698
|
+
control the evaluation sequence. Currently, TaskJuggler does not support the
|
1699
|
+
concept of operator precedence or right-left associativity. This may change in
|
1700
|
+
the future.
|
1701
|
+
|
1702
|
+
An operand can also be just a number. 0 evaluates to false, all other numbers
|
1703
|
+
to true.
|
1617
1704
|
EOT
|
1618
1705
|
)
|
1619
1706
|
also(%w( functions ))
|
@@ -1708,10 +1795,6 @@ EOT
|
|
1708
1795
|
commaListRule('$ID')
|
1709
1796
|
end
|
1710
1797
|
|
1711
|
-
def rule_moreResources
|
1712
|
-
commaListRule('!resourceList')
|
1713
|
-
end
|
1714
|
-
|
1715
1798
|
def rule_morePredTasks
|
1716
1799
|
commaListRule('!taskPredList')
|
1717
1800
|
end
|
@@ -1763,6 +1846,53 @@ EOT
|
|
1763
1846
|
})
|
1764
1847
|
end
|
1765
1848
|
|
1849
|
+
def rule_nikuReportAttributes
|
1850
|
+
optional
|
1851
|
+
repeatable
|
1852
|
+
|
1853
|
+
pattern(%w( !formats ))
|
1854
|
+
pattern(%w( !headline ))
|
1855
|
+
pattern(%w( !hideresource ))
|
1856
|
+
pattern(%w( !hidetask ))
|
1857
|
+
pattern(%w( !reportEnd ))
|
1858
|
+
pattern(%w( !reportPeriod ))
|
1859
|
+
pattern(%w( !reportStart ))
|
1860
|
+
pattern(%w( !reportTitle ))
|
1861
|
+
end
|
1862
|
+
|
1863
|
+
def rule_nikuReportBody
|
1864
|
+
pattern(%w( _{ !nikuReportAttributes _} ), lambda {
|
1865
|
+
|
1866
|
+
})
|
1867
|
+
end
|
1868
|
+
|
1869
|
+
def rule_nikuReportHeader
|
1870
|
+
pattern(%w( _nikureport !optionalID $STRING ), lambda {
|
1871
|
+
newReport(@val[1], @val[2], :niku, sourceFileInfo)
|
1872
|
+
})
|
1873
|
+
arg(1, 'file name', <<'EOT'
|
1874
|
+
The name of the time sheet report file to generate. It must end with a .tji
|
1875
|
+
extension, or use . to use the standard output channel.
|
1876
|
+
EOT
|
1877
|
+
)
|
1878
|
+
end
|
1879
|
+
|
1880
|
+
def rule_nikuReport
|
1881
|
+
pattern(%w( !nikuReportHeader !nikuReportBody ), lambda {
|
1882
|
+
@property = nil
|
1883
|
+
})
|
1884
|
+
doc('nikureport', <<'EOT'
|
1885
|
+
This report generates an XML file to be imported into the enterprise resource
|
1886
|
+
management software Clarity(R) from Computer Associates(R). The files contains
|
1887
|
+
allocation curves for the specified resources. All tasks with identical user
|
1888
|
+
defined attributes ''''ClarityPID'''' and ''''ClarityPNAME'''' are bundled
|
1889
|
+
into a Clarity project. The resulting XML file can be imported into Clarity
|
1890
|
+
with the xog-in tool.
|
1891
|
+
EOT
|
1892
|
+
)
|
1893
|
+
example('Niku')
|
1894
|
+
end
|
1895
|
+
|
1766
1896
|
def rule_number
|
1767
1897
|
singlePattern('$INTEGER')
|
1768
1898
|
singlePattern('$FLOAT')
|
@@ -1834,7 +1964,7 @@ EOT
|
|
1834
1964
|
operation
|
1835
1965
|
})
|
1836
1966
|
arg(0, 'operand', <<'EOT'
|
1837
|
-
An operand can consist of a date, a text string, a [[functions
|
1967
|
+
An operand can consist of a date, a text string, a [[functions|function]], a
|
1838
1968
|
property attribute or a numerical value. It can also be the name of a declared
|
1839
1969
|
flag. Use the scenario.attribute notation to use an attribute of the currently
|
1840
1970
|
evaluated property. The scenario ID always has to be specified, also for
|
@@ -1942,6 +2072,11 @@ EOT
|
|
1942
2072
|
:html
|
1943
2073
|
})
|
1944
2074
|
descr('Generate a web page (HTML file)')
|
2075
|
+
|
2076
|
+
pattern(%w( _niku ), lambda {
|
2077
|
+
:niku
|
2078
|
+
})
|
2079
|
+
descr('Generate a XOG XML file to be used with Clarity.')
|
1945
2080
|
end
|
1946
2081
|
|
1947
2082
|
def rule_outputFormats
|
@@ -2222,6 +2357,8 @@ where they are defined in.
|
|
2222
2357
|
|
2223
2358
|
The included files may only contain content that may be present in a project
|
2224
2359
|
header section.
|
2360
|
+
|
2361
|
+
If the include statement is the last statement in the file it must have the option block. The option block can be empty, but the curly braces must be present.
|
2225
2362
|
EOT
|
2226
2363
|
)
|
2227
2364
|
end
|
@@ -2266,7 +2403,6 @@ EOT
|
|
2266
2403
|
})
|
2267
2404
|
|
2268
2405
|
pattern(%w( !export ))
|
2269
|
-
pattern(%w( !timeSheetReport ))
|
2270
2406
|
|
2271
2407
|
pattern(%w( _flags !declareFlagList ), lambda {
|
2272
2408
|
unless @project['flags'].include?(@val[1])
|
@@ -2292,6 +2428,8 @@ EOT
|
|
2292
2428
|
|
2293
2429
|
pattern(%w( !macro ))
|
2294
2430
|
|
2431
|
+
pattern(%w( !nikuReport ))
|
2432
|
+
|
2295
2433
|
pattern(%w( !navigator ))
|
2296
2434
|
|
2297
2435
|
pattern(%w( _projectid $ID ), lambda {
|
@@ -2328,6 +2466,7 @@ EOT
|
|
2328
2466
|
pattern(%w( !resource ))
|
2329
2467
|
pattern(%w( !shift ))
|
2330
2468
|
pattern(%w( !statusSheet ))
|
2469
|
+
pattern(%w( !statusSheetReport ))
|
2331
2470
|
|
2332
2471
|
pattern(%w( _supplement !supplement ))
|
2333
2472
|
doc('supplement', <<'EOT'
|
@@ -2344,6 +2483,7 @@ EOT
|
|
2344
2483
|
|
2345
2484
|
pattern(%w( !task ))
|
2346
2485
|
pattern(%w( !timeSheet ))
|
2486
|
+
pattern(%w( !timeSheetReport ))
|
2347
2487
|
pattern(%w( _vacation !vacationName !intervals ), lambda {
|
2348
2488
|
@project['vacations'] = @project['vacations'] + @val[2]
|
2349
2489
|
})
|
@@ -2364,7 +2504,7 @@ Specifies which scenario should be used for time sheet reports. By default,
|
|
2364
2504
|
the top-level scenario will be used.
|
2365
2505
|
EOT
|
2366
2506
|
)
|
2367
|
-
|
2507
|
+
example('TimeSheet1', '2')
|
2368
2508
|
end
|
2369
2509
|
|
2370
2510
|
def rule_propertiesInclude
|
@@ -2534,8 +2674,8 @@ EOT
|
|
2534
2674
|
singlePattern('_daily')
|
2535
2675
|
descr('A group of columns with one column for each day')
|
2536
2676
|
|
2537
|
-
singlePattern('
|
2538
|
-
descr('
|
2677
|
+
singlePattern('_directreports')
|
2678
|
+
descr('The resources that have this resource assigned as manager.')
|
2539
2679
|
|
2540
2680
|
singlePattern('_duration')
|
2541
2681
|
descr('The duration of a task')
|
@@ -2564,6 +2704,19 @@ EOT
|
|
2564
2704
|
singlePattern('_flags')
|
2565
2705
|
descr('List of attached flags')
|
2566
2706
|
|
2707
|
+
singlePattern('_followers')
|
2708
|
+
descr(<<'EOT'
|
2709
|
+
A list of tasks that depend on the current task. The list contains the names,
|
2710
|
+
the IDs, the date and the type of dependency. For the type the following
|
2711
|
+
symbols are used
|
2712
|
+
|
2713
|
+
* '''<nowiki>]->[</nowiki>''': End-to-Start dependency
|
2714
|
+
* '''<nowiki>[->[</nowiki>''': Start-to-Start dependency
|
2715
|
+
* '''<nowiki>]->]</nowiki>''': End-to-End dependency
|
2716
|
+
* '''<nowiki>[->]</nowiki>''': Start-to-End dependency
|
2717
|
+
EOT
|
2718
|
+
)
|
2719
|
+
|
2567
2720
|
singlePattern('_freetime')
|
2568
2721
|
descr(<<'EOT'
|
2569
2722
|
The amount of unallocated work time of a resource during the reporting period.
|
@@ -2598,6 +2751,12 @@ EOT
|
|
2598
2751
|
singlePattern('_index')
|
2599
2752
|
descr('The index of the item based on the nesting hierachy')
|
2600
2753
|
|
2754
|
+
singlePattern('_journal')
|
2755
|
+
descr(<<'EOT'
|
2756
|
+
The journal entries for the task or resource for the reported interval.
|
2757
|
+
EOT
|
2758
|
+
)
|
2759
|
+
|
2601
2760
|
singlePattern('_line')
|
2602
2761
|
descr('The line number in the report')
|
2603
2762
|
|
@@ -2629,8 +2788,18 @@ EOT
|
|
2629
2788
|
descr('The criticalness of the task with respect to all the paths that ' +
|
2630
2789
|
'it is a part of.')
|
2631
2790
|
|
2632
|
-
singlePattern('
|
2633
|
-
descr(
|
2791
|
+
singlePattern('_precursor')
|
2792
|
+
descr(<<EOT
|
2793
|
+
A list of tasks the current task depends on. The list contains the names, the
|
2794
|
+
IDs, the date and the type of dependency. For the type the following symbols
|
2795
|
+
are used
|
2796
|
+
|
2797
|
+
* '''<nowiki>]->[</nowiki>''': End-to-Start dependency
|
2798
|
+
* '''<nowiki>[->[</nowiki>''': Start-to-Start dependency
|
2799
|
+
* '''<nowiki>]->]</nowiki>''': End-to-End dependency
|
2800
|
+
* '''<nowiki>[->]</nowiki>''': Start-to-End dependency
|
2801
|
+
EOT
|
2802
|
+
)
|
2634
2803
|
|
2635
2804
|
singlePattern('_priority')
|
2636
2805
|
descr('The priority of a task')
|
@@ -2641,6 +2810,12 @@ EOT
|
|
2641
2810
|
singlePattern('_rate')
|
2642
2811
|
descr('The daily cost of a resource.')
|
2643
2812
|
|
2813
|
+
singlePattern('_reports')
|
2814
|
+
descr(<<'EOT'
|
2815
|
+
All resources that have this resource assigned as a direct or indirect manager.
|
2816
|
+
EOT
|
2817
|
+
)
|
2818
|
+
|
2644
2819
|
singlePattern('_resources')
|
2645
2820
|
descr('A list of resources that are assigned to the task in the report ' +
|
2646
2821
|
'time frame.')
|
@@ -2699,7 +2874,7 @@ EOT
|
|
2699
2874
|
})
|
2700
2875
|
doc('caption', <<'EOT'
|
2701
2876
|
The caption will be embedded in the footer of the table or data segment. The
|
2702
|
-
text will be interpreted as [[Rich_Text_Attributes
|
2877
|
+
text will be interpreted as [[Rich_Text_Attributes|Rich Text]].
|
2703
2878
|
EOT
|
2704
2879
|
)
|
2705
2880
|
arg(1, 'text', 'The caption text.')
|
@@ -2710,7 +2885,7 @@ EOT
|
|
2710
2885
|
})
|
2711
2886
|
doc('center', <<'EOT'
|
2712
2887
|
This attribute defines the center section of the [[textreport]]. The text will
|
2713
|
-
be interpreted as [[Rich_Text_Attributes
|
2888
|
+
be interpreted as [[Rich_Text_Attributes|Rich Text]].
|
2714
2889
|
EOT
|
2715
2890
|
)
|
2716
2891
|
arg(1, 'text', 'The text')
|
@@ -2735,7 +2910,7 @@ EOT
|
|
2735
2910
|
})
|
2736
2911
|
doc('epilog', <<'EOT'
|
2737
2912
|
Define a text section that is printed right after the actual report data. The
|
2738
|
-
text will be interpreted as [[Rich_Text_Attributes
|
2913
|
+
text will be interpreted as [[Rich_Text_Attributes|Rich Text]].
|
2739
2914
|
EOT
|
2740
2915
|
)
|
2741
2916
|
also(%w( footer header prolog ))
|
@@ -2752,41 +2927,24 @@ EOT
|
|
2752
2927
|
})
|
2753
2928
|
doc('footer', <<'EOT'
|
2754
2929
|
Define a text section that is put at the bottom of the report. The
|
2755
|
-
text will be interpreted as [[Rich_Text_Attributes
|
2930
|
+
text will be interpreted as [[Rich_Text_Attributes|Rich Text]].
|
2756
2931
|
EOT
|
2757
2932
|
)
|
2758
2933
|
also(%w( epilog header prolog ))
|
2759
2934
|
|
2760
|
-
pattern(%w(
|
2761
|
-
@property.set('formats', @val[1])
|
2762
|
-
})
|
2763
|
-
doc('formats', <<'EOT'
|
2764
|
-
EOT
|
2765
|
-
)
|
2935
|
+
pattern(%w( !formats ))
|
2766
2936
|
|
2767
2937
|
pattern(%w( _header $STRING ), lambda {
|
2768
2938
|
@property.set('header', newRichText(@val[1]))
|
2769
2939
|
})
|
2770
2940
|
doc('header', <<'EOT'
|
2771
2941
|
Define a text section that is put at the top of the report. The
|
2772
|
-
text will be interpreted as [[Rich_Text_Attributes
|
2942
|
+
text will be interpreted as [[Rich_Text_Attributes|Rich Text]].
|
2773
2943
|
EOT
|
2774
2944
|
)
|
2775
2945
|
also(%w( epilog footer prolog ))
|
2776
2946
|
|
2777
|
-
pattern(%w(
|
2778
|
-
@property.set('headline', newRichText(@val[1]))
|
2779
|
-
})
|
2780
|
-
doc('headline', <<'EOT'
|
2781
|
-
Specifies the headline for a report.
|
2782
|
-
EOT
|
2783
|
-
)
|
2784
|
-
arg(1, 'text', <<'EOT'
|
2785
|
-
The text used for the headline. It is interpreted as
|
2786
|
-
[[Rich_Text_Attributes Rich Text]].
|
2787
|
-
EOT
|
2788
|
-
)
|
2789
|
-
|
2947
|
+
pattern(%w( !headline ))
|
2790
2948
|
pattern(%w( !hideresource ))
|
2791
2949
|
|
2792
2950
|
pattern(%w( !hidetask ))
|
@@ -2796,7 +2954,7 @@ EOT
|
|
2796
2954
|
})
|
2797
2955
|
doc('left', <<'EOT'
|
2798
2956
|
This attribute defines the left margin section of the [[textreport]]. The text
|
2799
|
-
will be interpreted as [[Rich_Text_Attributes
|
2957
|
+
will be interpreted as [[Rich_Text_Attributes|Rich Text]]. The margin will not
|
2800
2958
|
span the [[header]] or [[footer]] sections.
|
2801
2959
|
EOT
|
2802
2960
|
)
|
@@ -2816,29 +2974,11 @@ EOT
|
|
2816
2974
|
})
|
2817
2975
|
doc('prolog', <<'EOT'
|
2818
2976
|
Define a text section that is printed right before the actual report data. The
|
2819
|
-
text will be interpreted as [[Rich_Text_Attributes
|
2977
|
+
text will be interpreted as [[Rich_Text_Attributes|Rich Text]].
|
2820
2978
|
EOT
|
2821
2979
|
)
|
2822
2980
|
also(%w( epilog footer header ))
|
2823
2981
|
|
2824
|
-
pattern(%w( _rawhead $STRING ), lambda {
|
2825
|
-
@property.set('rawHead', @val[1])
|
2826
|
-
})
|
2827
|
-
doc('rawhead', <<'EOT'
|
2828
|
-
Specifies a section of raw HTML code that will be inserted at the top of the
|
2829
|
-
report.
|
2830
|
-
EOT
|
2831
|
-
)
|
2832
|
-
|
2833
|
-
pattern(%w( _rawtail $STRING ), lambda {
|
2834
|
-
@property.set('rawTail', @val[1])
|
2835
|
-
})
|
2836
|
-
doc('rawtail', <<'EOT'
|
2837
|
-
Specifies a section of raw HTML code that will be inserted at the bottom of
|
2838
|
-
the report.
|
2839
|
-
EOT
|
2840
|
-
)
|
2841
|
-
|
2842
2982
|
pattern(%w( !report ))
|
2843
2983
|
|
2844
2984
|
pattern(%w( _right $STRING ), lambda {
|
@@ -2846,7 +2986,7 @@ EOT
|
|
2846
2986
|
})
|
2847
2987
|
doc('right', <<'EOT'
|
2848
2988
|
This attribute defines the right margin section of the [[textreport]]. The text
|
2849
|
-
will be interpreted as [[Rich_Text_Attributes
|
2989
|
+
will be interpreted as [[Rich_Text_Attributes|Rich Text]]. The margin will not
|
2850
2990
|
span the [[header]] or [[footer]] sections.
|
2851
2991
|
EOT
|
2852
2992
|
)
|
@@ -2879,27 +3019,8 @@ used.
|
|
2879
3019
|
EOT
|
2880
3020
|
)
|
2881
3021
|
|
2882
|
-
pattern(%w(
|
2883
|
-
|
2884
|
-
})
|
2885
|
-
doc('sortresources', <<'EOT'
|
2886
|
-
Determines how the resources are sorted in the report. Multiple criteria can be
|
2887
|
-
specified as a comma separated list. If one criteria is not sufficient to sort
|
2888
|
-
a group of resources, the next criteria will be used to sort the resources in
|
2889
|
-
this group.
|
2890
|
-
EOT
|
2891
|
-
)
|
2892
|
-
|
2893
|
-
pattern(%w( _sorttasks !sortCriteria ), lambda {
|
2894
|
-
@property.set('sortTasks', @val[1])
|
2895
|
-
})
|
2896
|
-
doc('sorttasks', <<'EOT'
|
2897
|
-
Determines how the tasks are sorted in the report. Multiple criteria can be
|
2898
|
-
specified as comma separated list. If one criteria is not sufficient to sort a
|
2899
|
-
group of tasks, the next criteria will be used to sort the tasks within
|
2900
|
-
this group.
|
2901
|
-
EOT
|
2902
|
-
)
|
3022
|
+
pattern(%w( !sortResources ))
|
3023
|
+
pattern(%w( !sortTasks ))
|
2903
3024
|
|
2904
3025
|
pattern(%w( !reportStart ))
|
2905
3026
|
|
@@ -2918,14 +3039,7 @@ EOT
|
|
2918
3039
|
@property.set('timeFormat', @val[0])
|
2919
3040
|
})
|
2920
3041
|
|
2921
|
-
pattern(%w(
|
2922
|
-
@property.set('title', @val[1])
|
2923
|
-
})
|
2924
|
-
doc('title', <<'EOT'
|
2925
|
-
The title of the report will be used in external references to the report. It
|
2926
|
-
will not show up in the reports directly. It's used e. g. by [[navigator]].
|
2927
|
-
EOT
|
2928
|
-
)
|
3042
|
+
pattern(%w( !reportTitle ))
|
2929
3043
|
end
|
2930
3044
|
|
2931
3045
|
def rule_reportEnd
|
@@ -3082,6 +3196,19 @@ EOT
|
|
3082
3196
|
)
|
3083
3197
|
end
|
3084
3198
|
|
3199
|
+
def rule_reportTitle
|
3200
|
+
pattern(%w( _title $STRING ), lambda {
|
3201
|
+
@property.set('title', @val[1])
|
3202
|
+
})
|
3203
|
+
doc('title', <<'EOT'
|
3204
|
+
The title of the report will be used in external references to the report. It
|
3205
|
+
will not show up in the reports directly. It's used e. g. by [[navigator]].
|
3206
|
+
EOT
|
3207
|
+
)
|
3208
|
+
end
|
3209
|
+
|
3210
|
+
|
3211
|
+
|
3085
3212
|
def rule_reportType
|
3086
3213
|
singlePattern('_resourcereport')
|
3087
3214
|
doc('resourcereport', <<'EOT'
|
@@ -3131,6 +3258,12 @@ EOT
|
|
3131
3258
|
def rule_resourceAttributes
|
3132
3259
|
repeatable
|
3133
3260
|
optional
|
3261
|
+
pattern(%w( _email $STRING ), lambda {
|
3262
|
+
@property.set('email', @val[1])
|
3263
|
+
})
|
3264
|
+
doc('email',
|
3265
|
+
'The email address of the resource.')
|
3266
|
+
|
3134
3267
|
pattern(%w( !journalEntry ))
|
3135
3268
|
pattern(%w( !purge ))
|
3136
3269
|
pattern(%w( !resource ))
|
@@ -3178,10 +3311,7 @@ EOT
|
|
3178
3311
|
|
3179
3312
|
def rule_resourceId
|
3180
3313
|
pattern(%w( $ID ), lambda {
|
3181
|
-
id = @val[0]
|
3182
|
-
id = @resourceprefix + '.' + id unless @resourceprefix.empty?
|
3183
|
-
# In case we have a nested supplement, we need to prepend the parent ID.
|
3184
|
-
id = @property.fullId + '.' + id if @property && @property.is_a?(Resource)
|
3314
|
+
id = (@resourceprefix.empty? ? '' : @resourceprefix + '.') + @val[0]
|
3185
3315
|
if (resource = @project.resource(id)).nil?
|
3186
3316
|
error('resource_id_expected', "#{id} is not a defined resource.")
|
3187
3317
|
end
|
@@ -3218,9 +3348,7 @@ EOT
|
|
3218
3348
|
end
|
3219
3349
|
|
3220
3350
|
def rule_resourceList
|
3221
|
-
|
3222
|
-
[ @val[0] ] + @val[1]
|
3223
|
-
})
|
3351
|
+
listRule('moreResources', '!resourceId')
|
3224
3352
|
end
|
3225
3353
|
|
3226
3354
|
def rule_resourceScenarioAttributes
|
@@ -3266,6 +3394,8 @@ EOT
|
|
3266
3394
|
also(%w( scheduling ))
|
3267
3395
|
example('Booking')
|
3268
3396
|
|
3397
|
+
pattern(%w( !fail ))
|
3398
|
+
|
3269
3399
|
pattern(%w( !limits ), lambda {
|
3270
3400
|
@property['limits', @scenarioIdx] = @val[0]
|
3271
3401
|
})
|
@@ -3274,6 +3404,26 @@ Set per-interval usage limits for the resource.
|
|
3274
3404
|
EOT
|
3275
3405
|
)
|
3276
3406
|
|
3407
|
+
pattern(%w( _managers !resourceList ), lambda {
|
3408
|
+
@property['managers', @scenarioIdx] =
|
3409
|
+
@property['managers', @scenarioIdx] + @val[1]
|
3410
|
+
})
|
3411
|
+
doc('managers', <<'EOT'
|
3412
|
+
Defines one or more resources to be the manager who is responsible for this
|
3413
|
+
resource. Managers must be leaf resources. This attribute does not impact the
|
3414
|
+
scheduling. It can only be used for documentation purposes.
|
3415
|
+
|
3416
|
+
You must only specify direct managers here. Do not list higher level managers
|
3417
|
+
here. If necessary, use the [[purge]] attribute to clear
|
3418
|
+
inherited managers. For most use cases, there should be only one manager. But
|
3419
|
+
TaskJuggler is not limited to just one manager. Dotted reporting lines can be
|
3420
|
+
captured as well as long as the managers are not reporting to each other.
|
3421
|
+
EOT
|
3422
|
+
)
|
3423
|
+
also(%w( statussheet ))
|
3424
|
+
example('Manager')
|
3425
|
+
|
3426
|
+
|
3277
3427
|
pattern(%w( _rate !number ), lambda {
|
3278
3428
|
@property['rate', @scenarioIdx] = @val[1]
|
3279
3429
|
})
|
@@ -3284,8 +3434,8 @@ EOT
|
|
3284
3434
|
|
3285
3435
|
pattern(%w( _shift !shiftAssignments ))
|
3286
3436
|
doc('shift.resource', <<'EOT'
|
3287
|
-
This keyword has been deprecated. Please use [shifts.resource
|
3288
|
-
(resource)] instead.
|
3437
|
+
This keyword has been deprecated. Please use [[shifts.resource|shifts
|
3438
|
+
(resource)]] instead.
|
3289
3439
|
EOT
|
3290
3440
|
)
|
3291
3441
|
|
@@ -3310,6 +3460,8 @@ to the 'Shift' property.
|
|
3310
3460
|
EOT
|
3311
3461
|
)
|
3312
3462
|
|
3463
|
+
pattern(%w( !warn ))
|
3464
|
+
|
3313
3465
|
pattern(%w( !workinghoursResource ))
|
3314
3466
|
# Other attributes will be added automatically.
|
3315
3467
|
end
|
@@ -3417,6 +3569,7 @@ EOT
|
|
3417
3569
|
if (@scenarioIdx = @project.scenarioIdx(@val[0])).nil?
|
3418
3570
|
error('unknown_scenario_id', "Unknown scenario: #{@val[0]}")
|
3419
3571
|
end
|
3572
|
+
@scenarioIdx
|
3420
3573
|
})
|
3421
3574
|
arg(0, 'scenario', 'ID of a defined scenario')
|
3422
3575
|
end
|
@@ -3546,6 +3699,11 @@ EOT
|
|
3546
3699
|
Sets the time zone of the shift. The working hours of the shift are assumed to
|
3547
3700
|
be within the specified time zone. The time zone does not effect the vaction
|
3548
3701
|
interval. The latter is assumed to be within the project time zone.
|
3702
|
+
|
3703
|
+
TaskJuggler stores all dates internally as UTC. Since all events must align
|
3704
|
+
with the [[timingresolution|timing resolution]] for time zones you may have to
|
3705
|
+
change the timing resolution appropriately. The time zone difference compared
|
3706
|
+
to UTC must be a multiple of the used timing resolution.
|
3549
3707
|
EOT
|
3550
3708
|
)
|
3551
3709
|
arg(1, 'zone', <<'EOT'
|
@@ -3623,6 +3781,32 @@ EOT
|
|
3623
3781
|
)
|
3624
3782
|
end
|
3625
3783
|
|
3784
|
+
def rule_sortResources
|
3785
|
+
pattern(%w( _sortresources !sortCriteria ), lambda {
|
3786
|
+
@property.set('sortResources', @val[1])
|
3787
|
+
})
|
3788
|
+
doc('sortresources', <<'EOT'
|
3789
|
+
Determines how the resources are sorted in the report. Multiple criteria can be
|
3790
|
+
specified as a comma separated list. If one criteria is not sufficient to sort
|
3791
|
+
a group of resources, the next criteria will be used to sort the resources in
|
3792
|
+
this group.
|
3793
|
+
EOT
|
3794
|
+
)
|
3795
|
+
end
|
3796
|
+
|
3797
|
+
def rule_sortTasks
|
3798
|
+
pattern(%w( _sorttasks !sortCriteria ), lambda {
|
3799
|
+
@property.set('sortTasks', @val[1])
|
3800
|
+
})
|
3801
|
+
doc('sorttasks', <<'EOT'
|
3802
|
+
Determines how the tasks are sorted in the report. Multiple criteria can be
|
3803
|
+
specified as comma separated list. If one criteria is not sufficient to sort a
|
3804
|
+
group of tasks, the next criteria will be used to sort the tasks within
|
3805
|
+
this group.
|
3806
|
+
EOT
|
3807
|
+
)
|
3808
|
+
end
|
3809
|
+
|
3626
3810
|
def rule_sortTree
|
3627
3811
|
pattern(%w( $ID ), lambda {
|
3628
3812
|
if @val[0] != 'tree'
|
@@ -3635,6 +3819,51 @@ EOT
|
|
3635
3819
|
arg(0, 'tree',
|
3636
3820
|
'Use \'tree\' as first criteria to keep the breakdown structure.')
|
3637
3821
|
end
|
3822
|
+
def rule_ssReportHeader
|
3823
|
+
pattern(%w( _statussheetreport !optionalID $STRING ), lambda {
|
3824
|
+
if (fileName = @val[2]) != '.'
|
3825
|
+
if @project.reports[fileName]
|
3826
|
+
error('report_redefinition',
|
3827
|
+
"A report with the name '#{fileName}' has already been " +
|
3828
|
+
"defined.")
|
3829
|
+
end
|
3830
|
+
else
|
3831
|
+
fileName = "statusSheet#{@project.reports.length + 1}"
|
3832
|
+
end
|
3833
|
+
report = newReport(@val[1], fileName, :statusSheet, sourceFileInfo)
|
3834
|
+
report.set('scenarios', [ 0 ])
|
3835
|
+
# Show all tasks, sorted by id-up.
|
3836
|
+
report.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
3837
|
+
report.set('sortTasks', [ [ 'id', true, -1 ] ])
|
3838
|
+
# Show all resources, sorted by seqno-up.
|
3839
|
+
report.set('hideResource', LogicalExpression.new(LogicalOperation.new(0)))
|
3840
|
+
report.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
3841
|
+
report.set('loadUnit', :hours)
|
3842
|
+
report.set('definitions', [])
|
3843
|
+
})
|
3844
|
+
arg(1, 'file name', <<'EOT'
|
3845
|
+
The name of the status sheet report file to generate. It must end with a .tji
|
3846
|
+
extension, or use . to use the standard output channel.
|
3847
|
+
EOT
|
3848
|
+
)
|
3849
|
+
end
|
3850
|
+
|
3851
|
+
def rule_ssReportAttributes
|
3852
|
+
optional
|
3853
|
+
repeatable
|
3854
|
+
|
3855
|
+
pattern(%w( !hideresource ))
|
3856
|
+
pattern(%w( !hidetask ))
|
3857
|
+
pattern(%w( !reportEnd ))
|
3858
|
+
pattern(%w( !reportPeriod ))
|
3859
|
+
pattern(%w( !reportStart ))
|
3860
|
+
pattern(%w( !sortResources ))
|
3861
|
+
pattern(%w( !sortTasks ))
|
3862
|
+
end
|
3863
|
+
|
3864
|
+
def rule_ssReportBody
|
3865
|
+
optionsRule('ssReportAttributes')
|
3866
|
+
end
|
3638
3867
|
|
3639
3868
|
def rule_ssStatusAttributes
|
3640
3869
|
optional
|
@@ -3671,7 +3900,9 @@ EOT
|
|
3671
3900
|
end
|
3672
3901
|
|
3673
3902
|
def rule_statusSheet
|
3674
|
-
pattern(%w( !statusSheetHeader !statusSheetBody )
|
3903
|
+
pattern(%w( !statusSheetHeader !statusSheetBody ), lambda {
|
3904
|
+
[ @sheetAuthor, @sheetStart, @sheetEnd ]
|
3905
|
+
})
|
3675
3906
|
doc('statussheet', <<'EOT'
|
3676
3907
|
A status sheet can be used to capture the status of various tasks outside of
|
3677
3908
|
the regular task tree definition. It is intended for use by managers that
|
@@ -3694,9 +3925,10 @@ EOT
|
|
3694
3925
|
end
|
3695
3926
|
|
3696
3927
|
def rule_statusSheetHeader
|
3697
|
-
pattern(%w( _statussheet !resourceId !
|
3928
|
+
pattern(%w( _statussheet !resourceId !valIntervalOrDate ), lambda {
|
3698
3929
|
@sheetAuthor = @val[1]
|
3699
|
-
@
|
3930
|
+
@sheetStart = @val[2].start
|
3931
|
+
@sheetEnd = @val[2].end
|
3700
3932
|
})
|
3701
3933
|
arg(1, 'reporter', <<'EOT'
|
3702
3934
|
The ID of a defined resource. This identifies the status reporter. Unless the
|
@@ -3706,6 +3938,20 @@ EOT
|
|
3706
3938
|
)
|
3707
3939
|
end
|
3708
3940
|
|
3941
|
+
def rule_statusSheetReport
|
3942
|
+
pattern(%w( !ssReportHeader !ssReportBody ), lambda {
|
3943
|
+
@property = nil
|
3944
|
+
})
|
3945
|
+
doc('statussheetreport', <<'EOT'
|
3946
|
+
A status sheet report is a template for a status sheet. It collects all the
|
3947
|
+
status information of the top-level task that a resource is responsible for.
|
3948
|
+
This report is typically used by managers or team leads to review the time
|
3949
|
+
sheet status information and destill it down to a summary that can be
|
3950
|
+
forwarded to the next person in the reporting chain.
|
3951
|
+
EOT
|
3952
|
+
)
|
3953
|
+
end
|
3954
|
+
|
3709
3955
|
def rule_statusSheetTask
|
3710
3956
|
pattern(%w( !statusSheetTaskHeader !statusSheetTaskBody), lambda {
|
3711
3957
|
@property = @propertyStack.pop
|
@@ -3741,17 +3987,30 @@ EOT
|
|
3741
3987
|
end
|
3742
3988
|
def rule_summary
|
3743
3989
|
pattern(%w( _summary $STRING ), lambda {
|
3990
|
+
return if @val[1].empty?
|
3991
|
+
|
3992
|
+
if @val[1].length > 480
|
3993
|
+
error('ts_summary_too_long',
|
3994
|
+
"The summary text must be 480 characters long or shorter. " +
|
3995
|
+
"This text has #{@val[1].length} characters.")
|
3996
|
+
end
|
3997
|
+
if @val[1] == "A summary text\n"
|
3998
|
+
error('ts_default_summary',
|
3999
|
+
"'A summary text' is not a valid summary")
|
4000
|
+
end
|
3744
4001
|
rtTokenSetIntro =
|
3745
4002
|
%w( LINEBREAK SPACE WORD BOLD ITALIC CODE BOLDITALIC HREF HREFEND )
|
3746
4003
|
@journalEntry.summary = newRichText(@val[1], rtTokenSetIntro)
|
3747
4004
|
})
|
3748
4005
|
doc('summary', <<'EOT'
|
3749
4006
|
This is the introductory part of the journal or status entry. It should
|
3750
|
-
summarize the full entry but should contain more details than the
|
4007
|
+
only summarize the full entry but should contain more details than the
|
4008
|
+
headline. The text including formatting characters must be 240 characters long
|
4009
|
+
or less.
|
3751
4010
|
EOT
|
3752
4011
|
)
|
3753
4012
|
arg(1, 'text', <<'EOT'
|
3754
|
-
The text will be interpreted as [[Rich_Text_Attributes
|
4013
|
+
The text will be interpreted as [[Rich_Text_Attributes|Rich Text]]. Only a
|
3755
4014
|
small subset of the markup is supported for this attribute. You can use word
|
3756
4015
|
formatting, hyperlinks and paragraphs.
|
3757
4016
|
EOT
|
@@ -4214,6 +4473,8 @@ properties from the reports.
|
|
4214
4473
|
EOT
|
4215
4474
|
)
|
4216
4475
|
|
4476
|
+
pattern(%w( !fail ))
|
4477
|
+
|
4217
4478
|
pattern(%w( _length !workingDuration ), lambda {
|
4218
4479
|
checkContainer('length')
|
4219
4480
|
@property['length', @scenarioIdx] = @val[1]
|
@@ -4347,6 +4608,10 @@ resources. It does not mean that the task happens earlier, though that is
|
|
4347
4608
|
usually the effect you will see. It also does not have any effect on tasks
|
4348
4609
|
that don't have any resources assigned (e.g. milestones).
|
4349
4610
|
|
4611
|
+
For milestones it will raise or lower the chances that task leading up the
|
4612
|
+
milestone will get their resources over task with equal priority that compete
|
4613
|
+
for the same resources.
|
4614
|
+
|
4350
4615
|
This attribute is inherited by subtasks if specified prior to the definition
|
4351
4616
|
of the subtask.
|
4352
4617
|
EOT
|
@@ -4367,7 +4632,8 @@ EOT
|
|
4367
4632
|
)
|
4368
4633
|
|
4369
4634
|
pattern(%w( _responsible !resourceList ), lambda {
|
4370
|
-
@property['responsible', @scenarioIdx] =
|
4635
|
+
@property['responsible', @scenarioIdx] =
|
4636
|
+
@property['responsible', @scenarioIdx] + @val[1]
|
4371
4637
|
})
|
4372
4638
|
doc('responsible', <<'EOT'
|
4373
4639
|
The ID of the resource that is responsible for this task. This value is for
|
@@ -4460,6 +4726,9 @@ will be inherited from the enclosing tasks or the project start date.
|
|
4460
4726
|
EOT
|
4461
4727
|
)
|
4462
4728
|
also(%w( end period.task maxstart minstart scheduling ))
|
4729
|
+
|
4730
|
+
pattern(%w( !warn ))
|
4731
|
+
|
4463
4732
|
# Other attributes will be added automatically.
|
4464
4733
|
end
|
4465
4734
|
|
@@ -4617,11 +4886,9 @@ EOT
|
|
4617
4886
|
|
4618
4887
|
def rule_timeSheet
|
4619
4888
|
pattern(%w( !timeSheetHeader !timeSheetBody ), lambda {
|
4620
|
-
|
4889
|
+
@timeSheet
|
4621
4890
|
})
|
4622
4891
|
doc('timesheet', <<'EOT'
|
4623
|
-
This feature is not yet functional!
|
4624
|
-
|
4625
4892
|
A time sheet record can be used to capture the current status of the tasks
|
4626
4893
|
assigned to a specific resource and the achieved progress for a given period
|
4627
4894
|
of time. The status is assumed to be for the end of this time period. There
|
@@ -4636,24 +4903,28 @@ The work is booked for the scenario specified by [[trackingscenario]].
|
|
4636
4903
|
The intended use for time sheets is to have all resources report a time sheet
|
4637
4904
|
every day, week or month. All time sheets can be added to the project plan.
|
4638
4905
|
The status information is always used to determin the current status of the
|
4639
|
-
project. The [[work]], [[remaining]] and [[end.timesheet
|
4640
|
-
ignored if there are also [[booking
|
4906
|
+
project. The [[work]], [[remaining]] and [[end.timesheet|end]] attributes are
|
4907
|
+
ignored if there are also [[booking|bookings]] for the resource in the time
|
4641
4908
|
sheet period. The non-ignored attributes of the time sheets
|
4642
4909
|
will be converted into [[booking]] statements internally. These bookings can
|
4643
|
-
then be [[export
|
4910
|
+
then be [[export|exported]] into a file which can then be added to the project
|
4644
4911
|
again. This way, you can use time sheets to incrementally record progress of
|
4645
4912
|
your project. There is a possibility that time sheets conflict with other data
|
4646
4913
|
in the plan. In case TaskJuggler cannot automatically resolve them, these
|
4647
4914
|
conflicts have to be manually resolved by either changing the plan or the time
|
4648
4915
|
sheet.
|
4649
4916
|
|
4650
|
-
The status messages are interpreted as [[journalentry
|
4917
|
+
The status messages are interpreted as [[journalentry|journal entries]]. The
|
4651
4918
|
alert level will be evaluated and the current state of the project can be put
|
4652
|
-
into a dashboard using the ''''alert'''' and ''''alertmessage'''' [[columnid
|
4919
|
+
into a dashboard using the ''''alert'''' and ''''alertmessage'''' [[columnid|
|
4653
4920
|
columns]].
|
4921
|
+
|
4922
|
+
Currently, the provided effort values and dates are not yet used to
|
4923
|
+
automatically update the plan data. This feature will be added in future
|
4924
|
+
versions.
|
4654
4925
|
EOT
|
4655
4926
|
)
|
4656
|
-
example('
|
4927
|
+
example('TimeSheet1', '1')
|
4657
4928
|
end
|
4658
4929
|
|
4659
4930
|
def rule_timeSheetAttributes
|
@@ -4668,6 +4939,7 @@ If the task exists already, an error is generated. The new task can be used
|
|
4668
4939
|
immediately to report progress and status against it.
|
4669
4940
|
EOT
|
4670
4941
|
)
|
4942
|
+
example('TimeSheet1', '3')
|
4671
4943
|
|
4672
4944
|
pattern(%w( _shift !shiftId ), lambda {
|
4673
4945
|
|
@@ -4675,19 +4947,25 @@ EOT
|
|
4675
4947
|
doc('shift.timesheet', <<'EOT'
|
4676
4948
|
Specifies an alternative [[shift]] for the time sheet period. This shift will
|
4677
4949
|
override any existing working hour definitions for the resource. It will not
|
4678
|
-
override already declared [[vacation
|
4950
|
+
override already declared [[vacation|vacations]] though.
|
4679
4951
|
|
4680
4952
|
The primary use of this feature is to let the resources report different total
|
4681
4953
|
work time for the report period.
|
4682
4954
|
EOT
|
4683
4955
|
)
|
4684
4956
|
|
4685
|
-
pattern(%w( !
|
4957
|
+
pattern(%w( !tsStatus ))
|
4958
|
+
|
4959
|
+
pattern(%w( !tsTaskHeader !tsTaskBody ), lambda {
|
4960
|
+
@property = nil
|
4961
|
+
@timeSheetRecord = nil
|
4962
|
+
})
|
4686
4963
|
doc('task.timesheet', <<'EOT'
|
4687
4964
|
Specifies an existing task that progress and status should be reported
|
4688
4965
|
against.
|
4689
4966
|
EOT
|
4690
4967
|
)
|
4968
|
+
example('TimeSheet1', '4')
|
4691
4969
|
end
|
4692
4970
|
|
4693
4971
|
def rule_timeSheetBody
|
@@ -4697,16 +4975,25 @@ EOT
|
|
4697
4975
|
end
|
4698
4976
|
|
4699
4977
|
def rule_timeSheetHeader
|
4700
|
-
pattern(%w( _timesheet !resourceId !valIntervalOrDate ),
|
4701
|
-
|
4702
|
-
@
|
4703
|
-
|
4704
|
-
|
4978
|
+
pattern(%w( _timesheet !resourceId !valIntervalOrDate ), lambda {
|
4979
|
+
sheetAuthor = @val[1]
|
4980
|
+
@property = nil
|
4981
|
+
unless sheetAuthor.leaf?
|
4982
|
+
error('ts_group_author',
|
4983
|
+
'A resource group cannot file a time sheet')
|
4984
|
+
end
|
4985
|
+
# Currently time sheets are hardcoded for scenario 0.
|
4986
|
+
@timeSheet = TimeSheet.new(sheetAuthor, @val[2],
|
4987
|
+
@project['trackingScenarioIdx'])
|
4988
|
+
@timeSheet.sourceFileInfo = @scanner.sourceFileInfo
|
4989
|
+
@project.timeSheets << @timeSheet
|
4705
4990
|
})
|
4706
4991
|
end
|
4707
4992
|
|
4708
4993
|
def rule_timeSheetReport
|
4709
|
-
pattern(%w( !tsReportHeader !tsReportBody )
|
4994
|
+
pattern(%w( !tsReportHeader !tsReportBody ), lambda {
|
4995
|
+
@property = nil
|
4996
|
+
})
|
4710
4997
|
doc('timesheetreport', <<'EOT'
|
4711
4998
|
For projects that flow mostly according to plan, TaskJuggler already knows
|
4712
4999
|
much of the information that should be contained in the time sheets. With this
|
@@ -4749,28 +5036,25 @@ EOT
|
|
4749
5036
|
end
|
4750
5037
|
|
4751
5038
|
def rule_tsNewTaskHeader
|
4752
|
-
pattern(%w( _newtask !taskIdUnverifd ), lambda {
|
4753
|
-
|
5039
|
+
pattern(%w( _newtask !taskIdUnverifd $STRING ), lambda {
|
5040
|
+
@timeSheetRecord = TimeSheetRecord.new(@timeSheet, @val[1])
|
5041
|
+
@timeSheetRecord.name = @val[2]
|
5042
|
+
@timeSheetRecord.sourceFileInfo = @scanner.sourceFileInfo
|
4754
5043
|
})
|
4755
5044
|
arg(1, 'task', 'ID of the new task')
|
4756
5045
|
end
|
4757
5046
|
def rule_tsReportHeader
|
4758
|
-
pattern(%w( _timesheetreport $STRING ), lambda {
|
4759
|
-
|
4760
|
-
|
4761
|
-
|
4762
|
-
|
4763
|
-
|
4764
|
-
|
4765
|
-
|
4766
|
-
|
4767
|
-
|
4768
|
-
|
4769
|
-
end
|
4770
|
-
else
|
4771
|
-
fileName = "timeSheet#{@project.reports.length + 1}"
|
4772
|
-
end
|
4773
|
-
newReport(fileName, :timeSheet, sourceFileInfo)
|
5047
|
+
pattern(%w( _timesheetreport !optionalID $STRING ), lambda {
|
5048
|
+
report = newReport(@val[1], @val[2], :timeSheet, sourceFileInfo)
|
5049
|
+
report.set('scenarios', [ 0 ])
|
5050
|
+
# Show all tasks, sorted by seqno-up.
|
5051
|
+
report.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
|
5052
|
+
report.set('sortTasks', [ [ 'seqno', true, -1 ] ])
|
5053
|
+
# Show all resources, sorted by seqno-up.
|
5054
|
+
report.set('hideResource', LogicalExpression.new(LogicalOperation.new(0)))
|
5055
|
+
report.set('sortResources', [ [ 'seqno', true, -1 ] ])
|
5056
|
+
report.set('loadUnit', :hours)
|
5057
|
+
report.set('definitions', [])
|
4774
5058
|
})
|
4775
5059
|
arg(1, 'file name', <<'EOT'
|
4776
5060
|
The name of the time sheet report file to generate. It must end with a .tji
|
@@ -4808,12 +5092,24 @@ EOT
|
|
4808
5092
|
|
4809
5093
|
def rule_tsStatusHeader
|
4810
5094
|
pattern(%w( _status !alertLevel $STRING ), lambda {
|
4811
|
-
|
4812
|
-
|
5095
|
+
if @val[2].length > 120
|
5096
|
+
error('ts_headline_too_long',
|
5097
|
+
"The headline must be 120 or less characters long. This one " +
|
5098
|
+
"has #{@val[2].length} characters.")
|
5099
|
+
end
|
5100
|
+
if @val[2] == 'Your headline here!'
|
5101
|
+
error('ts_no_headline',
|
5102
|
+
"'Your headline here!' is not a valid headline")
|
5103
|
+
end
|
5104
|
+
@journalEntry = JournalEntry.new(@project['journal'],
|
5105
|
+
@timeSheet.interval.end,
|
5106
|
+
@val[2],
|
5107
|
+
@property || @timeSheet.resource,
|
4813
5108
|
@scanner.sourceFileInfo)
|
4814
5109
|
@journalEntry.alertLevel = @val[1]
|
4815
|
-
@journalEntry.
|
4816
|
-
|
5110
|
+
@journalEntry.timeSheetRecord = @timeSheetRecord
|
5111
|
+
@journalEntry.author = @timeSheet.resource
|
5112
|
+
@timeSheetRecord.status = @journalEntry if @timeSheetRecord
|
4817
5113
|
})
|
4818
5114
|
end
|
4819
5115
|
|
@@ -4824,6 +5120,11 @@ The status attribute can be used to describe the current status of the task or
|
|
4824
5120
|
resource. The content of the status messages is added to the project journal.
|
4825
5121
|
EOT
|
4826
5122
|
)
|
5123
|
+
arg(2, 'headline', <<'EOT'
|
5124
|
+
A short headline for the status. Must be 60 characters or shorter.
|
5125
|
+
EOT
|
5126
|
+
)
|
5127
|
+
example('TimeSheet1', '4')
|
4827
5128
|
end
|
4828
5129
|
|
4829
5130
|
def rule_tsTaskAttributes
|
@@ -4831,20 +5132,31 @@ EOT
|
|
4831
5132
|
repeatable
|
4832
5133
|
|
4833
5134
|
pattern(%w( _end !valDate ), lambda {
|
4834
|
-
|
5135
|
+
if @val[1] < @timeSheet.interval.start
|
5136
|
+
error('ts_end_too_early',
|
5137
|
+
"The expected task end date must be after the start date of " +
|
5138
|
+
"this time sheet report.")
|
5139
|
+
end
|
5140
|
+
@timeSheetRecord.expectedEnd = @val[1]
|
4835
5141
|
})
|
4836
5142
|
doc('end.timesheet', <<'EOT'
|
4837
5143
|
The expected end date for the task. This can only be used for duration based
|
4838
5144
|
task. For effort based task [[remaining]] has to be used.
|
4839
5145
|
EOT
|
4840
5146
|
)
|
5147
|
+
example('TimeSheet1', '5')
|
4841
5148
|
|
4842
5149
|
pattern(%w( _priority $INTEGER ), lambda {
|
4843
|
-
|
5150
|
+
priority = @val[1]
|
5151
|
+
if priority < 1 || priority > 1000
|
5152
|
+
error('ts_bad_priority',
|
5153
|
+
"Priority value #{priority} must be between 1 and 1000.")
|
5154
|
+
end
|
5155
|
+
@timeSheetRecord.priority = priority
|
4844
5156
|
})
|
4845
5157
|
doc('priority.timesheet', <<'EOT'
|
4846
5158
|
The priority is a value between 1 and 1000. It is used to determine the
|
4847
|
-
sequence of task when converting [[work]] to [[booking
|
5159
|
+
sequence of task when converting [[work]] to [[booking|bookings]]. Tasks that
|
4848
5160
|
need to finish earlier in the period should have a high priority, tasks that
|
4849
5161
|
end later in the period should have a low priority. For tasks that don't get
|
4850
5162
|
finished in the reported period the priority should be set to 1.
|
@@ -4852,29 +5164,30 @@ EOT
|
|
4852
5164
|
)
|
4853
5165
|
|
4854
5166
|
pattern(%w( _remaining !workingDuration ), lambda {
|
4855
|
-
|
5167
|
+
@timeSheetRecord.remaining = @val[1]
|
4856
5168
|
})
|
4857
5169
|
doc('remaining', <<'EOT'
|
4858
5170
|
The remaining effort for the task. This value is ignored if there are
|
4859
|
-
[[booking
|
5171
|
+
[[booking|bookings]] for the resource that overlap with the time sheet period.
|
4860
5172
|
If there are no bookings, the value is compared with the [[effort]]
|
4861
5173
|
specification of the task. If there a mismatch between the accumulated effort
|
4862
5174
|
specified with bookings, [[work]] and [[remaining]] on one side and the
|
4863
5175
|
specified [[effort]] on the other, a warning is generated.
|
4864
5176
|
|
4865
5177
|
This attribute can only be used with tasks that are effort based. Duration
|
4866
|
-
based tasks need to have an [[end.timesheet
|
5178
|
+
based tasks need to have an [[end.timesheet|end]] attribute.
|
4867
5179
|
EOT
|
4868
5180
|
)
|
5181
|
+
example('TimeSheet1', '6')
|
4869
5182
|
|
4870
5183
|
pattern(%w( !tsStatus ))
|
4871
5184
|
|
4872
|
-
pattern(%w( _work !
|
4873
|
-
|
5185
|
+
pattern(%w( _work !workingDurationPercent ), lambda {
|
5186
|
+
@timeSheetRecord.work = @val[1]
|
4874
5187
|
})
|
4875
5188
|
doc('work', <<'EOT'
|
4876
5189
|
The amount of time that the resource has spend with the task during the
|
4877
|
-
reported period. This value is ignored when there are [[booking
|
5190
|
+
reported period. This value is ignored when there are [[booking|bookings]] for
|
4878
5191
|
the resource overlapping with the time sheet period. If there are no bookings,
|
4879
5192
|
TaskJuggler will try to convert the work specification into bookings
|
4880
5193
|
internally before the actual scheduling is started.
|
@@ -4888,28 +5201,26 @@ regular 40 hour work week, exactly 40 hours total or 5 working days have to be
|
|
4888
5201
|
reported.
|
4889
5202
|
EOT
|
4890
5203
|
)
|
5204
|
+
example('TimeSheet1', '4')
|
4891
5205
|
end
|
4892
5206
|
|
4893
5207
|
def rule_tsTaskBody
|
4894
|
-
pattern(%w( _{ !tsTaskAttributes _} )
|
4895
|
-
@property = nil
|
4896
|
-
})
|
5208
|
+
pattern(%w( _{ !tsTaskAttributes _} ))
|
4897
5209
|
end
|
4898
5210
|
|
4899
5211
|
def rule_tsTaskHeader
|
4900
5212
|
pattern(%w( _task !taskId ), lambda {
|
4901
5213
|
@property = @val[1]
|
4902
|
-
|
4903
|
-
|
4904
|
-
|
4905
|
-
|
4906
|
-
|
4907
|
-
|
4908
|
-
|
4909
|
-
|
4910
|
-
|
4911
|
-
|
4912
|
-
#end
|
5214
|
+
unless @property.leaf?
|
5215
|
+
error('ts_task_not_leaf',
|
5216
|
+
'You cannot specify a task that has sub tasks here.')
|
5217
|
+
end
|
5218
|
+
scenarioIdx = @timeSheet.scenarioIdx
|
5219
|
+
taskStart = @property['start', scenarioIdx] || @project['start']
|
5220
|
+
taskEnd = @property['end', scenarioIdx] || @project['end']
|
5221
|
+
|
5222
|
+
@timeSheetRecord = TimeSheetRecord.new(@timeSheet, @property)
|
5223
|
+
@timeSheetRecord.sourceFileInfo = @scanner.sourceFileInfo
|
4913
5224
|
})
|
4914
5225
|
arg(1, 'task', 'ID of an already existing task')
|
4915
5226
|
end
|
@@ -4945,6 +5256,10 @@ EOT
|
|
4945
5256
|
mode = @val[1][0]
|
4946
5257
|
endSpec = @val[1][1]
|
4947
5258
|
if mode == 0
|
5259
|
+
unless @val[0] < endSpec
|
5260
|
+
error('start_before_end', "The end date (#{endSpec}) must be " +
|
5261
|
+
"after the start date (#{@val[0]}).")
|
5262
|
+
end
|
4948
5263
|
iv = Interval.new(@val[0], endSpec)
|
4949
5264
|
else
|
4950
5265
|
iv = Interval.new(@val[0], @val[0] + endSpec)
|
@@ -5007,6 +5322,20 @@ EOT
|
|
5007
5322
|
listRule('moreValIntervals', '!valIntervalOrDate')
|
5008
5323
|
end
|
5009
5324
|
|
5325
|
+
def rule_warn
|
5326
|
+
pattern(%w( _warn !logicalExpression ), lambda {
|
5327
|
+
@property['warn', @scenarioIdx] = @val[1]
|
5328
|
+
})
|
5329
|
+
doc('warn', <<'EOT'
|
5330
|
+
The warn attribute adds a logical expression to the property. The condition
|
5331
|
+
described by the logical expression is checked after the scheduling and an
|
5332
|
+
warning is generated if the condition evaluates to true. This attribute is
|
5333
|
+
primarily intended for testing purpuses.
|
5334
|
+
EOT
|
5335
|
+
)
|
5336
|
+
end
|
5337
|
+
|
5338
|
+
|
5010
5339
|
def rule_weekday
|
5011
5340
|
pattern(%w( _sun ), lambda { 0 })
|
5012
5341
|
pattern(%w( _mon ), lambda { 1 })
|
@@ -5057,16 +5386,49 @@ EOT
|
|
5057
5386
|
60 * 60 * @project['dailyworkinghours'] *
|
5058
5387
|
@project['yearlyworkingdays'] # years
|
5059
5388
|
]
|
5389
|
+
# The result will always be in number of time slots.
|
5060
5390
|
(@val[0] * convFactors[@val[1]] /
|
5061
5391
|
@project['scheduleGranularity']).round.to_i
|
5062
5392
|
})
|
5063
5393
|
arg(0, 'value', 'A floating point or integer number')
|
5064
5394
|
end
|
5065
5395
|
|
5396
|
+
def rule_workingDurationPercent
|
5397
|
+
pattern(%w( !number !durationUnitOrPercent ), lambda {
|
5398
|
+
if @val[1] >= 0
|
5399
|
+
# Absolute value in minutes, hours or days.
|
5400
|
+
convFactors = [ 60, # minutes
|
5401
|
+
60 * 60, # hours
|
5402
|
+
60 * 60 * @project['dailyworkinghours'] # days
|
5403
|
+
]
|
5404
|
+
# The result will always be in number of time slots.
|
5405
|
+
(@val[0] * convFactors[@val[1]] /
|
5406
|
+
@project['scheduleGranularity']).round.to_i
|
5407
|
+
else
|
5408
|
+
# Percentage values are always returned as Float in the rage of 0.0 to
|
5409
|
+
# 1.0.
|
5410
|
+
if @val[0] < 0.0 || @val[0] > 100.0
|
5411
|
+
error('illegal_percentage',
|
5412
|
+
"Percentage values must be between 0 and 100%.")
|
5413
|
+
end
|
5414
|
+
@val[0] / 100.0
|
5415
|
+
end
|
5416
|
+
})
|
5417
|
+
arg(0, 'value', 'A floating point or integer number')
|
5418
|
+
end
|
5419
|
+
|
5066
5420
|
def rule_workinghours
|
5067
5421
|
pattern(%w( _workinghours !listOfDays !listOfTimes), lambda {
|
5068
|
-
|
5069
|
-
|
5422
|
+
if @property.nil?
|
5423
|
+
# We are changing global working hours.
|
5424
|
+
wh = @project['workinghours']
|
5425
|
+
else
|
5426
|
+
unless (wh = @property['workinghours', @scenarioIdx])
|
5427
|
+
# The property does not have it's own WorkingHours yet.
|
5428
|
+
wh = WorkingHours.new(@project['workinghours'])
|
5429
|
+
@property['workinghours', @scenarioIdx] = wh
|
5430
|
+
end
|
5431
|
+
end
|
5070
5432
|
wh.timezone = @property.nil? ? @project['timezone'] :
|
5071
5433
|
@property['timezone', @scenarioIdx]
|
5072
5434
|
7.times { |i| wh.setWorkingHours(i, @val[2]) if @val[1][i] }
|