taskjuggler 3.0.0 → 3.1.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 +61 -0
- data/README.rdoc +43 -27
- data/data/css/tjreport.css +30 -0
- data/data/tjp.vim +100 -89
- data/examples/ProjectTemplate/template.tjp +338 -0
- data/examples/ToDo-List/todolist.tjp +84 -0
- data/examples/{tutorial.tjp → Tutorial/tutorial.tjp} +9 -7
- data/lib/header.tmpl +1 -1
- data/lib/taskjuggler/Account.rb +2 -2
- data/lib/taskjuggler/AccountCredit.rb +29 -0
- data/lib/taskjuggler/AccountScenario.rb +73 -7
- data/lib/taskjuggler/AlertLevelDefinitions.rb +104 -0
- data/lib/taskjuggler/AlgorithmDiff.rb +2 -2
- data/lib/taskjuggler/Allocation.rb +1 -1
- data/lib/taskjuggler/AppConfig.rb +1 -1
- data/lib/taskjuggler/AttributeBase.rb +1 -1
- data/lib/taskjuggler/AttributeDefinition.rb +1 -1
- data/lib/taskjuggler/Attributes.rb +40 -3
- data/lib/taskjuggler/BatchProcessor.rb +15 -14
- data/lib/taskjuggler/Booking.rb +1 -1
- data/lib/taskjuggler/Charge.rb +2 -2
- data/lib/taskjuggler/ChargeSet.rb +1 -1
- data/lib/taskjuggler/DataCache.rb +24 -12
- data/lib/taskjuggler/FileList.rb +1 -1
- data/lib/taskjuggler/HTMLDocument.rb +1 -1
- data/lib/taskjuggler/HTMLElements.rb +1 -1
- data/lib/taskjuggler/ICalendar.rb +1 -1
- data/lib/taskjuggler/Interval.rb +1 -1
- data/lib/taskjuggler/IntervalList.rb +1 -1
- data/lib/taskjuggler/Journal.rb +61 -41
- data/lib/taskjuggler/KeywordArray.rb +1 -1
- data/lib/taskjuggler/KeywordDocumentation.rb +121 -33
- data/lib/taskjuggler/LeaveList.rb +103 -0
- data/lib/taskjuggler/Limits.rb +1 -1
- data/lib/taskjuggler/Log.rb +6 -3
- data/lib/taskjuggler/LogFile.rb +1 -1
- data/lib/taskjuggler/LogicalExpression.rb +1 -1
- data/lib/taskjuggler/LogicalFunction.rb +16 -2
- data/lib/taskjuggler/LogicalOperation.rb +3 -1
- data/lib/taskjuggler/MessageHandler.rb +13 -4
- data/lib/taskjuggler/PTNProxy.rb +118 -0
- data/lib/taskjuggler/Project.rb +58 -67
- data/lib/taskjuggler/ProjectFileParser.rb +39 -5
- data/lib/taskjuggler/ProjectFileScanner.rb +1 -1
- data/lib/taskjuggler/PropertyList.rb +26 -2
- data/lib/taskjuggler/PropertySet.rb +8 -1
- data/lib/taskjuggler/PropertyTreeNode.rb +36 -32
- data/lib/taskjuggler/Query.rb +1 -1
- data/lib/taskjuggler/RealFormat.rb +4 -2
- data/lib/taskjuggler/Resource.rb +3 -3
- data/lib/taskjuggler/ResourceScenario.rb +219 -140
- data/lib/taskjuggler/RichText.rb +1 -1
- data/lib/taskjuggler/RichText/Document.rb +2 -2
- data/lib/taskjuggler/RichText/Element.rb +2 -2
- data/lib/taskjuggler/RichText/FunctionExample.rb +2 -2
- data/lib/taskjuggler/RichText/FunctionHandler.rb +2 -2
- data/lib/taskjuggler/RichText/Parser.rb +2 -2
- data/lib/taskjuggler/RichText/RTFHandlers.rb +1 -1
- data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
- data/lib/taskjuggler/RichText/RTFQuery.rb +1 -1
- 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 +18 -4
- data/lib/taskjuggler/RichText/Snip.rb +2 -2
- data/lib/taskjuggler/RichText/SyntaxRules.rb +6 -14
- data/lib/taskjuggler/RichText/TOCEntry.rb +16 -7
- data/lib/taskjuggler/RichText/TableOfContents.rb +3 -2
- 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 +1 -1
- data/lib/taskjuggler/SheetHandlerBase.rb +1 -1
- data/lib/taskjuggler/SheetReceiver.rb +1 -1
- data/lib/taskjuggler/SheetSender.rb +3 -3
- data/lib/taskjuggler/Shift.rb +2 -2
- data/lib/taskjuggler/ShiftAssignments.rb +24 -19
- data/lib/taskjuggler/ShiftScenario.rb +4 -4
- 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 +5 -2
- data/lib/taskjuggler/TableColumnDefinition.rb +1 -1
- data/lib/taskjuggler/Task.rb +4 -8
- data/lib/taskjuggler/TaskDependency.rb +1 -1
- data/lib/taskjuggler/TaskJuggler.rb +1 -1
- data/lib/taskjuggler/TaskScenario.rb +131 -51
- data/lib/taskjuggler/TernarySearchTree.rb +6 -4
- data/lib/taskjuggler/TextFormatter.rb +9 -2
- data/lib/taskjuggler/TextParser.rb +13 -3
- data/lib/taskjuggler/TextParser/MacroTable.rb +1 -1
- data/lib/taskjuggler/TextParser/Pattern.rb +52 -8
- data/lib/taskjuggler/TextParser/Rule.rb +11 -5
- 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 +2 -2
- 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 +4 -6
- data/lib/taskjuggler/Tj3AppBase.rb +18 -1
- data/lib/taskjuggler/Tj3Config.rb +4 -4
- data/lib/taskjuggler/Tj3SheetAppBase.rb +1 -1
- data/lib/taskjuggler/TjException.rb +1 -1
- data/lib/taskjuggler/TjTime.rb +1 -1
- data/lib/taskjuggler/TjpExample.rb +1 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +920 -392
- data/lib/taskjuggler/URLParameter.rb +1 -1
- data/lib/taskjuggler/UTF8String.rb +1 -1
- data/lib/taskjuggler/UserManual.rb +1 -1
- data/lib/taskjuggler/VimSyntax.rb +9 -6
- data/lib/taskjuggler/WorkingHours.rb +12 -1
- data/lib/taskjuggler/XMLDocument.rb +1 -1
- data/lib/taskjuggler/XMLElement.rb +1 -1
- data/lib/taskjuggler/apps/Tj3.rb +8 -3
- data/lib/taskjuggler/apps/Tj3Client.rb +1 -1
- data/lib/taskjuggler/apps/Tj3Daemon.rb +1 -1
- data/lib/taskjuggler/apps/Tj3Man.rb +1 -1
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +2 -2
- 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/daemon/Daemon.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 +2 -2
- 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 +115 -0
- data/lib/taskjuggler/reports/CSVFile.rb +1 -1
- data/lib/taskjuggler/reports/CollisionDetector.rb +1 -1
- data/lib/taskjuggler/reports/ColumnTable.rb +1 -1
- data/lib/taskjuggler/reports/GanttChart.rb +1 -1
- data/lib/taskjuggler/reports/GanttContainer.rb +1 -3
- data/lib/taskjuggler/reports/GanttHeader.rb +1 -1
- data/lib/taskjuggler/reports/GanttHeaderScaleItem.rb +1 -1
- data/lib/taskjuggler/reports/GanttLine.rb +23 -12
- 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 +5 -2
- data/lib/taskjuggler/reports/Navigator.rb +1 -1
- data/lib/taskjuggler/reports/NikuReport.rb +1 -1
- data/lib/taskjuggler/reports/Report.rb +29 -4
- data/lib/taskjuggler/reports/ReportBase.rb +15 -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 +3 -5
- data/lib/taskjuggler/reports/StatusSheetReport.rb +2 -2
- data/lib/taskjuggler/reports/TableReport.rb +336 -204
- data/lib/taskjuggler/reports/TableReportColumn.rb +30 -0
- data/lib/taskjuggler/reports/TagFile.rb +2 -2
- data/lib/taskjuggler/reports/TaskListRE.rb +3 -6
- data/lib/taskjuggler/reports/TextReport.rb +1 -1
- data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -3
- data/lib/taskjuggler/reports/TjpExportRE.rb +4 -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/updateheader.sh +4 -1
- data/manual/Getting_Started +7 -4
- data/manual/How_To_Contribute +26 -5
- data/manual/Installation +26 -18
- data/manual/Intro +55 -33
- data/manual/Reporting_Bugs +18 -8
- data/manual/Rich_Text_Attributes +16 -3
- data/manual/Software +2 -2
- data/manual/TaskJuggler_2x_Migration +2 -2
- data/manual/The_TaskJuggler_Syntax +10 -0
- data/manual/Tutorial +2 -2
- data/manual/html/Day_To_Day_Juggling.html +16 -12
- data/manual/html/Getting_Started.html +9 -7
- data/manual/html/How_To_Contribute.html +18 -10
- data/manual/html/Installation.html +18 -15
- data/manual/html/Intro.html +44 -28
- data/manual/html/Reporting_Bugs.html +9 -7
- data/manual/html/Rich_Text_Attributes.html +11 -8
- data/manual/html/Software.html +5 -5
- data/manual/html/TaskJuggler_2x_Migration.html +4 -4
- data/manual/html/TaskJuggler_Internals.html +3 -3
- data/manual/html/The_TaskJuggler_Syntax.html +6 -3
- data/manual/html/Tutorial.html +12 -12
- data/manual/html/account.html +19 -10
- data/manual/html/account.task.html +5 -28
- data/manual/html/accountprefix.html +5 -5
- data/manual/html/{report.html → accountreport.html} +140 -23
- data/manual/html/accountroot.html +142 -0
- data/manual/html/active.html +5 -5
- data/manual/html/adopt.task.html +7 -8
- data/manual/html/aggregate.html +145 -0
- data/manual/html/alert.html +12 -11
- data/manual/html/alertlevels.html +102 -0
- data/manual/html/allocate.html +6 -6
- data/manual/html/alphabet.html +1 -1
- data/manual/html/alternative.html +3 -3
- data/manual/html/author.html +3 -3
- data/manual/html/balance.html +84 -11
- data/manual/html/booking.resource.html +3 -3
- data/manual/html/booking.task.html +3 -3
- data/manual/html/caption.html +6 -4
- data/manual/html/cellcolor.column.html +3 -3
- data/manual/html/celltext.column.html +3 -3
- data/manual/html/center.html +28 -4
- data/manual/html/charge.html +3 -3
- data/manual/html/chargeset.html +5 -5
- data/manual/html/columnid.html +40 -9
- data/manual/html/columns.html +6 -4
- data/manual/html/complete.html +15 -9
- data/manual/html/copyright.html +5 -5
- data/manual/html/{credit.html → credits.html} +15 -12
- data/manual/html/css/tjreport.css +30 -0
- data/manual/html/currency.html +28 -15
- data/manual/html/currencyformat.html +4 -4
- 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 +3 -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 +9 -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 +9 -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 +4 -4
- data/manual/html/end.timesheet.html +3 -3
- data/manual/html/endcredit.html +18 -9
- data/manual/html/epilog.html +6 -4
- data/manual/html/export.html +10 -6
- data/manual/html/extend.html +3 -3
- data/manual/html/fail.html +3 -3
- 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 +6 -4
- 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 +3 -3
- data/manual/html/footer.html +28 -4
- data/manual/html/formats.html +4 -4
- data/manual/html/functions.html +4 -4
- data/manual/html/gapduration.html +3 -3
- data/manual/html/gaplength.html +4 -4
- data/manual/html/halign.center.html +3 -3
- data/manual/html/halign.column.html +3 -3
- 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 +28 -4
- data/manual/html/headline.html +6 -6
- data/manual/html/hideaccount.html +73 -0
- data/manual/html/hidejournalentry.html +6 -6
- data/manual/html/hidereport.html +3 -3
- data/manual/html/hideresource.html +4 -4
- data/manual/html/hidetask.html +4 -4
- data/manual/html/icalreport.html +3 -3
- data/manual/html/include.macro.html +4 -4
- data/manual/html/include.project.html +5 -6
- data/manual/html/include.properties.html +5 -97
- data/manual/html/index.html +2 -2
- data/manual/html/inherit.extend.html +3 -3
- 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 +5 -5
- data/manual/html/{alert level.html → isresponsibilityof.html} +19 -14
- data/manual/html/istask.html +5 -5
- data/manual/html/journalattributes.html +6 -4
- data/manual/html/journalentry.html +3 -3
- data/manual/html/journalmode.html +8 -6
- data/manual/html/leaveallowance.html +139 -0
- data/manual/html/leaves.html +140 -0
- data/manual/html/left.html +30 -6
- data/manual/html/length.html +4 -4
- data/manual/html/limits.allocate.html +5 -32
- 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 +6 -4
- data/manual/html/logicalexpression.html +3 -3
- 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 +23 -5
- data/manual/html/navigator.html +34 -3
- data/manual/html/newtask.html +3 -3
- data/manual/html/nikureport.html +3 -3
- data/manual/html/note.task.html +3 -3
- data/manual/html/now.html +3 -3
- data/manual/html/numberformat.html +4 -4
- data/manual/html/onend.html +3 -3
- data/manual/html/onstart.html +3 -3
- data/manual/html/opennodes.html +6 -4
- data/manual/html/overtime.booking.html +4 -4
- data/manual/html/period.column.html +3 -3
- data/manual/html/period.limit.html +3 -3
- data/manual/html/period.report.html +4 -4
- 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 +9 -3
- data/manual/html/prolog.html +6 -4
- data/manual/html/properties.html +193 -9
- data/manual/html/purge.html +5 -5
- data/manual/html/rate.html +3 -3
- data/manual/html/rate.resource.html +3 -3
- data/manual/html/reference.extend.html +3 -3
- data/manual/html/remaining.html +3 -3
- data/manual/html/replace.html +9 -6
- data/manual/html/reportprefix.html +5 -5
- data/manual/html/resource.html +22 -4
- data/manual/html/resourceattributes.html +6 -6
- data/manual/html/resourceprefix.html +3 -3
- data/manual/html/resourcereport.html +311 -8
- data/manual/html/resourceroot.html +6 -4
- data/manual/html/resources.limit.html +4 -4
- data/manual/html/responsible.html +3 -3
- data/manual/html/richtext.extend.html +3 -3
- data/manual/html/right.html +30 -6
- data/manual/html/rollupaccount.html +69 -0
- data/manual/html/rollupresource.html +6 -6
- 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 +6 -4
- data/manual/html/scenariospecific.extend.html +3 -3
- 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 +6 -4
- data/manual/html/shift.allocate.html +77 -0
- data/manual/html/shift.html +13 -7
- data/manual/html/shift.resource.html +11 -5
- data/manual/html/shift.task.html +9 -3
- data/manual/html/shift.timesheet.html +4 -4
- data/manual/html/shifts.allocate.html +6 -6
- 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 +4 -4
- data/manual/html/sloppy.projection.html +12 -6
- data/manual/html/sortaccounts.html +73 -0
- data/manual/html/sortjournalentries.html +8 -6
- data/manual/html/sortresources.html +4 -4
- data/manual/html/sorttasks.html +4 -4
- 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 +4 -4
- data/manual/html/startcredit.html +10 -4
- data/manual/html/status.statussheet.html +5 -5
- data/manual/html/status.timesheet.html +5 -5
- data/manual/html/statussheet.html +3 -3
- data/manual/html/statussheetreport.html +10 -6
- data/manual/html/strict.projection.html +10 -4
- data/manual/html/summary.html +3 -3
- data/manual/html/supplement.html +5 -5
- data/manual/html/supplement.resource.html +22 -4
- data/manual/html/supplement.task.html +4 -4
- 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 +347 -8
- data/manual/html/taskroot.html +6 -4
- data/manual/html/text.extend.html +3 -3
- data/manual/html/textreport.html +333 -8
- data/manual/html/timeformat.html +4 -4
- data/manual/html/timeoff.nikureport.html +3 -3
- data/manual/html/timesheet.html +3 -3
- data/manual/html/timesheetreport.html +10 -6
- data/manual/html/timezone.export.html +3 -3
- data/manual/html/timezone.html +3 -3
- data/manual/html/timezone.report.html +6 -4
- 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 +4 -4
- data/manual/html/toc.html +1705 -658
- data/manual/html/tooltip.column.html +3 -3
- 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 +4 -4
- data/manual/html/vacation.shift.html +4 -4
- data/manual/html/warn.html +3 -3
- 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 +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 +4 -4
- data/spec/ICalendar_spec.rb +4 -2
- data/spec/IntervalList_spec.rb +1 -1
- data/spec/ProjectBroker_spec.rb +2 -6
- data/spec/StatusSheets_spec.rb +1 -1
- data/spec/TernarySearchTree_spec.rb +2 -2
- data/spec/TimeSheets_spec.rb +1 -1
- data/spec/Tj3Daemon_spec.rb +1 -1
- data/spec/Tj3_spec.rb +1 -1
- data/spec/support/DaemonControl.rb +1 -1
- data/spec/support/spec_helper.rb +19 -0
- data/taskjuggler.gemspec +1 -0
- data/test/MessageChecker.rb +1 -1
- data/test/ReferenceGenerator.rb +1 -1
- data/test/TestSuite/CSV-Reports/Leave.tjp +37 -0
- data/test/TestSuite/CSV-Reports/celltext.tjp +1 -1
- data/test/TestSuite/CSV-Reports/efficiency.tjp +20 -0
- data/test/TestSuite/CSV-Reports/headcount.tjp +31 -0
- data/test/TestSuite/CSV-Reports/refs/Leave.csv +5 -0
- data/test/TestSuite/CSV-Reports/refs/alert.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/celltext.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/efficiency.csv +5 -0
- data/test/TestSuite/CSV-Reports/refs/headcount.csv +4 -0
- data/test/TestSuite/CSV-Reports/refs/sortByTree.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_duration.down.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_effort.up.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/sortBy_plan.start.down.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/taskreport.csv +6 -0
- data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +14 -0
- data/test/TestSuite/CSV-Reports/resourcereport.tjp +1 -1
- data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +1 -1
- data/test/TestSuite/CSV-Reports/sortByTree.tjp +1 -1
- data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +1 -1
- data/test/TestSuite/CSV-Reports/taskreport.tjp +1 -1
- data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +1 -1
- data/test/TestSuite/Export-Reports/refs/AccountReport.tjp +1089 -0
- data/test/TestSuite/Export-Reports/refs/AlertLevels.tjp +24 -0
- data/test/TestSuite/Export-Reports/refs/Complete.tjp +5 -25
- data/test/TestSuite/Export-Reports/refs/navigator.tjp +58 -0
- data/test/TestSuite/Export-Reports/refs/template.tjp +142 -0
- data/test/TestSuite/Export-Reports/refs/textreport.tjp +19 -0
- data/test/TestSuite/ReportGenerator/Correct/Alerts.tjp +26 -7
- data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +177 -141
- data/test/TestSuite/ReportGenerator/Correct/refs/FTE-1.csv +1 -1
- data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
- data/test/TestSuite/Scheduler/Correct/Shift2.tjp +4 -4
- data/test/TestSuite/Syntax/Correct/Account.tjp +23 -10
- data/test/TestSuite/Syntax/Correct/AccountReport.tjp +74 -0
- data/test/TestSuite/Syntax/Correct/AdoptedTasks.tjp +4 -0
- data/test/TestSuite/Syntax/Correct/AlertLevels.tjp +25 -0
- data/test/TestSuite/Syntax/Correct/Celltext.tjp +3 -3
- data/test/TestSuite/Syntax/Correct/Complete.tjp +8 -5
- data/test/TestSuite/Syntax/Correct/Leave.tjp +37 -0
- data/test/TestSuite/Syntax/Correct/Reports.tjp +4 -4
- data/test/TestSuite/Syntax/Correct/Shift.tjp +4 -4
- data/test/TestSuite/Syntax/Correct/manual2example.rb +4 -3
- data/test/TestSuite/Syntax/Correct/navigator.tjp +31 -0
- data/test/TestSuite/Syntax/Correct/template.tjp +338 -0
- data/test/TestSuite/Syntax/Correct/textreport.tjp +21 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +12 -10
- data/test/TestSuite/Syntax/Errors/{adopt_duplicate_child.tjp → adopt_duplicate_child-1.tjp} +0 -0
- data/test/TestSuite/Syntax/Errors/{adopt_common_root.tjp → adopt_duplicate_child-2.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/{adopt_duplicate_parent.tjp → adopt_duplicate_child-3.tjp} +1 -1
- data/test/TestSuite/Syntax/Errors/adopt_self.tjp +7 -0
- data/test/TestSuite/Syntax/Errors/alert_level_redef.tjp +8 -0
- data/test/TestSuite/Syntax/Errors/alert_name_redef.tjp +8 -0
- data/test/TestSuite/Syntax/Errors/too_few_alert_levels.tjp +5 -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 +23 -10
- 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 +42 -15
- data/test/test_Limits.rb +1 -1
- data/test/test_LogicalExpression.rb +1 -1
- data/test/test_MacroTable.rb +8 -3
- 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 +318 -248
- data/test/TestSuite/Syntax/Errors/purge_no_list.tjp +0 -8
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = ShiftScenario.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -32,9 +32,9 @@ class TaskJuggler
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
# Returns true if the shift has a vacation defined for the _date_.
|
|
35
|
-
def
|
|
36
|
-
a('
|
|
37
|
-
if
|
|
35
|
+
def onLeave?(date)
|
|
36
|
+
a('leaves').each do |leave|
|
|
37
|
+
if leave.interval.contains?(date)
|
|
38
38
|
return true
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# = SimpleQueryExpander.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
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
|
# = StatusSheetReceiver.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
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
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
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
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
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
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -33,7 +33,7 @@ class TaskJuggler
|
|
|
33
33
|
# are then cross referenced to capture their relationships. _manual_ is an
|
|
34
34
|
# optional reference to the UserManual object that uses this
|
|
35
35
|
# SyntaxReference.
|
|
36
|
-
def initialize(manual = nil)
|
|
36
|
+
def initialize(manual = nil, ignoreOld = false)
|
|
37
37
|
@manual = manual
|
|
38
38
|
@messageHandler = MessageHandler.new(true)
|
|
39
39
|
@parser = ProjectFileParser.new(@messageHandler)
|
|
@@ -46,6 +46,9 @@ class TaskJuggler
|
|
|
46
46
|
rule.patterns.each do |pattern|
|
|
47
47
|
# Only patterns that are documented are of interest.
|
|
48
48
|
next if pattern.doc.nil?
|
|
49
|
+
# Ignore deprecated and removed keywords if requested
|
|
50
|
+
next if ignoreOld &&
|
|
51
|
+
[ :deprecated, :removed ].include?(pattern.supportLevel)
|
|
49
52
|
|
|
50
53
|
# Make sure each keyword is unique.
|
|
51
54
|
if @keywords.include?(pattern.keyword)
|
|
@@ -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
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
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
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -32,10 +32,6 @@ class TaskJuggler
|
|
|
32
32
|
@data[scenarioIdx].readyForScheduling?
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
def query_journal_sub(query)
|
|
36
|
-
journalText(query, true, true)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
35
|
private
|
|
40
36
|
|
|
41
37
|
# Create a blog-style list of all alert messages that match the Query.
|
|
@@ -59,10 +55,10 @@ class TaskJuggler
|
|
|
59
55
|
if entry.property.is_a?(Task)
|
|
60
56
|
levelRecord = @project['alertLevels'][entry.alertLevel]
|
|
61
57
|
if query.selfContained
|
|
62
|
-
alertName = "<nowiki>[#{levelRecord
|
|
58
|
+
alertName = "<nowiki>[#{levelRecord.name}]</nowiki>"
|
|
63
59
|
else
|
|
64
|
-
alertName = "[[File:icons/flag-#{levelRecord
|
|
65
|
-
"alt=[#{levelRecord
|
|
60
|
+
alertName = "[[File:icons/flag-#{levelRecord.id}.png|" +
|
|
61
|
+
"alt=[#{levelRecord.name}]|text-bottom]]"
|
|
66
62
|
end
|
|
67
63
|
rText += "== #{alertName} <nowiki>#{entry.headline}</nowiki> ==\n" +
|
|
68
64
|
"''Reported on #{entry.date.to_s(query.timeFormat)}'' "
|
|
@@ -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
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
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
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
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
|
# = TaskScenario.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -27,7 +27,7 @@ class TaskJuggler
|
|
|
27
27
|
# time. So make sure some needed attributes really exist so we don't
|
|
28
28
|
# have to check for existance each time we access them.
|
|
29
29
|
%w( allocate assignedresources booking charge chargeset complete
|
|
30
|
-
criticalness depends duration effort end forward length
|
|
30
|
+
criticalness depends duration effort end forward gauge length
|
|
31
31
|
maxend maxstart minend minstart milestone pathcriticalness
|
|
32
32
|
precedes priority scheduled shifts start status ).each do |attr|
|
|
33
33
|
@property[attr, @scenarioIdx]
|
|
@@ -1243,14 +1243,13 @@ class TaskJuggler
|
|
|
1243
1243
|
|
|
1244
1244
|
def query_complete(query)
|
|
1245
1245
|
# If we haven't calculated the value yet, calculate it first.
|
|
1246
|
-
unless
|
|
1246
|
+
unless @complete
|
|
1247
1247
|
calcCompletion
|
|
1248
|
-
complete = @complete
|
|
1249
1248
|
end
|
|
1250
1249
|
|
|
1251
|
-
query.sortable = query.numerical = complete
|
|
1250
|
+
query.sortable = query.numerical = @complete
|
|
1252
1251
|
# For the string output, we only use integer numbers.
|
|
1253
|
-
query.string = "#{complete.to_i}%"
|
|
1252
|
+
query.string = "#{@complete.to_i}%"
|
|
1254
1253
|
end
|
|
1255
1254
|
|
|
1256
1255
|
# Compute the cost generated by this Task for a given Account during a given
|
|
@@ -1338,6 +1337,19 @@ class TaskJuggler
|
|
|
1338
1337
|
query.assignList(list)
|
|
1339
1338
|
end
|
|
1340
1339
|
|
|
1340
|
+
# The number of different resources assigned to the task during the query
|
|
1341
|
+
# interval. Each resource is counted based on their mathematically rounded
|
|
1342
|
+
# efficiency.
|
|
1343
|
+
def query_headcount(query)
|
|
1344
|
+
headcount = 0
|
|
1345
|
+
assignedResources(Interval.new(query.start, query.end)).each do |res|
|
|
1346
|
+
headcount += res['efficiency', @scenarioIdx].round
|
|
1347
|
+
end
|
|
1348
|
+
|
|
1349
|
+
query.sortable = query.numerical = headcount
|
|
1350
|
+
query.string = query.numberFormat.format(headcount)
|
|
1351
|
+
end
|
|
1352
|
+
|
|
1341
1353
|
def query_maxend(query)
|
|
1342
1354
|
queryDateLimit(query, @maxend)
|
|
1343
1355
|
end
|
|
@@ -1386,17 +1398,19 @@ class TaskJuggler
|
|
|
1386
1398
|
# A list of the resources that have been allocated to work on the task in
|
|
1387
1399
|
# the report time frame.
|
|
1388
1400
|
def query_resources(query)
|
|
1389
|
-
return '' unless @property.leaf?
|
|
1390
|
-
|
|
1391
1401
|
list = []
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
@property)
|
|
1402
|
+
iv = TimeInterval.new(query.start, query.end)
|
|
1403
|
+
assignedResources(iv).each do |resource|
|
|
1404
|
+
if resource.allocated?(@scenarioIdx, iv, @property)
|
|
1396
1405
|
if query.listItem
|
|
1397
1406
|
rti = RichText.new(query.listItem, RTFHandlers.create(@project),
|
|
1398
1407
|
@project.messageHandler).
|
|
1399
1408
|
generateIntermediateFormat
|
|
1409
|
+
unless rti
|
|
1410
|
+
error('bad_resource_ts_query',
|
|
1411
|
+
"Syntax error in query statement for task attribute " +
|
|
1412
|
+
"'resources'.")
|
|
1413
|
+
end
|
|
1400
1414
|
q = query.dup
|
|
1401
1415
|
q.property = resource
|
|
1402
1416
|
rti.setQuery(q)
|
|
@@ -1425,12 +1439,16 @@ class TaskJuggler
|
|
|
1425
1439
|
|
|
1426
1440
|
def query_status(query)
|
|
1427
1441
|
# If we haven't calculated the completion yet, calculate it first.
|
|
1428
|
-
if
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1442
|
+
calcStatus if @status.empty?
|
|
1443
|
+
|
|
1444
|
+
query.string = @status
|
|
1445
|
+
end
|
|
1432
1446
|
|
|
1433
|
-
|
|
1447
|
+
def query_gauge(query)
|
|
1448
|
+
# If we haven't calculated the schedule status yet, calculate it first.
|
|
1449
|
+
calcGauge unless @gauge
|
|
1450
|
+
|
|
1451
|
+
query.string = @gauge
|
|
1434
1452
|
end
|
|
1435
1453
|
|
|
1436
1454
|
def query_inputs(query)
|
|
@@ -1611,6 +1629,27 @@ class TaskJuggler
|
|
|
1611
1629
|
false
|
|
1612
1630
|
end
|
|
1613
1631
|
|
|
1632
|
+
# Gather a list of Resource objects that have been assigned to the task
|
|
1633
|
+
# (including sub tasks) for the given Interval _interval_.
|
|
1634
|
+
def assignedResources(interval)
|
|
1635
|
+
list = []
|
|
1636
|
+
|
|
1637
|
+
if @property.container?
|
|
1638
|
+
@property.kids.each do |task|
|
|
1639
|
+
list += task.assignedResources(@scenarioIdx, interval)
|
|
1640
|
+
end
|
|
1641
|
+
list.uniq!
|
|
1642
|
+
else
|
|
1643
|
+
@assignedresources.each do |resource|
|
|
1644
|
+
if resource.allocated?(@scenarioIdx, interval, @property)
|
|
1645
|
+
list << resource
|
|
1646
|
+
end
|
|
1647
|
+
end
|
|
1648
|
+
end
|
|
1649
|
+
|
|
1650
|
+
list
|
|
1651
|
+
end
|
|
1652
|
+
|
|
1614
1653
|
private
|
|
1615
1654
|
|
|
1616
1655
|
def scheduleSlot
|
|
@@ -2143,42 +2182,39 @@ class TaskJuggler
|
|
|
2143
2182
|
# Calculate the current completion degree for tasks that have no user
|
|
2144
2183
|
# specified completion value.
|
|
2145
2184
|
def calcCompletion
|
|
2146
|
-
# If
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
return @complete
|
|
2150
|
-
end
|
|
2185
|
+
# If we already have a value for @complete, we don't need to calculate
|
|
2186
|
+
# anything.
|
|
2187
|
+
return @complete if @complete
|
|
2151
2188
|
|
|
2152
2189
|
# We cannot compute a completion degree without a start or end date.
|
|
2153
2190
|
if @start.nil? || @end.nil?
|
|
2154
2191
|
@complete = 0.0
|
|
2155
|
-
@status = 'unknown'
|
|
2156
2192
|
return nil
|
|
2157
2193
|
end
|
|
2158
2194
|
|
|
2195
|
+
@complete = calcTaskCompletion
|
|
2196
|
+
end
|
|
2197
|
+
|
|
2198
|
+
def calcTaskCompletion
|
|
2159
2199
|
completion = 0.0
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2200
|
+
|
|
2201
|
+
if @property.container?
|
|
2202
|
+
# For container task the completion degree is the average of the
|
|
2203
|
+
# sub tasks.
|
|
2204
|
+
@property.kids.each do |child|
|
|
2205
|
+
return nil unless (comp = child.calcCompletion(@scenarioIdx))
|
|
2206
|
+
completion += comp
|
|
2207
|
+
end
|
|
2208
|
+
completion /= @property.children.length
|
|
2164
2209
|
else
|
|
2165
|
-
#
|
|
2166
|
-
#
|
|
2210
|
+
# For leaf tasks we first compare the start and end dates against the
|
|
2211
|
+
# current date.
|
|
2167
2212
|
if @end <= @project['now']
|
|
2168
2213
|
# The task has ended already. It's 100% complete.
|
|
2169
2214
|
completion = 100.0
|
|
2170
2215
|
elsif @project['now'] <= @start
|
|
2171
2216
|
# The task has not started yet. Its' 0% complete.
|
|
2172
2217
|
completion = 0.0
|
|
2173
|
-
elsif !property.leaf?
|
|
2174
|
-
# For container task the completion degree is the average of the
|
|
2175
|
-
# sub tasks.
|
|
2176
|
-
completion = 0.0
|
|
2177
|
-
@property.kids.each do |child|
|
|
2178
|
-
return nil unless (comp = child.calcCompletion(@scenarioIdx))
|
|
2179
|
-
completion += comp
|
|
2180
|
-
end
|
|
2181
|
-
completion /= @property.children.length
|
|
2182
2218
|
elsif @effort > 0
|
|
2183
2219
|
# Effort based leaf tasks. The completion degree is the percentage
|
|
2184
2220
|
# of effort that has been done already.
|
|
@@ -2189,11 +2225,8 @@ class TaskJuggler
|
|
|
2189
2225
|
completion = done / total * 100.0
|
|
2190
2226
|
else
|
|
2191
2227
|
# Length/duration leaf tasks.
|
|
2192
|
-
completion = ((@project['now'] - @start) /
|
|
2193
|
-
(@end - @start)) * 100.0
|
|
2228
|
+
completion = ((@project['now'] - @start) / (@end - @start)) * 100.0
|
|
2194
2229
|
end
|
|
2195
|
-
@complete = completion
|
|
2196
|
-
calcStatus
|
|
2197
2230
|
end
|
|
2198
2231
|
|
|
2199
2232
|
completion
|
|
@@ -2201,13 +2234,60 @@ class TaskJuggler
|
|
|
2201
2234
|
|
|
2202
2235
|
# Calculate the status of the task based on the 'complete' attribute.
|
|
2203
2236
|
def calcStatus
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2237
|
+
# If the completion degree is not yet available, we need to calculate it
|
|
2238
|
+
# first.
|
|
2239
|
+
calcCompletion unless @complete
|
|
2240
|
+
|
|
2241
|
+
if @complete
|
|
2242
|
+
@status = if @complete == 0.0
|
|
2243
|
+
# Milestones are reached, normal tasks started.
|
|
2244
|
+
@milestone ? 'not reached' : 'not started'
|
|
2245
|
+
elsif @complete >= 100.0
|
|
2246
|
+
'done'
|
|
2247
|
+
else
|
|
2248
|
+
'in progress'
|
|
2249
|
+
end
|
|
2250
|
+
else
|
|
2251
|
+
# The completion degree could not be calculated due to errors. We set
|
|
2252
|
+
# the state to unknown.
|
|
2253
|
+
@status = 'unknown'
|
|
2254
|
+
end
|
|
2255
|
+
end
|
|
2256
|
+
|
|
2257
|
+
# The gauge shows if a task is ahead, behind or on schedule. The measure
|
|
2258
|
+
# is based on the provided 'complete' value and the current date.
|
|
2259
|
+
def calcGauge
|
|
2260
|
+
# If the completion degree is not yet available, we need to calculate it
|
|
2261
|
+
# first.
|
|
2262
|
+
calcCompletion unless @complete
|
|
2263
|
+
|
|
2264
|
+
return @gauge if @gauge
|
|
2265
|
+
|
|
2266
|
+
if @property.container?
|
|
2267
|
+
states = [ 'on schedule', 'ahead of schedule', 'behind schedule',
|
|
2268
|
+
'unknown' ]
|
|
2269
|
+
|
|
2270
|
+
gauge = 0
|
|
2271
|
+
@property.kids.each do |child|
|
|
2272
|
+
if (idx = states.index(child.calcGauge(@scenarioIdx))) > gauge
|
|
2273
|
+
gauge = idx
|
|
2274
|
+
end
|
|
2275
|
+
end
|
|
2276
|
+
@gauge = states[gauge]
|
|
2277
|
+
else
|
|
2278
|
+
@gauge =
|
|
2279
|
+
if (calculatedComplete = calcTaskCompletion).nil?
|
|
2280
|
+
# The completion degree could not be calculated due to errors. We
|
|
2281
|
+
# set the state to unknown.
|
|
2282
|
+
'unknown'
|
|
2283
|
+
elsif @complete == calculatedComplete
|
|
2284
|
+
'on schedule'
|
|
2285
|
+
elsif @complete < calculatedComplete
|
|
2286
|
+
'behind schedule'
|
|
2287
|
+
else
|
|
2288
|
+
'ahead of schedule'
|
|
2289
|
+
end
|
|
2290
|
+
end
|
|
2211
2291
|
end
|
|
2212
2292
|
|
|
2213
2293
|
# Recursively compile a list of Task properties which depend on the
|
|
@@ -2281,9 +2361,9 @@ class TaskJuggler
|
|
|
2281
2361
|
# be TjTime values or Scoreboard indexes. If a Resource _resource_ is given,
|
|
2282
2362
|
# only the turnover directly generated by the resource is taken into
|
|
2283
2363
|
# account.
|
|
2284
|
-
def turnover(startIdx, endIdx, account, resource = nil)
|
|
2364
|
+
def turnover(startIdx, endIdx, account, resource = nil, includeKids = true)
|
|
2285
2365
|
amount = 0.0
|
|
2286
|
-
if @property.container?
|
|
2366
|
+
if @property.container? && includeKids
|
|
2287
2367
|
@property.kids.each do |child|
|
|
2288
2368
|
amount += child.turnover(@scenarioIdx, startIdx, endIdx, account,
|
|
2289
2369
|
resource)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -w
|
|
2
2
|
# encoding: UTF-8
|
|
3
3
|
#
|
|
4
|
-
# =
|
|
4
|
+
# = TernarySearchTree.rb -- The TaskJuggler III Project Management Software
|
|
5
5
|
#
|
|
6
|
-
#
|
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
7
7
|
# by Chris Schlaeger <chris@linux.com>
|
|
8
8
|
#
|
|
9
9
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -85,7 +85,8 @@ class TaskJuggler
|
|
|
85
85
|
if index == maxIdx
|
|
86
86
|
# We've reached the end of the search pattern.
|
|
87
87
|
if partialMatch
|
|
88
|
-
|
|
88
|
+
# The strange looking ('' << val) is for Ruby 1.8 compatibility.
|
|
89
|
+
return collect { |v| str[0..-2] + ('' << v) }
|
|
89
90
|
else
|
|
90
91
|
return str if @last
|
|
91
92
|
end
|
|
@@ -127,7 +128,8 @@ class TaskJuggler
|
|
|
127
128
|
result = []
|
|
128
129
|
|
|
129
130
|
result += @smaller.collect(str, &block) if @smaller
|
|
130
|
-
|
|
131
|
+
# The strange looking ('' << val) is for Ruby 1.8 compatibility.
|
|
132
|
+
newStr = str.nil? ? ('' << @value) : str + ('' << @value)
|
|
131
133
|
result << yield(newStr) if @last
|
|
132
134
|
result += @equal.collect(newStr, &block) if @equal
|
|
133
135
|
result += @larger.collect(str, &block) if @larger
|