taskjuggler 3.4.0 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|