taskjuggler 0.2.2 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +29 -0
- data/data/css/tjreport.css +38 -4
- data/data/tjp.vim +421 -421
- data/examples/Fedora-20/reports.tji +0 -2
- data/examples/tutorial.tjp +0 -2
- data/lib/taskjuggler/Attributes.rb +14 -1
- data/lib/taskjuggler/Project.rb +13 -2
- data/lib/taskjuggler/ProjectFileScanner.rb +1 -1
- data/lib/taskjuggler/ResourceScenario.rb +38 -0
- data/lib/taskjuggler/SheetReceiver.rb +5 -3
- data/lib/taskjuggler/SimpleQueryExpander.rb +0 -1
- data/lib/taskjuggler/TaskScenario.rb +2 -2
- data/lib/taskjuggler/TextParser.rb +0 -2
- data/lib/taskjuggler/TextParser/Pattern.rb +1 -1
- data/lib/taskjuggler/TextParser/Scanner.rb +0 -2
- data/lib/taskjuggler/TimeSheets.rb +2 -1
- data/lib/taskjuggler/Tj3AppBase.rb +1 -1
- data/lib/taskjuggler/Tj3Config.rb +1 -1
- data/lib/taskjuggler/TjpSyntaxRules.rb +29 -14
- data/lib/taskjuggler/WorkingHours.rb +9 -6
- data/lib/taskjuggler/apps/Tj3.rb +1 -1
- data/lib/taskjuggler/reports/GanttLine.rb +1 -1
- data/lib/taskjuggler/reports/Navigator.rb +103 -81
- data/lib/taskjuggler/reports/NikuReport.rb +8 -5
- data/lib/taskjuggler/reports/Report.rb +10 -1
- data/lib/taskjuggler/reports/ReportTableCell.rb +1 -1
- data/lib/taskjuggler/reports/ResourceListRE.rb +1 -1
- data/lib/taskjuggler/reports/TableReport.rb +1 -1
- data/lib/taskjuggler/reports/TaskListRE.rb +1 -1
- data/lib/taskjuggler/reports/TjpExportRE.rb +31 -1
- data/manual/Installation +53 -7
- data/manual/Intro +36 -28
- data/manual/html/Day_To_Day_Juggling.html +1 -1
- data/manual/html/Getting_Started.html +1 -1
- data/manual/html/How_To_Contribute.html +1 -1
- data/manual/html/Installation.html +29 -8
- data/manual/html/Intro.html +32 -19
- data/manual/html/Reporting_Bugs.html +2 -2
- data/manual/html/Rich_Text_Attributes.html +1 -1
- data/manual/html/Software.html +1 -1
- data/manual/html/TaskJuggler_2x_Migration.html +3 -3
- data/manual/html/TaskJuggler_Internals.html +1 -1
- data/manual/html/The_TaskJuggler_Syntax.html +1 -1
- data/manual/html/Tutorial.html +1 -3
- data/manual/html/account.html +2 -2
- data/manual/html/account.task.html +1 -1
- data/manual/html/accountprefix.html +1 -1
- data/manual/html/active.html +1 -1
- data/manual/html/adopt.task.html +1 -1
- data/manual/html/alert level.html +1 -1
- data/manual/html/alert.html +1 -1
- data/manual/html/allocate.html +1 -1
- data/manual/html/alphabet.html +1 -1
- data/manual/html/alternative.html +1 -1
- data/manual/html/author.html +1 -1
- data/manual/html/balance.html +1 -1
- data/manual/html/booking.resource.html +2 -2
- data/manual/html/booking.task.html +1 -1
- data/manual/html/caption.html +1 -1
- data/manual/html/cellcolor.column.html +1 -1
- data/manual/html/celltext.column.html +1 -1
- data/manual/html/center.html +1 -1
- data/manual/html/charge.html +1 -1
- data/manual/html/chargeset.html +1 -1
- data/manual/html/columnid.html +2 -2
- data/manual/html/columns.html +1 -1
- data/manual/html/complete.html +1 -1
- data/manual/html/copyright.html +1 -1
- data/manual/html/credit.html +1 -1
- data/manual/html/css/tjreport.css +38 -4
- data/manual/html/currency.html +1 -1
- data/manual/html/currencyformat.html +2 -2
- data/manual/html/dailymax.html +1 -1
- data/manual/html/dailymin.html +1 -1
- data/manual/html/dailyworkinghours.html +1 -1
- data/manual/html/date.extend.html +1 -1
- data/manual/html/date.html +1 -1
- data/manual/html/definitions.html +10 -10
- data/manual/html/depends.html +1 -1
- data/manual/html/details.html +1 -1
- data/manual/html/disabled.html +1 -1
- data/manual/html/duration.html +1 -1
- data/manual/html/efficiency.html +2 -2
- data/manual/html/effort.html +1 -1
- data/manual/html/email.html +2 -2
- data/manual/html/enabled.html +1 -1
- data/manual/html/end.column.html +1 -1
- data/manual/html/end.html +1 -1
- data/manual/html/end.limit.html +2 -2
- data/manual/html/end.report.html +2 -2
- data/manual/html/end.timesheet.html +1 -1
- data/manual/html/endcredit.html +1 -1
- data/manual/html/epilog.html +1 -1
- data/manual/html/export.html +1 -1
- data/manual/html/extend.html +1 -1
- data/manual/html/fail.html +2 -2
- data/manual/html/fdl.html +1 -1
- data/manual/html/flags.account.html +1 -1
- data/manual/html/flags.html +1 -1
- data/manual/html/flags.journalentry.html +1 -1
- data/manual/html/flags.report.html +1 -1
- data/manual/html/flags.resource.html +2 -2
- data/manual/html/flags.statussheet.html +1 -1
- data/manual/html/flags.task.html +1 -1
- data/manual/html/flags.timesheet.html +1 -1
- data/manual/html/fontcolor.column.html +1 -1
- data/manual/html/footer.html +1 -1
- data/manual/html/formats.html +1 -1
- data/manual/html/functions.html +1 -1
- data/manual/html/gapduration.html +1 -1
- data/manual/html/gaplength.html +1 -1
- data/manual/html/halign.center.html +1 -1
- data/manual/html/halign.column.html +1 -1
- data/manual/html/halign.left.html +1 -1
- data/manual/html/halign.right.html +1 -1
- data/manual/html/hasalert.html +1 -1
- data/manual/html/header.html +1 -1
- data/manual/html/headline.html +1 -1
- data/manual/html/hidejournalentry.html +2 -2
- data/manual/html/hidereport.html +1 -1
- data/manual/html/hideresource.html +2 -2
- data/manual/html/hidetask.html +2 -2
- data/manual/html/icalreport.html +1 -1
- data/manual/html/include.macro.html +1 -1
- data/manual/html/include.project.html +1 -1
- data/manual/html/include.properties.html +1 -1
- data/manual/html/index.html +1 -1
- data/manual/html/inherit.extend.html +2 -2
- data/manual/html/interval1.html +1 -1
- data/manual/html/interval2.html +1 -1
- data/manual/html/interval3.html +1 -1
- data/manual/html/interval4.html +1 -1
- data/manual/html/isactive.html +1 -1
- data/manual/html/ischildof.html +1 -1
- data/manual/html/isdependencyof.html +1 -1
- data/manual/html/isdutyof.html +1 -1
- data/manual/html/isfeatureof.html +1 -1
- data/manual/html/isleaf.html +1 -1
- data/manual/html/ismilestone.html +1 -1
- data/manual/html/isongoing.html +1 -1
- data/manual/html/isresource.html +1 -1
- data/manual/html/istask.html +1 -1
- data/manual/html/journalattributes.html +14 -14
- data/manual/html/journalentry.html +2 -2
- data/manual/html/journalmode.html +1 -1
- data/manual/html/left.html +1 -1
- data/manual/html/length.html +1 -1
- data/manual/html/limits.allocate.html +1 -1
- data/manual/html/limits.html +1 -1
- data/manual/html/limits.resource.html +2 -2
- data/manual/html/limits.task.html +1 -1
- data/manual/html/listitem.column.html +1 -1
- data/manual/html/listtype.column.html +1 -1
- data/manual/html/loadunit.html +1 -1
- data/manual/html/logicalexpression.html +1 -1
- data/manual/html/logicalflagexpression.html +1 -1
- data/manual/html/macro.html +1 -1
- data/manual/html/managers.html +2 -2
- data/manual/html/mandatory.html +1 -1
- data/manual/html/maxend.html +1 -1
- data/manual/html/maximum.html +1 -1
- data/manual/html/maxstart.html +1 -1
- data/manual/html/milestone.html +1 -1
- data/manual/html/minend.html +1 -1
- data/manual/html/minimum.html +1 -1
- data/manual/html/minstart.html +1 -1
- data/manual/html/monthlymax.html +1 -1
- data/manual/html/monthlymin.html +1 -1
- data/manual/html/navbar.html +1 -1
- data/manual/html/navigator.html +1 -1
- data/manual/html/newtask.html +1 -1
- data/manual/html/nikureport.html +1 -1
- data/manual/html/note.task.html +1 -1
- data/manual/html/now.html +1 -1
- data/manual/html/numberformat.html +2 -2
- data/manual/html/onend.html +1 -1
- data/manual/html/onstart.html +1 -1
- data/manual/html/opennodes.html +1 -1
- data/manual/html/overtime.booking.html +2 -2
- data/manual/html/period.column.html +1 -1
- data/manual/html/period.limit.html +2 -2
- data/manual/html/period.report.html +2 -2
- data/manual/html/period.task.html +1 -1
- data/manual/html/persistent.html +1 -1
- data/manual/html/precedes.html +1 -1
- data/manual/html/priority.html +1 -1
- data/manual/html/priority.timesheet.html +1 -1
- data/manual/html/project.html +1 -1
- data/manual/html/projectid.html +1 -1
- data/manual/html/projectid.task.html +1 -1
- data/manual/html/projectids.html +1 -1
- data/manual/html/projection.html +1 -1
- data/manual/html/prolog.html +1 -1
- data/manual/html/properties.html +1 -1
- data/manual/html/purge.html +2 -2
- data/manual/html/rate.html +1 -1
- data/manual/html/rate.resource.html +2 -2
- data/manual/html/reference.extend.html +1 -1
- data/manual/html/remaining.html +1 -1
- data/manual/html/replace.html +1 -1
- data/manual/html/report.html +1 -1
- data/manual/html/reportprefix.html +1 -1
- data/manual/html/resource.html +2 -2
- data/manual/html/resourceattributes.html +6 -6
- data/manual/html/resourceprefix.html +1 -1
- data/manual/html/resourcereport.html +1 -1
- data/manual/html/resourceroot.html +1 -1
- data/manual/html/resources.limit.html +2 -2
- data/manual/html/responsible.html +1 -1
- data/manual/html/richtext.extend.html +1 -1
- data/manual/html/right.html +1 -1
- data/manual/html/rollupresource.html +2 -2
- data/manual/html/rolluptask.html +2 -2
- data/manual/html/scale.column.html +1 -1
- data/manual/html/scenario.html +2 -2
- data/manual/html/scenario.ical.html +1 -1
- data/manual/html/scenarios.export.html +1 -1
- data/manual/html/scenarios.html +1 -1
- data/manual/html/scenariospecific.extend.html +2 -2
- data/manual/html/scheduled.html +1 -1
- data/manual/html/scheduling.html +1 -1
- data/manual/html/select.html +1 -1
- data/manual/html/selfcontained.html +1 -1
- data/manual/html/shift.html +1 -1
- data/manual/html/shift.resource.html +5 -5
- data/manual/html/shift.task.html +4 -4
- data/manual/html/shift.timesheet.html +1 -1
- data/manual/html/shifts.allocate.html +1 -1
- data/manual/html/shifts.resource.html +5 -5
- data/manual/html/shifts.task.html +4 -4
- data/manual/html/shorttimeformat.html +1 -1
- data/manual/html/sloppy.booking.html +2 -2
- data/manual/html/sloppy.projection.html +1 -1
- data/manual/html/sortjournalentries.html +1 -1
- data/manual/html/sortresources.html +1 -1
- data/manual/html/sorttasks.html +1 -1
- data/manual/html/start.column.html +1 -1
- data/manual/html/start.html +1 -1
- data/manual/html/start.limit.html +2 -2
- data/manual/html/start.report.html +2 -2
- data/manual/html/startcredit.html +1 -1
- data/manual/html/status.statussheet.html +1 -1
- data/manual/html/status.timesheet.html +2 -2
- data/manual/html/statussheet.html +1 -1
- data/manual/html/statussheetreport.html +1 -1
- data/manual/html/strict.projection.html +1 -1
- data/manual/html/summary.html +1 -1
- data/manual/html/supplement.html +1 -1
- data/manual/html/supplement.resource.html +2 -2
- data/manual/html/supplement.task.html +1 -1
- data/manual/html/tagfile.html +8 -4
- data/manual/html/task.html +1 -1
- data/manual/html/task.statussheet.html +1 -1
- data/manual/html/task.timesheet.html +1 -1
- data/manual/html/taskattributes.html +22 -22
- data/manual/html/taskprefix.html +1 -1
- data/manual/html/taskreport.html +1 -1
- data/manual/html/taskroot.html +1 -1
- data/manual/html/text.extend.html +1 -1
- data/manual/html/textreport.html +1 -1
- data/manual/html/timeformat.html +2 -2
- data/manual/html/timeoff.nikureport.html +1 -1
- data/manual/html/timesheet.html +1 -1
- data/manual/html/timesheetreport.html +1 -1
- data/manual/html/timezone.export.html +1 -1
- data/manual/html/timezone.html +1 -1
- data/manual/html/timezone.report.html +1 -1
- data/manual/html/timezone.shift.html +1 -1
- data/manual/html/timingresolution.html +1 -1
- data/manual/html/title.column.html +1 -1
- data/manual/html/title.html +1 -1
- data/manual/html/toc.html +16 -12
- data/manual/html/tooltip.column.html +1 -1
- data/manual/html/trackingscenario.html +1 -1
- data/manual/html/treelevel.html +1 -1
- data/manual/html/vacation.html +1 -1
- data/manual/html/vacation.resource.html +2 -2
- data/manual/html/vacation.shift.html +1 -1
- data/manual/html/warn.html +2 -2
- data/manual/html/weeklymax.html +1 -1
- data/manual/html/weeklymin.html +1 -1
- data/manual/html/weekstartsmonday.html +1 -1
- data/manual/html/weekstartssunday.html +1 -1
- data/manual/html/width.column.html +1 -1
- data/manual/html/work.html +1 -1
- data/manual/html/workinghours.project.html +1 -1
- data/manual/html/workinghours.resource.html +2 -2
- data/manual/html/workinghours.shift.html +1 -1
- data/manual/html/yearlyworkingdays.html +1 -1
- data/tasks/changelog.rake +1 -0
- data/test/TestSuite/Export-Reports/refs/AutoID.tjp +18 -0
- data/test/TestSuite/Export-Reports/refs/Mandatory.tjp +2 -1
- data/test/TestSuite/Export-Reports/refs/Shift.tjp +49 -0
- data/test/TestSuite/HTML-Reports/Navigator.tjp +34 -0
- data/test/TestSuite/ReportGenerator/Correct/FTE.tjp +15 -0
- data/test/TestSuite/ReportGenerator/Correct/refs/FTE-1.csv +4 -0
- data/test/TestSuite/Syntax/Correct/Mandatory.tjp +1 -0
- data/test/TestSuite/Syntax/Correct/Shift.tjp +4 -0
- data/test/TestSuite/Syntax/Correct/tutorial.tjp +0 -2
- data/test/TestSuite/Syntax/Errors/invalid_file_name.tjp +9 -0
- data/test/test_CSVFile.rb +0 -1
- data/test/test_Journal.rb +5 -5
- data/test/test_LogicalExpression.rb +1 -1
- data/test/test_ShiftAssignments.rb +1 -1
- metadata +285 -299
@@ -176,20 +176,23 @@ EOT
|
|
176
176
|
'name' => prj.name,
|
177
177
|
'projectID' => prj.id))
|
178
178
|
project << (resources = XMLElement.new('Resources'))
|
179
|
-
|
180
|
-
|
179
|
+
# We iterate over all resources to ensure that all have an entry in
|
180
|
+
# the Clarity database for all projects. This is done to work around a
|
181
|
+
# limitation of Clarity with respect to filling time sheets with
|
182
|
+
# assigned projects.
|
183
|
+
@resources.keys.sort.each do |clarityRID|
|
181
184
|
resources << (resource =
|
182
185
|
XMLElement.new('Resource',
|
183
|
-
'resourceID' =>
|
186
|
+
'resourceID' => clarityRID,
|
184
187
|
'defaultAllocation' => '0'))
|
185
188
|
resource << (allocCurve = XMLElement.new('AllocCurve'))
|
189
|
+
sum = sum(prj.id, clarityRID)
|
186
190
|
allocCurve << (XMLElement.new('Segment',
|
187
191
|
'start' =>
|
188
192
|
a('start').to_s(timeFormat),
|
189
193
|
'finish' =>
|
190
194
|
(a('end') - 1).to_s(timeFormat),
|
191
|
-
'sum' => numberFormat.format(
|
192
|
-
sum(prj.id, res.id)).to_s))
|
195
|
+
'sum' => numberFormat.format(sum).to_s))
|
193
196
|
end
|
194
197
|
|
195
198
|
# The custom information section usually contains Clarity installation
|
@@ -44,6 +44,7 @@ class TaskJuggler
|
|
44
44
|
# Create a new report object.
|
45
45
|
def initialize(project, id, name, parent)
|
46
46
|
super(project.reports, id, name, parent)
|
47
|
+
checkFileName(name)
|
47
48
|
project.addReport(self)
|
48
49
|
|
49
50
|
# The type specifier must be set for every report. It tells whether this
|
@@ -178,7 +179,7 @@ class TaskJuggler
|
|
178
179
|
end
|
179
180
|
|
180
181
|
html = HTMLDocument.new(:strict)
|
181
|
-
head = html.generateHead("
|
182
|
+
head = html.generateHead(@project['name'] + " - #{get('title') || @name}",
|
182
183
|
'description' => 'TaskJuggler Report',
|
183
184
|
'keywords' => 'taskjuggler, project, management')
|
184
185
|
if a('selfcontained')
|
@@ -406,6 +407,14 @@ EOT
|
|
406
407
|
)
|
407
408
|
end
|
408
409
|
|
410
|
+
def checkFileName(name)
|
411
|
+
if name =~ /[\\?%*:|"<>]/
|
412
|
+
error('invalid_file_name',
|
413
|
+
'File names may not contain any of the following characters: ' +
|
414
|
+
'\?%*:|\"<>')
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
409
418
|
end
|
410
419
|
|
411
420
|
end
|
@@ -356,7 +356,7 @@ class TaskJuggler
|
|
356
356
|
title = ''
|
357
357
|
end
|
358
358
|
trigger['onclick'] = "TagToTip('ID#{trigger.object_id}', " +
|
359
|
-
"TITLE, '#{title}')"
|
359
|
+
"TITLE, '#{title.gsub(/'/, ''')}')"
|
360
360
|
trigger['style'] = trigger['style'] ? trigger['style'] : 'cursor:help; '
|
361
361
|
hook << (ltDiv = XMLElement.new('div',
|
362
362
|
'class' => 'tj_tooltip_box',
|
@@ -38,11 +38,11 @@ class TaskJuggler
|
|
38
38
|
# Prepare the resource list.
|
39
39
|
resourceList = PropertyList.new(@project.resources)
|
40
40
|
resourceList.setSorting(@report.get('sortResources'))
|
41
|
+
resourceList.query = @report.project.reportContexts.last.query
|
41
42
|
resourceList = filterResourceList(resourceList, nil,
|
42
43
|
@report.get('hideResource'),
|
43
44
|
@report.get('rollupResource'),
|
44
45
|
@report.get('openNodes'))
|
45
|
-
resourceList.query = @report.project.reportContexts.last.query
|
46
46
|
resourceList.sort!
|
47
47
|
|
48
48
|
# Prepare the task list. Don't filter it yet! It would break the
|
@@ -509,7 +509,7 @@ class TaskJuggler
|
|
509
509
|
end
|
510
510
|
column.cell2.text = t.send(name2Func).to_s
|
511
511
|
# TODO: The width should be taken from some data structure.
|
512
|
-
column.cell2.width =
|
512
|
+
column.cell2.width = 28
|
513
513
|
# Off-duty cells will have a different color than working time cells.
|
514
514
|
unless @project.hasWorkingTime(iv)
|
515
515
|
column.cell2.category = 'tabhead_offduty'
|
@@ -38,10 +38,10 @@ class TaskJuggler
|
|
38
38
|
# Prepare the task list.
|
39
39
|
taskList = PropertyList.new(@project.tasks)
|
40
40
|
taskList.setSorting(@report.get('sortTasks'))
|
41
|
+
taskList.query = @report.project.reportContexts.last.query
|
41
42
|
taskList = filterTaskList(taskList, nil, @report.get('hideTask'),
|
42
43
|
@report.get('rollupTask'),
|
43
44
|
@report.get('openNodes'))
|
44
|
-
taskList.query = @report.project.reportContexts.last.query
|
45
45
|
taskList.sort!
|
46
46
|
|
47
47
|
# Prepare the resource list. Don't filter it yet! It would break the
|
@@ -26,7 +26,7 @@ class TaskJuggler
|
|
26
26
|
@supportedTaskAttrs = %w( booking complete depends flags maxend
|
27
27
|
maxstart minend minstart note priority
|
28
28
|
projectid responsible )
|
29
|
-
@supportedResourceAttrs = %w( booking flags vacation workinghours )
|
29
|
+
@supportedResourceAttrs = %w( booking flags shifts vacation workinghours )
|
30
30
|
end
|
31
31
|
|
32
32
|
def generateIntermediateFormat
|
@@ -57,6 +57,9 @@ class TaskJuggler
|
|
57
57
|
|
58
58
|
generateFlagDeclaration if a('definitions').include?('flags')
|
59
59
|
generateProjectIDs if a('definitions').include?('projectids')
|
60
|
+
|
61
|
+
generateShiftList if a('definitions').include?('shifts')
|
62
|
+
|
60
63
|
generateResourceList if a('definitions').include?('resources')
|
61
64
|
generateTaskList if a('definitions').include?('tasks')
|
62
65
|
|
@@ -72,6 +75,11 @@ class TaskJuggler
|
|
72
75
|
@file << "project #{@project['projectid']} \"#{@project['name']}\" " +
|
73
76
|
"\"#{@project['version']}\" #{@project['start']} - " +
|
74
77
|
"#{@project['end']} {\n"
|
78
|
+
# Add timingresolution attribute if it's not the default value.
|
79
|
+
if @project['scheduleGranularity'] != 3600
|
80
|
+
generateAttributeText("timingresolution " +
|
81
|
+
"#{@project['scheduleGranularity'] / 60}min", 2)
|
82
|
+
end
|
75
83
|
generateAttributeText("timezone \"#{@project['timezone']}\"", 2)
|
76
84
|
generateCustomAttributeDeclarations('resource', @project.resources,
|
77
85
|
a('resourceAttributes'))
|
@@ -146,6 +154,28 @@ class TaskJuggler
|
|
146
154
|
@file << "projectids #{projectIDs.join(', ')}\n\n" unless projectIDs.empty?
|
147
155
|
end
|
148
156
|
|
157
|
+
def generateShiftList
|
158
|
+
@project.shifts.each do |shift|
|
159
|
+
generateShift(shift, 0) unless shift.parent
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def generateShift(shift, indent)
|
164
|
+
@file << ' ' * indent + "shift #{shift.id} " +
|
165
|
+
"#{quotedString(shift.name)} {\n"
|
166
|
+
|
167
|
+
a('scenarios').each do |scenarioIdx|
|
168
|
+
generateAttribute(shift, 'workinghours', indent + 2, scenarioIdx)
|
169
|
+
end
|
170
|
+
|
171
|
+
# Call this method recursively for all children.
|
172
|
+
shift.children.each do |subshift|
|
173
|
+
generateShift(subshift, indent + 2)
|
174
|
+
end
|
175
|
+
|
176
|
+
@file << ' ' * indent + "}\n"
|
177
|
+
end
|
178
|
+
|
149
179
|
def generateResourceList
|
150
180
|
# The resource definitions are generated recursively. So we only need to
|
151
181
|
# start it for the top-level resources.
|
data/manual/Installation
CHANGED
@@ -63,6 +63,8 @@ been tested.
|
|
63
63
|
|
64
64
|
==== The easy way ====
|
65
65
|
|
66
|
+
===== System Wide Installation =====
|
67
|
+
|
66
68
|
TaskJuggler is a commandline tool. It does not (yet) have a graphical
|
67
69
|
user interface. To use it, you need to know how to open a command
|
68
70
|
or terminal window. In this manual, we refer to it as your shell. The
|
@@ -70,14 +72,55 @@ following paragraphs describe the commands you need to type into your
|
|
70
72
|
[http://en.wikipedia.org/wiki/Shell_(computing) shell].
|
71
73
|
|
72
74
|
On systems that already have Ruby and the gem package manager
|
73
|
-
installed you can simply type the following command
|
74
|
-
or command window:
|
75
|
+
installed you can simply type the following command as root or admin
|
76
|
+
user into your shell or command window:
|
75
77
|
|
76
78
|
gem install taskjuggler
|
77
79
|
|
78
80
|
This will download and install the latest version from the
|
79
81
|
[http://rubygems.org/gems/taskjuggler RubyGems.org] site.
|
80
82
|
|
83
|
+
===== Installation into a local Directory =====
|
84
|
+
|
85
|
+
If you don't want to install TaskJuggler for all users on the system,
|
86
|
+
you can also install it into your home or data directory. This does
|
87
|
+
not require root or admin permissions.
|
88
|
+
|
89
|
+
The following steps are describe the installation on a Linux system
|
90
|
+
with the bash shell. You may have to use slightly different commands
|
91
|
+
on a different operating system.
|
92
|
+
|
93
|
+
Create a new directory ''''taskjuggler'''' in your $HOME directory for
|
94
|
+
the installation to go into.
|
95
|
+
|
96
|
+
mkdir taskjuggler
|
97
|
+
|
98
|
+
Install the gem and all dependencies.
|
99
|
+
|
100
|
+
gem install --install-dir taskjuggler taskjuggler-X.X.X.gem
|
101
|
+
|
102
|
+
If you must use a proxy to access the Internet, you need to set a
|
103
|
+
shell environment variable so ''''gem'''' can find and use it. The
|
104
|
+
setting below needs to be adapted to your local environment. Check
|
105
|
+
with your admin or IT department if needed.
|
106
|
+
|
107
|
+
export HTTP_PROXY=http://%USER%:%PASSWORD%@%SERVER%:%PORT%
|
108
|
+
|
109
|
+
Configure your ''''PATH'''' variable to find the taskjuggler programs.
|
110
|
+
|
111
|
+
export PATH="${PATH}:${HOME}/taskjuggler/bin"
|
112
|
+
|
113
|
+
Configure gem to find the installed files.
|
114
|
+
|
115
|
+
export GEM_HOME=${HOME}/taskjuggler
|
116
|
+
|
117
|
+
The last two settings should also be added to your .profile file to
|
118
|
+
make them permanent.
|
119
|
+
|
120
|
+
That's it. You now should be run TaskJuggler.
|
121
|
+
|
122
|
+
tj3 --version
|
123
|
+
|
81
124
|
==== The manual way ====
|
82
125
|
|
83
126
|
If the easy way doesn't work for you, you need to download and install
|
@@ -158,11 +201,6 @@ from source put the following code in your ''''.profile'''' file.
|
|
158
201
|
This is for users of the bash shell. Adapt it accordingly if you use
|
159
202
|
another shell.
|
160
203
|
|
161
|
-
# To use TaskJuggler directly from the source. This must point to
|
162
|
-
# the directory where you have put the TaskJuggler source files.
|
163
|
-
TASKJUGGLER_DIR=${HOME}/src/taskjuggler3
|
164
|
-
# Make sure Ruby finds the program files
|
165
|
-
export RUBYLIB=${TASKJUGGLER_DIR}/lib
|
166
204
|
# Make sure the shell finds the TaskJuggler programs
|
167
205
|
export PATH=${PATH}:${TASKJUGGLER_DIR}/bin
|
168
206
|
|
@@ -257,6 +295,14 @@ install the TaskJuggler gem as well.
|
|
257
295
|
|
258
296
|
sudo gem19 install taskjuggler
|
259
297
|
|
298
|
+
The TaskJuggler front-end scripts always use the ''''ruby''''
|
299
|
+
interpreter that's the first in the PATH. You need to set a link in
|
300
|
+
your local ''''bin'''' directory to point to your ''''ruby19''''
|
301
|
+
executable as ''''ruby''''. Make sure your ''''${HOME}/bin''''
|
302
|
+
directory is the first directory in the ''''PATH''''.
|
303
|
+
|
304
|
+
ln -s /usr/local/bin/ruby19 ${HOME}/bin/ruby
|
305
|
+
|
260
306
|
That's it. You now have the latest Ruby installed and are ready to
|
261
307
|
use TaskJuggler.
|
262
308
|
|
data/manual/Intro
CHANGED
@@ -5,21 +5,22 @@
|
|
5
5
|
TaskJuggler is a modern and powerful project management tool. Its new
|
6
6
|
approach to project planning and tracking is far superior to the
|
7
7
|
commonly used Gantt chart editing tools. It has already been
|
8
|
-
successfully used in many projects and scales
|
8
|
+
successfully used in many projects and scales to projects with
|
9
9
|
hundreds of resources and thousands of tasks.
|
10
10
|
|
11
11
|
TaskJuggler is an Open Source tool for serious project managers. It
|
12
12
|
covers the complete spectrum of project management tasks from the
|
13
|
-
first idea to the completion of the project
|
14
|
-
|
15
|
-
and communication
|
13
|
+
first idea to the completion of the project without enforcing certain
|
14
|
+
work flows or methodologies. It assists you during project scoping,
|
15
|
+
resource assignment, cost and revenue planning, risk and communication
|
16
|
+
management, status tracking and reporting.
|
16
17
|
|
17
18
|
TaskJuggler provides an optimizing scheduler that computes your
|
18
19
|
project time lines and resource assignments based on the project
|
19
20
|
outline and the constrains that you have provided. The built-in
|
20
|
-
resource balancer and
|
21
|
+
resource balancer and constrains checker offload you from having to
|
21
22
|
worry about irrelevant details and ring the alarm if the project gets
|
22
|
-
out of hand.
|
23
|
+
out of hand. The flexible "as many details as necessary"-approach
|
23
24
|
allows you to still plan your project as you go, making it also ideal
|
24
25
|
for new management strategies such as Extreme Programming and Agile
|
25
26
|
Project Management.
|
@@ -28,22 +29,14 @@ If you are about to build a skyscraper or just want to put together
|
|
28
29
|
your colleague's shift plan for the next month, TaskJuggler is the
|
29
30
|
right tool for you. If you just want to draw nice looking Gantt
|
30
31
|
charts to impress your boss or your investors, TaskJuggler might not
|
31
|
-
be right for you. It
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
TaskJuggler III is the completely re-implemented version of the TaskJuggler
|
37
|
-
2.x series. We have not yet released a stable version. It already is
|
38
|
-
mostly stable and each official release is installed by more than a
|
39
|
-
1000 users. The code base is still in active development and the
|
40
|
-
quality and reliability may change daily. You are welcome to try it
|
41
|
-
and play with it, but be sure to independently check all results.
|
32
|
+
be right for you. It can certainly produce nice looking Gantt charts
|
33
|
+
and other reports, but it takes some effort to master its power. For
|
34
|
+
those that are willing to invest a few hours to get started with the
|
35
|
+
software it will become a companion you don't want to miss anymore.
|
42
36
|
|
43
37
|
TaskJuggler is a commandline tool that you use from a
|
44
|
-
[http://en.wikipedia.org/wiki/Shell_(computing) shell]. This
|
45
|
-
|
46
|
-
that for entering your project data you will use one of the most
|
38
|
+
[http://en.wikipedia.org/wiki/Shell_(computing) shell]. This means
|
39
|
+
that to enter your project data you will use one of the most
|
47
40
|
versatile and powerful tools there is: your favorite
|
48
41
|
[http://en.wikipedia.org/wiki/Text_editor text editor]. To get a
|
49
42
|
first impression, you can look at this
|
@@ -84,22 +77,37 @@ License].
|
|
84
77
|
|
85
78
|
=== Features and Highlights ===
|
86
79
|
|
87
|
-
* Manages tasks, resources
|
80
|
+
* Manages tasks, resources and accounts of your project
|
88
81
|
* Automatic resource leveling and tasks conflict resolution
|
82
|
+
* Comprehensive and flexible reports so you can find the information you need when you need it
|
83
|
+
* Project tracking and status reporting with dashboard support
|
84
|
+
* Time and status sheet reporting infrastructure
|
85
|
+
* Unlimited number of scenarios (baselines) of the same project for what-if analysis
|
86
|
+
* Projects can be combined to larger projects
|
87
|
+
* Project breakdown and management team support
|
88
|
+
* Multiple project managers can work on the same project
|
89
89
|
* Flexible working hours and vacation handling
|
90
|
-
* Multiple timezone support
|
91
90
|
* Support for shift working
|
92
|
-
*
|
93
|
-
*
|
91
|
+
* Multiple time zone support
|
92
|
+
* Tasks may have initial costs, finishing costs
|
93
|
+
* Resources may have running costs
|
94
94
|
* Unlimited number of scenarios (baselines) of same project for what-if
|
95
95
|
analysis
|
96
|
-
* CSV data export for exchange with popular office software
|
97
96
|
* Support for profit/loss analysis
|
98
|
-
*
|
99
|
-
*
|
97
|
+
* HTML reports for Web publishing
|
98
|
+
* CSV data export for exchange with popular office software
|
99
|
+
* iCalendar export for data exchange with calendar applications
|
100
|
+
* Project description syntax with macro support
|
101
|
+
* Built-in web server for dynamic and interactive reports
|
100
102
|
* Powerful and flexible filtering functions to provide the right
|
101
103
|
amount of detail to the right audience
|
102
|
-
*
|
104
|
+
* Server based time sheet system for status and actual collection
|
105
|
+
* Powerful project description syntax with macro support
|
106
|
+
* Support for central resource allocation database
|
107
|
+
* Scales well on multi-core or multi-CPU systems
|
108
|
+
* Full integration with Vim text editor
|
109
|
+
* Runs on all Linux, Unix, Windows, MacOS and several other operating systems
|
110
|
+
* Simple installation
|
103
111
|
* Detailed reference manual
|
104
112
|
* Support for project management teams and revision control
|
105
113
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<!-- This file has been generated by tj3man
|
3
|
+
<!-- This file has been generated by tj3man v3.0.0 -->
|
4
4
|
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
5
5
|
<head>
|
6
6
|
<title>Day_To_Day_Juggling</title>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<!-- This file has been generated by tj3man
|
3
|
+
<!-- This file has been generated by tj3man v3.0.0 -->
|
4
4
|
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
5
5
|
<head>
|
6
6
|
<title>Getting_Started</title>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<!-- This file has been generated by tj3man
|
3
|
+
<!-- This file has been generated by tj3man v3.0.0 -->
|
4
4
|
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
5
5
|
<head>
|
6
6
|
<title>How_To_Contribute</title>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
<!-- This file has been generated by tj3man
|
3
|
+
<!-- This file has been generated by tj3man v3.0.0 -->
|
4
4
|
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
5
5
|
<head>
|
6
6
|
<title>Installation</title>
|
@@ -46,11 +46,34 @@
|
|
46
46
|
<p class="manual">Other versions of Ruby (Rubinius, JRuby, etc.) may work but have not been tested.</p>
|
47
47
|
<h2 class="manual" id="Installation_Steps_for_Users">2.2 Installation Steps for Users</h2>
|
48
48
|
<h3 class="manual" id="The_easy_way">2.2.1 The easy way</h3>
|
49
|
+
<h4 class="manual" id="System_Wide_Installation">2.2.1.1 System Wide Installation</h4>
|
49
50
|
<p class="manual">TaskJuggler is a commandline tool. It does not (yet) have a graphical user interface. To use it, you need to know how to open a command or terminal window. In this manual, we refer to it as your shell. The following paragraphs describe the commands you need to type into your <a href="http://en.wikipedia.org/wiki/Shell_(computing)" target="_top">shell</a>.</p>
|
50
|
-
<p class="manual">On systems that already have Ruby and the gem package manager installed you can simply type the following command into your shell or command window:</p>
|
51
|
+
<p class="manual">On systems that already have Ruby and the gem package manager installed you can simply type the following command as root or admin user into your shell or command window:</p>
|
51
52
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> gem install taskjuggler
|
52
53
|
</pre></div>
|
53
54
|
<p class="manual">This will download and install the latest version from the <a href="http://rubygems.org/gems/taskjuggler" target="_top">RubyGems.org</a> site.</p>
|
55
|
+
<h4 class="manual" id="Installation_into_a_local_Directory">2.2.1.2 Installation into a local Directory</h4>
|
56
|
+
<p class="manual">If you don't want to install TaskJuggler for all users on the system, you can also install it into your home or data directory. This does not require root or admin permissions.</p>
|
57
|
+
<p class="manual">The following steps are describe the installation on a Linux system with the bash shell. You may have to use slightly different commands on a different operating system.</p>
|
58
|
+
<p class="manual">Create a new directory <code class="manual">taskjuggler</code> in your $HOME directory for the installation to go into.</p>
|
59
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> mkdir taskjuggler
|
60
|
+
</pre></div>
|
61
|
+
<p class="manual">Install the gem and all dependencies.</p>
|
62
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> gem install --install-dir taskjuggler taskjuggler-X.X.X.gem
|
63
|
+
</pre></div>
|
64
|
+
<p class="manual">If you must use a proxy to access the Internet, you need to set a shell environment variable so <code class="manual">gem</code> can find and use it. The setting below needs to be adapted to your local environment. Check with your admin or IT department if needed.</p>
|
65
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> export HTTP_PROXY=http://%USER%:%PASSWORD%@%SERVER%:%PORT%
|
66
|
+
</pre></div>
|
67
|
+
<p class="manual">Configure your <code class="manual">PATH</code> variable to find the taskjuggler programs.</p>
|
68
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> export PATH="${PATH}:${HOME}/taskjuggler/bin"
|
69
|
+
</pre></div>
|
70
|
+
<p class="manual">Configure gem to find the installed files.</p>
|
71
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> export GEM_HOME=${HOME}/taskjuggler
|
72
|
+
</pre></div>
|
73
|
+
<p class="manual">The last two settings should also be added to your .profile file to make them permanent.</p>
|
74
|
+
<p class="manual">That's it. You now should be run TaskJuggler.</p>
|
75
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> tj3 --version
|
76
|
+
</pre></div>
|
54
77
|
<h3 class="manual" id="The_manual_way">2.2.2 The manual way</h3>
|
55
78
|
<p class="manual">If the easy way doesn't work for you, you need to download and install the packages manually. Download TaskJuggler III gem file from the <a href="http://rubygems.org/gems/taskjuggler" target="_top">RubyGems.org</a> site.</p>
|
56
79
|
<p class="manual">A gem package is an operating system and architecture independent archive file for Ruby programs. You can install it on any system that has Ruby and RubyGems installed. Normally, you should be logged-in as root or administrator to run the following installation command. Replace the X.X.X with the actual version that you have downloaded.</p>
|
@@ -81,12 +104,7 @@
|
|
81
104
|
<div class="manual" codesection="1"><pre class="manual" codesection="1">cd taskjuggler3; rake gem
|
82
105
|
</pre></div>
|
83
106
|
<p class="manual">If you plan to modify the TaskJuggler files, creating and installing the gem file for every test run is not very comfortable. To run tj3 from source put the following code in your <code class="manual">.profile</code> file. This is for users of the bash shell. Adapt it accordingly if you use another shell.</p>
|
84
|
-
<div class="manual" codesection="1"><pre class="manual" codesection="1">#
|
85
|
-
# the directory where you have put the TaskJuggler source files.
|
86
|
-
TASKJUGGLER_DIR=${HOME}/src/taskjuggler3
|
87
|
-
# Make sure Ruby finds the program files
|
88
|
-
export RUBYLIB=${TASKJUGGLER_DIR}/lib
|
89
|
-
# Make sure the shell finds the TaskJuggler programs
|
107
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"># Make sure the shell finds the TaskJuggler programs
|
90
108
|
export PATH=${PATH}:${TASKJUGGLER_DIR}/bin
|
91
109
|
</pre></div>
|
92
110
|
<h2 class="manual" id="Quickly_switching_between_various_TaskJuggler_III_versions">2.5 Quickly switching between various TaskJuggler III versions</h2>
|
@@ -127,6 +145,9 @@ export PATH=${PATH}:${TASKJUGGLER_DIR}/bin
|
|
127
145
|
</pre></div>
|
128
146
|
<p class="manual">If you don't want to use TaskJuggler from the git repository, you can install the TaskJuggler gem as well.</p>
|
129
147
|
<div class="manual" codesection="1"><pre class="manual" codesection="1"> sudo gem19 install taskjuggler
|
148
|
+
</pre></div>
|
149
|
+
<p class="manual">The TaskJuggler front-end scripts always use the <code class="manual">ruby</code> interpreter that's the first in the PATH. You need to set a link in your local <code class="manual">bin</code> directory to point to your <code class="manual">ruby19</code> executable as <code class="manual">ruby</code>. Make sure your <code class="manual">${HOME}/bin</code> directory is the first directory in the <code class="manual">PATH</code>.</p>
|
150
|
+
<div class="manual" codesection="1"><pre class="manual" codesection="1"> ln -s /usr/local/bin/ruby19 ${HOME}/bin/ruby
|
130
151
|
</pre></div>
|
131
152
|
<p class="manual">That's it. You now have the latest Ruby installed and are ready to use TaskJuggler.</p>
|
132
153
|
<h2 class="manual" id="Installing_the_Vim_Support">2.7 Installing the Vim Support</h2>
|