taskjuggler 3.4.0 → 3.5.0
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 +41 -0
- data/data/css/tjreport.css +4 -1
- data/data/tjp.vim +22 -11
- data/examples/ToDo-List/todolist.tjp +1 -1
- data/lib/header.tmpl +1 -1
- data/lib/taskjuggler/Account.rb +1 -1
- data/lib/taskjuggler/AccountCredit.rb +1 -1
- data/lib/taskjuggler/AccountScenario.rb +1 -1
- data/lib/taskjuggler/AlertLevelDefinitions.rb +1 -1
- data/lib/taskjuggler/AlgorithmDiff.rb +1 -1
- data/lib/taskjuggler/Allocation.rb +1 -1
- data/lib/taskjuggler/AppConfig.rb +1 -1
- data/lib/taskjuggler/AttributeBase.rb +11 -1
- data/lib/taskjuggler/AttributeDefinition.rb +1 -1
- data/lib/taskjuggler/Attributes.rb +3 -3
- data/lib/taskjuggler/BatchProcessor.rb +1 -1
- data/lib/taskjuggler/Booking.rb +1 -1
- data/lib/taskjuggler/Charge.rb +1 -1
- data/lib/taskjuggler/ChargeSet.rb +1 -1
- data/lib/taskjuggler/DataCache.rb +1 -1
- data/lib/taskjuggler/FileList.rb +1 -1
- data/lib/taskjuggler/HTMLDocument.rb +2 -2
- data/lib/taskjuggler/HTMLElements.rb +1 -1
- data/lib/taskjuggler/ICalendar.rb +2 -2
- data/lib/taskjuggler/Interval.rb +1 -1
- data/lib/taskjuggler/IntervalList.rb +1 -1
- data/lib/taskjuggler/Journal.rb +1 -1
- data/lib/taskjuggler/KateSyntax.rb +1 -1
- data/lib/taskjuggler/KeywordArray.rb +1 -1
- data/lib/taskjuggler/KeywordDocumentation.rb +3 -2
- data/lib/taskjuggler/LeaveList.rb +1 -1
- data/lib/taskjuggler/Limits.rb +1 -1
- data/lib/taskjuggler/Log.rb +1 -1
- data/lib/taskjuggler/LogicalExpression.rb +1 -1
- data/lib/taskjuggler/LogicalFunction.rb +23 -1
- data/lib/taskjuggler/LogicalOperation.rb +5 -2
- data/lib/taskjuggler/MessageHandler.rb +9 -3
- data/lib/taskjuggler/PTNProxy.rb +1 -1
- data/lib/taskjuggler/Painter.rb +1 -1
- data/lib/taskjuggler/Project.rb +4 -3
- data/lib/taskjuggler/ProjectFileParser.rb +15 -4
- data/lib/taskjuggler/ProjectFileScanner.rb +1 -1
- data/lib/taskjuggler/PropertyList.rb +2 -2
- data/lib/taskjuggler/PropertySet.rb +2 -2
- data/lib/taskjuggler/PropertyTreeNode.rb +44 -16
- data/lib/taskjuggler/Query.rb +23 -10
- data/lib/taskjuggler/RealFormat.rb +1 -1
- data/lib/taskjuggler/Resource.rb +1 -1
- data/lib/taskjuggler/ResourceScenario.rb +6 -1
- data/lib/taskjuggler/RichText.rb +1 -1
- data/lib/taskjuggler/RichText/Document.rb +1 -1
- data/lib/taskjuggler/RichText/Element.rb +1 -1
- data/lib/taskjuggler/RichText/FunctionExample.rb +3 -3
- data/lib/taskjuggler/RichText/FunctionHandler.rb +1 -1
- data/lib/taskjuggler/RichText/Parser.rb +1 -1
- data/lib/taskjuggler/RichText/RTFHandlers.rb +1 -1
- data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
- data/lib/taskjuggler/RichText/RTFQuery.rb +4 -3
- data/lib/taskjuggler/RichText/RTFReport.rb +1 -1
- data/lib/taskjuggler/RichText/RTFReportLink.rb +1 -1
- data/lib/taskjuggler/RichText/RTFWithQuerySupport.rb +1 -1
- data/lib/taskjuggler/RichText/Scanner.rb +2 -1
- data/lib/taskjuggler/RichText/Snip.rb +1 -1
- data/lib/taskjuggler/RichText/SyntaxRules.rb +1 -1
- data/lib/taskjuggler/RichText/TOCEntry.rb +1 -1
- data/lib/taskjuggler/RichText/TableOfContents.rb +1 -1
- data/lib/taskjuggler/RuntimeConfig.rb +1 -1
- data/lib/taskjuggler/Scenario.rb +1 -1
- data/lib/taskjuggler/ScenarioData.rb +1 -1
- data/lib/taskjuggler/Scoreboard.rb +10 -6
- data/lib/taskjuggler/SheetHandlerBase.rb +1 -1
- data/lib/taskjuggler/SheetReceiver.rb +1 -1
- data/lib/taskjuggler/SheetSender.rb +1 -1
- data/lib/taskjuggler/Shift.rb +1 -1
- data/lib/taskjuggler/ShiftAssignments.rb +1 -1
- data/lib/taskjuggler/ShiftScenario.rb +1 -1
- data/lib/taskjuggler/SimpleQueryExpander.rb +1 -1
- data/lib/taskjuggler/StatusSheetReceiver.rb +1 -1
- data/lib/taskjuggler/StatusSheetSender.rb +1 -1
- data/lib/taskjuggler/StdIoWrapper.rb +1 -1
- data/lib/taskjuggler/SyntaxReference.rb +15 -1
- data/lib/taskjuggler/TableColumnDefinition.rb +1 -1
- data/lib/taskjuggler/TableColumnSorter.rb +1 -1
- data/lib/taskjuggler/Task.rb +1 -1
- data/lib/taskjuggler/TaskDependency.rb +1 -1
- data/lib/taskjuggler/TaskJuggler.rb +7 -4
- data/lib/taskjuggler/TaskScenario.rb +95 -72
- data/lib/taskjuggler/TernarySearchTree.rb +1 -1
- data/lib/taskjuggler/TextFormatter.rb +1 -1
- data/lib/taskjuggler/TextParser.rb +1 -1
- data/lib/taskjuggler/TextParser/MacroTable.rb +1 -1
- data/lib/taskjuggler/TextParser/Pattern.rb +1 -1
- data/lib/taskjuggler/TextParser/Rule.rb +6 -1
- data/lib/taskjuggler/TextParser/Scanner.rb +1 -1
- data/lib/taskjuggler/TextParser/SourceFileInfo.rb +1 -1
- data/lib/taskjuggler/TextParser/StackElement.rb +1 -1
- data/lib/taskjuggler/TextParser/State.rb +1 -1
- data/lib/taskjuggler/TextParser/TokenDoc.rb +1 -1
- data/lib/taskjuggler/TimeSheetReceiver.rb +1 -1
- data/lib/taskjuggler/TimeSheetSender.rb +1 -1
- data/lib/taskjuggler/TimeSheetSummary.rb +1 -1
- data/lib/taskjuggler/TimeSheets.rb +1 -1
- data/lib/taskjuggler/Tj3AppBase.rb +3 -2
- data/lib/taskjuggler/Tj3Config.rb +3 -3
- data/lib/taskjuggler/Tj3SheetAppBase.rb +1 -1
- data/lib/taskjuggler/TjException.rb +1 -1
- data/lib/taskjuggler/TjTime.rb +17 -12
- data/lib/taskjuggler/TjpExample.rb +1 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +378 -303
- data/lib/taskjuggler/URLParameter.rb +1 -1
- data/lib/taskjuggler/UTF8String.rb +1 -1
- data/lib/taskjuggler/UserManual.rb +3 -3
- data/lib/taskjuggler/VimSyntax.rb +1 -1
- data/lib/taskjuggler/WorkingHours.rb +1 -1
- data/lib/taskjuggler/XMLDocument.rb +1 -1
- data/lib/taskjuggler/XMLElement.rb +1 -1
- data/lib/taskjuggler/apps/Tj3.rb +20 -6
- data/lib/taskjuggler/apps/Tj3Client.rb +1 -1
- data/lib/taskjuggler/apps/Tj3Daemon.rb +1 -1
- data/lib/taskjuggler/apps/Tj3Man.rb +2 -2
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +1 -1
- data/lib/taskjuggler/apps/Tj3SsSender.rb +1 -1
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +1 -1
- data/lib/taskjuggler/apps/Tj3TsSender.rb +1 -1
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +1 -1
- data/lib/taskjuggler/apps/Tj3WebD.rb +2 -2
- data/lib/taskjuggler/daemon/Daemon.rb +1 -1
- data/lib/taskjuggler/daemon/DaemonConnector.rb +1 -1
- data/lib/taskjuggler/daemon/ProcessIntercom.rb +1 -1
- data/lib/taskjuggler/daemon/ProjectBroker.rb +1 -1
- data/lib/taskjuggler/daemon/ProjectServer.rb +1 -1
- data/lib/taskjuggler/daemon/ReportServer.rb +1 -1
- data/lib/taskjuggler/daemon/ReportServlet.rb +1 -1
- data/lib/taskjuggler/daemon/WebServer.rb +1 -1
- data/lib/taskjuggler/daemon/WelcomePage.rb +1 -1
- data/lib/taskjuggler/deep_copy.rb +1 -1
- data/lib/taskjuggler/reports/AccountListRE.rb +1 -1
- data/lib/taskjuggler/reports/CSVFile.rb +1 -1
- data/lib/taskjuggler/reports/ChartPlotter.rb +1 -1
- data/lib/taskjuggler/reports/CollisionDetector.rb +1 -1
- data/lib/taskjuggler/reports/ColumnTable.rb +1 -1
- data/lib/taskjuggler/reports/ExportRE.rb +1 -1
- data/lib/taskjuggler/reports/GanttChart.rb +1 -1
- data/lib/taskjuggler/reports/GanttContainer.rb +1 -1
- data/lib/taskjuggler/reports/GanttHeader.rb +1 -1
- data/lib/taskjuggler/reports/GanttHeaderScaleItem.rb +1 -1
- data/lib/taskjuggler/reports/GanttLine.rb +1 -1
- data/lib/taskjuggler/reports/GanttLoadStack.rb +1 -1
- data/lib/taskjuggler/reports/GanttMilestone.rb +1 -1
- data/lib/taskjuggler/reports/GanttRouter.rb +1 -1
- data/lib/taskjuggler/reports/GanttTaskBar.rb +1 -1
- data/lib/taskjuggler/reports/HTMLGraphics.rb +1 -1
- data/lib/taskjuggler/reports/ICalReport.rb +1 -1
- data/lib/taskjuggler/reports/MspXmlRE.rb +1 -1
- data/lib/taskjuggler/reports/Navigator.rb +1 -1
- data/lib/taskjuggler/reports/NikuReport.rb +1 -1
- data/lib/taskjuggler/reports/Report.rb +31 -19
- data/lib/taskjuggler/reports/ReportBase.rb +1 -1
- data/lib/taskjuggler/reports/ReportContext.rb +1 -1
- data/lib/taskjuggler/reports/ReportTable.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableCell.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableColumn.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableLegend.rb +1 -1
- data/lib/taskjuggler/reports/ReportTableLine.rb +1 -1
- data/lib/taskjuggler/reports/ResourceListRE.rb +1 -1
- data/lib/taskjuggler/reports/StatusSheetReport.rb +1 -1
- data/lib/taskjuggler/reports/TableReport.rb +4 -5
- data/lib/taskjuggler/reports/TableReportColumn.rb +1 -1
- data/lib/taskjuggler/reports/TagFile.rb +1 -1
- data/lib/taskjuggler/reports/TaskListRE.rb +1 -1
- data/lib/taskjuggler/reports/TextReport.rb +1 -1
- data/lib/taskjuggler/reports/TimeSheetReport.rb +1 -1
- data/lib/taskjuggler/reports/TjpExportRE.rb +9 -2
- data/lib/taskjuggler/reports/TraceReport.rb +1 -1
- data/lib/tj3.rb +1 -1
- data/lib/tj3client.rb +1 -1
- data/lib/tj3d.rb +1 -1
- data/lib/tj3man.rb +1 -1
- data/lib/tj3ss_receiver.rb +1 -1
- data/lib/tj3ss_sender.rb +1 -1
- data/lib/tj3ts_receiver.rb +1 -1
- data/lib/tj3ts_sender.rb +1 -1
- data/lib/tj3ts_summary.rb +1 -1
- data/lib/tj3webd.rb +1 -1
- data/manual/How_To_Contribute +5 -6
- data/manual/Installation +3 -3
- data/manual/Rich_Text_Attributes +8 -3
- data/manual/html/Day_To_Day_Juggling.html +3 -3
- data/manual/html/Getting_Started.html +3 -3
- data/manual/html/How_To_Contribute.html +6 -7
- data/manual/html/Installation.html +6 -6
- data/manual/html/Intro.html +3 -3
- data/manual/html/Reporting_Bugs.html +3 -3
- data/manual/html/Rich_Text_Attributes.html +5 -4
- data/manual/html/Software.html +3 -3
- data/manual/html/TaskJuggler_2x_Migration.html +3 -3
- data/manual/html/TaskJuggler_Internals.html +3 -3
- data/manual/html/The_TaskJuggler_Syntax.html +3 -3
- data/manual/html/Tutorial.html +3 -3
- data/manual/html/account.html +3 -3
- data/manual/html/account.task.html +3 -3
- data/manual/html/accountprefix.html +3 -3
- data/manual/html/accountreport.html +5 -5
- data/manual/html/accountroot.html +3 -3
- data/manual/html/active.html +3 -3
- data/manual/html/adopt.task.html +3 -3
- data/manual/html/aggregate.html +3 -3
- data/manual/html/alert.html +3 -3
- data/manual/html/alertlevels.html +3 -3
- data/manual/html/allocate.html +3 -3
- data/manual/html/alphabet.html +11 -4
- data/manual/html/alternative.html +3 -3
- data/manual/html/author.html +3 -3
- data/manual/html/auxdir.html +7 -9
- data/manual/html/auxdir.report.html +69 -0
- data/manual/html/balance.html +5 -5
- data/manual/html/booking.resource.html +3 -3
- data/manual/html/booking.task.html +3 -3
- data/manual/html/caption.html +3 -3
- data/manual/html/cellcolor.column.html +4 -4
- data/manual/html/celltext.column.html +3 -3
- data/manual/html/center.html +3 -3
- data/manual/html/charge.html +3 -3
- data/manual/html/chargeset.html +3 -3
- data/manual/html/columnid.html +10 -6
- data/manual/html/columns.html +3 -3
- data/manual/html/complete.html +3 -3
- data/manual/html/copyright.html +3 -3
- data/manual/html/credits.html +3 -3
- data/manual/html/css/tjreport.css +4 -1
- data/manual/html/currency.html +3 -3
- data/manual/html/currencyformat.html +3 -3
- data/manual/html/dailymax.html +3 -3
- data/manual/html/dailymin.html +3 -3
- data/manual/html/dailyworkinghours.html +3 -3
- data/manual/html/date.extend.html +3 -3
- data/manual/html/date.html +4 -3
- data/manual/html/definitions.html +3 -3
- data/manual/html/depends.html +3 -3
- data/manual/html/details.html +3 -3
- data/manual/html/disabled.html +3 -3
- data/manual/html/duration.html +3 -3
- data/manual/html/efficiency.html +3 -3
- data/manual/html/effort.html +3 -3
- data/manual/html/email.html +3 -3
- data/manual/html/enabled.html +3 -3
- data/manual/html/end.column.html +3 -3
- data/manual/html/end.html +3 -3
- data/manual/html/end.limit.html +3 -3
- data/manual/html/end.report.html +3 -3
- data/manual/html/end.timesheet.html +3 -3
- data/manual/html/endcredit.html +3 -3
- data/manual/html/epilog.html +3 -3
- data/manual/html/export.html +3 -3
- data/manual/html/extend.html +58 -13
- data/manual/html/fail.html +4 -4
- data/manual/html/fdl.html +3 -3
- data/manual/html/flags.account.html +3 -3
- data/manual/html/flags.html +3 -3
- data/manual/html/flags.journalentry.html +3 -3
- data/manual/html/flags.report.html +3 -3
- data/manual/html/flags.resource.html +3 -3
- data/manual/html/flags.statussheet.html +3 -3
- data/manual/html/flags.task.html +3 -3
- data/manual/html/flags.timesheet.html +3 -3
- data/manual/html/fontcolor.column.html +4 -4
- data/manual/html/footer.html +3 -3
- data/manual/html/formats.export.html +3 -3
- data/manual/html/formats.html +3 -3
- data/manual/html/functions.html +4 -4
- data/manual/html/gapduration.html +3 -3
- data/manual/html/gaplength.html +3 -3
- data/manual/html/halign.center.html +3 -3
- data/manual/html/halign.column.html +4 -4
- data/manual/html/halign.left.html +3 -3
- data/manual/html/halign.right.html +3 -3
- data/manual/html/hasalert.html +3 -3
- data/manual/html/header.html +3 -3
- data/manual/html/headline.html +3 -3
- data/manual/html/height.html +3 -3
- data/manual/html/hideaccount.html +5 -4
- data/manual/html/hidejournalentry.html +3 -3
- data/manual/html/hidereport.html +4 -4
- data/manual/html/hideresource.html +5 -4
- data/manual/html/hidetask.html +5 -4
- data/manual/html/icalreport.html +3 -3
- data/manual/html/include.macro.html +3 -3
- data/manual/html/include.project.html +3 -3
- data/manual/html/include.properties.html +3 -3
- data/manual/html/index.html +2 -2
- data/manual/html/inherit.extend.html +4 -4
- data/manual/html/interval1.html +3 -3
- data/manual/html/interval2.html +3 -3
- data/manual/html/interval3.html +3 -3
- data/manual/html/interval4.html +3 -3
- data/manual/html/isactive.html +3 -3
- data/manual/html/ischildof.html +3 -3
- data/manual/html/isdependencyof.html +3 -3
- data/manual/html/isdutyof.html +3 -3
- data/manual/html/isfeatureof.html +3 -3
- data/manual/html/isleaf.html +3 -3
- data/manual/html/ismilestone.html +3 -3
- data/manual/html/isongoing.html +3 -3
- data/manual/html/isresource.html +3 -3
- data/manual/html/isresponsibilityof.html +3 -3
- data/manual/html/istask.html +5 -5
- data/manual/html/isvalid.html +66 -0
- data/manual/html/journalattributes.html +5 -5
- data/manual/html/journalentry.html +3 -3
- data/manual/html/journalmode.html +3 -3
- data/manual/html/leaveallowance.html +3 -3
- data/manual/html/leaves.html +3 -3
- data/manual/html/left.html +3 -3
- data/manual/html/length.html +5 -5
- data/manual/html/limits.allocate.html +3 -3
- data/manual/html/limits.html +3 -3
- data/manual/html/limits.resource.html +3 -3
- data/manual/html/limits.task.html +3 -3
- data/manual/html/listitem.column.html +3 -3
- data/manual/html/listtype.column.html +3 -3
- data/manual/html/loadunit.html +3 -3
- data/manual/html/logicalexpression.html +14 -4
- data/manual/html/logicalflagexpression.html +3 -3
- data/manual/html/macro.html +3 -3
- data/manual/html/managers.html +3 -3
- data/manual/html/mandatory.html +3 -3
- data/manual/html/maxend.html +3 -3
- data/manual/html/maximum.html +3 -3
- data/manual/html/maxstart.html +3 -3
- data/manual/html/milestone.html +3 -3
- data/manual/html/minend.html +3 -3
- data/manual/html/minimum.html +3 -3
- data/manual/html/minstart.html +3 -3
- data/manual/html/monthlymax.html +3 -3
- data/manual/html/monthlymin.html +3 -3
- data/manual/html/navbar.html +10 -2
- data/manual/html/navigator.html +3 -3
- data/manual/html/newtask.html +4 -4
- data/manual/html/nikureport.html +3 -3
- data/manual/html/note.task.html +3 -3
- data/manual/html/now.html +5 -5
- data/manual/html/number.extend.html +77 -0
- data/manual/html/numberformat.html +5 -5
- data/manual/html/onend.html +3 -3
- data/manual/html/onstart.html +3 -3
- data/manual/html/opennodes.html +5 -5
- data/manual/html/outputdir.html +67 -0
- data/manual/html/overtime.booking.html +5 -5
- data/manual/html/period.column.html +3 -3
- data/manual/html/period.limit.html +3 -3
- data/manual/html/period.report.html +3 -3
- data/manual/html/period.task.html +3 -3
- data/manual/html/persistent.html +3 -3
- data/manual/html/precedes.html +3 -3
- data/manual/html/priority.html +3 -3
- data/manual/html/priority.timesheet.html +3 -3
- data/manual/html/project.html +4 -4
- data/manual/html/projectid.html +3 -3
- data/manual/html/projectid.task.html +3 -3
- data/manual/html/projectids.html +3 -3
- data/manual/html/projection.html +3 -3
- data/manual/html/prolog.html +3 -3
- data/manual/html/properties.html +10 -4
- data/manual/html/purge.html +3 -3
- data/manual/html/rate.html +3 -3
- data/manual/html/rate.resource.html +3 -3
- data/manual/html/rawhtmlhead.html +3 -3
- data/manual/html/reference.extend.html +3 -3
- data/manual/html/remaining.html +3 -3
- data/manual/html/replace.html +3 -3
- data/manual/html/reportprefix.html +3 -3
- data/manual/html/resource.html +3 -3
- data/manual/html/resourceattributes.html +3 -3
- data/manual/html/resourceprefix.html +3 -3
- data/manual/html/resourcereport.html +5 -5
- data/manual/html/resourceroot.html +3 -3
- data/manual/html/resources.limit.html +3 -3
- data/manual/html/responsible.html +3 -3
- data/manual/html/richtext.extend.html +3 -3
- data/manual/html/right.html +3 -3
- data/manual/html/rollupaccount.html +4 -4
- data/manual/html/rollupresource.html +4 -4
- data/manual/html/rolluptask.html +4 -4
- data/manual/html/scale.column.html +3 -3
- data/manual/html/scenario.html +3 -3
- data/manual/html/scenario.ical.html +3 -3
- data/manual/html/scenarios.export.html +3 -3
- data/manual/html/scenarios.html +3 -3
- data/manual/html/scenariospecific.extend.html +4 -4
- data/manual/html/scheduled.html +3 -3
- data/manual/html/scheduling.html +3 -3
- data/manual/html/select.html +3 -3
- data/manual/html/selfcontained.html +3 -3
- data/manual/html/shift.allocate.html +3 -3
- data/manual/html/shift.html +4 -4
- data/manual/html/shift.resource.html +3 -3
- data/manual/html/shift.task.html +3 -3
- data/manual/html/shift.timesheet.html +3 -3
- data/manual/html/shifts.allocate.html +3 -3
- data/manual/html/shifts.resource.html +3 -3
- data/manual/html/shifts.task.html +3 -3
- data/manual/html/shorttimeformat.html +3 -3
- data/manual/html/sloppy.booking.html +3 -3
- data/manual/html/sloppy.projection.html +3 -3
- data/manual/html/sortaccounts.html +3 -3
- data/manual/html/sortjournalentries.html +3 -3
- data/manual/html/sortresources.html +3 -3
- data/manual/html/sorttasks.html +3 -3
- data/manual/html/start.column.html +3 -3
- data/manual/html/start.html +3 -3
- data/manual/html/start.limit.html +3 -3
- data/manual/html/start.report.html +3 -3
- data/manual/html/startcredit.html +3 -3
- data/manual/html/status.statussheet.html +3 -3
- data/manual/html/status.timesheet.html +3 -3
- data/manual/html/statussheet.html +3 -3
- data/manual/html/statussheetreport.html +3 -3
- data/manual/html/strict.projection.html +3 -3
- data/manual/html/summary.html +3 -3
- data/manual/html/supplement.html +3 -3
- data/manual/html/supplement.resource.html +3 -3
- data/manual/html/supplement.task.html +3 -3
- data/manual/html/tagfile.html +3 -3
- data/manual/html/task.html +3 -3
- data/manual/html/task.statussheet.html +3 -3
- data/manual/html/task.timesheet.html +3 -3
- data/manual/html/taskattributes.html +3 -3
- data/manual/html/taskprefix.html +3 -3
- data/manual/html/taskreport.html +5 -5
- data/manual/html/taskroot.export.html +3 -3
- data/manual/html/taskroot.html +3 -3
- data/manual/html/text.extend.html +3 -3
- data/manual/html/textreport.html +5 -5
- data/manual/html/timeformat.html +3 -3
- data/manual/html/timeformat1.html +3 -3
- data/manual/html/timeformat2.html +3 -3
- data/manual/html/timeoff.nikureport.html +3 -3
- data/manual/html/timesheet.html +3 -3
- data/manual/html/timesheetreport.html +3 -3
- data/manual/html/timezone.export.html +3 -3
- data/manual/html/timezone.html +3 -3
- data/manual/html/timezone.report.html +3 -3
- data/manual/html/timezone.shift.html +3 -3
- data/manual/html/timingresolution.html +3 -3
- data/manual/html/title.column.html +3 -3
- data/manual/html/title.html +3 -3
- data/manual/html/toc.html +276 -248
- data/manual/html/tooltip.column.html +4 -4
- data/manual/html/tracereport.html +5 -5
- data/manual/html/trackingscenario.html +3 -3
- data/manual/html/treelevel.html +3 -3
- data/manual/html/vacation.html +3 -3
- data/manual/html/vacation.resource.html +3 -3
- data/manual/html/vacation.shift.html +3 -3
- data/manual/html/warn.html +4 -4
- data/manual/html/weeklymax.html +3 -3
- data/manual/html/weeklymin.html +3 -3
- data/manual/html/weekstartsmonday.html +3 -3
- data/manual/html/weekstartssunday.html +3 -3
- data/manual/html/width.column.html +4 -4
- data/manual/html/width.html +3 -3
- data/manual/html/work.html +3 -3
- data/manual/html/workinghours.project.html +3 -3
- data/manual/html/workinghours.resource.html +3 -3
- data/manual/html/workinghours.shift.html +3 -3
- data/manual/html/yearlyworkingdays.html +3 -3
- data/spec/Color_spec.rb +2 -2
- data/spec/ICalendar_spec.rb +1 -1
- data/spec/IntervalList_spec.rb +1 -1
- data/spec/ProjectBroker_spec.rb +1 -1
- data/spec/StatusSheets_spec.rb +1 -1
- data/spec/TableColumnSorter_spec.rb +2 -2
- data/spec/TernarySearchTree_spec.rb +1 -1
- data/spec/TimeSheets_spec.rb +1 -1
- data/spec/Tj3Daemon_spec.rb +1 -1
- data/spec/Tj3_spec.rb +1 -1
- data/spec/TraceReport_spec.rb +2 -2
- data/spec/support/DaemonControl.rb +1 -1
- data/spec/support/spec_helper.rb +1 -1
- data/tasks/gem.rake +7 -1
- data/tasks/rdoc.rake +5 -1
- data/test/MessageChecker.rb +1 -1
- data/test/ReferenceGenerator.rb +1 -1
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +14 -14
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +1 -1
- data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +62 -10
- data/test/TestSuite/Export-Reports/refs/Shift.tjp +1 -1
- data/test/TestSuite/Scheduler/Correct/DateAndDep.tjp +25 -0
- data/test/TestSuite/Scheduler/Correct/hammock.tjp +27 -0
- data/test/TestSuite/Scheduler/Errors/container_milestone.tjp +13 -0
- data/test/TestSuite/Scheduler/Errors/{weak_end_dep.tjp → impossible_end_dep.tjp} +2 -2
- data/test/TestSuite/Scheduler/Errors/{weak_start_dep.tjp → impossible_start_dep.tjp} +2 -2
- data/test/TestSuite/Scheduler/Errors/sched_runaway.tjp +20 -0
- data/test/TestSuite/Scheduler/Errors/{task_pred_before_gl.tjp → task_pred_before_1.tjp} +1 -1
- data/test/TestSuite/Scheduler/Errors/{task_pred_before_gd.tjp → task_pred_before_2.tjp} +1 -1
- data/test/TestSuite/Scheduler/Errors/{task_succ_after_gl.tjp → task_succ_after_1.tjp} +1 -1
- data/test/TestSuite/Scheduler/Errors/{task_succ_after_gd.tjp → task_succ_after_2.tjp} +1 -1
- data/test/TestSuite/Syntax/Correct/CustomAttributes.tjp +53 -9
- data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +11 -0
- data/test/TjpGen.rb +1 -1
- data/test/all.rb +1 -1
- data/test/test_AlgorithmDiff.rb +1 -1
- data/test/test_BatchProcessor.rb +1 -1
- data/test/test_CSV-Reports.rb +1 -1
- data/test/test_CSVFile.rb +1 -1
- data/test/test_CollisionDetector.rb +1 -1
- data/test/test_Export-Reports.rb +1 -1
- data/test/test_Journal.rb +1 -1
- data/test/test_Limits.rb +1 -1
- data/test/test_LogicalExpression.rb +1 -1
- data/test/test_MacroTable.rb +1 -1
- data/test/test_Project.rb +1 -1
- data/test/test_ProjectFileScanner.rb +1 -1
- data/test/test_PropertySet.rb +1 -1
- data/test/test_Query.rb +1 -1
- data/test/test_RealFormat.rb +1 -1
- data/test/test_ReportGenerator.rb +1 -1
- data/test/test_RichText.rb +1 -1
- data/test/test_Scheduler.rb +1 -1
- data/test/test_ShiftAssignments.rb +1 -1
- data/test/test_SimpleQueryExpander.rb +1 -1
- data/test/test_Syntax.rb +1 -1
- data/test/test_TextFormatter.rb +1 -1
- data/test/test_TjTime.rb +1 -1
- data/test/test_TjpExample.rb +1 -1
- data/test/test_URLParameter.rb +1 -1
- data/test/test_UTF8String.rb +1 -1
- data/test/test_WorkingHours.rb +1 -1
- data/test/test_deep_copy.rb +1 -1
- metadata +26 -14
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = StatusSheetReceiver.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = StatusSheetSender.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = StdIoWrapper.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = SyntaxReference.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -176,7 +176,21 @@ class TaskJuggler
|
|
|
176
176
|
head << XMLElement.new('base', 'target' => 'navigator')
|
|
177
177
|
html.html << (body = XMLElement.new('body'))
|
|
178
178
|
|
|
179
|
+
body << (divf = XMLElement.new('div'))
|
|
180
|
+
divf << (form = XMLElement.new(
|
|
181
|
+
'form', 'action' => 'http://www.google.com/search',
|
|
182
|
+
'method' => "get", 'target' => '_blank', 'style' => 'margin:0'))
|
|
183
|
+
form << XMLElement.new('input', 'type' => 'text',
|
|
184
|
+
'value' => '',
|
|
185
|
+
'maxlength' => '255',
|
|
186
|
+
'size' => '25',
|
|
187
|
+
'name' => 'q')
|
|
188
|
+
form << XMLElement.new('input', 'type' => 'submit', 'value' => 'Search')
|
|
189
|
+
form << XMLElement.new('input', 'type' => 'hidden',
|
|
190
|
+
'value' => 'taskjuggler.org/manual',
|
|
191
|
+
'name' => 'sitesearch')
|
|
179
192
|
body << (h3 = XMLElement.new('h3'))
|
|
193
|
+
|
|
180
194
|
letters.each do |l|
|
|
181
195
|
h3 << XMLNamedText.new(l.upcase, 'a',
|
|
182
196
|
'href' => "navbar.html##{l}")
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TableColumnDefinition.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TableColumnSorter.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
data/lib/taskjuggler/Task.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Task.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TaskDependency.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TaskJuggler.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -144,10 +144,13 @@ class TaskJuggler
|
|
|
144
144
|
# Generate all specified reports. The project must have be scheduled before
|
|
145
145
|
# this method can be called. It returns true if no error occured, false
|
|
146
146
|
# otherwise.
|
|
147
|
-
def generateReports(outputDir =
|
|
147
|
+
def generateReports(outputDir = nil)
|
|
148
148
|
@project.checkReports
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
if outputDir
|
|
150
|
+
# Make sure the output directory path always ends with a '/' unless empty.
|
|
151
|
+
outputDir += '/' unless outputDir.empty? || outputDir[-1] == '/'
|
|
152
|
+
@project.outputDir = outputDir
|
|
153
|
+
end
|
|
151
154
|
Log.enter('reports', 'Generating reports ...')
|
|
152
155
|
|
|
153
156
|
begin
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TaskScenario.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -119,6 +119,8 @@ class TaskJuggler
|
|
|
119
119
|
task = task.parent
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
+
@contendedResources = Hash.new { |hash, key| hash[key] = Hash.new(0) }
|
|
123
|
+
|
|
122
124
|
# Collect the mandatory allocations.
|
|
123
125
|
@mandatories = []
|
|
124
126
|
@allocate.each do |allocation|
|
|
@@ -504,34 +506,21 @@ class TaskJuggler
|
|
|
504
506
|
task = dependency.task
|
|
505
507
|
limit = task[dependency.onEnd ? 'end' : 'start', @scenarioIdx]
|
|
506
508
|
next if limit.nil?
|
|
507
|
-
if @start < limit
|
|
509
|
+
if @start < limit ||
|
|
510
|
+
(dependency.gapDuration > 0 &&
|
|
511
|
+
limit + dependency.gapDuration > @start) ||
|
|
512
|
+
(dependency.gapLength > 0 &&
|
|
513
|
+
calcLength(limit, @start) < dependency.gapLength)
|
|
508
514
|
error('task_pred_before',
|
|
509
|
-
"Task #{@property.fullId} (#{@start}) must start
|
|
515
|
+
"Task #{@property.fullId} (#{@start}) must start " +
|
|
516
|
+
(dependency.gapDuration > 0 ?
|
|
517
|
+
"#{dependency.gapDuration / (60 * 60 * 24)} days " :
|
|
518
|
+
(dependency.gapLength > 0 ?
|
|
519
|
+
"#{@project.slotsToDays(dependency.gapLength)} " +
|
|
520
|
+
"working days " : '')) +
|
|
521
|
+
"after " +
|
|
510
522
|
"#{dependency.onEnd ? 'end' : 'start'} (#{limit}) of task " +
|
|
511
|
-
"#{task.fullId}.")
|
|
512
|
-
end
|
|
513
|
-
if dependency.gapDuration > 0
|
|
514
|
-
if limit + dependency.gapDuration > @start
|
|
515
|
-
error('task_pred_before_gd',
|
|
516
|
-
"Task #{@property.fullId} must start " +
|
|
517
|
-
"#{dependency.gapDuration / (60 * 60 * 24)} days after " +
|
|
518
|
-
"#{dependency.onEnd ? 'end' : 'start'} of task " +
|
|
519
|
-
"#{task.fullId}. TaskJuggler cannot enforce this condition " +
|
|
520
|
-
"because the task is scheduled ALAP (finish-to-start) or " +
|
|
521
|
-
"has a fixed #{dependency.onEnd ? 'end' : 'start'} date.")
|
|
522
|
-
end
|
|
523
|
-
end
|
|
524
|
-
if dependency.gapLength > 0
|
|
525
|
-
if calcLength(limit, @start) < dependency.gapLength
|
|
526
|
-
error('task_pred_before_gl',
|
|
527
|
-
"Task #{@property.fullId} must start " +
|
|
528
|
-
"#{@project.slotsToDays(dependency.gapLength)} " +
|
|
529
|
-
"working days after " +
|
|
530
|
-
"#{dependency.onEnd ? 'end' : 'start'} of task " +
|
|
531
|
-
"#{task.fullId}. TaskJuggler cannot enforce this condition " +
|
|
532
|
-
"because the task is scheduled ALAP (finish-to-start) or " +
|
|
533
|
-
"has a fixed #{dependency.onEnd ? 'end' : 'start'} date.")
|
|
534
|
-
end
|
|
523
|
+
"#{task.fullId}. This condition could not be met.")
|
|
535
524
|
end
|
|
536
525
|
end
|
|
537
526
|
|
|
@@ -540,34 +529,21 @@ class TaskJuggler
|
|
|
540
529
|
task = dependency.task
|
|
541
530
|
limit = task[dependency.onEnd ? 'end' : 'start', @scenarioIdx]
|
|
542
531
|
next if limit.nil?
|
|
543
|
-
if limit < @end
|
|
532
|
+
if limit < @end ||
|
|
533
|
+
(dependency.gapDuration > 0 &&
|
|
534
|
+
limit - dependency.gapDuration < @end) ||
|
|
535
|
+
(dependency.gapLength > 0 &&
|
|
536
|
+
calcLength(@end, limit) < dependency.gapLength)
|
|
544
537
|
error('task_succ_after',
|
|
545
|
-
"Task #{@property.fullId} (#{@end}) must end
|
|
538
|
+
"Task #{@property.fullId} (#{@end}) must end " +
|
|
539
|
+
(dependency.gapDuration > 0 ?
|
|
540
|
+
"#{dependency.gapDuration / (60 * 60 * 24)} days " :
|
|
541
|
+
(dependency.gapLength > 0 ?
|
|
542
|
+
"#{@project.slotsToDays(dependency.gapLength)} " +
|
|
543
|
+
"working days " : '')) +
|
|
544
|
+
"before " +
|
|
546
545
|
"#{dependency.onEnd ? 'end' : 'start'} (#{limit}) of task " +
|
|
547
|
-
"#{task.fullId}.")
|
|
548
|
-
end
|
|
549
|
-
if dependency.gapDuration > 0
|
|
550
|
-
if limit - dependency.gapDuration < @end
|
|
551
|
-
error('task_succ_after_gd',
|
|
552
|
-
"Task #{@property.fullId} must end " +
|
|
553
|
-
"#{dependency.gapDuration / (60 * 60 * 24)} days before " +
|
|
554
|
-
"#{dependency.onEnd ? 'end' : 'start'} of task " +
|
|
555
|
-
"#{task.fullId}. TaskJuggler cannot enforce this condition " +
|
|
556
|
-
"because the task is scheduled ASAP (start-to-finish) or " +
|
|
557
|
-
"has a fixed #{dependency.onEnd ? 'end' : 'start'} date.")
|
|
558
|
-
end
|
|
559
|
-
end
|
|
560
|
-
if dependency.gapLength > 0
|
|
561
|
-
if calcLength(@end, limit) < dependency.gapLength
|
|
562
|
-
error('task_succ_after_gl',
|
|
563
|
-
"Task #{@property.fullId} must end " +
|
|
564
|
-
"#{@project.slotsToDays(dependency.gapLength)} " +
|
|
565
|
-
"working days before " +
|
|
566
|
-
"#{dependency.onEnd ? 'end' : 'start'} of task " +
|
|
567
|
-
"#{task.fullId}. TaskJuggler cannot enforce this condition " +
|
|
568
|
-
"because the task is scheduled ASAP (start-to-finish) or " +
|
|
569
|
-
"has a fixed #{dependency.onEnd ? 'end' : 'start'} date.")
|
|
570
|
-
end
|
|
546
|
+
"#{task.fullId}. This condition could not be met.")
|
|
571
547
|
end
|
|
572
548
|
end
|
|
573
549
|
|
|
@@ -994,6 +970,15 @@ class TaskJuggler
|
|
|
994
970
|
# For leaf tasks, propagate start may set the date. Container task dates
|
|
995
971
|
# are only set in scheduleContainer().
|
|
996
972
|
if @property.leaf?
|
|
973
|
+
# If we already have a date, we will only shrink the task period with
|
|
974
|
+
# the new date.
|
|
975
|
+
if (setDate = instance_variable_get('@' + thisEnd)) &&
|
|
976
|
+
atEnd ? date > setDate : date < setDate
|
|
977
|
+
Log.msg { "Preserving #{thisEnd} date of #{typename} " +
|
|
978
|
+
"#{@property.fullId}: #{setDate}" }
|
|
979
|
+
return
|
|
980
|
+
end
|
|
981
|
+
|
|
997
982
|
instance_variable_set(('@' + thisEnd).intern, date)
|
|
998
983
|
typename = 'Task'
|
|
999
984
|
if @durationType == :startEndTask
|
|
@@ -1203,10 +1188,10 @@ class TaskJuggler
|
|
|
1203
1188
|
# task B depends on A and they are specified this way:
|
|
1204
1189
|
# task A: | --> D-
|
|
1205
1190
|
# task B: -D <-- |
|
|
1206
|
-
if @end && startDate > @end
|
|
1207
|
-
error('
|
|
1208
|
-
"Task #{@property.fullId} has
|
|
1209
|
-
"
|
|
1191
|
+
if @end && (startDate.nil? || startDate > @end)
|
|
1192
|
+
error('impossible_start_dep',
|
|
1193
|
+
"Task #{@property.fullId} has start date dependencies " +
|
|
1194
|
+
"that conflict with the end date #{@end}.")
|
|
1210
1195
|
end
|
|
1211
1196
|
|
|
1212
1197
|
startDate
|
|
@@ -1260,10 +1245,10 @@ class TaskJuggler
|
|
|
1260
1245
|
# task A precedes B and they are specified this way:
|
|
1261
1246
|
# task A: | --> D-
|
|
1262
1247
|
# task B: -D <-- |
|
|
1263
|
-
if @start && (endDate.nil? || endDate
|
|
1264
|
-
error('
|
|
1265
|
-
"Task #{@property.fullId} has
|
|
1266
|
-
"
|
|
1248
|
+
if @start && (endDate.nil? || endDate < @start)
|
|
1249
|
+
error('impossible_end_dep',
|
|
1250
|
+
"Task #{@property.fullId} has end date dependencies " +
|
|
1251
|
+
"that conflict with the start date #{@start}.")
|
|
1267
1252
|
end
|
|
1268
1253
|
|
|
1269
1254
|
endDate
|
|
@@ -1341,7 +1326,6 @@ class TaskJuggler
|
|
|
1341
1326
|
query.string = query.scaleLoad(effort)
|
|
1342
1327
|
end
|
|
1343
1328
|
|
|
1344
|
-
|
|
1345
1329
|
# The remaining (as of 'now') effort allocated for the task in the
|
|
1346
1330
|
# specified interval. In case a Resource is given as scope property only
|
|
1347
1331
|
# the effort allocated for this resource is taken into account.
|
|
@@ -1755,7 +1739,7 @@ class TaskJuggler
|
|
|
1755
1739
|
when :lengthTask
|
|
1756
1740
|
bookResources
|
|
1757
1741
|
# The doneLength is only increased for global working time slots.
|
|
1758
|
-
@doneLength += 1 if
|
|
1742
|
+
@doneLength += 1 if onShift?(@currentSlotIdx)
|
|
1759
1743
|
|
|
1760
1744
|
# If we have reached the specified duration or lengths, we set the end
|
|
1761
1745
|
# or start date and propagate the value to neighbouring tasks.
|
|
@@ -1931,11 +1915,6 @@ class TaskJuggler
|
|
|
1931
1915
|
end
|
|
1932
1916
|
|
|
1933
1917
|
@doneEffort += r['efficiency', @scenarioIdx]
|
|
1934
|
-
# Limits do not take efficiency into account. Limits are usage limits,
|
|
1935
|
-
# not effort limits.
|
|
1936
|
-
@allLimits.each do |limit|
|
|
1937
|
-
limit.inc(@currentSlotIdx, resource)
|
|
1938
|
-
end
|
|
1939
1918
|
|
|
1940
1919
|
unless @assignedresources.include?(r)
|
|
1941
1920
|
@assignedresources << r
|
|
@@ -1946,12 +1925,21 @@ class TaskJuggler
|
|
|
1946
1925
|
# the same resources and are potentially delaying the progress of
|
|
1947
1926
|
# this Task.
|
|
1948
1927
|
@competitors << competitor unless @competitors.include?(competitor)
|
|
1928
|
+
@contendedResources[competitor][r] += 1
|
|
1949
1929
|
end
|
|
1950
1930
|
end
|
|
1951
1931
|
|
|
1952
1932
|
booked
|
|
1953
1933
|
end
|
|
1954
1934
|
|
|
1935
|
+
def onShift?(sbIdx)
|
|
1936
|
+
if @shifts && @shifts.assigned?(sbIdx)
|
|
1937
|
+
return @shifts.onShift?(sbIdx)
|
|
1938
|
+
else
|
|
1939
|
+
return @project.isWorkingTime(sbIdx)
|
|
1940
|
+
end
|
|
1941
|
+
end
|
|
1942
|
+
|
|
1955
1943
|
# Check if all of the task limits are not exceded at the given _sbIdx_. If
|
|
1956
1944
|
# a _resource_ is provided, the limit for that particular resource is
|
|
1957
1945
|
# checked. If no resource is provided, only non-resource-specific limits
|
|
@@ -1963,6 +1951,15 @@ class TaskJuggler
|
|
|
1963
1951
|
true
|
|
1964
1952
|
end
|
|
1965
1953
|
|
|
1954
|
+
# Limits do not take efficiency into account. Limits are usage limits, not
|
|
1955
|
+
# effort limits.
|
|
1956
|
+
def incLimits(sbIdx, resource = nil)
|
|
1957
|
+
@allLimits.each do |limit|
|
|
1958
|
+
limit.inc(sbIdx, resource)
|
|
1959
|
+
end
|
|
1960
|
+
end
|
|
1961
|
+
|
|
1962
|
+
|
|
1966
1963
|
# Calculate the number of general working time slots between the TjTime
|
|
1967
1964
|
# objects _d1_ and _d2_.
|
|
1968
1965
|
def calcLength(d1, d2)
|
|
@@ -2041,7 +2038,7 @@ class TaskJuggler
|
|
|
2041
2038
|
startIdx = @project.dateToIdx(date = @start)
|
|
2042
2039
|
endIdx = @project.dateToIdx(@project['now'])
|
|
2043
2040
|
startIdx.upto(endIdx) do |idx|
|
|
2044
|
-
@doneLength += 1 if
|
|
2041
|
+
@doneLength += 1 if onShift?(idx)
|
|
2045
2042
|
date += slotDuration
|
|
2046
2043
|
# Continue not only until the @length has been reached, but also
|
|
2047
2044
|
# the tentativeEnd date. This allows us to detect overbookings.
|
|
@@ -2169,15 +2166,41 @@ class TaskJuggler
|
|
|
2169
2166
|
end
|
|
2170
2167
|
|
|
2171
2168
|
def markAsRunaway
|
|
2172
|
-
warning('runaway', "Task #{@property.fullId} does not fit into " +
|
|
2173
|
-
"project time frame")
|
|
2174
|
-
|
|
2175
2169
|
@isRunAway = true
|
|
2170
|
+
remainingEffort =
|
|
2171
|
+
@project.convertToDailyLoad(@project['scheduleGranularity'] *
|
|
2172
|
+
(@effort - @doneEffort))
|
|
2173
|
+
warning('runaway', "#{remainingEffort}d of effort of task " +
|
|
2174
|
+
"#{@property.fullId} " +
|
|
2175
|
+
"does not fit into the project time frame. ")
|
|
2176
|
+
unless @competitors.empty?
|
|
2177
|
+
multi = @competitors.length > 1
|
|
2178
|
+
info('runaway_tasks',
|
|
2179
|
+
"The following task#{multi ? 's' : ''} " +
|
|
2180
|
+
"compete#{multi ? '' : 's'} for the same resources that " +
|
|
2181
|
+
"this task is requesting: ")
|
|
2182
|
+
@competitors.each do |t|
|
|
2183
|
+
res = @contendedResources[t].to_a
|
|
2184
|
+
res.sort! { |i, j| j[1] <=> i[1] }
|
|
2185
|
+
resList = res.map { |r| "#{r[0].id}(#{r[1]})" }.join(', ')
|
|
2186
|
+
info('runaway_competitor',
|
|
2187
|
+
"Task #{t.fullId} has conflicts for the following " +
|
|
2188
|
+
"resource#{res.length > 1 ? 's' : ''}: #{resList}",
|
|
2189
|
+
t.sourceFileInfo)
|
|
2190
|
+
end
|
|
2191
|
+
end
|
|
2176
2192
|
end
|
|
2177
2193
|
|
|
2178
2194
|
# This function determines if a task is a milestones and marks it
|
|
2179
2195
|
# accordingly.
|
|
2180
2196
|
def markAsMilestone
|
|
2197
|
+
# Containers may not be milestones
|
|
2198
|
+
if @milestone && @property.container?
|
|
2199
|
+
error('container_milestone',
|
|
2200
|
+
"Container task #{@property.fullId} may not be marked " +
|
|
2201
|
+
"as a milestone.")
|
|
2202
|
+
end
|
|
2203
|
+
|
|
2181
2204
|
return if @property.container? || @hasDurationSpec ||
|
|
2182
2205
|
!@booking.empty? || !@allocate.empty?
|
|
2183
2206
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TernarySearchTree.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TextFormatter.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = TextParser.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = MacroTable.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = Pattern.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|