taskjuggler 3.6.0 → 3.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG +69 -0
- data/Rakefile +4 -1
- data/data/css/tjreport.css +4 -0
- data/data/tjp.vim +9 -3
- data/examples/ProjectTemplate/template.tjp +10 -10
- data/examples/Tutorial/tutorial.tjp +4 -4
- data/lib/taskjuggler/Allocation.rb +1 -1
- data/lib/taskjuggler/AppConfig.rb +1 -1
- data/lib/taskjuggler/AttributeBase.rb +10 -4
- data/lib/taskjuggler/Attributes.rb +2 -2
- data/lib/taskjuggler/BatchProcessor.rb +69 -58
- data/lib/taskjuggler/FileList.rb +1 -1
- data/lib/taskjuggler/Interval.rb +10 -12
- data/lib/taskjuggler/Journal.rb +2 -2
- data/lib/taskjuggler/LogicalFunction.rb +1 -1
- data/lib/taskjuggler/LogicalOperation.rb +7 -4
- data/lib/taskjuggler/MessageHandler.rb +1 -2
- data/lib/taskjuggler/PTNProxy.rb +1 -1
- data/lib/taskjuggler/Project.rb +27 -22
- data/lib/taskjuggler/PropertyList.rb +7 -1
- data/lib/taskjuggler/PropertySet.rb +1 -1
- data/lib/taskjuggler/PropertyTreeNode.rb +5 -3
- data/lib/taskjuggler/Query.rb +3 -3
- data/lib/taskjuggler/RealFormat.rb +1 -1
- data/lib/taskjuggler/Resource.rb +2 -2
- data/lib/taskjuggler/ResourceScenario.rb +66 -6
- data/lib/taskjuggler/RichText/Snip.rb +1 -1
- data/lib/taskjuggler/RuntimeConfig.rb +2 -2
- data/lib/taskjuggler/Scoreboard.rb +5 -2
- data/lib/taskjuggler/SheetHandlerBase.rb +5 -4
- data/lib/taskjuggler/Shift.rb +2 -2
- data/lib/taskjuggler/ShiftAssignments.rb +1 -1
- data/lib/taskjuggler/StatusSheetReceiver.rb +2 -2
- data/lib/taskjuggler/StatusSheetSender.rb +1 -1
- data/lib/taskjuggler/TaskJuggler.rb +4 -4
- data/lib/taskjuggler/TaskScenario.rb +7 -2
- data/lib/taskjuggler/TextParser/Scanner.rb +4 -4
- data/lib/taskjuggler/TextParser.rb +1 -1
- data/lib/taskjuggler/TimeSheetReceiver.rb +2 -2
- data/lib/taskjuggler/TimeSheetSender.rb +1 -1
- data/lib/taskjuggler/TimeSheets.rb +5 -4
- data/lib/taskjuggler/Tj3AppBase.rb +23 -9
- data/lib/taskjuggler/Tj3Config.rb +5 -3
- data/lib/taskjuggler/TjpExample.rb +3 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +166 -133
- data/lib/taskjuggler/UTF8String.rb +3 -3
- data/lib/taskjuggler/WorkingHours.rb +3 -3
- data/lib/taskjuggler/XMLDocument.rb +1 -1
- data/lib/taskjuggler/XMLElement.rb +12 -1
- data/lib/taskjuggler/apps/Tj3.rb +3 -1
- data/lib/taskjuggler/apps/Tj3Client.rb +3 -2
- data/lib/taskjuggler/apps/Tj3Daemon.rb +5 -3
- data/lib/taskjuggler/apps/Tj3Man.rb +4 -2
- data/lib/taskjuggler/apps/Tj3SsReceiver.rb +3 -1
- data/lib/taskjuggler/apps/Tj3SsSender.rb +3 -1
- data/lib/taskjuggler/apps/Tj3TsReceiver.rb +3 -1
- data/lib/taskjuggler/apps/Tj3TsSender.rb +3 -1
- data/lib/taskjuggler/apps/Tj3TsSummary.rb +3 -1
- data/lib/taskjuggler/apps/Tj3WebD.rb +4 -2
- data/lib/taskjuggler/daemon/ProjectServer.rb +2 -2
- data/lib/taskjuggler/deep_copy.rb +1 -1
- data/lib/taskjuggler/reports/CSVFile.rb +4 -4
- data/lib/taskjuggler/reports/ChartPlotter.rb +1 -1
- data/lib/taskjuggler/reports/GanttChart.rb +8 -2
- data/lib/taskjuggler/reports/GanttHeader.rb +11 -1
- data/lib/taskjuggler/reports/GanttLine.rb +6 -0
- data/lib/taskjuggler/reports/ICalReport.rb +1 -1
- data/lib/taskjuggler/reports/MspXmlRE.rb +5 -3
- data/lib/taskjuggler/reports/Report.rb +6 -6
- data/lib/taskjuggler/reports/ReportTableCell.rb +1 -1
- data/lib/taskjuggler/reports/TableReport.rb +7 -12
- data/lib/taskjuggler/reports/TjpExportRE.rb +1 -5
- data/lib/taskjuggler/reports/TraceReport.rb +2 -2
- data/lib/taskjuggler/version.rb +1 -0
- data/man/tj3.1 +130 -0
- data/man/tj3client.1 +145 -0
- data/man/tj3d.1 +93 -0
- data/man/tj3man.1 +76 -0
- data/man/tj3ss_receiver.1 +86 -0
- data/man/tj3ss_sender.1 +100 -0
- data/man/tj3ts_receiver.1 +86 -0
- data/man/tj3ts_sender.1 +92 -0
- data/man/tj3ts_summary.1 +104 -0
- data/man/tj3webd.1 +86 -0
- data/manual/Day_To_Day_Juggling +8 -8
- data/manual/Installation +6 -6
- data/manual/List_Attributes +1 -1
- data/manual/Rich_Text_Attributes +6 -5
- data/manual/Software +6 -6
- data/manual/TaskJuggler_Internals +4 -4
- data/manual/The_TaskJuggler_Syntax +5 -5
- data/manual/Tutorial +13 -11
- data/manual/html/Day_To_Day_Juggling.html +9 -9
- data/manual/html/Getting_Started.html +2 -2
- data/manual/html/How_To_Contribute.html +2 -2
- data/manual/html/Installation.html +8 -8
- data/manual/html/Intro.html +2 -2
- data/manual/html/List_Attributes.html +3 -3
- data/manual/html/Reporting_Bugs.html +2 -2
- data/manual/html/Rich_Text_Attributes.html +5 -5
- data/manual/html/Software.html +7 -7
- data/manual/html/TaskJuggler_2x_Migration.html +2 -2
- data/manual/html/TaskJuggler_Internals.html +6 -6
- data/manual/html/The_TaskJuggler_Syntax.html +6 -6
- data/manual/html/Tutorial.html +17 -14
- data/manual/html/account.html +3 -3
- data/manual/html/account.task.html +2 -2
- data/manual/html/accountprefix.html +2 -2
- data/manual/html/accountreport.html +3 -3
- data/manual/html/accountroot.html +2 -2
- data/manual/html/active.html +3 -3
- data/manual/html/adopt.task.html +2 -2
- data/manual/html/aggregate.html +2 -2
- data/manual/html/alert.html +3 -3
- data/manual/html/alertlevels.html +2 -2
- data/manual/html/allocate.html +3 -3
- data/manual/html/alphabet.html +1 -1
- data/manual/html/alternative.html +2 -2
- data/manual/html/author.html +2 -2
- data/manual/html/auxdir.html +2 -2
- data/manual/html/auxdir.report.html +2 -2
- data/manual/html/balance.html +2 -2
- data/manual/html/booking.resource.html +4 -4
- data/manual/html/booking.task.html +4 -4
- data/manual/html/caption.html +2 -2
- data/manual/html/cellcolor.column.html +3 -3
- data/manual/html/celltext.column.html +3 -3
- data/manual/html/center.html +2 -2
- data/manual/html/charge.html +2 -2
- data/manual/html/chargeset.html +2 -2
- data/manual/html/columnid.html +21 -14
- data/manual/html/columns.html +2 -2
- data/manual/html/complete.html +2 -2
- data/manual/html/copyright.html +2 -2
- data/manual/html/credits.html +2 -2
- data/manual/html/css/tjreport.css +4 -0
- data/manual/html/currency.html +2 -2
- data/manual/html/currencyformat.html +3 -3
- data/manual/html/dailymax.html +2 -2
- data/manual/html/dailymin.html +3 -3
- data/manual/html/dailyworkinghours.html +2 -2
- data/manual/html/date.extend.html +2 -2
- data/manual/html/date.html +5 -5
- data/manual/html/definitions.html +4 -4
- data/manual/html/depends.html +4 -4
- data/manual/html/details.html +2 -2
- data/manual/html/disabled.html +2 -2
- data/manual/html/duration.html +2 -2
- data/manual/html/efficiency.html +3 -3
- data/manual/html/effort.html +2 -2
- data/manual/html/effortdone.html +2 -2
- data/manual/html/effortleft.html +2 -2
- data/manual/html/email.html +2 -2
- data/manual/html/enabled.html +2 -2
- data/manual/html/end.column.html +3 -3
- data/manual/html/end.html +4 -4
- data/manual/html/end.limit.html +2 -2
- data/manual/html/end.report.html +2 -2
- data/manual/html/end.timesheet.html +3 -3
- data/manual/html/endcredit.html +3 -3
- data/manual/html/epilog.html +2 -2
- data/manual/html/export.html +3 -3
- data/manual/html/extend.html +3 -3
- data/manual/html/fail.html +3 -3
- data/manual/html/fdl.html +2 -2
- data/manual/html/flags.account.html +2 -2
- data/manual/html/flags.html +2 -2
- data/manual/html/flags.journalentry.html +2 -2
- data/manual/html/flags.report.html +2 -2
- data/manual/html/flags.resource.html +2 -2
- data/manual/html/flags.statussheet.html +2 -2
- data/manual/html/flags.task.html +2 -2
- data/manual/html/flags.timesheet.html +2 -2
- data/manual/html/fontcolor.column.html +3 -3
- data/manual/html/footer.html +2 -2
- data/manual/html/formats.export.html +3 -3
- data/manual/html/formats.html +3 -3
- data/manual/html/functions.html +5 -5
- data/manual/html/gapduration.html +2 -2
- data/manual/html/gaplength.html +2 -2
- data/manual/html/halign.center.html +2 -2
- data/manual/html/halign.column.html +3 -3
- data/manual/html/halign.left.html +2 -2
- data/manual/html/halign.right.html +2 -2
- data/manual/html/hasalert.html +2 -2
- data/manual/html/header.html +2 -2
- data/manual/html/headline.html +2 -2
- data/manual/html/height.html +3 -3
- data/manual/html/hideaccount.html +3 -3
- data/manual/html/hidejournalentry.html +2 -2
- data/manual/html/hidereport.html +3 -3
- data/manual/html/hideresource.html +3 -3
- data/manual/html/hidetask.html +3 -3
- data/manual/html/icalreport.html +9 -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 +1 -1
- 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 +2 -2
- data/manual/html/interval4.html +2 -2
- data/manual/html/isactive.html +2 -2
- data/manual/html/ischildof.html +2 -2
- data/manual/html/isdependencyof.html +2 -2
- data/manual/html/isdutyof.html +2 -2
- data/manual/html/isfeatureof.html +2 -2
- data/manual/html/isleaf.html +2 -2
- data/manual/html/ismilestone.html +2 -2
- data/manual/html/isongoing.html +3 -3
- data/manual/html/isresource.html +2 -2
- data/manual/html/isresponsibilityof.html +2 -2
- data/manual/html/istask.html +2 -2
- data/manual/html/isvalid.html +2 -2
- data/manual/html/journalattributes.html +2 -2
- 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 +2 -2
- data/manual/html/length.html +3 -3
- data/manual/html/limits.allocate.html +2 -2
- data/manual/html/limits.html +2 -2
- data/manual/html/limits.resource.html +2 -2
- data/manual/html/limits.task.html +2 -2
- data/manual/html/listitem.column.html +3 -3
- data/manual/html/listtype.column.html +2 -2
- data/manual/html/loadunit.html +2 -2
- data/manual/html/logicalexpression.html +4 -4
- data/manual/html/logicalflagexpression.html +4 -4
- data/manual/html/macro.html +4 -4
- data/manual/html/managers.html +2 -2
- data/manual/html/mandatory.html +4 -4
- data/manual/html/markdate.html +69 -0
- data/manual/html/maxend.html +4 -4
- data/manual/html/maximum.html +2 -2
- data/manual/html/maxstart.html +2 -2
- data/manual/html/milestone.html +3 -3
- data/manual/html/minend.html +2 -2
- data/manual/html/minimum.html +2 -2
- data/manual/html/minstart.html +2 -2
- data/manual/html/monthlymax.html +2 -2
- data/manual/html/monthlymin.html +3 -3
- data/manual/html/navbar.html +5 -1
- data/manual/html/navigator.html +2 -2
- data/manual/html/newtask.html +3 -3
- data/manual/html/nikureport.html +2 -2
- data/manual/html/note.task.html +4 -4
- data/manual/html/novevents.html +68 -0
- data/manual/html/now.html +4 -4
- data/manual/html/number.extend.html +2 -2
- data/manual/html/numberformat.html +2 -2
- data/manual/html/onend.html +2 -2
- data/manual/html/onstart.html +2 -2
- data/manual/html/opennodes.html +2 -2
- data/manual/html/outputdir.html +3 -3
- data/manual/html/overtime.booking.html +2 -2
- data/manual/html/period.column.html +2 -2
- data/manual/html/period.limit.html +2 -2
- data/manual/html/period.report.html +2 -2
- data/manual/html/period.task.html +2 -2
- data/manual/html/persistent.html +3 -3
- data/manual/html/precedes.html +5 -5
- data/manual/html/priority.html +4 -4
- data/manual/html/priority.timesheet.html +3 -3
- data/manual/html/project.html +4 -4
- data/manual/html/projectid.html +2 -2
- data/manual/html/projectid.task.html +3 -3
- data/manual/html/projectids.html +2 -2
- data/manual/html/projection.html +2 -2
- data/manual/html/prolog.html +2 -2
- data/manual/html/properties.html +3 -3
- data/manual/html/purge.html +2 -2
- data/manual/html/rate.html +2 -2
- data/manual/html/rate.resource.html +2 -2
- data/manual/html/rawhtmlhead.html +3 -3
- data/manual/html/reference.extend.html +2 -2
- data/manual/html/remaining.html +3 -3
- data/manual/html/replace.html +2 -2
- data/manual/html/reportprefix.html +2 -2
- data/manual/html/resource.html +3 -3
- data/manual/html/resourceattributes.html +2 -2
- data/manual/html/resourceprefix.html +2 -2
- data/manual/html/resourcereport.html +4 -4
- data/manual/html/resourceroot.html +3 -3
- data/manual/html/resources.limit.html +2 -2
- data/manual/html/responsible.html +2 -2
- data/manual/html/richtext.extend.html +2 -2
- data/manual/html/right.html +2 -2
- data/manual/html/rollupaccount.html +3 -3
- data/manual/html/rollupresource.html +3 -3
- data/manual/html/rolluptask.html +3 -3
- data/manual/html/scale.column.html +2 -2
- data/manual/html/scenario.html +3 -3
- data/manual/html/scenario.ical.html +3 -3
- data/manual/html/scenarios.export.html +2 -2
- data/manual/html/scenarios.html +2 -2
- data/manual/html/scenariospecific.extend.html +2 -2
- data/manual/html/scheduled.html +2 -2
- data/manual/html/scheduling.html +6 -6
- data/manual/html/schedulingmode.html +2 -2
- data/manual/html/select.html +4 -4
- data/manual/html/selfcontained.html +2 -2
- data/manual/html/shift.allocate.html +2 -2
- data/manual/html/shift.html +3 -3
- data/manual/html/shift.resource.html +4 -4
- data/manual/html/shift.task.html +2 -2
- data/manual/html/shift.timesheet.html +2 -2
- data/manual/html/shifts.allocate.html +2 -2
- data/manual/html/shifts.resource.html +2 -2
- data/manual/html/shifts.task.html +3 -3
- data/manual/html/shorttimeformat.html +3 -3
- data/manual/html/sloppy.booking.html +2 -2
- data/manual/html/sloppy.projection.html +2 -2
- data/manual/html/sortaccounts.html +2 -2
- data/manual/html/sortjournalentries.html +2 -2
- data/manual/html/sortresources.html +2 -2
- data/manual/html/sorttasks.html +2 -2
- data/manual/html/start.column.html +3 -3
- data/manual/html/start.html +4 -4
- data/manual/html/start.limit.html +2 -2
- data/manual/html/start.report.html +2 -2
- data/manual/html/startcredit.html +3 -3
- data/manual/html/status.statussheet.html +2 -2
- data/manual/html/status.timesheet.html +2 -2
- data/manual/html/statussheet.html +2 -2
- data/manual/html/statussheetreport.html +3 -3
- data/manual/html/strict.projection.html +2 -2
- data/manual/html/summary.html +2 -2
- data/manual/html/supplement.html +2 -2
- data/manual/html/supplement.resource.html +2 -2
- data/manual/html/supplement.task.html +2 -2
- 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 +2 -2
- data/manual/html/taskattributes.html +2 -2
- data/manual/html/taskprefix.html +2 -2
- data/manual/html/taskreport.html +4 -4
- data/manual/html/taskroot.export.html +2 -2
- data/manual/html/taskroot.html +2 -2
- data/manual/html/text.extend.html +2 -2
- data/manual/html/textreport.html +4 -4
- data/manual/html/timeformat.html +3 -3
- data/manual/html/timeformat1.html +2 -2
- data/manual/html/timeformat2.html +2 -2
- data/manual/html/timeoff.nikureport.html +2 -2
- data/manual/html/timesheet.html +3 -3
- data/manual/html/timesheetreport.html +3 -3
- data/manual/html/timezone.export.html +2 -2
- data/manual/html/timezone.html +2 -2
- data/manual/html/timezone.report.html +2 -2
- data/manual/html/timezone.shift.html +2 -2
- data/manual/html/timingresolution.html +2 -2
- data/manual/html/title.column.html +2 -2
- data/manual/html/title.html +2 -2
- data/manual/html/toc.html +157 -143
- data/manual/html/tooltip.column.html +3 -3
- data/manual/html/tracereport.html +7 -7
- data/manual/html/trackingscenario.html +3 -3
- data/manual/html/treelevel.html +2 -2
- data/manual/html/vacation.html +2 -2
- data/manual/html/vacation.resource.html +2 -2
- data/manual/html/vacation.shift.html +2 -2
- data/manual/html/warn.html +4 -4
- data/manual/html/weeklymax.html +2 -2
- data/manual/html/weeklymin.html +3 -3
- data/manual/html/weekstartsmonday.html +2 -2
- data/manual/html/weekstartssunday.html +2 -2
- data/manual/html/width.column.html +2 -2
- 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 +2 -2
- data/manual/html/workinghours.shift.html +2 -2
- data/manual/html/yearlyworkingdays.html +2 -2
- data/spec/ProjectBroker_spec.rb +6 -6
- data/spec/StatusSheets_spec.rb +1 -1
- data/spec/TimeSheets_spec.rb +1 -1
- data/spec/TraceReport_spec.rb +1 -1
- data/spec/support/DaemonControl.rb +2 -3
- data/taskjuggler.gemspec +7 -10
- data/tasks/changelog.rake +2 -0
- data/tasks/gem.rake +3 -1
- data/tasks/help2man.rake +18 -0
- data/tasks/kate.rake +2 -0
- data/tasks/manual.rake +3 -1
- data/tasks/test.rake +5 -0
- data/tasks/vim.rake +2 -0
- data/test/TestSuite/CSV-Reports/quotes.tjp +20 -0
- data/test/TestSuite/CSV-Reports/refs/quotes.csv +5 -0
- data/test/TestSuite/Export-Reports/refs/AccountReport.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/AdoptedTasks.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/AlertLevels.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Allocate-1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/AutoID.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/AutoMacros.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Currencyformat.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Depends1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Durations.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Efficiency.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Gap.tjp +0 -3
- data/test/TestSuite/Export-Reports/refs/Include.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Journal.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Macro-1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Macro-3.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Manager.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Milestone.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Numberformat.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Precedes1.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Project.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/ProjectIDs.tjp +0 -3
- data/test/TestSuite/Export-Reports/refs/Reports.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Resource.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/ResourceRoot.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/RollupResource.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Scenario.tjp +0 -2
- data/test/TestSuite/Export-Reports/refs/Timezone.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/Vacation.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/navigator.tjp +0 -4
- data/test/TestSuite/Export-Reports/refs/template.tjp +0 -6
- data/test/TestSuite/Export-Reports/refs/textreport.tjp +0 -1
- data/test/TestSuite/Export-Reports/refs/tutorial.tjp +0 -8
- data/test/TestSuite/Syntax/Correct/Booking.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/Currencyformat.tjp +1 -1
- data/test/TestSuite/Syntax/Correct/template.tjp +3 -3
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +8 -3
- data/test/test_BatchProcessor.rb +6 -3
- data/test/test_ProjectFileScanner.rb +8 -8
- metadata +47 -11
@@ -29,7 +29,7 @@ class TaskJuggler
|
|
29
29
|
attr_accessor :maxCpuCores, :warnTsDeltas, :generateTraces
|
30
30
|
|
31
31
|
# Create a new TaskJuggler object. _console_ is a boolean that determines
|
32
|
-
# whether or not
|
32
|
+
# whether or not messages can be written to $stderr.
|
33
33
|
def initialize
|
34
34
|
@project = nil
|
35
35
|
@parser = nil
|
@@ -141,7 +141,7 @@ class TaskJuggler
|
|
141
141
|
res
|
142
142
|
end
|
143
143
|
|
144
|
-
# Generate all specified reports. The project must have
|
144
|
+
# Generate all specified reports. The project must have been scheduled before
|
145
145
|
# this method can be called. It returns true if no error occured, false
|
146
146
|
# otherwise.
|
147
147
|
def generateReports(outputDir = nil)
|
@@ -289,7 +289,7 @@ class TaskJuggler
|
|
289
289
|
end
|
290
290
|
|
291
291
|
# Check the content of the file _fileName_ and interpret it as a time sheet.
|
292
|
-
# If the sheet is
|
292
|
+
# If the sheet is syntactically correct and matches the loaded project, true
|
293
293
|
# is returned. Otherwise false.
|
294
294
|
def checkTimeSheet(fileName)
|
295
295
|
begin
|
@@ -333,7 +333,7 @@ class TaskJuggler
|
|
333
333
|
end
|
334
334
|
|
335
335
|
# Check the content of the file _fileName_ and interpret it as a status
|
336
|
-
# sheet. If the sheet is
|
336
|
+
# sheet. If the sheet is syntactically correct and matches the loaded
|
337
337
|
# project, true is returned. Otherwise false.
|
338
338
|
def checkStatusSheet(fileName)
|
339
339
|
begin
|
@@ -1508,6 +1508,7 @@ class TaskJuggler
|
|
1508
1508
|
end
|
1509
1509
|
q = query.dup
|
1510
1510
|
q.property = resource
|
1511
|
+
q.scopeProperty = @property
|
1511
1512
|
rti.setQuery(q)
|
1512
1513
|
list << "<nowiki>#{rti.to_s}</nowiki>"
|
1513
1514
|
else
|
@@ -2179,8 +2180,12 @@ class TaskJuggler
|
|
2179
2180
|
# been set already.
|
2180
2181
|
if @scheduled && @effort == 0 && @length == 0 && @duration == 0 &&
|
2181
2182
|
!@milestone
|
2182
|
-
@start
|
2183
|
-
|
2183
|
+
unless @start || !firstSlotIdx
|
2184
|
+
@start = @project.idxToDate(firstSlotIdx)
|
2185
|
+
end
|
2186
|
+
unless @end || !lastSlotIdx
|
2187
|
+
@end = @project.idxToDate(lastSlotIdx + 1)
|
2188
|
+
end
|
2184
2189
|
end
|
2185
2190
|
end
|
2186
2191
|
|
@@ -43,9 +43,9 @@ class TaskJuggler::TextParser
|
|
43
43
|
|
44
44
|
# This class is used to handle the low-level input operations. It knows
|
45
45
|
# whether it deals with a text buffer or a file and abstracts this to the
|
46
|
-
# Scanner. For each nested file the scanner puts
|
46
|
+
# Scanner. For each nested file the scanner puts a StreamHandle on the
|
47
47
|
# stack while the file is scanned. With this stack the scanner can resume
|
48
|
-
# the processing of the enclosing file once the included files
|
48
|
+
# the processing of the enclosing file once the included files have been
|
49
49
|
# completely processed.
|
50
50
|
class StreamHandle
|
51
51
|
|
@@ -169,7 +169,7 @@ class TaskJuggler::TextParser
|
|
169
169
|
|
170
170
|
def initialize(fileName, log, textScanner)
|
171
171
|
super(log, textScanner)
|
172
|
-
@fileName = fileName.dup
|
172
|
+
@fileName = fileName.dup
|
173
173
|
data = (fileName == '.' ? $stdin : File.new(@fileName, 'r')).read
|
174
174
|
begin
|
175
175
|
@stream = StringIO.new(data.forceUTF8Encoding)
|
@@ -281,7 +281,7 @@ class TaskJuggler::TextParser
|
|
281
281
|
end
|
282
282
|
|
283
283
|
|
284
|
-
# Start the processing.
|
284
|
+
# Start the processing. If _fileNameIsBuffer_ is true, we operate on a
|
285
285
|
# String, else on a File.
|
286
286
|
def open(fileNameIsBuffer = false)
|
287
287
|
@fileNameIsBuffer = fileNameIsBuffer
|
@@ -123,7 +123,7 @@ class TaskJuggler
|
|
123
123
|
# Add a new rule to the rule set. _name_ must be a unique identifier. The
|
124
124
|
# function also sets the class variable @cr to the new rule. Subsequent
|
125
125
|
# calls to TextParser#pattern, TextParser#optional or
|
126
|
-
# TextParser#repeatable will then
|
126
|
+
# TextParser#repeatable will then implicitly operate on the most recently
|
127
127
|
# added rule.
|
128
128
|
def newRule(name)
|
129
129
|
# Use a symbol instead of a String.
|
@@ -32,9 +32,9 @@ class TaskJuggler
|
|
32
32
|
@logFile = 'timesheets.log'
|
33
33
|
|
34
34
|
# Regular expression to identify time sheets.
|
35
|
-
@sheetHeader = /^[ ]*timesheet\s([a-
|
35
|
+
@sheetHeader = /^[ ]*timesheet\s([a-zA-Z_][a-zA-Z0-9_]*)\s[0-9\-:+]*\s-\s([0-9]*-[0-9]*-[0-9]*)/
|
36
36
|
# Regular expression to extract the sheet signature (time period).
|
37
|
-
@signatureFilter = /^[ ]*timesheet\s[a-
|
37
|
+
@signatureFilter = /^[ ]*timesheet\s[a-zA-Z_][a-zA-Z0-9_]*\s([0-9:\-+]*\s-\s[0-9:\-+]*)/
|
38
38
|
@emailSubject = "Report from %s for %s"
|
39
39
|
end
|
40
40
|
|
@@ -38,7 +38,7 @@ class TaskJuggler
|
|
38
38
|
# The log file
|
39
39
|
@logFile = 'timesheets.log'
|
40
40
|
|
41
|
-
@signatureFilter = /^[ ]*timesheet\s[a-
|
41
|
+
@signatureFilter = /^[ ]*timesheet\s[a-zA-Z_][a-zA-Z0-9_]*\s([0-9:\-+]*\s-\s[0-9:\-+]*)/
|
42
42
|
@introText = <<'EOT'
|
43
43
|
Please find enclosed your weekly report template. Please fill out
|
44
44
|
the form and send it back to the sender of this email. You can either
|
@@ -46,11 +46,11 @@ class TaskJuggler
|
|
46
46
|
@sourceFileInfo = nil
|
47
47
|
end
|
48
48
|
|
49
|
-
# Store the number of worked time slots. If the value is
|
49
|
+
# Store the number of worked time slots. If the value is an Integer, it can
|
50
50
|
# be directly assigned. A Float is interpreted as percentage and must be
|
51
51
|
# in the rage of 0.0 to 1.0.
|
52
52
|
def work=(value)
|
53
|
-
if value.is_a?(
|
53
|
+
if value.is_a?(Integer)
|
54
54
|
@work = value
|
55
55
|
else
|
56
56
|
# Must be percent value
|
@@ -325,9 +325,10 @@ class TaskJuggler
|
|
325
325
|
def totalGrossWorkingSlots
|
326
326
|
project = @resource.project
|
327
327
|
# Calculate the number of weeks in the report
|
328
|
-
weeksToReport = (@interval.end - @interval.start) /
|
328
|
+
weeksToReport = (@interval.end - @interval.start).to_f /
|
329
|
+
(60 * 60 * 24 * 7)
|
329
330
|
|
330
|
-
daysToSlots(project.weeklyWorkingDays * weeksToReport)
|
331
|
+
daysToSlots((project.weeklyWorkingDays * weeksToReport).to_i)
|
331
332
|
end
|
332
333
|
|
333
334
|
# Compute the total number of actual working time slots of the
|
@@ -51,16 +51,15 @@ class TaskJuggler
|
|
51
51
|
@opts.summary_width = @optsSummaryWidth
|
52
52
|
@opts.summary_indent = ' ' * @optsSummaryIndent
|
53
53
|
|
54
|
-
@opts.banner = "#{AppConfig.
|
55
|
-
"#{AppConfig.packageInfo}\n\n" +
|
56
|
-
"Copyright (c) #{AppConfig.copyright.join(', ')}\n" +
|
54
|
+
@opts.banner = "Copyright (c) #{AppConfig.copyright.join(', ')}\n" +
|
57
55
|
" by #{AppConfig.authors.join(', ')}\n\n" +
|
58
56
|
"#{AppConfig.license}\n" +
|
59
57
|
"For more info about #{AppConfig.softwareName} see " +
|
60
58
|
"#{AppConfig.contact}\n\n" +
|
61
59
|
"Usage: #{AppConfig.appName} [options] " +
|
62
60
|
"#{@mandatoryArgs}\n\n"
|
63
|
-
|
61
|
+
|
62
|
+
@opts.separator "\nOptions:"
|
64
63
|
@opts.on('-c', '--config <FILE>', String,
|
65
64
|
format('Use the specified YAML configuration file')) do |arg|
|
66
65
|
@configFile = arg
|
@@ -75,7 +74,7 @@ class TaskJuggler
|
|
75
74
|
format(<<'EOT'
|
76
75
|
Don't use ANSI contol sequences to color the terminal output. Colors should
|
77
76
|
only be used when spooling to an ANSI terminal. In case the detection fails,
|
78
|
-
you can this option to force colors to be off.
|
77
|
+
you can use this option to force colors to be off.
|
79
78
|
EOT
|
80
79
|
)) do
|
81
80
|
Term::ANSIColor::coloring = false
|
@@ -91,8 +90,23 @@ EOT
|
|
91
90
|
quit
|
92
91
|
end
|
93
92
|
@opts.on_tail('--version', format('Show version info')) do
|
94
|
-
|
95
|
-
|
93
|
+
# Display the software name and version in GNU format
|
94
|
+
# as expected by help2man
|
95
|
+
# https://www.gnu.org/prep/standards/standards.html#g_t_002d_002dversion
|
96
|
+
puts "#{AppConfig.appName} (#{AppConfig.softwareName}) #{AppConfig.version}\n"
|
97
|
+
# To also display the copyright and license statements in GNU format
|
98
|
+
# uncomment the following and remove the equivalent statements from
|
99
|
+
# --help
|
100
|
+
# +
|
101
|
+
#<<'EOT'
|
102
|
+
#Copyright (C) 2016 Chris Schlaeger <cs@taskjuggler.org>
|
103
|
+
#License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>
|
104
|
+
#This is free software; you can redistribute it and/or modify it under
|
105
|
+
#the terms of version 2 of the GNU General Public License as published by the
|
106
|
+
#Free Software Foundation.
|
107
|
+
#
|
108
|
+
#For more info about TaskJuggler see http://www.taskjuggler.org
|
109
|
+
#EOT
|
96
110
|
quit
|
97
111
|
end
|
98
112
|
|
@@ -128,7 +142,7 @@ EOT
|
|
128
142
|
args = processArguments(argv)
|
129
143
|
|
130
144
|
# If DEBUG mode has been enabled, we restore the INT trap handler again
|
131
|
-
# to get Ruby
|
145
|
+
# to get Ruby backtraces.
|
132
146
|
Kernel.trap('INT', intHandler) if $DEBUG
|
133
147
|
|
134
148
|
unless @silent
|
@@ -146,7 +160,7 @@ EOT
|
|
146
160
|
retVal = appMain(args)
|
147
161
|
MessageHandlerInstance.instance.trapSetup = false
|
148
162
|
rescue TjRuntimeError
|
149
|
-
# We have hit a
|
163
|
+
# We have hit a situation that we can't recover from. A message
|
150
164
|
# was severed via the MessageHandler to inform the user and we now
|
151
165
|
# abort the program.
|
152
166
|
return 1
|
@@ -3,7 +3,8 @@
|
|
3
3
|
#
|
4
4
|
# = Tj3Config.rb -- The TaskJuggler III Project Management Software
|
5
5
|
#
|
6
|
-
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016
|
6
|
+
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016,
|
7
|
+
# 2020
|
7
8
|
# by Chris Schlaeger <cs@taskjuggler.org>
|
8
9
|
#
|
9
10
|
# This program is free software; you can redistribute it and/or modify
|
@@ -13,12 +14,13 @@
|
|
13
14
|
|
14
15
|
require 'taskjuggler/UTF8String'
|
15
16
|
require 'taskjuggler/AppConfig'
|
17
|
+
require 'taskjuggler/version'
|
16
18
|
|
17
|
-
AppConfig.version =
|
19
|
+
AppConfig.version = VERSION
|
18
20
|
AppConfig.packageName = 'taskjuggler'
|
19
21
|
AppConfig.softwareName = 'TaskJuggler'
|
20
22
|
AppConfig.packageInfo = 'A Project Management Software'
|
21
|
-
AppConfig.copyright = [ (2006..
|
23
|
+
AppConfig.copyright = [ (2006..2020).to_a ]
|
22
24
|
AppConfig.authors = [ 'Chris Schlaeger <cs@taskjuggler.org>' ]
|
23
25
|
AppConfig.contact = 'http://www.taskjuggler.org'
|
24
26
|
AppConfig.license = <<'EOT'
|
@@ -75,7 +75,9 @@ class TaskJuggler
|
|
75
75
|
@file.each_line do |line|
|
76
76
|
if line[0, mark.length] == mark
|
77
77
|
# We've found an annotation line. Get the tag and indicator.
|
78
|
-
|
78
|
+
tokens = line.split
|
79
|
+
tag = tokens[3]
|
80
|
+
indicator = tokens[4]
|
79
81
|
|
80
82
|
if indicator == '+'
|
81
83
|
# Start a new snip
|