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