taskjuggler 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +115 -0
- data/README.rdoc +105 -0
- data/examples/tutorial.tjp +21 -16
- data/gem_spec.rb +1 -1
- data/lib/{Account.rb → taskjuggler/Account.rb} +2 -3
- data/lib/{AccountScenario.rb → taskjuggler/AccountScenario.rb} +1 -1
- data/lib/taskjuggler/AlgorithmDiff.rb +311 -0
- data/lib/{Allocation.rb → taskjuggler/Allocation.rb} +3 -3
- data/lib/{AppConfig.rb → taskjuggler/AppConfig.rb} +0 -1
- data/lib/{AttributeBase.rb → taskjuggler/AttributeBase.rb} +1 -1
- data/lib/{AttributeDefinition.rb → taskjuggler/AttributeDefinition.rb} +0 -0
- data/lib/{Attributes.rb → taskjuggler/Attributes.rb} +19 -9
- data/lib/{BatchProcessor.rb → taskjuggler/BatchProcessor.rb} +0 -0
- data/lib/{Booking.rb → taskjuggler/Booking.rb} +0 -0
- data/lib/{Charge.rb → taskjuggler/Charge.rb} +1 -1
- data/lib/{ChargeSet.rb → taskjuggler/ChargeSet.rb} +1 -1
- data/lib/{DataCache.rb → taskjuggler/DataCache.rb} +0 -0
- data/lib/{FileList.rb → taskjuggler/FileList.rb} +0 -0
- data/lib/{HTMLDocument.rb → taskjuggler/HTMLDocument.rb} +1 -1
- data/lib/{Interval.rb → taskjuggler/Interval.rb} +1 -1
- data/lib/{IntervalList.rb → taskjuggler/IntervalList.rb} +1 -1
- data/lib/{Journal.rb → taskjuggler/Journal.rb} +2 -2
- data/lib/{KeywordArray.rb → taskjuggler/KeywordArray.rb} +0 -0
- data/lib/{KeywordDocumentation.rb → taskjuggler/KeywordDocumentation.rb} +5 -5
- data/lib/{Limits.rb → taskjuggler/Limits.rb} +1 -1
- data/lib/{Log.rb → taskjuggler/Log.rb} +0 -0
- data/lib/{LogFile.rb → taskjuggler/LogFile.rb} +0 -0
- data/lib/{LogicalExpression.rb → taskjuggler/LogicalExpression.rb} +3 -3
- data/lib/{LogicalFunction.rb → taskjuggler/LogicalFunction.rb} +1 -1
- data/lib/{LogicalOperation.rb → taskjuggler/LogicalOperation.rb} +1 -1
- data/lib/{MessageHandler.rb → taskjuggler/MessageHandler.rb} +3 -1
- data/lib/{Project.rb → taskjuggler/Project.rb} +51 -48
- data/lib/{ProjectFileParser.rb → taskjuggler/ProjectFileParser.rb} +25 -9
- data/lib/{ProjectFileScanner.rb → taskjuggler/ProjectFileScanner.rb} +5 -5
- data/lib/{PropertyList.rb → taskjuggler/PropertyList.rb} +0 -0
- data/lib/{PropertySet.rb → taskjuggler/PropertySet.rb} +3 -4
- data/lib/{PropertyTreeNode.rb → taskjuggler/PropertyTreeNode.rb} +157 -11
- data/lib/{Query.rb → taskjuggler/Query.rb} +17 -7
- data/lib/{RealFormat.rb → taskjuggler/RealFormat.rb} +0 -0
- data/lib/{Resource.rb → taskjuggler/Resource.rb} +8 -6
- data/lib/{ResourceScenario.rb → taskjuggler/ResourceScenario.rb} +26 -65
- data/lib/{RichText.rb → taskjuggler/RichText.rb} +3 -3
- data/lib/{RichTextDocument.rb → taskjuggler/RichText/Document.rb} +3 -3
- data/lib/{RichTextElement.rb → taskjuggler/RichText/Element.rb} +10 -4
- data/lib/{RichTextFunctionExample.rb → taskjuggler/RichText/FunctionExample.rb} +3 -3
- data/lib/{RichTextFunctionHandler.rb → taskjuggler/RichText/FunctionHandler.rb} +0 -0
- data/lib/{RichTextParser.rb → taskjuggler/RichText/Parser.rb} +6 -4
- data/lib/{RTFHandlers.rb → taskjuggler/RichText/RTFHandlers.rb} +4 -4
- data/lib/{RTFNavigator.rb → taskjuggler/RichText/RTFNavigator.rb} +3 -3
- data/lib/{RTFQuery.rb → taskjuggler/RichText/RTFQuery.rb} +62 -39
- data/lib/{RTFReport.rb → taskjuggler/RichText/RTFReport.rb} +2 -2
- data/lib/{RTFReportLink.rb → taskjuggler/RichText/RTFReportLink.rb} +4 -4
- data/lib/{RTFWithQuerySupport.rb → taskjuggler/RichText/RTFWithQuerySupport.rb} +1 -1
- data/lib/{RichTextScanner.rb → taskjuggler/RichText/Scanner.rb} +18 -5
- data/lib/{RichTextSnip.rb → taskjuggler/RichText/Snip.rb} +2 -2
- data/lib/{RichTextSyntaxRules.rb → taskjuggler/RichText/SyntaxRules.rb} +14 -0
- data/lib/{TOCEntry.rb → taskjuggler/RichText/TOCEntry.rb} +2 -2
- data/lib/{TableOfContents.rb → taskjuggler/RichText/TableOfContents.rb} +2 -2
- data/lib/{RuntimeConfig.rb → taskjuggler/RuntimeConfig.rb} +18 -18
- data/lib/{Scenario.rb → taskjuggler/Scenario.rb} +1 -1
- data/lib/{ScenarioData.rb → taskjuggler/ScenarioData.rb} +2 -3
- data/lib/{Scoreboard.rb → taskjuggler/Scoreboard.rb} +4 -4
- data/lib/{SheetHandlerBase.rb → taskjuggler/SheetHandlerBase.rb} +3 -3
- data/lib/{SheetReceiver.rb → taskjuggler/SheetReceiver.rb} +2 -2
- data/lib/{SheetSender.rb → taskjuggler/SheetSender.rb} +5 -5
- data/lib/{Shift.rb → taskjuggler/Shift.rb} +2 -3
- data/lib/{ShiftAssignments.rb → taskjuggler/ShiftAssignments.rb} +1 -1
- data/lib/{ShiftScenario.rb → taskjuggler/ShiftScenario.rb} +1 -1
- data/lib/{SimpleQueryExpander.rb → taskjuggler/SimpleQueryExpander.rb} +0 -0
- data/lib/{StatusSheetReceiver.rb → taskjuggler/StatusSheetReceiver.rb} +1 -1
- data/lib/{StatusSheetSender.rb → taskjuggler/StatusSheetSender.rb} +1 -1
- data/lib/{SyntaxReference.rb → taskjuggler/SyntaxReference.rb} +4 -4
- data/lib/{TableColumnDefinition.rb → taskjuggler/TableColumnDefinition.rb} +0 -0
- data/lib/{Task.rb → taskjuggler/Task.rb} +2 -2
- data/lib/{TaskDependency.rb → taskjuggler/TaskDependency.rb} +8 -0
- data/lib/{TaskJuggler.rb → taskjuggler/TaskJuggler.rb} +6 -4
- data/lib/{TaskScenario.rb → taskjuggler/TaskScenario.rb} +211 -150
- data/lib/taskjuggler/TernarySearchTree.rb +203 -0
- data/lib/{TextFormatter.rb → taskjuggler/TextFormatter.rb} +1 -1
- data/lib/{TextParser.rb → taskjuggler/TextParser.rb} +6 -6
- data/lib/{MacroTable.rb → taskjuggler/TextParser/MacroTable.rb} +2 -12
- data/lib/{TextParser → taskjuggler/TextParser}/Pattern.rb +5 -2
- data/lib/{TextParser → taskjuggler/TextParser}/Rule.rb +1 -1
- data/lib/{TextScanner.rb → taskjuggler/TextParser/Scanner.rb} +34 -32
- data/lib/{SourceFileInfo.rb → taskjuggler/TextParser/SourceFileInfo.rb} +1 -1
- data/lib/{TextParser → taskjuggler/TextParser}/StackElement.rb +0 -2
- data/lib/{TextParser → taskjuggler/TextParser}/State.rb +0 -0
- data/lib/{TextParser → taskjuggler/TextParser}/TokenDoc.rb +0 -0
- data/lib/{TimeSheetReceiver.rb → taskjuggler/TimeSheetReceiver.rb} +1 -1
- data/lib/{TimeSheetSender.rb → taskjuggler/TimeSheetSender.rb} +1 -1
- data/lib/{TimeSheetSummary.rb → taskjuggler/TimeSheetSummary.rb} +1 -1
- data/lib/{TimeSheets.rb → taskjuggler/TimeSheets.rb} +23 -16
- data/lib/{Tj3AppBase.rb → taskjuggler/Tj3AppBase.rb} +19 -12
- data/lib/{Tj3Config.rb → taskjuggler/Tj3Config.rb} +3 -3
- data/lib/taskjuggler/Tj3Man.rb +78 -0
- data/lib/{Tj3SheetAppBase.rb → taskjuggler/Tj3SheetAppBase.rb} +2 -2
- data/lib/{TjException.rb → taskjuggler/TjException.rb} +0 -0
- data/lib/{TjTime.rb → taskjuggler/TjTime.rb} +279 -234
- data/lib/{TjpExample.rb → taskjuggler/TjpExample.rb} +0 -0
- data/lib/{TjpSyntaxRules.rb → taskjuggler/TjpSyntaxRules.rb} +253 -95
- data/lib/{URLParameter.rb → taskjuggler/URLParameter.rb} +0 -0
- data/lib/{UTF8String.rb → taskjuggler/UTF8String.rb} +0 -0
- data/lib/{UserManual.rb → taskjuggler/UserManual.rb} +6 -6
- data/lib/{VimSyntax.rb → taskjuggler/VimSyntax.rb} +6 -2
- data/lib/{WorkingHours.rb → taskjuggler/WorkingHours.rb} +14 -22
- data/lib/{XMLDocument.rb → taskjuggler/XMLDocument.rb} +1 -1
- data/lib/{XMLElement.rb → taskjuggler/XMLElement.rb} +1 -1
- data/lib/taskjuggler/apps/Tj3.rb +134 -0
- data/lib/taskjuggler/apps/Tj3Client.rb +467 -0
- data/lib/taskjuggler/apps/Tj3Daemon.rb +142 -0
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +56 -0
- data/lib/taskjuggler/apps/Tj3SsSender.rb +90 -0
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +59 -0
- data/lib/taskjuggler/apps/Tj3TsSender.rb +77 -0
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +86 -0
- data/lib/{daemon → taskjuggler/daemon}/Daemon.rb +4 -3
- data/lib/{daemon → taskjuggler/daemon}/ProcessIntercom.rb +2 -2
- data/lib/{daemon → taskjuggler/daemon}/ProjectBroker.rb +5 -5
- data/lib/{daemon → taskjuggler/daemon}/ProjectServer.rb +16 -16
- data/lib/{daemon → taskjuggler/daemon}/ReportServer.rb +6 -6
- data/lib/{daemon → taskjuggler/daemon}/ReportServlet.rb +2 -2
- data/lib/{daemon → taskjuggler/daemon}/WebServer.rb +4 -4
- data/lib/{daemon → taskjuggler/daemon}/WelcomePage.rb +2 -1
- data/lib/{deep_copy.rb → taskjuggler/deep_copy.rb} +0 -0
- data/lib/{reports → taskjuggler/reports}/CSVFile.rb +2 -2
- data/lib/{reports → taskjuggler/reports}/CollisionDetector.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/ColumnTable.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttChart.rb +4 -4
- data/lib/{reports → taskjuggler/reports}/GanttContainer.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttHeader.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttHeaderScaleItem.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/GanttLine.rb +6 -6
- data/lib/{reports → taskjuggler/reports}/GanttLoadStack.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttMilestone.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttRouter.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/GanttTaskBar.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/HTMLGraphics.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/Navigator.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/NikuReport.rb +3 -6
- data/lib/{reports → taskjuggler/reports}/Report.rb +19 -14
- data/lib/{reports → taskjuggler/reports}/ReportBase.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportContext.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTable.rb +2 -2
- data/lib/{reports → taskjuggler/reports}/ReportTableCell.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTableColumn.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTableLegend.rb +0 -0
- data/lib/{reports → taskjuggler/reports}/ReportTableLine.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/ResourceListRE.rb +4 -4
- data/lib/{reports → taskjuggler/reports}/StatusSheetReport.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/TableReport.rb +8 -7
- data/lib/{reports → taskjuggler/reports}/TaskListRE.rb +4 -4
- data/lib/{reports → taskjuggler/reports}/TextReport.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/TimeSheetReport.rb +1 -1
- data/lib/{reports → taskjuggler/reports}/TjpExportRE.rb +87 -29
- data/lib/tj3.rb +2 -144
- data/lib/tj3client.rb +2 -442
- data/lib/tj3d.rb +1 -133
- data/lib/tj3man.rb +2 -75
- data/lib/tj3ss_receiver.rb +2 -42
- data/lib/tj3ss_sender.rb +1 -76
- data/lib/tj3ts_receiver.rb +1 -45
- data/lib/tj3ts_sender.rb +1 -63
- data/lib/tj3ts_summary.rb +1 -72
- data/manual/How_To_Contribute +19 -49
- data/manual/Installation +65 -6
- data/manual/Reporting_Bugs +6 -20
- data/manual/TaskJuggler_Internals +8 -1
- data/manual/Tutorial +16 -0
- data/prj_cfg.rb +2 -3
- data/spec/IntervalList_spec.rb +2 -1
- data/spec/ProjectBroker_spec.rb +1 -1
- data/spec/TernarySearchTree_spec.rb +131 -0
- data/spec/TimeSheets_spec.rb +129 -0
- data/spec/Tj3Daemon_spec.rb +51 -0
- data/spec/Tj3_spec.rb +36 -0
- data/spec/support/DaemonControl.rb +78 -0
- data/spec/support/StdIoWrapper.rb +43 -0
- data/spec/tj3client.log +23 -0
- data/tasks/changelog.rake +17 -2
- data/tasks/csts.rake +2 -2
- data/tasks/manual.rake +9 -5
- data/tasks/missing.rake +0 -4
- data/tasks/rdoc.rake +2 -2
- data/tasks/vim.rake +9 -0
- data/test/TestSuite/CSV-Reports/alert.tjp +9 -0
- data/test/TestSuite/CSV-Reports/celltext.tjp +1 -0
- data/test/TestSuite/CSV-Reports/inputs.tjp +19 -0
- data/test/TestSuite/CSV-Reports/project-1.tji +9 -0
- data/test/TestSuite/CSV-Reports/refs/alert.csv +15 -0
- data/test/TestSuite/CSV-Reports/refs/celltext.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/inputs.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/resourcereport.csv +4 -4
- data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +22 -22
- data/test/TestSuite/CSV-Reports/refs/sortByTree.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_duration.down.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_effort.up.csv +1 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_plan.start.down.csv +14 -13
- data/test/TestSuite/CSV-Reports/refs/targets.csv +5 -0
- data/test/TestSuite/CSV-Reports/refs/taskreport.csv +15 -14
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +33 -32
- data/test/TestSuite/CSV-Reports/resourcereport.tjp +1 -0
- data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortByTree.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +1 -0
- data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
- data/test/TestSuite/CSV-Reports/targets.tjp +20 -0
- data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
- data/test/TestSuite/CSV-Reports/weekly.tjp +5 -2
- data/test/TestSuite/Export-Reports/export.tji +6 -0
- data/test/TestSuite/Export-Reports/refs/Account.tjp +92 -0
- data/test/TestSuite/Export-Reports/refs/AdoptedTasks.tjp +38 -0
- data/test/TestSuite/Export-Reports/refs/Allocate-1.tjp +124 -0
- data/test/TestSuite/Export-Reports/refs/Alternative.tjp +50 -0
- data/test/TestSuite/Export-Reports/refs/AutoID.tjp +45 -0
- data/test/TestSuite/Export-Reports/refs/AutoMacros.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Booking.tjp +48 -0
- data/test/TestSuite/Export-Reports/refs/Caption.tjp +65 -0
- data/test/TestSuite/Export-Reports/refs/Celltext.tjp +45 -0
- data/test/TestSuite/Export-Reports/refs/Comments.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/Complete.tjp +50 -0
- data/test/TestSuite/Export-Reports/refs/CriticalPath.tjp +41 -0
- data/test/TestSuite/Export-Reports/refs/Currencyformat.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +24 -0
- data/test/TestSuite/Export-Reports/refs/DST.tjp +89 -0
- data/test/TestSuite/Export-Reports/refs/Depends1.tjp +57 -0
- data/test/TestSuite/Export-Reports/refs/Durations.tjp +84 -0
- data/test/TestSuite/Export-Reports/refs/Efficiency.tjp +58 -0
- data/test/TestSuite/Export-Reports/refs/Flags.tjp +51 -0
- data/test/TestSuite/Export-Reports/refs/Gap.tjp +38 -0
- data/test/TestSuite/Export-Reports/refs/HtmlTaskReport.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/Include.tjp +58 -0
- data/test/TestSuite/Export-Reports/refs/Journal.tjp +28 -0
- data/test/TestSuite/Export-Reports/refs/Limits-1.tjp +283 -0
- data/test/TestSuite/Export-Reports/refs/LoadUnits.tjp +617 -0
- data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/LogicalFunction.tjp +57 -0
- data/test/TestSuite/Export-Reports/refs/Macro-1.tjp +91 -0
- data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Macro-3.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Manager.tjp +121 -0
- data/test/TestSuite/Export-Reports/refs/Mandatory.tjp +59 -0
- data/test/TestSuite/Export-Reports/refs/Milestone.tjp +27 -0
- data/test/TestSuite/Export-Reports/refs/MinMax.tjp +30 -0
- data/test/TestSuite/Export-Reports/refs/Niku.tjp +218 -0
- data/test/TestSuite/Export-Reports/refs/Numberformat.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Period.tjp +25 -0
- data/test/TestSuite/Export-Reports/refs/Persistent.tjp +49 -0
- data/test/TestSuite/Export-Reports/refs/Precedes1.tjp +46 -0
- data/test/TestSuite/Export-Reports/refs/Priority.tjp +141 -0
- data/test/TestSuite/Export-Reports/refs/Project.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/ProjectIDs.tjp +36 -0
- data/test/TestSuite/Export-Reports/refs/Query.tjp +49 -0
- data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +79 -0
- data/test/TestSuite/Export-Reports/refs/Reports.tjp +130 -0
- data/test/TestSuite/Export-Reports/refs/Resource.tjp +59 -0
- data/test/TestSuite/Export-Reports/refs/ResourcePrefix.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/ResourceRoot.tjp +90 -0
- data/test/TestSuite/Export-Reports/refs/Responsible.tjp +50 -0
- data/test/TestSuite/Export-Reports/refs/RollupResource.tjp +90 -0
- data/test/TestSuite/Export-Reports/refs/Scenario.tjp +25 -0
- data/test/TestSuite/Export-Reports/refs/Scheduling.tjp +55 -0
- data/test/TestSuite/Export-Reports/refs/Select.tjp +89 -0
- data/test/TestSuite/Export-Reports/refs/Shift.tjp +39 -0
- data/test/TestSuite/Export-Reports/refs/Simple.tjp +67 -0
- data/test/TestSuite/Export-Reports/refs/StatusSheet.tjp +95 -0
- data/test/TestSuite/Export-Reports/refs/String.tjp +33 -0
- data/test/TestSuite/Export-Reports/refs/Supplement.tjp +41 -0
- data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +49 -0
- data/test/TestSuite/Export-Reports/refs/TaskRoot.tjp +75 -0
- data/test/TestSuite/Export-Reports/refs/TimeFrame.tjp +51 -0
- data/test/TestSuite/Export-Reports/refs/TimeSheet1.tjp +81 -0
- data/test/TestSuite/Export-Reports/refs/Timezone.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Vacation.tjp +69 -0
- data/test/TestSuite/Export-Reports/refs/tutorial.tjp +1061 -0
- data/test/TestSuite/Scheduler/Correct/Container-2.tjp +3 -1
- data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +5 -3
- data/test/TestSuite/Scheduler/Correct/Precedes.tjp +19 -19
- data/test/TestSuite/Scheduler/Correct/PriorityInversion.tjp +32 -0
- data/test/TestSuite/Scheduler/Correct/Scenarios.tjp +19 -0
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +11 -0
- data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +14 -14
- data/test/TestSuite/Scheduler/Correct/checks.tji +5 -0
- data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +20 -0
- data/test/TestSuite/StatusSheets/boss_mail +1 -1
- data/test/TestSuite/StatusSheets/dev2_mail +1 -1
- data/test/TestSuite/StatusSheets/run +2 -3
- data/test/TestSuite/Syntax/Correct/Account.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/AdoptedTasks.tjp +9 -0
- data/test/TestSuite/Syntax/Correct/Allocate-1.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Alternative.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/AutoID.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Booking.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Caption.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Comments.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Complete.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Currencyformat.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/DST.tjp +11 -0
- data/test/TestSuite/Syntax/Correct/Depends1.tjp +6 -4
- data/test/TestSuite/Syntax/Correct/Durations.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Efficiency.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Export.tjp +6 -4
- data/test/TestSuite/Syntax/Correct/Flags.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Freeze.tjp +2 -2
- data/test/TestSuite/Syntax/Correct/Gap.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Include.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Journal.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Limits-1.tjp +13 -9
- data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/LogicalFunction.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Macro-1.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Macro-2.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Macro-3.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Manager.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Mandatory.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Milestone.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/MinMax.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Niku.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Numberformat.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/Period.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Persistent.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Precedes1.tjp +6 -4
- data/test/TestSuite/Syntax/Correct/Priority.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Project.tjp +5 -4
- data/test/TestSuite/Syntax/Correct/ProjectIDs.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/Query.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Reports.tjp +7 -5
- data/test/TestSuite/Syntax/Correct/Resource.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/ResourceRoot.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Responsible.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/RollupResource.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Scenario.tjp +2 -1
- data/test/TestSuite/Syntax/Correct/Scheduling.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Select.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Shift.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Simple.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/String.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/Supplement.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +3 -2
- data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/TimeFrame.tjp +3 -1
- data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +4 -2
- data/test/TestSuite/Syntax/Correct/Vacation.tjp +5 -3
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +23 -16
- data/test/TestSuite/Syntax/Errors/adopt_common_root.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/adopt_duplicate_child.tjp +10 -0
- data/test/TestSuite/Syntax/Errors/adopt_duplicate_parent.tjp +10 -0
- data/test/TestSuite/{Scheduler/Errors/milestone_duration.tjp → Syntax/Errors/multiple_durations.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/operand_unkn_scen.tjp +6 -4
- data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +5 -3
- data/test/TestSuite/TimeSheets/dev2_mail1 +1 -1
- data/test/TestSuite/TimeSheets/dev2_mail2 +1 -1
- data/test/TestSuite/TimeSheets/run +2 -2
- data/test/TestSuite/TimeSheets/uu.txt +29 -0
- data/test/test_AlgorithmDiff.rb +139 -0
- data/test/test_BatchProcessor.rb +2 -1
- data/test/test_CSV-Reports.rb +30 -19
- data/test/test_CSVFile.rb +2 -1
- data/test/test_CollisionDetector.rb +2 -1
- data/test/test_Export-Reports.rb +128 -0
- data/test/test_Journal.rb +2 -1
- data/test/test_Limits.rb +4 -3
- data/test/test_LogicalExpression.rb +2 -1
- data/test/test_MacroTable.rb +8 -6
- data/test/test_Project.rb +2 -1
- data/test/test_ProjectFileScanner.rb +4 -3
- data/test/test_PropertySet.rb +2 -1
- data/test/test_Query.rb +3 -2
- data/test/test_RealFormat.rb +2 -1
- data/test/test_ReportGenerator.rb +3 -2
- data/test/test_RichText.rb +14 -3
- data/test/test_Scheduler.rb +2 -1
- data/test/test_ShiftAssignments.rb +3 -1
- data/test/test_SimpleQueryExpander.rb +3 -2
- data/test/test_Syntax.rb +2 -1
- data/test/test_TextFormatter.rb +2 -1
- data/test/test_TjTime.rb +15 -14
- data/test/test_TjpExample.rb +2 -1
- data/test/test_URLParameter.rb +2 -1
- data/test/test_UTF8String.rb +2 -1
- data/test/test_WorkingHours.rb +3 -2
- data/test/test_deep_copy.rb +2 -1
- metadata +250 -541
- data/README +0 -31
- data/benchmarks/allocatedSlots.csv +0 -334
- data/benchmarks/profile.clt +0 -42974
- data/benchmarks/profile.html +0 -61128
- data/doc/AppConfig.html +0 -1471
- data/doc/Arguments.html +0 -720
- data/doc/CHANGELOG.html +0 -1987
- data/doc/COPYING.html +0 -879
- data/doc/Object.html +0 -1056
- data/doc/README.html +0 -565
- data/doc/RuntimeConfig.html +0 -804
- data/doc/String.html +0 -913
- data/doc/TaskJuggler.html +0 -2512
- data/doc/TaskJuggler/Account.html +0 -733
- data/doc/TaskJuggler/AccountAttribute.html +0 -749
- data/doc/TaskJuggler/AccountScenario.html +0 -692
- data/doc/TaskJuggler/Allocation.html +0 -943
- data/doc/TaskJuggler/AllocationAttribute.html +0 -779
- data/doc/TaskJuggler/AttributeBase.html +0 -1308
- data/doc/TaskJuggler/AttributeDefinition.html +0 -795
- data/doc/TaskJuggler/AttributeOverwrite.html +0 -586
- data/doc/TaskJuggler/BatchProcessor.html +0 -1158
- data/doc/TaskJuggler/Booking.html +0 -839
- data/doc/TaskJuggler/BookingListAttribute.html +0 -749
- data/doc/TaskJuggler/BooleanAttribute.html +0 -749
- data/doc/TaskJuggler/CSVFile.html +0 -1108
- data/doc/TaskJuggler/CellSettingPattern.html +0 -680
- data/doc/TaskJuggler/CellSettingPatternList.html +0 -729
- data/doc/TaskJuggler/Charge.html +0 -757
- data/doc/TaskJuggler/ChargeListAttribute.html +0 -713
- data/doc/TaskJuggler/ChargeSet.html +0 -929
- data/doc/TaskJuggler/ChargeSetListAttribute.html +0 -758
- data/doc/TaskJuggler/CollisionDetector.html +0 -1069
- data/doc/TaskJuggler/ColumnListAttribute.html +0 -713
- data/doc/TaskJuggler/ColumnTable.html +0 -743
- data/doc/TaskJuggler/Daemon.html +0 -798
- data/doc/TaskJuggler/DataCache.html +0 -930
- data/doc/TaskJuggler/DataCacheEntry.html +0 -717
- data/doc/TaskJuggler/DateAttribute.html +0 -717
- data/doc/TaskJuggler/DefinitionListAttribute.html +0 -635
- data/doc/TaskJuggler/DependencyListAttribute.html +0 -753
- data/doc/TaskJuggler/DurationAttribute.html +0 -750
- data/doc/TaskJuggler/FileList.html +0 -731
- data/doc/TaskJuggler/FileRecord.html +0 -682
- data/doc/TaskJuggler/FixnumAttribute.html +0 -671
- data/doc/TaskJuggler/FlagListAttribute.html +0 -749
- data/doc/TaskJuggler/FloatAttribute.html +0 -713
- data/doc/TaskJuggler/FormatListAttribute.html +0 -677
- data/doc/TaskJuggler/GanttChart.html +0 -1467
- data/doc/TaskJuggler/GanttContainer.html +0 -925
- data/doc/TaskJuggler/GanttHeader.html +0 -928
- data/doc/TaskJuggler/GanttHeaderScaleItem.html +0 -742
- data/doc/TaskJuggler/GanttLine.html +0 -1305
- data/doc/TaskJuggler/GanttLoadStack.html +0 -808
- data/doc/TaskJuggler/GanttMilestone.html +0 -906
- data/doc/TaskJuggler/GanttRouter.html +0 -1118
- data/doc/TaskJuggler/GanttTaskBar.html +0 -927
- data/doc/TaskJuggler/HTMLDocument.html +0 -761
- data/doc/TaskJuggler/HTMLGraphics.html +0 -817
- data/doc/TaskJuggler/Interval.html +0 -1056
- data/doc/TaskJuggler/IntervalList.html +0 -777
- data/doc/TaskJuggler/IntervalListAttribute.html +0 -753
- data/doc/TaskJuggler/JobInfo.html +0 -923
- data/doc/TaskJuggler/Journal.html +0 -1158
- data/doc/TaskJuggler/JournalEntry.html +0 -821
- data/doc/TaskJuggler/JournalEntryList.html +0 -1071
- data/doc/TaskJuggler/KeywordArray.html +0 -676
- data/doc/TaskJuggler/KeywordDocumentation.html +0 -1838
- data/doc/TaskJuggler/Limits.html +0 -1016
- data/doc/TaskJuggler/Limits/Limit.html +0 -927
- data/doc/TaskJuggler/LimitsAttribute.html +0 -714
- data/doc/TaskJuggler/ListAttributeBase.html +0 -683
- data/doc/TaskJuggler/Log.html +0 -1143
- data/doc/TaskJuggler/LogFile.html +0 -960
- data/doc/TaskJuggler/LogicalAttribute.html +0 -740
- data/doc/TaskJuggler/LogicalExpression.html +0 -781
- data/doc/TaskJuggler/LogicalExpressionAttribute.html +0 -671
- data/doc/TaskJuggler/LogicalExpressionListAttribute.html +0 -671
- data/doc/TaskJuggler/LogicalFlag.html +0 -723
- data/doc/TaskJuggler/LogicalFunction.html +0 -1306
- data/doc/TaskJuggler/LogicalOperation.html +0 -1124
- data/doc/TaskJuggler/Macro.html +0 -688
- data/doc/TaskJuggler/MacroTable.html +0 -852
- data/doc/TaskJuggler/ManagerResponsibilities.html +0 -716
- data/doc/TaskJuggler/ManagerStatusRecord.html +0 -720
- data/doc/TaskJuggler/Message.html +0 -817
- data/doc/TaskJuggler/MessageHandler.html +0 -1036
- data/doc/TaskJuggler/Navigator.html +0 -922
- data/doc/TaskJuggler/NavigatorElement.html +0 -974
- data/doc/TaskJuggler/NikuProject.html +0 -704
- data/doc/TaskJuggler/NikuReport.html +0 -1449
- data/doc/TaskJuggler/NikuResource.html +0 -674
- data/doc/TaskJuggler/NodeListAttribute.html +0 -635
- data/doc/TaskJuggler/PlaceHolderCell.html +0 -728
- data/doc/TaskJuggler/ProcessIntercom.html +0 -997
- data/doc/TaskJuggler/ProcessIntercomIface.html +0 -753
- data/doc/TaskJuggler/Project.html +0 -3333
- data/doc/TaskJuggler/ProjectBroker.html +0 -1656
- data/doc/TaskJuggler/ProjectBrokerIface.html +0 -831
- data/doc/TaskJuggler/ProjectFileParser.html +0 -2033
- data/doc/TaskJuggler/ProjectFileScanner.html +0 -1816
- data/doc/TaskJuggler/ProjectRecord.html +0 -958
- data/doc/TaskJuggler/ProjectServer.html +0 -1229
- data/doc/TaskJuggler/ProjectServerIface.html +0 -848
- data/doc/TaskJuggler/PropertyAttribute.html +0 -671
- data/doc/TaskJuggler/PropertyList.html +0 -1379
- data/doc/TaskJuggler/PropertySet.html +0 -1799
- data/doc/TaskJuggler/PropertyTreeNode.html +0 -2579
- data/doc/TaskJuggler/Query.html +0 -1663
- data/doc/TaskJuggler/RTFHandlers.html +0 -644
- data/doc/TaskJuggler/RTFNavigator.html +0 -772
- data/doc/TaskJuggler/RTFQuery.html +0 -1040
- data/doc/TaskJuggler/RTFReport.html +0 -800
- data/doc/TaskJuggler/RTFReportLink.html +0 -792
- data/doc/TaskJuggler/RTFWithQuerySupport.html +0 -682
- data/doc/TaskJuggler/RealFormat.html +0 -785
- data/doc/TaskJuggler/RealFormatAttribute.html +0 -635
- data/doc/TaskJuggler/ReferenceAttribute.html +0 -824
- data/doc/TaskJuggler/Report.html +0 -1477
- data/doc/TaskJuggler/ReportBase.html +0 -1246
- data/doc/TaskJuggler/ReportContext.html +0 -816
- data/doc/TaskJuggler/ReportServer.html +0 -1048
- data/doc/TaskJuggler/ReportServerIface.html +0 -882
- data/doc/TaskJuggler/ReportServerRecord.html +0 -761
- data/doc/TaskJuggler/ReportServlet.html +0 -1024
- data/doc/TaskJuggler/ReportTable.html +0 -1159
- data/doc/TaskJuggler/ReportTableCell.html +0 -1646
- data/doc/TaskJuggler/ReportTableColumn.html +0 -870
- data/doc/TaskJuggler/ReportTableLegend.html +0 -1040
- data/doc/TaskJuggler/ReportTableLine.html +0 -1047
- data/doc/TaskJuggler/Resource.html +0 -972
- data/doc/TaskJuggler/ResourceListAttribute.html +0 -810
- data/doc/TaskJuggler/ResourceListRE.html +0 -717
- data/doc/TaskJuggler/ResourceScenario.html +0 -2599
- data/doc/TaskJuggler/RichText.html +0 -859
- data/doc/TaskJuggler/RichTextAttribute.html +0 -785
- data/doc/TaskJuggler/RichTextDocument.html +0 -1018
- data/doc/TaskJuggler/RichTextElement.html +0 -1754
- data/doc/TaskJuggler/RichTextFunctionExample.html +0 -779
- data/doc/TaskJuggler/RichTextFunctionHandler.html +0 -730
- data/doc/TaskJuggler/RichTextImage.html +0 -692
- data/doc/TaskJuggler/RichTextIntermediate.html +0 -1265
- data/doc/TaskJuggler/RichTextParser.html +0 -847
- data/doc/TaskJuggler/RichTextScanner.html +0 -1469
- data/doc/TaskJuggler/RichTextSnip.html +0 -980
- data/doc/TaskJuggler/RichTextSyntaxRules.html +0 -2018
- data/doc/TaskJuggler/Scenario.html +0 -636
- data/doc/TaskJuggler/ScenarioData.html +0 -818
- data/doc/TaskJuggler/ScenarioListAttribute.html +0 -713
- data/doc/TaskJuggler/Scoreboard.html +0 -1181
- data/doc/TaskJuggler/SheetHandlerBase.html +0 -1275
- data/doc/TaskJuggler/SheetReceiver.html +0 -1368
- data/doc/TaskJuggler/SheetSender.html +0 -1134
- data/doc/TaskJuggler/Shift.html +0 -731
- data/doc/TaskJuggler/ShiftAssignment.html +0 -988
- data/doc/TaskJuggler/ShiftAssignments.html +0 -1393
- data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +0 -714
- data/doc/TaskJuggler/ShiftScenario.html +0 -762
- data/doc/TaskJuggler/SimpleQueryExpander.html +0 -713
- data/doc/TaskJuggler/SortListAttribute.html +0 -671
- data/doc/TaskJuggler/SourceFileInfo.html +0 -740
- data/doc/TaskJuggler/StatusSheetReceiver.html +0 -658
- data/doc/TaskJuggler/StatusSheetReport.html +0 -910
- data/doc/TaskJuggler/StatusSheetSender.html +0 -788
- data/doc/TaskJuggler/StringAttribute.html +0 -713
- data/doc/TaskJuggler/SymbolAttribute.html +0 -671
- data/doc/TaskJuggler/SyntaxReference.html +0 -1220
- data/doc/TaskJuggler/TOCEntry.html +0 -816
- data/doc/TaskJuggler/TSResourceRecord.html +0 -712
- data/doc/TaskJuggler/TSTaskRecord.html +0 -724
- data/doc/TaskJuggler/TableColumnDefinition.html +0 -928
- data/doc/TaskJuggler/TableOfContents.html +0 -770
- data/doc/TaskJuggler/TableReport.html +0 -2533
- data/doc/TaskJuggler/Task.html +0 -865
- data/doc/TaskJuggler/TaskDependency.html +0 -772
- data/doc/TaskJuggler/TaskListAttribute.html +0 -753
- data/doc/TaskJuggler/TaskListRE.html +0 -716
- data/doc/TaskJuggler/TaskScenario.html +0 -4959
- data/doc/TaskJuggler/TextFormatter.html +0 -953
- data/doc/TaskJuggler/TextParser.html +0 -1773
- data/doc/TaskJuggler/TextParser/Pattern.html +0 -1717
- data/doc/TaskJuggler/TextParser/Rule.html +0 -1399
- data/doc/TaskJuggler/TextParser/StackElement.html +0 -922
- data/doc/TaskJuggler/TextParser/State.html +0 -995
- data/doc/TaskJuggler/TextParser/StateTransition.html +0 -788
- data/doc/TaskJuggler/TextParser/TextParserResultArray.html +0 -691
- data/doc/TaskJuggler/TextParser/TokenDoc.html +0 -722
- data/doc/TaskJuggler/TextReport.html +0 -901
- data/doc/TaskJuggler/TextScanner.html +0 -1482
- data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +0 -641
- data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +0 -707
- data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +0 -704
- data/doc/TaskJuggler/TextScanner/StreamHandle.html +0 -1036
- data/doc/TaskJuggler/TimeSheet.html +0 -1232
- data/doc/TaskJuggler/TimeSheetReceiver.html +0 -655
- data/doc/TaskJuggler/TimeSheetRecord.html +0 -1395
- data/doc/TaskJuggler/TimeSheetReport.html +0 -991
- data/doc/TaskJuggler/TimeSheetSender.html +0 -680
- data/doc/TaskJuggler/TimeSheetSummary.html +0 -935
- data/doc/TaskJuggler/TimeSheets.html +0 -716
- data/doc/TaskJuggler/Tj3AppBase.html +0 -831
- data/doc/TaskJuggler/Tj3Client.html +0 -1477
- data/doc/TaskJuggler/Tj3Daemon.html +0 -884
- data/doc/TaskJuggler/Tj3SheetAppBase.html +0 -738
- data/doc/TaskJuggler/Tj3SsReceiver.html +0 -724
- data/doc/TaskJuggler/Tj3SsSender.html +0 -757
- data/doc/TaskJuggler/Tj3TsReceiver.html +0 -724
- data/doc/TaskJuggler/Tj3TsSender.html +0 -744
- data/doc/TaskJuggler/Tj3TsSummary.html +0 -752
- data/doc/TaskJuggler/TjException.html +0 -672
- data/doc/TaskJuggler/TjTime.html +0 -2807
- data/doc/TaskJuggler/TjpExample.html +0 -877
- data/doc/TaskJuggler/TjpExportRE.html +0 -1598
- data/doc/TaskJuggler/TjpSyntaxRules.html +0 -13611
- data/doc/TaskJuggler/URLParameter.html +0 -671
- data/doc/TaskJuggler/UserManual.html +0 -1188
- data/doc/TaskJuggler/VimSyntax.html +0 -1044
- data/doc/TaskJuggler/WebServer.html +0 -737
- data/doc/TaskJuggler/WelcomePage.html +0 -769
- data/doc/TaskJuggler/WorkingHours.html +0 -1207
- data/doc/TaskJuggler/WorkingHoursAttribute.html +0 -736
- data/doc/TaskJuggler/XMLBlob.html +0 -687
- data/doc/TaskJuggler/XMLComment.html +0 -682
- data/doc/TaskJuggler/XMLDocument.html +0 -774
- data/doc/TaskJuggler/XMLElement.html +0 -942
- data/doc/TaskJuggler/XMLNamedText.html +0 -643
- data/doc/TaskJuggler/XMLText.html +0 -697
- data/doc/index.html +0 -4127
- data/doc/lib/AccountScenario_rb.html +0 -69
- data/doc/lib/Account_rb.html +0 -71
- data/doc/lib/Allocation_rb.html +0 -71
- data/doc/lib/AppConfig_rb.html +0 -71
- data/doc/lib/AttributeBase_rb.html +0 -69
- data/doc/lib/AttributeDefinition_rb.html +0 -67
- data/doc/lib/Attributes_rb.html +0 -83
- data/doc/lib/BatchProcessor_rb.html +0 -71
- data/doc/lib/Booking_rb.html +0 -67
- data/doc/lib/ChargeSet_rb.html +0 -69
- data/doc/lib/Charge_rb.html +0 -69
- data/doc/lib/DataCache_rb.html +0 -71
- data/doc/lib/FileList_rb.html +0 -67
- data/doc/lib/HTMLDocument_rb.html +0 -69
- data/doc/lib/IntervalList_rb.html +0 -69
- data/doc/lib/Interval_rb.html +0 -69
- data/doc/lib/Journal_rb.html +0 -67
- data/doc/lib/KeywordArray_rb.html +0 -67
- data/doc/lib/KeywordDocumentation_rb.html +0 -77
- data/doc/lib/Limits_rb.html +0 -69
- data/doc/lib/LogFile_rb.html +0 -69
- data/doc/lib/Log_rb.html +0 -71
- data/doc/lib/LogicalExpression_rb.html +0 -73
- data/doc/lib/LogicalFunction_rb.html +0 -69
- data/doc/lib/LogicalOperation_rb.html +0 -69
- data/doc/lib/MacroTable_rb.html +0 -73
- data/doc/lib/MessageHandler_rb.html +0 -67
- data/doc/lib/ProjectFileParser_rb.html +0 -77
- data/doc/lib/ProjectFileScanner_rb.html +0 -69
- data/doc/lib/Project_rb.html +0 -113
- data/doc/lib/PropertyList_rb.html +0 -67
- data/doc/lib/PropertySet_rb.html +0 -71
- data/doc/lib/PropertyTreeNode_rb.html +0 -67
- data/doc/lib/Query_rb.html +0 -69
- data/doc/lib/RTFHandlers_rb.html +0 -75
- data/doc/lib/RTFNavigator_rb.html +0 -73
- data/doc/lib/RTFQuery_rb.html +0 -73
- data/doc/lib/RTFReportLink_rb.html +0 -75
- data/doc/lib/RTFReport_rb.html +0 -71
- data/doc/lib/RTFWithQuerySupport_rb.html +0 -69
- data/doc/lib/RealFormat_rb.html +0 -67
- data/doc/lib/ResourceScenario_rb.html +0 -69
- data/doc/lib/Resource_rb.html +0 -71
- data/doc/lib/RichTextDocument_rb.html +0 -73
- data/doc/lib/RichTextElement_rb.html +0 -75
- data/doc/lib/RichTextFunctionExample_rb.html +0 -73
- data/doc/lib/RichTextFunctionHandler_rb.html +0 -67
- data/doc/lib/RichTextParser_rb.html +0 -73
- data/doc/lib/RichTextScanner_rb.html +0 -71
- data/doc/lib/RichTextSnip_rb.html +0 -71
- data/doc/lib/RichTextSyntaxRules_rb.html +0 -67
- data/doc/lib/RichText_rb.html +0 -73
- data/doc/lib/RuntimeConfig_rb.html +0 -69
- data/doc/lib/ScenarioData_rb.html +0 -71
- data/doc/lib/Scenario_rb.html +0 -69
- data/doc/lib/Scoreboard_rb.html +0 -69
- data/doc/lib/SheetHandlerBase_rb.html +0 -75
- data/doc/lib/SheetReceiver_rb.html +0 -79
- data/doc/lib/SheetSender_rb.html +0 -77
- data/doc/lib/ShiftAssignments_rb.html +0 -71
- data/doc/lib/ShiftScenario_rb.html +0 -69
- data/doc/lib/Shift_rb.html +0 -71
- data/doc/lib/SimpleQueryExpander_rb.html +0 -69
- data/doc/lib/SourceFileInfo_rb.html +0 -67
- data/doc/lib/StatusSheetReceiver_rb.html +0 -69
- data/doc/lib/StatusSheetSender_rb.html +0 -69
- data/doc/lib/SyntaxReference_rb.html +0 -75
- data/doc/lib/TOCEntry_rb.html +0 -71
- data/doc/lib/TableColumnDefinition_rb.html +0 -67
- data/doc/lib/TableOfContents_rb.html +0 -71
- data/doc/lib/TaskDependency_rb.html +0 -67
- data/doc/lib/TaskJuggler_rb.html +0 -75
- data/doc/lib/TaskScenario_rb.html +0 -71
- data/doc/lib/Task_rb.html +0 -71
- data/doc/lib/TextFormatter_rb.html +0 -69
- data/doc/lib/TextParser/Pattern_rb.html +0 -71
- data/doc/lib/TextParser/Rule_rb.html +0 -69
- data/doc/lib/TextParser/StackElement_rb.html +0 -69
- data/doc/lib/TextParser/State_rb.html +0 -67
- data/doc/lib/TextParser/TokenDoc_rb.html +0 -67
- data/doc/lib/TextParser_rb.html +0 -79
- data/doc/lib/TextScanner_rb.html +0 -83
- data/doc/lib/TimeSheetReceiver_rb.html +0 -69
- data/doc/lib/TimeSheetSender_rb.html +0 -69
- data/doc/lib/TimeSheetSummary_rb.html +0 -69
- data/doc/lib/TimeSheets_rb.html +0 -67
- data/doc/lib/Tj3AppBase_rb.html +0 -79
- data/doc/lib/Tj3Config_rb.html +0 -71
- data/doc/lib/Tj3SheetAppBase_rb.html +0 -69
- data/doc/lib/TjException_rb.html +0 -67
- data/doc/lib/TjTime_rb.html +0 -71
- data/doc/lib/TjpExample_rb.html +0 -69
- data/doc/lib/TjpSyntaxRules_rb.html +0 -67
- data/doc/lib/URLParameter_rb.html +0 -69
- data/doc/lib/UTF8String_rb.html +0 -67
- data/doc/lib/UserManual_rb.html +0 -79
- data/doc/lib/VimSyntax_rb.html +0 -69
- data/doc/lib/WorkingHours_rb.html +0 -71
- data/doc/lib/XMLDocument_rb.html +0 -69
- data/doc/lib/XMLElement_rb.html +0 -69
- data/doc/lib/daemon/Daemon_rb.html +0 -69
- data/doc/lib/daemon/ProcessIntercom_rb.html +0 -71
- data/doc/lib/daemon/ProjectBroker_rb.html +0 -83
- data/doc/lib/daemon/ProjectServer_rb.html +0 -85
- data/doc/lib/daemon/ReportServer_rb.html +0 -73
- data/doc/lib/daemon/ReportServlet_rb.html +0 -69
- data/doc/lib/daemon/WebServer_rb.html +0 -81
- data/doc/lib/daemon/WelcomePage_rb.html +0 -71
- data/doc/lib/deep_copy_rb.html +0 -67
- data/doc/lib/exchangebug_rb.html +0 -69
- data/doc/lib/reports/CSVFile_rb.html +0 -69
- data/doc/lib/reports/CollisionDetector_rb.html +0 -69
- data/doc/lib/reports/ColumnTable_rb.html +0 -69
- data/doc/lib/reports/GanttChart_rb.html +0 -75
- data/doc/lib/reports/GanttContainer_rb.html +0 -69
- data/doc/lib/reports/GanttHeaderScaleItem_rb.html +0 -67
- data/doc/lib/reports/GanttHeader_rb.html +0 -69
- data/doc/lib/reports/GanttLine_rb.html +0 -79
- data/doc/lib/reports/GanttLoadStack_rb.html +0 -69
- data/doc/lib/reports/GanttMilestone_rb.html +0 -69
- data/doc/lib/reports/GanttRouter_rb.html +0 -69
- data/doc/lib/reports/GanttTaskBar_rb.html +0 -69
- data/doc/lib/reports/HTMLGraphics_rb.html +0 -67
- data/doc/lib/reports/Navigator_rb.html +0 -69
- data/doc/lib/reports/NikuReport_rb.html +0 -71
- data/doc/lib/reports/ReportBase_rb.html +0 -67
- data/doc/lib/reports/ReportContext_rb.html +0 -67
- data/doc/lib/reports/ReportTableCell_rb.html +0 -67
- data/doc/lib/reports/ReportTableColumn_rb.html +0 -67
- data/doc/lib/reports/ReportTableLegend_rb.html +0 -67
- data/doc/lib/reports/ReportTableLine_rb.html +0 -69
- data/doc/lib/reports/ReportTable_rb.html +0 -71
- data/doc/lib/reports/Report_rb.html +0 -93
- data/doc/lib/reports/ResourceListRE_rb.html +0 -75
- data/doc/lib/reports/StatusSheetReport_rb.html +0 -69
- data/doc/lib/reports/TableReport_rb.html +0 -77
- data/doc/lib/reports/TaskListRE_rb.html +0 -75
- data/doc/lib/reports/TextReport_rb.html +0 -69
- data/doc/lib/reports/TimeSheetReport_rb.html +0 -69
- data/doc/lib/reports/TjpExportRE_rb.html +0 -69
- data/doc/lib/ruby-signal-bug_rb.html +0 -69
- data/doc/lib/test_rb.html +0 -73
- data/doc/lib/tj3_rb.html +0 -75
- data/doc/lib/tj3client_rb.html +0 -75
- data/doc/lib/tj3d_rb.html +0 -75
- data/doc/lib/tj3man_rb.html +0 -75
- data/doc/lib/tj3ss_receiver_rb.html +0 -71
- data/doc/lib/tj3ss_sender_rb.html +0 -71
- data/doc/lib/tj3ts_receiver_rb.html +0 -71
- data/doc/lib/tj3ts_sender_rb.html +0 -71
- data/doc/lib/tj3ts_summary_rb.html +0 -71
- data/doc/rdoc.css +0 -706
- data/lib/test.rb +0 -19
- data/setup.rb +0 -1585
- data/test/TestSuite/CSV-Reports/genrefs +0 -6
- data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -2922
- data/test/TestSuite/Scheduler/Correct/Booking2.html +0 -603
- data/test/TestSuite/Scheduler/Correct/Container.html +0 -513
- data/test/TestSuite/Scheduler/Correct/Precedes.html +0 -834
- data/test/TestSuite/Scheduler/Correct/Shift.html +0 -429
- data/test/TestSuite/Scheduler/Correct/Shift2.html +0 -476
- data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +0 -108
- data/test/TestSuite/Scheduler/Errors/task_underspecified_2.tjp +0 -8
- data/test/TestSuite/Syntax/Correct/ReleasePlan.html +0 -160
- data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +0 -32
- data/test/TestSuite/Syntax/Correct/ResourceRoot.html +0 -108
- data/test/TestSuite/Syntax/Correct/niku.html +0 -67
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
# published by the Free Software Foundation.
|
|
12
12
|
#
|
|
13
13
|
|
|
14
|
-
require 'ScenarioData'
|
|
15
|
-
require 'DataCache'
|
|
14
|
+
require 'taskjuggler/ScenarioData'
|
|
15
|
+
require 'taskjuggler/DataCache'
|
|
16
16
|
|
|
17
17
|
class TaskJuggler
|
|
18
18
|
|
|
@@ -56,23 +56,13 @@ class TaskJuggler
|
|
|
56
56
|
@startPropagated = false
|
|
57
57
|
@endPropagated = false
|
|
58
58
|
|
|
59
|
-
# Inheriting start or end values is a bit tricky. This should really only
|
|
60
|
-
# happen if the task is a leaf task and scheduled away from the specified
|
|
61
|
-
# date. Since the default meachanism inherites all values, we have to
|
|
62
|
-
# delete the wrong ones again.
|
|
63
|
-
unless @property.provided('start', @scenarioIdx)
|
|
64
|
-
@property['start', @scenarioIdx] = nil
|
|
65
|
-
end
|
|
66
|
-
unless @property.provided('end', @scenarioIdx)
|
|
67
|
-
@property['end', @scenarioIdx] = nil
|
|
68
|
-
end
|
|
69
|
-
|
|
70
59
|
# Milestones may only have start or end date even when the 'scheduled'
|
|
71
60
|
# attribute is set. For further processing, we need to add the missing
|
|
72
61
|
# date.
|
|
73
62
|
if a('milestone') && a('scheduled')
|
|
74
63
|
@property['end', @scenarioIdx] = a('start') if a('start') && !a('end')
|
|
75
64
|
@property['start', @scenarioIdx] = a('end') if !a('start') && a('end')
|
|
65
|
+
Log << "Milestone #{@property.fullId}: #{a('start')} -> #{a('end')}"
|
|
76
66
|
end
|
|
77
67
|
|
|
78
68
|
# Collect the limits of this task and all parent tasks into a single
|
|
@@ -136,7 +126,7 @@ class TaskJuggler
|
|
|
136
126
|
if a('start')
|
|
137
127
|
propagateDate(a('start'), false)
|
|
138
128
|
elsif @property.parent.nil? &&
|
|
139
|
-
|
|
129
|
+
@property.canInheritDate?(@scenarioIdx, false)
|
|
140
130
|
propagateDate(@project['start'], false)
|
|
141
131
|
end
|
|
142
132
|
end
|
|
@@ -145,7 +135,7 @@ class TaskJuggler
|
|
|
145
135
|
if a('end')
|
|
146
136
|
propagateDate(a('end'), true)
|
|
147
137
|
elsif @property.parent.nil? &&
|
|
148
|
-
|
|
138
|
+
@property.canInheritDate?(@scenarioIdx, true)
|
|
149
139
|
propagateDate(@project['end'], true)
|
|
150
140
|
end
|
|
151
141
|
end
|
|
@@ -325,14 +315,16 @@ class TaskJuggler
|
|
|
325
315
|
|
|
326
316
|
a('startsuccs').each do |task, onEnd|
|
|
327
317
|
unless task['forward', @scenarioIdx]
|
|
328
|
-
task.error(
|
|
329
|
-
|
|
318
|
+
task.data[@scenarioIdx].error(
|
|
319
|
+
'onstart_wrong_direction',
|
|
320
|
+
'Tasks with on-start dependencies must be ASAP scheduled')
|
|
330
321
|
end
|
|
331
322
|
end
|
|
332
323
|
a('endpreds').each do |task, onEnd|
|
|
333
324
|
if task['forward', @scenarioIdx]
|
|
334
|
-
task.error(
|
|
335
|
-
|
|
325
|
+
task.data[@scenarioIdx].error(
|
|
326
|
+
'onend_wrong_direction',
|
|
327
|
+
'Tasks with on-end dependencies must be ALAP scheduled')
|
|
336
328
|
end
|
|
337
329
|
end
|
|
338
330
|
end
|
|
@@ -536,37 +528,6 @@ class TaskJuggler
|
|
|
536
528
|
"end date.")
|
|
537
529
|
end
|
|
538
530
|
|
|
539
|
-
if !a('fail').empty? || !a('warn').empty?
|
|
540
|
-
queryAttrs = { 'project' => @project,
|
|
541
|
-
'scenarioIdx' => @scenarioIdx,
|
|
542
|
-
'property' => @property,
|
|
543
|
-
'scopeProperty' => nil,
|
|
544
|
-
'start' => @project['start'],
|
|
545
|
-
'end' => @project['end'],
|
|
546
|
-
'loadUnit' => :days,
|
|
547
|
-
'numberFormat' => @project['numberFormat'],
|
|
548
|
-
'timeFormat' => @project['timeFormat'],
|
|
549
|
-
'currencyFormat' => @project['currencyFormat'] }
|
|
550
|
-
query = Query.new(queryAttrs)
|
|
551
|
-
a('fail').each do |expr|
|
|
552
|
-
if expr.eval(query)
|
|
553
|
-
error('task_fail_check',
|
|
554
|
-
"User defined check failed for task #{@property.fullId} \n" +
|
|
555
|
-
"Condition: #{expr.to_s}\n" +
|
|
556
|
-
"Result: #{expr.to_s(query)}")
|
|
557
|
-
end
|
|
558
|
-
end
|
|
559
|
-
a('warn').each do |expr|
|
|
560
|
-
if expr.eval(query)
|
|
561
|
-
warning('task_warn_check',
|
|
562
|
-
"User defined warning triggered for task " +
|
|
563
|
-
"#{@property.fullId} \n" +
|
|
564
|
-
"Condition: #{expr.to_s}\n" +
|
|
565
|
-
"Result: #{expr.to_s(query)}")
|
|
566
|
-
end
|
|
567
|
-
end
|
|
568
|
-
end
|
|
569
|
-
|
|
570
531
|
@errors == 0
|
|
571
532
|
end
|
|
572
533
|
|
|
@@ -918,9 +879,11 @@ class TaskJuggler
|
|
|
918
879
|
|
|
919
880
|
# Set a new start or end date and propagate the value to all other
|
|
920
881
|
# task ends that have a direct dependency to this end of the task.
|
|
921
|
-
def propagateDate(date, atEnd)
|
|
882
|
+
def propagateDate(date, atEnd, ignoreEffort = false)
|
|
922
883
|
thisEnd = atEnd ? 'end' : 'start'
|
|
923
884
|
otherEnd = atEnd ? 'start' : 'end'
|
|
885
|
+
#puts "Propagating #{thisEnd} date #{date} of #{@property.fullId} " +
|
|
886
|
+
# "#{ignoreEffort ? "ignoring effort" : "" }"
|
|
924
887
|
|
|
925
888
|
# These flags are just used to avoid duplicate calls of this function
|
|
926
889
|
# during propagateInitialValues().
|
|
@@ -948,20 +911,30 @@ class TaskJuggler
|
|
|
948
911
|
!(a('length') == 0 && a('duration') == 0 && a('effort') == 0 &&
|
|
949
912
|
!a('allocate').empty?)
|
|
950
913
|
@property['scheduled', @scenarioIdx] = true
|
|
914
|
+
Log << "Task #{@property.fullId} has been scheduled"
|
|
951
915
|
end
|
|
952
916
|
|
|
953
917
|
# Propagate date to all dependent tasks. Don't do this for start
|
|
954
918
|
# successors or end predecessors if this task is effort based. In this
|
|
955
919
|
# case, the date might still change to align with the first/last
|
|
956
|
-
# allocation. In these cases,
|
|
920
|
+
# allocation. In these cases, bookResource() has to propagate the final
|
|
957
921
|
# date.
|
|
958
|
-
|
|
959
|
-
a(
|
|
922
|
+
if atEnd
|
|
923
|
+
if ignoreEffort || a('effort') == 0
|
|
924
|
+
a('endpreds').each do |task, onEnd|
|
|
925
|
+
propagateDateToDep(task, onEnd)
|
|
926
|
+
end
|
|
927
|
+
end
|
|
928
|
+
a('endsuccs').each do |task, onEnd|
|
|
960
929
|
propagateDateToDep(task, onEnd)
|
|
961
930
|
end
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
931
|
+
else
|
|
932
|
+
if ignoreEffort || a('effort') == 0
|
|
933
|
+
a('startsuccs').each do |task, onEnd|
|
|
934
|
+
propagateDateToDep(task, onEnd)
|
|
935
|
+
end
|
|
936
|
+
end
|
|
937
|
+
a('startpreds').each do |task, onEnd|
|
|
965
938
|
propagateDateToDep(task, onEnd)
|
|
966
939
|
end
|
|
967
940
|
end
|
|
@@ -977,9 +950,12 @@ class TaskJuggler
|
|
|
977
950
|
|
|
978
951
|
# The date propagation might have completed the date set of the enclosing
|
|
979
952
|
# containter task. If so, we can schedule it as well.
|
|
980
|
-
@property.
|
|
953
|
+
@property.parents.each do |parent|
|
|
954
|
+
parent.scheduleContainer(@scenarioIdx)
|
|
955
|
+
end
|
|
981
956
|
end
|
|
982
957
|
|
|
958
|
+
|
|
983
959
|
# This function determines if a task can inherit the start or end date
|
|
984
960
|
# from a parent task or the project time frame. +atEnd+ specifies whether
|
|
985
961
|
# the check should be done for the task end (true) or task start (false).
|
|
@@ -1001,13 +977,13 @@ class TaskJuggler
|
|
|
1001
977
|
thisEnd, thatEnd = atEnd ? [ 'end', 'start' ] : [ 'start', 'end' ]
|
|
1002
978
|
# Return false if we already have a date for this end or if we have a
|
|
1003
979
|
# strong dependency for this end.
|
|
1004
|
-
return false if a(thisEnd) || hasStrongDeps(
|
|
980
|
+
return false if a(thisEnd) || hasStrongDeps(atEnd)
|
|
1005
981
|
|
|
1006
982
|
# Containter task can inherit the date if they have no dependencies at
|
|
1007
983
|
# this end.
|
|
1008
984
|
return true if @property.container?
|
|
1009
985
|
|
|
1010
|
-
hasThatSpec = a(thatEnd) || hasStrongDeps(
|
|
986
|
+
hasThatSpec = a(thatEnd) || hasStrongDeps(!atEnd)
|
|
1011
987
|
hasDurationSpec = hasDurationSpec?
|
|
1012
988
|
|
|
1013
989
|
# Check for tasks that have no start and end spec, no duration spec but
|
|
@@ -1034,9 +1010,13 @@ class TaskJuggler
|
|
|
1034
1010
|
nStart = nil
|
|
1035
1011
|
nEnd = nil
|
|
1036
1012
|
|
|
1037
|
-
@property.
|
|
1038
|
-
# Abort if a child has not yet been scheduled.
|
|
1039
|
-
|
|
1013
|
+
@property.kids.each do |task|
|
|
1014
|
+
# Abort if a child has not yet been scheduled. Since we haven't done
|
|
1015
|
+
# the consistency check yet, we can't rely on start and end being set
|
|
1016
|
+
# if 'scheduled' is set.
|
|
1017
|
+
return if (!task['scheduled', @scenarioIdx] ||
|
|
1018
|
+
task['start', @scenarioIdx].nil? ||
|
|
1019
|
+
task['end', @scenarioIdx].nil?)
|
|
1040
1020
|
|
|
1041
1021
|
if nStart.nil? || task['start', @scenarioIdx] < nStart
|
|
1042
1022
|
nStart = task['start', @scenarioIdx]
|
|
@@ -1060,7 +1040,7 @@ class TaskJuggler
|
|
|
1060
1040
|
raise "Start (#{a('start')}) and end (#{a('end')}) must be set"
|
|
1061
1041
|
end
|
|
1062
1042
|
@property['scheduled', @scenarioIdx] = true
|
|
1063
|
-
Log << "Container task #{@property.fullId}: #{a('start')} -> #{a('end')}"
|
|
1043
|
+
Log << "Container task #{@property.fullId} completed: #{a('start')} -> #{a('end')}"
|
|
1064
1044
|
|
|
1065
1045
|
# If we have modified the start or end date, we need to communicate this
|
|
1066
1046
|
# new date to surrounding tasks.
|
|
@@ -1178,7 +1158,7 @@ class TaskJuggler
|
|
|
1178
1158
|
# task A precedes B and they are specified this way:
|
|
1179
1159
|
# task A: | --> D-
|
|
1180
1160
|
# task B: -D <-- |
|
|
1181
|
-
if a('start') && endDate > a('start')
|
|
1161
|
+
if a('start') && (endDate.nil? || endDate > a('start'))
|
|
1182
1162
|
error('weak_end_dep',
|
|
1183
1163
|
"Task #{@property.fullId} has a too weak end dependencies " +
|
|
1184
1164
|
"to be scheduled properly.")
|
|
@@ -1188,13 +1168,9 @@ class TaskJuggler
|
|
|
1188
1168
|
end
|
|
1189
1169
|
|
|
1190
1170
|
def addBooking(booking)
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
@property['booking', @scenarioIdx] = [ booking ]
|
|
1195
|
-
else
|
|
1196
|
-
@property['booking', @scenarioIdx] << booking
|
|
1197
|
-
end
|
|
1171
|
+
# This append operation will not trigger a copy to sub-scenarios.
|
|
1172
|
+
# Bookings are only valid for the scenario they are defined in.
|
|
1173
|
+
@property['booking', @scenarioIdx] << booking
|
|
1198
1174
|
end
|
|
1199
1175
|
|
|
1200
1176
|
def query_complete(query)
|
|
@@ -1237,7 +1213,7 @@ class TaskJuggler
|
|
|
1237
1213
|
def query_effortdone(query)
|
|
1238
1214
|
# For this query, we always override the query period.
|
|
1239
1215
|
query.sortable = query.numerical = effort =
|
|
1240
|
-
getEffectiveWork(@project.dateToIdx(@project['start']),
|
|
1216
|
+
getEffectiveWork(@project.dateToIdx(@project['start'], false),
|
|
1241
1217
|
@project.dateToIdx(@project['now']),
|
|
1242
1218
|
query.scopeProperty)
|
|
1243
1219
|
query.string = query.scaleLoad(effort)
|
|
@@ -1249,11 +1225,9 @@ class TaskJuggler
|
|
|
1249
1225
|
# the effort allocated for this resource is taken into account.
|
|
1250
1226
|
def query_effortleft(query)
|
|
1251
1227
|
# For this query, we always override the query period.
|
|
1252
|
-
query.start = @project['now']
|
|
1253
|
-
query.end = @project['end']
|
|
1254
1228
|
query.sortable = query.numerical = effort =
|
|
1255
1229
|
getEffectiveWork(@project.dateToIdx(@project['now']),
|
|
1256
|
-
@project.dateToIdx(@project['end']),
|
|
1230
|
+
@project.dateToIdx(@project['end'], false),
|
|
1257
1231
|
query.scopeProperty)
|
|
1258
1232
|
query.string = query.scaleLoad(effort)
|
|
1259
1233
|
end
|
|
@@ -1377,6 +1351,17 @@ class TaskJuggler
|
|
|
1377
1351
|
query.string = status
|
|
1378
1352
|
end
|
|
1379
1353
|
|
|
1354
|
+
def query_inputs(query)
|
|
1355
|
+
inputList = PropertyList.new(@project.tasks, false)
|
|
1356
|
+
inputs(inputList, true)
|
|
1357
|
+
inputList.delete(@property)
|
|
1358
|
+
inputList.setSorting([['start', true, @scenarioIdx],
|
|
1359
|
+
['seqno', true, -1 ]])
|
|
1360
|
+
inputList.sort!
|
|
1361
|
+
|
|
1362
|
+
query.assignList(generateTaskList(inputList, query.listMode))
|
|
1363
|
+
end
|
|
1364
|
+
|
|
1380
1365
|
def query_targets(query)
|
|
1381
1366
|
targetList = PropertyList.new(@project.tasks, false)
|
|
1382
1367
|
targets(targetList, true)
|
|
@@ -1385,32 +1370,7 @@ class TaskJuggler
|
|
|
1385
1370
|
['seqno', true, -1 ]])
|
|
1386
1371
|
targetList.sort!
|
|
1387
1372
|
|
|
1388
|
-
|
|
1389
|
-
targetList.each do |task|
|
|
1390
|
-
date = task['start', @scenarioIdx].to_s(@property.project['timeFormat'])
|
|
1391
|
-
case query.listMode
|
|
1392
|
-
when 1
|
|
1393
|
-
list << "#{task.fullId}"
|
|
1394
|
-
when 2
|
|
1395
|
-
list << "#{task.name}"
|
|
1396
|
-
when 3
|
|
1397
|
-
list << "#{task.name} (#{task.fullId})"
|
|
1398
|
-
when 4
|
|
1399
|
-
list << "#{task.fullId}: #{task.name}"
|
|
1400
|
-
when 5
|
|
1401
|
-
list << "#{task.fullId} (#{date})"
|
|
1402
|
-
when 6
|
|
1403
|
-
list << "#{task.name} (#{date})"
|
|
1404
|
-
when 7, nil
|
|
1405
|
-
list << "#{task.name} (#{task.fullId}) #{date}"
|
|
1406
|
-
when 8
|
|
1407
|
-
list << "#{task.fullId}: #{task.name} #{date}"
|
|
1408
|
-
else
|
|
1409
|
-
error('bad_listmode_qt',
|
|
1410
|
-
"Bad listmode #{query.listMode}. Use 1 - 8.")
|
|
1411
|
-
end
|
|
1412
|
-
end
|
|
1413
|
-
query.assignList(list)
|
|
1373
|
+
query.assignList(generateTaskList(targetList, query.listMode))
|
|
1414
1374
|
end
|
|
1415
1375
|
|
|
1416
1376
|
|
|
@@ -1424,7 +1384,7 @@ class TaskJuggler
|
|
|
1424
1384
|
@dCache.cached(key) do
|
|
1425
1385
|
allocatedTime = 0.0
|
|
1426
1386
|
if @property.container?
|
|
1427
|
-
@property.
|
|
1387
|
+
@property.kids.each do |task|
|
|
1428
1388
|
allocatedTime += task.getAllocatedTime(@scenarioIdx,
|
|
1429
1389
|
startIdx, endIdx, resource)
|
|
1430
1390
|
end
|
|
@@ -1455,7 +1415,7 @@ class TaskJuggler
|
|
|
1455
1415
|
@dCache.cached(key) do
|
|
1456
1416
|
workLoad = 0.0
|
|
1457
1417
|
if @property.container?
|
|
1458
|
-
@property.
|
|
1418
|
+
@property.kids.each do |task|
|
|
1459
1419
|
workLoad += task.getEffectiveWork(@scenarioIdx, startIdx, endIdx,
|
|
1460
1420
|
resource)
|
|
1461
1421
|
end
|
|
@@ -1499,7 +1459,7 @@ class TaskJuggler
|
|
|
1499
1459
|
il &= @project.collectTimeOffIntervals(iv, minDuration)
|
|
1500
1460
|
end
|
|
1501
1461
|
else
|
|
1502
|
-
@property.
|
|
1462
|
+
@property.kids.each do |task|
|
|
1503
1463
|
il &= task.collectTimeOffIntervals(@scenarioIdx, iv, minDuration)
|
|
1504
1464
|
end
|
|
1505
1465
|
end
|
|
@@ -1565,7 +1525,7 @@ class TaskJuggler
|
|
|
1565
1525
|
if @property.leaf?
|
|
1566
1526
|
return resource.allocated?(@scenarioIdx, interval, @property)
|
|
1567
1527
|
else
|
|
1568
|
-
@property.
|
|
1528
|
+
@property.kids.each do |t|
|
|
1569
1529
|
return true if t.hasResourceAllocated?(@scenarioIdx, interval,
|
|
1570
1530
|
resource)
|
|
1571
1531
|
end
|
|
@@ -1629,9 +1589,9 @@ class TaskJuggler
|
|
|
1629
1589
|
# The specified effort has been reached. The task has been fully
|
|
1630
1590
|
# scheduled now.
|
|
1631
1591
|
if a('forward')
|
|
1632
|
-
propagateDate(@tentativeEnd, true)
|
|
1592
|
+
propagateDate(@tentativeEnd, true, true)
|
|
1633
1593
|
else
|
|
1634
|
-
propagateDate(@tentativeStart, false)
|
|
1594
|
+
propagateDate(@tentativeStart, false, true)
|
|
1635
1595
|
end
|
|
1636
1596
|
return true
|
|
1637
1597
|
end
|
|
@@ -1648,7 +1608,9 @@ class TaskJuggler
|
|
|
1648
1608
|
# For start-end-tasks without allocation, we don't have to do
|
|
1649
1609
|
# anything but to set the 'scheduled' flag.
|
|
1650
1610
|
@property['scheduled', @scenarioIdx] = true
|
|
1651
|
-
@property.
|
|
1611
|
+
@property.parents.each do |parent|
|
|
1612
|
+
parent.scheduleContainer(@scenarioIdx)
|
|
1613
|
+
end
|
|
1652
1614
|
return true
|
|
1653
1615
|
end
|
|
1654
1616
|
|
|
@@ -1659,7 +1621,9 @@ class TaskJuggler
|
|
|
1659
1621
|
if (a('forward') && slot + slotDuration >= a('end')) ||
|
|
1660
1622
|
(!a('forward') && slot <= a('start'))
|
|
1661
1623
|
@property['scheduled', @scenarioIdx] = true
|
|
1662
|
-
@property.
|
|
1624
|
+
@property.parents.each do |parent|
|
|
1625
|
+
parent.scheduleContainer(@scenarioIdx)
|
|
1626
|
+
end
|
|
1663
1627
|
return true
|
|
1664
1628
|
end
|
|
1665
1629
|
end
|
|
@@ -1705,7 +1669,7 @@ class TaskJuggler
|
|
|
1705
1669
|
# sure that none of them is already exceeded.
|
|
1706
1670
|
return unless limitsOk?(date)
|
|
1707
1671
|
|
|
1708
|
-
sbIdx = @project.dateToIdx(date)
|
|
1672
|
+
sbIdx = @project.dateToIdx(date, false)
|
|
1709
1673
|
|
|
1710
1674
|
# We first have to make sure that if there are mandatory resources
|
|
1711
1675
|
# that these are all available for the time slot.
|
|
@@ -1772,17 +1736,23 @@ class TaskJuggler
|
|
|
1772
1736
|
!limitsOk?(date, resource)
|
|
1773
1737
|
|
|
1774
1738
|
if r.book(@scenarioIdx, sbIdx, @property)
|
|
1775
|
-
|
|
1739
|
+
# For effort based task we adjust the the start end (as defined by
|
|
1740
|
+
# the scheduling direction) to align with the first booked time
|
|
1741
|
+
# slot.
|
|
1776
1742
|
if a('effort') > 0 && a('assignedresources').empty?
|
|
1777
1743
|
if a('forward')
|
|
1778
1744
|
@property['start', @scenarioIdx] = @project.idxToDate(sbIdx)
|
|
1745
|
+
Log << "Task #{@property.fullId} first assignment: " +
|
|
1746
|
+
"#{a('start')} -> #{a('end')}"
|
|
1779
1747
|
a('startsuccs').each do |task, onEnd|
|
|
1780
|
-
task.propagateDate(@scenarioIdx, a('start'), false)
|
|
1748
|
+
task.propagateDate(@scenarioIdx, a('start'), false, true)
|
|
1781
1749
|
end
|
|
1782
1750
|
else
|
|
1783
1751
|
@property['end', @scenarioIdx] = @project.idxToDate(sbIdx + 1)
|
|
1752
|
+
Log << "Task #{@property.fullId} last assignment: " +
|
|
1753
|
+
"#{a('start')} -> #{a('end')}"
|
|
1784
1754
|
a('endpreds').each do |task, onEnd|
|
|
1785
|
-
task.propagateDate(@scenarioIdx, a('end'), true)
|
|
1755
|
+
task.propagateDate(@scenarioIdx, a('end'), true, true)
|
|
1786
1756
|
end
|
|
1787
1757
|
end
|
|
1788
1758
|
end
|
|
@@ -1846,9 +1816,9 @@ class TaskJuggler
|
|
|
1846
1816
|
"Only forward scheduled tasks may have booking statements.")
|
|
1847
1817
|
end
|
|
1848
1818
|
booking.intervals.each do |interval|
|
|
1849
|
-
startIdx = @project.dateToIdx(interval.start)
|
|
1819
|
+
startIdx = @project.dateToIdx(interval.start, false)
|
|
1850
1820
|
date = interval.start
|
|
1851
|
-
endIdx = @project.dateToIdx(interval.end)
|
|
1821
|
+
endIdx = @project.dateToIdx(interval.end, false)
|
|
1852
1822
|
tEnd = nil
|
|
1853
1823
|
startIdx.upto(endIdx - 1) do |idx|
|
|
1854
1824
|
tEnd = date + slotDuration
|
|
@@ -1863,6 +1833,8 @@ class TaskJuggler
|
|
|
1863
1833
|
@tentativeEnd = tEnd if @tentativeEnd.nil? || @tentativeEnd < tEnd
|
|
1864
1834
|
if !scheduled && (a('start').nil? || date < a('start'))
|
|
1865
1835
|
@property['start', @scenarioIdx] = date
|
|
1836
|
+
Log << "Task #{@property.fullId} first booking: " +
|
|
1837
|
+
"#{a('start')} -> #{a('end')}"
|
|
1866
1838
|
end
|
|
1867
1839
|
|
|
1868
1840
|
unless a('assignedresources').include?(booking.resource)
|
|
@@ -1900,6 +1872,18 @@ class TaskJuggler
|
|
|
1900
1872
|
!a(thisEnd + 'succs').empty? || !a(thisEnd + 'preds').empty?
|
|
1901
1873
|
end
|
|
1902
1874
|
|
|
1875
|
+
# Return true if this task or any of its parent tasks has at least one
|
|
1876
|
+
# predecessor task.
|
|
1877
|
+
def hasPredecessors
|
|
1878
|
+
t = @property
|
|
1879
|
+
while t
|
|
1880
|
+
return true unless t['startpreds', @scenarioIdx].empty?
|
|
1881
|
+
t = t.parent
|
|
1882
|
+
end
|
|
1883
|
+
|
|
1884
|
+
false
|
|
1885
|
+
end
|
|
1886
|
+
|
|
1903
1887
|
# Return true if this task or any of its parent tasks has at least one
|
|
1904
1888
|
# sucessor task.
|
|
1905
1889
|
def hasSuccessors
|
|
@@ -1912,61 +1896,76 @@ class TaskJuggler
|
|
|
1912
1896
|
false
|
|
1913
1897
|
end
|
|
1914
1898
|
|
|
1915
|
-
def hasStrongDeps(
|
|
1899
|
+
def hasStrongDeps(atEnd)
|
|
1916
1900
|
# A dependency that could determine the date on this side of the
|
|
1917
1901
|
# dependency is a strong dependency. If the scheduling direction of the
|
|
1918
1902
|
# task on the other side leads away from the dependency point, then the
|
|
1919
1903
|
# dependency is weak. This date will influence the other date for weak
|
|
1920
|
-
# dependencies.
|
|
1904
|
+
# dependencies. > means ASAP task, < means ALAP task.
|
|
1921
1905
|
#
|
|
1922
|
-
#
|
|
1923
|
-
#
|
|
1924
|
-
#
|
|
1925
|
-
#
|
|
1906
|
+
#
|
|
1907
|
+
# T2 depends on T1 start
|
|
1908
|
+
#
|
|
1909
|
+
# +--- SS -> S> : Weak
|
|
1910
|
+
# |-+ SS -> S< : Weak
|
|
1911
|
+
# +-|- SP -> S> : Strong
|
|
1912
|
+
# | +--- SP -> S< : Strong
|
|
1926
1913
|
# +-|
|
|
1927
1914
|
# +---
|
|
1928
1915
|
#
|
|
1929
1916
|
#
|
|
1930
|
-
#
|
|
1931
|
-
#
|
|
1932
|
-
#
|
|
1933
|
-
#
|
|
1917
|
+
# T2 depends on T1 end
|
|
1918
|
+
# T1 precedes T2 start
|
|
1919
|
+
#
|
|
1920
|
+
# ---+ ES -> S> : Weak
|
|
1921
|
+
# |-+ ES -> S< : Strong
|
|
1922
|
+
# ---+ | SP -> E> : Strong
|
|
1923
|
+
# | +--- SP -> E< : Weak
|
|
1934
1924
|
# +-|
|
|
1935
1925
|
# +---
|
|
1936
1926
|
#
|
|
1937
1927
|
#
|
|
1938
|
-
#
|
|
1939
|
-
#
|
|
1940
|
-
#
|
|
1941
|
-
#
|
|
1942
|
-
#
|
|
1943
|
-
#
|
|
1928
|
+
# T1 precedes T2 end
|
|
1929
|
+
#
|
|
1930
|
+
# ---+ ES -> E> : Strong
|
|
1931
|
+
# +-| ES -> E< : Strong
|
|
1932
|
+
# -|-+ EP -> E> : Weak
|
|
1933
|
+
# ---+ | EP -> E< : Weak
|
|
1934
|
+
# |-+
|
|
1935
|
+
# ---+
|
|
1944
1936
|
#
|
|
1945
1937
|
# All other combinations are illegal and should be caught earlier. So,
|
|
1946
1938
|
# illegal values can be considered don't care values.
|
|
1947
1939
|
#
|
|
1948
|
-
# f/t
|
|
1949
|
-
# SP
|
|
1950
|
-
# SS W
|
|
1951
|
-
# EP x x
|
|
1952
|
-
# ES W S
|
|
1953
|
-
|
|
1940
|
+
# f/t S> S< E> E<
|
|
1941
|
+
# SP S S S W Row 1
|
|
1942
|
+
# SS W W x x Row 2
|
|
1943
|
+
# EP x x W W Row 3
|
|
1944
|
+
# ES W S S S Row 4
|
|
1945
|
+
#
|
|
1946
|
+
# If the other end of the dependency already has a date, it's a strong
|
|
1947
|
+
# dependency no matter how it was set.
|
|
1948
|
+
unless atEnd
|
|
1954
1949
|
# Row 1
|
|
1955
1950
|
a('startpreds').each do |task, onEnd|
|
|
1956
1951
|
if (onEnd && (task['forward', @scenarioIdx] ||
|
|
1957
|
-
task['end', @scenarioIdx])) ||
|
|
1958
|
-
(!onEnd && (task['forward', @scenarioIdx] ||
|
|
1959
|
-
task['start']))
|
|
1952
|
+
task['end', @scenarioIdx])) || !onEnd
|
|
1960
1953
|
return true
|
|
1961
1954
|
end
|
|
1962
1955
|
end
|
|
1956
|
+
# Row 2
|
|
1957
|
+
a('startsuccs').each do |task, onEnd|
|
|
1958
|
+
return true if task[onEnd ? 'end' : 'start', @scenarioIdx]
|
|
1959
|
+
end
|
|
1963
1960
|
else
|
|
1961
|
+
# Row 3
|
|
1962
|
+
a('endpreds').each do |task, onEnd|
|
|
1963
|
+
return true if task[onEnd ? 'end' : 'start', @scenarioIdx]
|
|
1964
|
+
end
|
|
1964
1965
|
# Row 4
|
|
1965
1966
|
a('endsuccs').each do |task, onEnd|
|
|
1966
|
-
if (onEnd && (!task['forward', @scenarioIdx] ||
|
|
1967
|
-
|
|
1968
|
-
(!onEnd && (!task['forward', @scenarioIdx] ||
|
|
1969
|
-
task['start', @scenarioIdx]))
|
|
1967
|
+
if (!onEnd && (!task['forward', @scenarioIdx] ||
|
|
1968
|
+
task['start', @scenarioIdx])) || onEnd
|
|
1970
1969
|
return true
|
|
1971
1970
|
end
|
|
1972
1971
|
end
|
|
@@ -2039,7 +2038,7 @@ class TaskJuggler
|
|
|
2039
2038
|
end
|
|
2040
2039
|
|
|
2041
2040
|
@property[depType, @scenarioIdx].each do |dep|
|
|
2042
|
-
if dep.task == depTask && dep
|
|
2041
|
+
if dep.task == depTask && !dep.equal?(dependency)
|
|
2043
2042
|
# Remove the broken dependency. It could cause trouble later on.
|
|
2044
2043
|
@property[depType, @scenarioIdx].delete(dependency)
|
|
2045
2044
|
error('task_depend_multi',
|
|
@@ -2140,7 +2139,7 @@ class TaskJuggler
|
|
|
2140
2139
|
# For container task the completion degree is the average of the
|
|
2141
2140
|
# sub tasks.
|
|
2142
2141
|
completion = 0.0
|
|
2143
|
-
@property.
|
|
2142
|
+
@property.kids.each do |child|
|
|
2144
2143
|
return nil unless (comp = child.calcCompletion(@scenarioIdx))
|
|
2145
2144
|
completion += comp
|
|
2146
2145
|
end
|
|
@@ -2154,7 +2153,7 @@ class TaskJuggler
|
|
|
2154
2153
|
elsif a('effort') > 0
|
|
2155
2154
|
# Effort based leaf tasks. The completion degree is the percentage
|
|
2156
2155
|
# of effort that has been done already.
|
|
2157
|
-
done = getEffectiveWork(@project.dateToIdx(a('start')),
|
|
2156
|
+
done = getEffectiveWork(@project.dateToIdx(a('start'), false),
|
|
2158
2157
|
@project.dateToIdx(@project['now']))
|
|
2159
2158
|
total = @project.convertToDailyLoad(
|
|
2160
2159
|
a('effort') * @project['scheduleGranularity'])
|
|
@@ -2183,6 +2182,39 @@ class TaskJuggler
|
|
|
2183
2182
|
end
|
|
2184
2183
|
end
|
|
2185
2184
|
|
|
2185
|
+
# Recursively compile a list of Task properties which depend on the
|
|
2186
|
+
# current task.
|
|
2187
|
+
def inputs(list, includeChildren)
|
|
2188
|
+
# Ignore tasks that we have already included in the list.
|
|
2189
|
+
return if list.include?(@property)
|
|
2190
|
+
|
|
2191
|
+
# A target must be a leaf function that has no direct or indirect
|
|
2192
|
+
# (through parent) following tasks. Only milestones are recognized as
|
|
2193
|
+
# targets.
|
|
2194
|
+
if @property.leaf? && !hasPredecessors && a('milestone')
|
|
2195
|
+
list << @property
|
|
2196
|
+
return
|
|
2197
|
+
end
|
|
2198
|
+
|
|
2199
|
+
a('startpreds').each do |t, onEnd|
|
|
2200
|
+
t.inputs(@scenarioIdx, list, false)
|
|
2201
|
+
end
|
|
2202
|
+
|
|
2203
|
+
# Check for indirect predecessors.
|
|
2204
|
+
if @property.parent
|
|
2205
|
+
@property.parent.inputs(@scenarioIdx, list, false)
|
|
2206
|
+
end
|
|
2207
|
+
|
|
2208
|
+
# Also include targets of child tasks. The recursive iteration of child
|
|
2209
|
+
# tasks is limited to the tested task only. The predecessors are not
|
|
2210
|
+
# iterated.
|
|
2211
|
+
if includeChildren
|
|
2212
|
+
@property.kids.each do |child|
|
|
2213
|
+
child.inputs(@scenarioIdx, list, true)
|
|
2214
|
+
end
|
|
2215
|
+
end
|
|
2216
|
+
end
|
|
2217
|
+
|
|
2186
2218
|
# Recursively compile a list of Task properties which depend on the
|
|
2187
2219
|
# current task.
|
|
2188
2220
|
def targets(list, includeChildren)
|
|
@@ -2210,7 +2242,7 @@ class TaskJuggler
|
|
|
2210
2242
|
# tasks is limited to the tested task only. The followers are not
|
|
2211
2243
|
# iterated.
|
|
2212
2244
|
if includeChildren
|
|
2213
|
-
@property.
|
|
2245
|
+
@property.kids.each do |child|
|
|
2214
2246
|
child.targets(@scenarioIdx, list, true)
|
|
2215
2247
|
end
|
|
2216
2248
|
end
|
|
@@ -2224,7 +2256,7 @@ class TaskJuggler
|
|
|
2224
2256
|
def turnover(startIdx, endIdx, account, resource = nil)
|
|
2225
2257
|
amount = 0.0
|
|
2226
2258
|
if @property.container?
|
|
2227
|
-
@property.
|
|
2259
|
+
@property.kids.each do |child|
|
|
2228
2260
|
amount += child.turnover(@scenarioIdx, startIdx, endIdx, account,
|
|
2229
2261
|
resource)
|
|
2230
2262
|
end
|
|
@@ -2310,6 +2342,35 @@ class TaskJuggler
|
|
|
2310
2342
|
"* <nowiki>#{str}</nowiki>"
|
|
2311
2343
|
end
|
|
2312
2344
|
|
|
2345
|
+
def generateTaskList(taskList, mode)
|
|
2346
|
+
list = []
|
|
2347
|
+
taskList.each do |task|
|
|
2348
|
+
date = task['start', @scenarioIdx].to_s(@property.project['timeFormat'])
|
|
2349
|
+
case mode
|
|
2350
|
+
when 1
|
|
2351
|
+
list << "#{task.fullId}"
|
|
2352
|
+
when 2
|
|
2353
|
+
list << "#{task.name}"
|
|
2354
|
+
when 3
|
|
2355
|
+
list << "#{task.name} (#{task.fullId})"
|
|
2356
|
+
when 4
|
|
2357
|
+
list << "#{task.fullId}: #{task.name}"
|
|
2358
|
+
when 5
|
|
2359
|
+
list << "#{task.fullId} (#{date})"
|
|
2360
|
+
when 6
|
|
2361
|
+
list << "#{task.name} (#{date})"
|
|
2362
|
+
when 7, nil
|
|
2363
|
+
list << "#{task.name} (#{task.fullId}) #{date}"
|
|
2364
|
+
when 8
|
|
2365
|
+
list << "#{task.fullId}: #{task.name} #{date}"
|
|
2366
|
+
else
|
|
2367
|
+
error('bad_listmode_qt',
|
|
2368
|
+
"Bad listmode #{mode}. Use 1 - 8.")
|
|
2369
|
+
end
|
|
2370
|
+
end
|
|
2371
|
+
list
|
|
2372
|
+
end
|
|
2373
|
+
|
|
2313
2374
|
end
|
|
2314
2375
|
|
|
2315
2376
|
end
|