taskjuggler 0.2.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (305) hide show
  1. data/CHANGELOG +29 -0
  2. data/data/css/tjreport.css +38 -4
  3. data/data/tjp.vim +421 -421
  4. data/examples/Fedora-20/reports.tji +0 -2
  5. data/examples/tutorial.tjp +0 -2
  6. data/lib/taskjuggler/Attributes.rb +14 -1
  7. data/lib/taskjuggler/Project.rb +13 -2
  8. data/lib/taskjuggler/ProjectFileScanner.rb +1 -1
  9. data/lib/taskjuggler/ResourceScenario.rb +38 -0
  10. data/lib/taskjuggler/SheetReceiver.rb +5 -3
  11. data/lib/taskjuggler/SimpleQueryExpander.rb +0 -1
  12. data/lib/taskjuggler/TaskScenario.rb +2 -2
  13. data/lib/taskjuggler/TextParser.rb +0 -2
  14. data/lib/taskjuggler/TextParser/Pattern.rb +1 -1
  15. data/lib/taskjuggler/TextParser/Scanner.rb +0 -2
  16. data/lib/taskjuggler/TimeSheets.rb +2 -1
  17. data/lib/taskjuggler/Tj3AppBase.rb +1 -1
  18. data/lib/taskjuggler/Tj3Config.rb +1 -1
  19. data/lib/taskjuggler/TjpSyntaxRules.rb +29 -14
  20. data/lib/taskjuggler/WorkingHours.rb +9 -6
  21. data/lib/taskjuggler/apps/Tj3.rb +1 -1
  22. data/lib/taskjuggler/reports/GanttLine.rb +1 -1
  23. data/lib/taskjuggler/reports/Navigator.rb +103 -81
  24. data/lib/taskjuggler/reports/NikuReport.rb +8 -5
  25. data/lib/taskjuggler/reports/Report.rb +10 -1
  26. data/lib/taskjuggler/reports/ReportTableCell.rb +1 -1
  27. data/lib/taskjuggler/reports/ResourceListRE.rb +1 -1
  28. data/lib/taskjuggler/reports/TableReport.rb +1 -1
  29. data/lib/taskjuggler/reports/TaskListRE.rb +1 -1
  30. data/lib/taskjuggler/reports/TjpExportRE.rb +31 -1
  31. data/manual/Installation +53 -7
  32. data/manual/Intro +36 -28
  33. data/manual/html/Day_To_Day_Juggling.html +1 -1
  34. data/manual/html/Getting_Started.html +1 -1
  35. data/manual/html/How_To_Contribute.html +1 -1
  36. data/manual/html/Installation.html +29 -8
  37. data/manual/html/Intro.html +32 -19
  38. data/manual/html/Reporting_Bugs.html +2 -2
  39. data/manual/html/Rich_Text_Attributes.html +1 -1
  40. data/manual/html/Software.html +1 -1
  41. data/manual/html/TaskJuggler_2x_Migration.html +3 -3
  42. data/manual/html/TaskJuggler_Internals.html +1 -1
  43. data/manual/html/The_TaskJuggler_Syntax.html +1 -1
  44. data/manual/html/Tutorial.html +1 -3
  45. data/manual/html/account.html +2 -2
  46. data/manual/html/account.task.html +1 -1
  47. data/manual/html/accountprefix.html +1 -1
  48. data/manual/html/active.html +1 -1
  49. data/manual/html/adopt.task.html +1 -1
  50. data/manual/html/alert level.html +1 -1
  51. data/manual/html/alert.html +1 -1
  52. data/manual/html/allocate.html +1 -1
  53. data/manual/html/alphabet.html +1 -1
  54. data/manual/html/alternative.html +1 -1
  55. data/manual/html/author.html +1 -1
  56. data/manual/html/balance.html +1 -1
  57. data/manual/html/booking.resource.html +2 -2
  58. data/manual/html/booking.task.html +1 -1
  59. data/manual/html/caption.html +1 -1
  60. data/manual/html/cellcolor.column.html +1 -1
  61. data/manual/html/celltext.column.html +1 -1
  62. data/manual/html/center.html +1 -1
  63. data/manual/html/charge.html +1 -1
  64. data/manual/html/chargeset.html +1 -1
  65. data/manual/html/columnid.html +2 -2
  66. data/manual/html/columns.html +1 -1
  67. data/manual/html/complete.html +1 -1
  68. data/manual/html/copyright.html +1 -1
  69. data/manual/html/credit.html +1 -1
  70. data/manual/html/css/tjreport.css +38 -4
  71. data/manual/html/currency.html +1 -1
  72. data/manual/html/currencyformat.html +2 -2
  73. data/manual/html/dailymax.html +1 -1
  74. data/manual/html/dailymin.html +1 -1
  75. data/manual/html/dailyworkinghours.html +1 -1
  76. data/manual/html/date.extend.html +1 -1
  77. data/manual/html/date.html +1 -1
  78. data/manual/html/definitions.html +10 -10
  79. data/manual/html/depends.html +1 -1
  80. data/manual/html/details.html +1 -1
  81. data/manual/html/disabled.html +1 -1
  82. data/manual/html/duration.html +1 -1
  83. data/manual/html/efficiency.html +2 -2
  84. data/manual/html/effort.html +1 -1
  85. data/manual/html/email.html +2 -2
  86. data/manual/html/enabled.html +1 -1
  87. data/manual/html/end.column.html +1 -1
  88. data/manual/html/end.html +1 -1
  89. data/manual/html/end.limit.html +2 -2
  90. data/manual/html/end.report.html +2 -2
  91. data/manual/html/end.timesheet.html +1 -1
  92. data/manual/html/endcredit.html +1 -1
  93. data/manual/html/epilog.html +1 -1
  94. data/manual/html/export.html +1 -1
  95. data/manual/html/extend.html +1 -1
  96. data/manual/html/fail.html +2 -2
  97. data/manual/html/fdl.html +1 -1
  98. data/manual/html/flags.account.html +1 -1
  99. data/manual/html/flags.html +1 -1
  100. data/manual/html/flags.journalentry.html +1 -1
  101. data/manual/html/flags.report.html +1 -1
  102. data/manual/html/flags.resource.html +2 -2
  103. data/manual/html/flags.statussheet.html +1 -1
  104. data/manual/html/flags.task.html +1 -1
  105. data/manual/html/flags.timesheet.html +1 -1
  106. data/manual/html/fontcolor.column.html +1 -1
  107. data/manual/html/footer.html +1 -1
  108. data/manual/html/formats.html +1 -1
  109. data/manual/html/functions.html +1 -1
  110. data/manual/html/gapduration.html +1 -1
  111. data/manual/html/gaplength.html +1 -1
  112. data/manual/html/halign.center.html +1 -1
  113. data/manual/html/halign.column.html +1 -1
  114. data/manual/html/halign.left.html +1 -1
  115. data/manual/html/halign.right.html +1 -1
  116. data/manual/html/hasalert.html +1 -1
  117. data/manual/html/header.html +1 -1
  118. data/manual/html/headline.html +1 -1
  119. data/manual/html/hidejournalentry.html +2 -2
  120. data/manual/html/hidereport.html +1 -1
  121. data/manual/html/hideresource.html +2 -2
  122. data/manual/html/hidetask.html +2 -2
  123. data/manual/html/icalreport.html +1 -1
  124. data/manual/html/include.macro.html +1 -1
  125. data/manual/html/include.project.html +1 -1
  126. data/manual/html/include.properties.html +1 -1
  127. data/manual/html/index.html +1 -1
  128. data/manual/html/inherit.extend.html +2 -2
  129. data/manual/html/interval1.html +1 -1
  130. data/manual/html/interval2.html +1 -1
  131. data/manual/html/interval3.html +1 -1
  132. data/manual/html/interval4.html +1 -1
  133. data/manual/html/isactive.html +1 -1
  134. data/manual/html/ischildof.html +1 -1
  135. data/manual/html/isdependencyof.html +1 -1
  136. data/manual/html/isdutyof.html +1 -1
  137. data/manual/html/isfeatureof.html +1 -1
  138. data/manual/html/isleaf.html +1 -1
  139. data/manual/html/ismilestone.html +1 -1
  140. data/manual/html/isongoing.html +1 -1
  141. data/manual/html/isresource.html +1 -1
  142. data/manual/html/istask.html +1 -1
  143. data/manual/html/journalattributes.html +14 -14
  144. data/manual/html/journalentry.html +2 -2
  145. data/manual/html/journalmode.html +1 -1
  146. data/manual/html/left.html +1 -1
  147. data/manual/html/length.html +1 -1
  148. data/manual/html/limits.allocate.html +1 -1
  149. data/manual/html/limits.html +1 -1
  150. data/manual/html/limits.resource.html +2 -2
  151. data/manual/html/limits.task.html +1 -1
  152. data/manual/html/listitem.column.html +1 -1
  153. data/manual/html/listtype.column.html +1 -1
  154. data/manual/html/loadunit.html +1 -1
  155. data/manual/html/logicalexpression.html +1 -1
  156. data/manual/html/logicalflagexpression.html +1 -1
  157. data/manual/html/macro.html +1 -1
  158. data/manual/html/managers.html +2 -2
  159. data/manual/html/mandatory.html +1 -1
  160. data/manual/html/maxend.html +1 -1
  161. data/manual/html/maximum.html +1 -1
  162. data/manual/html/maxstart.html +1 -1
  163. data/manual/html/milestone.html +1 -1
  164. data/manual/html/minend.html +1 -1
  165. data/manual/html/minimum.html +1 -1
  166. data/manual/html/minstart.html +1 -1
  167. data/manual/html/monthlymax.html +1 -1
  168. data/manual/html/monthlymin.html +1 -1
  169. data/manual/html/navbar.html +1 -1
  170. data/manual/html/navigator.html +1 -1
  171. data/manual/html/newtask.html +1 -1
  172. data/manual/html/nikureport.html +1 -1
  173. data/manual/html/note.task.html +1 -1
  174. data/manual/html/now.html +1 -1
  175. data/manual/html/numberformat.html +2 -2
  176. data/manual/html/onend.html +1 -1
  177. data/manual/html/onstart.html +1 -1
  178. data/manual/html/opennodes.html +1 -1
  179. data/manual/html/overtime.booking.html +2 -2
  180. data/manual/html/period.column.html +1 -1
  181. data/manual/html/period.limit.html +2 -2
  182. data/manual/html/period.report.html +2 -2
  183. data/manual/html/period.task.html +1 -1
  184. data/manual/html/persistent.html +1 -1
  185. data/manual/html/precedes.html +1 -1
  186. data/manual/html/priority.html +1 -1
  187. data/manual/html/priority.timesheet.html +1 -1
  188. data/manual/html/project.html +1 -1
  189. data/manual/html/projectid.html +1 -1
  190. data/manual/html/projectid.task.html +1 -1
  191. data/manual/html/projectids.html +1 -1
  192. data/manual/html/projection.html +1 -1
  193. data/manual/html/prolog.html +1 -1
  194. data/manual/html/properties.html +1 -1
  195. data/manual/html/purge.html +2 -2
  196. data/manual/html/rate.html +1 -1
  197. data/manual/html/rate.resource.html +2 -2
  198. data/manual/html/reference.extend.html +1 -1
  199. data/manual/html/remaining.html +1 -1
  200. data/manual/html/replace.html +1 -1
  201. data/manual/html/report.html +1 -1
  202. data/manual/html/reportprefix.html +1 -1
  203. data/manual/html/resource.html +2 -2
  204. data/manual/html/resourceattributes.html +6 -6
  205. data/manual/html/resourceprefix.html +1 -1
  206. data/manual/html/resourcereport.html +1 -1
  207. data/manual/html/resourceroot.html +1 -1
  208. data/manual/html/resources.limit.html +2 -2
  209. data/manual/html/responsible.html +1 -1
  210. data/manual/html/richtext.extend.html +1 -1
  211. data/manual/html/right.html +1 -1
  212. data/manual/html/rollupresource.html +2 -2
  213. data/manual/html/rolluptask.html +2 -2
  214. data/manual/html/scale.column.html +1 -1
  215. data/manual/html/scenario.html +2 -2
  216. data/manual/html/scenario.ical.html +1 -1
  217. data/manual/html/scenarios.export.html +1 -1
  218. data/manual/html/scenarios.html +1 -1
  219. data/manual/html/scenariospecific.extend.html +2 -2
  220. data/manual/html/scheduled.html +1 -1
  221. data/manual/html/scheduling.html +1 -1
  222. data/manual/html/select.html +1 -1
  223. data/manual/html/selfcontained.html +1 -1
  224. data/manual/html/shift.html +1 -1
  225. data/manual/html/shift.resource.html +5 -5
  226. data/manual/html/shift.task.html +4 -4
  227. data/manual/html/shift.timesheet.html +1 -1
  228. data/manual/html/shifts.allocate.html +1 -1
  229. data/manual/html/shifts.resource.html +5 -5
  230. data/manual/html/shifts.task.html +4 -4
  231. data/manual/html/shorttimeformat.html +1 -1
  232. data/manual/html/sloppy.booking.html +2 -2
  233. data/manual/html/sloppy.projection.html +1 -1
  234. data/manual/html/sortjournalentries.html +1 -1
  235. data/manual/html/sortresources.html +1 -1
  236. data/manual/html/sorttasks.html +1 -1
  237. data/manual/html/start.column.html +1 -1
  238. data/manual/html/start.html +1 -1
  239. data/manual/html/start.limit.html +2 -2
  240. data/manual/html/start.report.html +2 -2
  241. data/manual/html/startcredit.html +1 -1
  242. data/manual/html/status.statussheet.html +1 -1
  243. data/manual/html/status.timesheet.html +2 -2
  244. data/manual/html/statussheet.html +1 -1
  245. data/manual/html/statussheetreport.html +1 -1
  246. data/manual/html/strict.projection.html +1 -1
  247. data/manual/html/summary.html +1 -1
  248. data/manual/html/supplement.html +1 -1
  249. data/manual/html/supplement.resource.html +2 -2
  250. data/manual/html/supplement.task.html +1 -1
  251. data/manual/html/tagfile.html +8 -4
  252. data/manual/html/task.html +1 -1
  253. data/manual/html/task.statussheet.html +1 -1
  254. data/manual/html/task.timesheet.html +1 -1
  255. data/manual/html/taskattributes.html +22 -22
  256. data/manual/html/taskprefix.html +1 -1
  257. data/manual/html/taskreport.html +1 -1
  258. data/manual/html/taskroot.html +1 -1
  259. data/manual/html/text.extend.html +1 -1
  260. data/manual/html/textreport.html +1 -1
  261. data/manual/html/timeformat.html +2 -2
  262. data/manual/html/timeoff.nikureport.html +1 -1
  263. data/manual/html/timesheet.html +1 -1
  264. data/manual/html/timesheetreport.html +1 -1
  265. data/manual/html/timezone.export.html +1 -1
  266. data/manual/html/timezone.html +1 -1
  267. data/manual/html/timezone.report.html +1 -1
  268. data/manual/html/timezone.shift.html +1 -1
  269. data/manual/html/timingresolution.html +1 -1
  270. data/manual/html/title.column.html +1 -1
  271. data/manual/html/title.html +1 -1
  272. data/manual/html/toc.html +16 -12
  273. data/manual/html/tooltip.column.html +1 -1
  274. data/manual/html/trackingscenario.html +1 -1
  275. data/manual/html/treelevel.html +1 -1
  276. data/manual/html/vacation.html +1 -1
  277. data/manual/html/vacation.resource.html +2 -2
  278. data/manual/html/vacation.shift.html +1 -1
  279. data/manual/html/warn.html +2 -2
  280. data/manual/html/weeklymax.html +1 -1
  281. data/manual/html/weeklymin.html +1 -1
  282. data/manual/html/weekstartsmonday.html +1 -1
  283. data/manual/html/weekstartssunday.html +1 -1
  284. data/manual/html/width.column.html +1 -1
  285. data/manual/html/work.html +1 -1
  286. data/manual/html/workinghours.project.html +1 -1
  287. data/manual/html/workinghours.resource.html +2 -2
  288. data/manual/html/workinghours.shift.html +1 -1
  289. data/manual/html/yearlyworkingdays.html +1 -1
  290. data/tasks/changelog.rake +1 -0
  291. data/test/TestSuite/Export-Reports/refs/AutoID.tjp +18 -0
  292. data/test/TestSuite/Export-Reports/refs/Mandatory.tjp +2 -1
  293. data/test/TestSuite/Export-Reports/refs/Shift.tjp +49 -0
  294. data/test/TestSuite/HTML-Reports/Navigator.tjp +34 -0
  295. data/test/TestSuite/ReportGenerator/Correct/FTE.tjp +15 -0
  296. data/test/TestSuite/ReportGenerator/Correct/refs/FTE-1.csv +4 -0
  297. data/test/TestSuite/Syntax/Correct/Mandatory.tjp +1 -0
  298. data/test/TestSuite/Syntax/Correct/Shift.tjp +4 -0
  299. data/test/TestSuite/Syntax/Correct/tutorial.tjp +0 -2
  300. data/test/TestSuite/Syntax/Errors/invalid_file_name.tjp +9 -0
  301. data/test/test_CSVFile.rb +0 -1
  302. data/test/test_Journal.rb +5 -5
  303. data/test/test_LogicalExpression.rb +1 -1
  304. data/test/test_ShiftAssignments.rb +1 -1
  305. 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
- prj.resources.keys.sort.each do |resourceId|
180
- res = prj.resources[resourceId]
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' => res.id,
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("TaskJuggler Report - #{@name}",
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(/'/, '&apos;')}')"
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 = 20
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 into your shell
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 easily to projects with
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. It assists you during
14
- project scoping, resource assignment, cost and revenue planning, risk
15
- and communication management.
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 consistency checker offload you from having to
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. Its flexible "as many details as necessary"-approach
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 takes some effort to master its power, but it
32
- will become a companion you don't want to miss anymore.
33
-
34
- === About TaskJuggler III ===
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 does not
45
- mean that you don't get fancy looking Gantt-charts. It just means
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, costs and revenue in one package
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
- * Project tracking and status reporting
93
- * Server based time sheet system for status and actual collection
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
- * Built-in web server for dynamically generated reports
99
- * Project breakdown and management team support
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
- * Project description syntax with macro support
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 v0.2.2 -->
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 v0.2.2 -->
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 v0.2.2 -->
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 v0.2.2 -->
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"># To use TaskJuggler directly from the source. This must point to
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>