taskjuggler 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (443) hide show
  1. data/{tasks/missing.rake → .gemtest} +0 -0
  2. data/CHANGELOG +27 -0
  3. data/Rakefile +8 -9
  4. data/bin/tj3 +2 -1
  5. data/bin/tj3client +2 -1
  6. data/bin/tj3d +2 -1
  7. data/bin/tj3man +2 -1
  8. data/bin/tj3ss_receiver +2 -1
  9. data/bin/tj3ss_sender +2 -1
  10. data/bin/tj3ts_receiver +2 -1
  11. data/bin/tj3ts_sender +2 -1
  12. data/bin/tj3ts_summary +2 -1
  13. data/data/tjp.vim +425 -419
  14. data/examples/Fedora-20/f-20.tjp +2442 -0
  15. data/examples/Fedora-20/icons/fedoralogo.png +0 -0
  16. data/examples/Fedora-20/reports.tji +423 -0
  17. data/lib/header.tmpl +13 -0
  18. data/lib/taskjuggler/AppConfig.rb +5 -0
  19. data/lib/taskjuggler/Attributes.rb +22 -0
  20. data/lib/taskjuggler/Journal.rb +273 -10
  21. data/lib/taskjuggler/Log.rb +9 -8
  22. data/lib/taskjuggler/Project.rb +28 -60
  23. data/lib/taskjuggler/ProjectFileScanner.rb +2 -1
  24. data/lib/taskjuggler/PropertySet.rb +3 -0
  25. data/lib/taskjuggler/PropertyTreeNode.rb +4 -0
  26. data/lib/taskjuggler/Query.rb +2 -1
  27. data/lib/taskjuggler/Resource.rb +0 -103
  28. data/lib/taskjuggler/RichText/RTFQuery.rb +42 -4
  29. data/lib/taskjuggler/SheetHandlerBase.rb +0 -20
  30. data/lib/taskjuggler/SheetReceiver.rb +23 -21
  31. data/lib/taskjuggler/Task.rb +3 -5
  32. data/lib/taskjuggler/TaskJuggler.rb +4 -0
  33. data/lib/taskjuggler/TaskScenario.rb +81 -103
  34. data/lib/taskjuggler/TextParser/Scanner.rb +19 -18
  35. data/lib/taskjuggler/Tj3Config.rb +1 -1
  36. data/lib/taskjuggler/TjpSyntaxRules.rb +180 -45
  37. data/lib/taskjuggler/UTF8String.rb +30 -0
  38. data/lib/taskjuggler/apps/Tj3.rb +1 -1
  39. data/lib/taskjuggler/apps/Tj3Man.rb +54 -2
  40. data/lib/taskjuggler/reports/ICalReport.rb +4 -4
  41. data/lib/taskjuggler/reports/NikuReport.rb +6 -0
  42. data/lib/taskjuggler/reports/Report.rb +5 -5
  43. data/lib/taskjuggler/reports/ReportContext.rb +4 -2
  44. data/lib/taskjuggler/reports/ResourceListRE.rb +10 -1
  45. data/lib/taskjuggler/reports/StatusSheetReport.rb +3 -0
  46. data/lib/taskjuggler/reports/TableReport.rb +8 -3
  47. data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -0
  48. data/lib/updateheader.sh +15 -0
  49. data/manual/Installation +11 -22
  50. data/manual/Software +17 -3
  51. data/manual/html/Day_To_Day_Juggling.html +359 -0
  52. data/manual/html/Getting_Started.html +62 -0
  53. data/manual/html/How_To_Contribute.html +88 -0
  54. data/manual/html/Installation.html +172 -0
  55. data/manual/html/Intro.html +74 -0
  56. data/manual/html/Reporting_Bugs.html +47 -0
  57. data/manual/html/Rich_Text_Attributes.html +174 -0
  58. data/manual/html/Software.html +147 -0
  59. data/manual/html/TaskJuggler_2x_Migration.html +71 -0
  60. data/manual/html/TaskJuggler_Internals.html +61 -0
  61. data/manual/html/The_TaskJuggler_Syntax.html +89 -0
  62. data/manual/html/Tutorial.html +498 -0
  63. data/manual/html/account.html +152 -0
  64. data/manual/html/account.task.html +68 -0
  65. data/manual/html/accountprefix.html +67 -0
  66. data/manual/html/active.html +66 -0
  67. data/manual/html/adopt.task.html +73 -0
  68. data/manual/html/alert level.html +66 -0
  69. data/manual/html/alert.html +66 -0
  70. data/manual/html/allocate.html +92 -0
  71. data/manual/html/alphabet.html +33 -0
  72. data/manual/html/alternative.html +77 -0
  73. data/manual/html/author.html +69 -0
  74. data/manual/html/balance.html +73 -0
  75. data/manual/html/booking.resource.html +122 -0
  76. data/manual/html/booking.task.html +120 -0
  77. data/manual/html/caption.html +96 -0
  78. data/manual/html/cellcolor.column.html +71 -0
  79. data/manual/html/celltext.column.html +68 -0
  80. data/manual/html/center.html +67 -0
  81. data/manual/html/charge.html +89 -0
  82. data/manual/html/chargeset.html +73 -0
  83. data/manual/html/columnid.html +358 -0
  84. data/manual/html/columns.html +73 -0
  85. data/manual/html/complete.html +80 -0
  86. data/manual/html/copyright.html +97 -0
  87. data/manual/html/credit.html +117 -0
  88. data/{benchmarks → manual/html}/css/tjmanual.css +0 -0
  89. data/{benchmarks → manual/html}/css/tjreport.css +0 -0
  90. data/manual/html/currency.html +120 -0
  91. data/manual/html/currencyformat.html +99 -0
  92. data/manual/html/dailymax.html +144 -0
  93. data/manual/html/dailymin.html +132 -0
  94. data/manual/html/dailyworkinghours.html +90 -0
  95. data/manual/html/date.extend.html +77 -0
  96. data/manual/html/date.html +100 -0
  97. data/manual/html/definitions.html +94 -0
  98. data/manual/html/depends.html +110 -0
  99. data/manual/html/details.html +69 -0
  100. data/manual/html/disabled.html +85 -0
  101. data/manual/html/duration.html +133 -0
  102. data/manual/html/efficiency.html +93 -0
  103. data/manual/html/effort.html +134 -0
  104. data/manual/html/email.html +68 -0
  105. data/manual/html/enabled.html +69 -0
  106. data/manual/html/end.column.html +67 -0
  107. data/manual/html/end.html +87 -0
  108. data/manual/html/end.limit.html +69 -0
  109. data/manual/html/end.report.html +99 -0
  110. data/manual/html/end.timesheet.html +94 -0
  111. data/manual/html/endcredit.html +110 -0
  112. data/manual/html/epilog.html +72 -0
  113. data/manual/html/export.html +197 -0
  114. data/manual/html/extend.html +87 -0
  115. data/manual/html/fail.html +69 -0
  116. data/manual/html/fdl.html +430 -0
  117. data/manual/html/flags.account.html +66 -0
  118. data/manual/html/flags.html +66 -0
  119. data/manual/html/flags.journalentry.html +66 -0
  120. data/manual/html/flags.report.html +66 -0
  121. data/manual/html/flags.resource.html +68 -0
  122. data/manual/html/flags.statussheet.html +66 -0
  123. data/manual/html/flags.task.html +68 -0
  124. data/manual/html/flags.timesheet.html +66 -0
  125. data/manual/html/fontcolor.column.html +71 -0
  126. data/manual/html/footer.html +72 -0
  127. data/manual/html/formats.html +80 -0
  128. data/manual/html/functions.html +78 -0
  129. data/manual/html/gapduration.html +93 -0
  130. data/manual/html/gaplength.html +93 -0
  131. data/manual/html/halign.center.html +66 -0
  132. data/manual/html/halign.column.html +67 -0
  133. data/manual/html/halign.left.html +66 -0
  134. data/manual/html/halign.right.html +66 -0
  135. data/manual/html/hasalert.html +71 -0
  136. data/manual/html/header.html +72 -0
  137. data/manual/html/headline.html +69 -0
  138. data/manual/html/hidejournalentry.html +69 -0
  139. data/manual/html/hidereport.html +67 -0
  140. data/manual/html/hideresource.html +73 -0
  141. data/manual/html/hidetask.html +73 -0
  142. data/manual/html/icalreport.html +137 -0
  143. data/manual/html/include.macro.html +70 -0
  144. data/manual/html/include.project.html +71 -0
  145. data/manual/html/include.properties.html +168 -0
  146. data/manual/html/index.html +18 -0
  147. data/manual/html/inherit.extend.html +68 -0
  148. data/manual/html/interval1.html +99 -0
  149. data/manual/html/interval2.html +98 -0
  150. data/manual/html/interval3.html +99 -0
  151. data/manual/html/interval4.html +100 -0
  152. data/manual/html/isactive.html +67 -0
  153. data/manual/html/ischildof.html +67 -0
  154. data/manual/html/isdependencyof.html +75 -0
  155. data/manual/html/isdutyof.html +71 -0
  156. data/manual/html/isfeatureof.html +71 -0
  157. data/manual/html/isleaf.html +66 -0
  158. data/manual/html/ismilestone.html +67 -0
  159. data/manual/html/isongoing.html +67 -0
  160. data/manual/html/isresource.html +66 -0
  161. data/manual/html/istask.html +66 -0
  162. data/manual/html/journalattributes.html +107 -0
  163. data/manual/html/journalentry.html +83 -0
  164. data/manual/html/journalmode.html +83 -0
  165. data/manual/html/left.html +66 -0
  166. data/manual/html/length.html +104 -0
  167. data/manual/html/limits.allocate.html +72 -0
  168. data/manual/html/limits.html +72 -0
  169. data/manual/html/limits.resource.html +80 -0
  170. data/manual/html/limits.task.html +113 -0
  171. data/manual/html/listitem.column.html +66 -0
  172. data/manual/html/listtype.column.html +79 -0
  173. data/manual/html/loadunit.html +99 -0
  174. data/manual/html/logicalexpression.html +110 -0
  175. data/manual/html/logicalflagexpression.html +82 -0
  176. data/manual/html/macro.html +103 -0
  177. data/manual/html/managers.html +109 -0
  178. data/manual/html/mandatory.html +66 -0
  179. data/manual/html/maxend.html +69 -0
  180. data/manual/html/maximum.html +99 -0
  181. data/manual/html/maxstart.html +69 -0
  182. data/manual/html/milestone.html +71 -0
  183. data/manual/html/minend.html +69 -0
  184. data/manual/html/minimum.html +99 -0
  185. data/manual/html/minstart.html +69 -0
  186. data/manual/html/monthlymax.html +99 -0
  187. data/manual/html/monthlymin.html +99 -0
  188. data/manual/html/navbar.html +513 -0
  189. data/manual/html/navigator.html +70 -0
  190. data/manual/html/newtask.html +83 -0
  191. data/manual/html/nikureport.html +216 -0
  192. data/manual/html/note.task.html +68 -0
  193. data/manual/html/now.html +67 -0
  194. data/manual/html/numberformat.html +85 -0
  195. data/manual/html/onend.html +68 -0
  196. data/manual/html/onstart.html +68 -0
  197. data/manual/html/opennodes.html +66 -0
  198. data/manual/html/overtime.booking.html +76 -0
  199. data/manual/html/period.column.html +67 -0
  200. data/manual/html/period.limit.html +69 -0
  201. data/manual/html/period.report.html +69 -0
  202. data/manual/html/period.task.html +69 -0
  203. data/manual/html/persistent.html +66 -0
  204. data/manual/html/precedes.html +86 -0
  205. data/manual/html/priority.html +114 -0
  206. data/manual/html/priority.timesheet.html +68 -0
  207. data/manual/html/project.html +88 -0
  208. data/manual/html/projectid.html +66 -0
  209. data/manual/html/projectid.task.html +68 -0
  210. data/manual/html/projectids.html +66 -0
  211. data/manual/html/projection.html +75 -0
  212. data/manual/html/prolog.html +72 -0
  213. data/manual/html/properties.html +64 -0
  214. data/manual/html/purge.html +69 -0
  215. data/manual/html/rate.html +66 -0
  216. data/manual/html/rate.resource.html +68 -0
  217. data/manual/html/reference.extend.html +77 -0
  218. data/manual/html/remaining.html +117 -0
  219. data/manual/html/replace.html +66 -0
  220. data/manual/html/report.html +333 -0
  221. data/manual/html/reportprefix.html +67 -0
  222. data/manual/html/resource.html +194 -0
  223. data/manual/html/resourceattributes.html +83 -0
  224. data/manual/html/resourceprefix.html +67 -0
  225. data/manual/html/resourcereport.html +69 -0
  226. data/manual/html/resourceroot.html +90 -0
  227. data/manual/html/resources.limit.html +82 -0
  228. data/manual/html/responsible.html +69 -0
  229. data/manual/html/richtext.extend.html +78 -0
  230. data/manual/html/right.html +66 -0
  231. data/manual/html/rollupresource.html +92 -0
  232. data/manual/html/rolluptask.html +69 -0
  233. data/manual/html/scale.column.html +87 -0
  234. data/manual/html/scenario.html +123 -0
  235. data/manual/html/scenario.ical.html +67 -0
  236. data/manual/html/scenarios.export.html +66 -0
  237. data/manual/html/scenarios.html +66 -0
  238. data/manual/html/scenariospecific.extend.html +68 -0
  239. data/manual/html/scheduled.html +68 -0
  240. data/manual/html/scheduling.html +74 -0
  241. data/manual/html/select.html +86 -0
  242. data/manual/html/selfcontained.html +66 -0
  243. data/manual/html/shift.html +128 -0
  244. data/manual/html/shift.resource.html +74 -0
  245. data/manual/html/shift.task.html +74 -0
  246. data/manual/html/shift.timesheet.html +70 -0
  247. data/manual/html/shifts.allocate.html +71 -0
  248. data/manual/html/shifts.resource.html +73 -0
  249. data/manual/html/shifts.task.html +73 -0
  250. data/manual/html/shorttimeformat.html +67 -0
  251. data/manual/html/sloppy.booking.html +77 -0
  252. data/manual/html/sloppy.projection.html +66 -0
  253. data/manual/html/sortjournalentries.html +81 -0
  254. data/manual/html/sortresources.html +73 -0
  255. data/manual/html/sorttasks.html +73 -0
  256. data/manual/html/start.column.html +67 -0
  257. data/manual/html/start.html +78 -0
  258. data/manual/html/start.limit.html +69 -0
  259. data/manual/html/start.report.html +69 -0
  260. data/manual/html/startcredit.html +68 -0
  261. data/manual/html/status.statussheet.html +73 -0
  262. data/manual/html/status.timesheet.html +91 -0
  263. data/manual/html/statussheet.html +124 -0
  264. data/manual/html/statussheetreport.html +125 -0
  265. data/manual/html/strict.projection.html +66 -0
  266. data/manual/html/summary.html +69 -0
  267. data/manual/html/supplement.html +108 -0
  268. data/manual/html/supplement.resource.html +195 -0
  269. data/manual/html/supplement.task.html +329 -0
  270. data/manual/html/tagfile.html +73 -0
  271. data/manual/html/task.html +320 -0
  272. data/manual/html/task.statussheet.html +74 -0
  273. data/manual/html/task.timesheet.html +89 -0
  274. data/manual/html/taskattributes.html +115 -0
  275. data/manual/html/taskprefix.html +67 -0
  276. data/manual/html/taskreport.html +69 -0
  277. data/manual/html/taskroot.html +103 -0
  278. data/manual/html/text.extend.html +77 -0
  279. data/manual/html/textreport.html +66 -0
  280. data/manual/html/timeformat.html +160 -0
  281. data/manual/html/timeoff.nikureport.html +71 -0
  282. data/manual/html/timesheet.html +129 -0
  283. data/manual/html/timesheetreport.html +107 -0
  284. data/manual/html/timezone.export.html +66 -0
  285. data/manual/html/timezone.html +72 -0
  286. data/manual/html/timezone.report.html +66 -0
  287. data/manual/html/timezone.shift.html +70 -0
  288. data/manual/html/timingresolution.html +71 -0
  289. data/manual/html/title.column.html +67 -0
  290. data/manual/html/title.html +68 -0
  291. data/manual/html/toc.html +1330 -0
  292. data/manual/html/tooltip.column.html +72 -0
  293. data/manual/html/trackingscenario.html +80 -0
  294. data/manual/html/treelevel.html +66 -0
  295. data/manual/html/vacation.html +71 -0
  296. data/manual/html/vacation.resource.html +73 -0
  297. data/manual/html/vacation.shift.html +71 -0
  298. data/manual/html/warn.html +69 -0
  299. data/manual/html/weeklymax.html +99 -0
  300. data/manual/html/weeklymin.html +99 -0
  301. data/manual/html/weekstartsmonday.html +66 -0
  302. data/manual/html/weekstartssunday.html +66 -0
  303. data/manual/html/width.column.html +66 -0
  304. data/manual/html/work.html +105 -0
  305. data/manual/html/workinghours.project.html +102 -0
  306. data/manual/html/workinghours.resource.html +79 -0
  307. data/manual/html/workinghours.shift.html +81 -0
  308. data/manual/html/yearlyworkingdays.html +70 -0
  309. data/spec/StatusSheets_spec.rb +0 -6
  310. data/spec/TimeSheets_spec.rb +0 -6
  311. data/spec/Tj3Daemon_spec.rb +2 -0
  312. data/spec/support/DaemonControl.rb +10 -0
  313. data/taskjuggler.gemspec +71 -0
  314. data/tasks/changelog.rake +2 -2
  315. data/tasks/gem.rake +50 -21
  316. data/tasks/manual.rake +1 -1
  317. data/tasks/rdoc.rake +5 -12
  318. data/tasks/spec.rake +1 -1
  319. data/tasks/test.rake +5 -8
  320. data/test/ReferenceGenerator.rb +91 -0
  321. data/test/TestSuite/CSV-Reports/refs/resourcereport.csv +4 -4
  322. data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +21 -0
  323. data/test/TestSuite/ReportGenerator/Correct/JournalMode.tjp +124 -0
  324. data/test/TestSuite/ReportGenerator/Correct/refs/Alerts-1.csv +124 -124
  325. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +1 -7
  326. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-2.csv +7 -3
  327. data/test/TestSuite/ReportGenerator/Correct/refs/JournalMode-1.csv +79 -0
  328. data/test/TestSuite/ReportGenerator/Correct/refs/JournalMode-2.csv +208 -0
  329. data/test/TjpGen.rb +152 -0
  330. metadata +1290 -741
  331. data/benchmarks/666tasks.tjp +0 -3183
  332. data/benchmarks/allocate.tjp +0 -30
  333. data/benchmarks/allocatedSlots.tjp +0 -1602
  334. data/benchmarks/booking.tjp +0 -76
  335. data/benchmarks/depends.tjp +0 -113
  336. data/benchmarks/gantt.tjp +0 -57
  337. data/benchmarks/htmltaskreport.tjp +0 -71
  338. data/benchmarks/icons/details.png +0 -0
  339. data/benchmarks/icons/flag-green.png +0 -0
  340. data/benchmarks/icons/flag-red.png +0 -0
  341. data/benchmarks/icons/flag-yellow.png +0 -0
  342. data/benchmarks/icons/resource.png +0 -0
  343. data/benchmarks/icons/resourcegroup.png +0 -0
  344. data/benchmarks/icons/task.png +0 -0
  345. data/benchmarks/icons/taskgroup.png +0 -0
  346. data/benchmarks/icons/trend-down.png +0 -0
  347. data/benchmarks/icons/trend-flat.png +0 -0
  348. data/benchmarks/icons/trend-up.png +0 -0
  349. data/benchmarks/runbench.rb +0 -30
  350. data/benchmarks/scripts/wz_tooltip.js +0 -1301
  351. data/gem_spec.rb +0 -37
  352. data/lib/exchangebug.rb +0 -42
  353. data/lib/ruby-signal-bug.rb +0 -55
  354. data/prj_cfg.rb +0 -50
  355. data/tasks/csts.rake +0 -72
  356. data/tasks/rcov.rake +0 -14
  357. data/tasks/rexml_fix.rb +0 -16
  358. data/tasks/rexml_fix_19.rb +0 -49
  359. data/tasks/show.rake +0 -21
  360. data/tasks/stats.rake +0 -25
  361. data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -60
  362. data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -80
  363. data/test/TestSuite/Export-Reports/tp.tjp +0 -49
  364. data/test/TestSuite/HTML-Reports/Alerts.html +0 -424
  365. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  366. data/test/TestSuite/HTML-Reports/css/tjmanual.css +0 -86
  367. data/test/TestSuite/HTML-Reports/css/tjreport.css +0 -413
  368. data/test/TestSuite/HTML-Reports/icons/details.png +0 -0
  369. data/test/TestSuite/HTML-Reports/icons/flag-green.png +0 -0
  370. data/test/TestSuite/HTML-Reports/icons/flag-red.png +0 -0
  371. data/test/TestSuite/HTML-Reports/icons/flag-yellow.png +0 -0
  372. data/test/TestSuite/HTML-Reports/icons/resource.png +0 -0
  373. data/test/TestSuite/HTML-Reports/icons/resourcegroup.png +0 -0
  374. data/test/TestSuite/HTML-Reports/icons/task.png +0 -0
  375. data/test/TestSuite/HTML-Reports/icons/taskgroup.png +0 -0
  376. data/test/TestSuite/HTML-Reports/icons/trend-down.png +0 -0
  377. data/test/TestSuite/HTML-Reports/icons/trend-flat.png +0 -0
  378. data/test/TestSuite/HTML-Reports/icons/trend-up.png +0 -0
  379. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  380. data/test/TestSuite/HTML-Reports/scripts/wz_tooltip.js +0 -1301
  381. data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +0 -86
  382. data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +0 -413
  383. data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
  384. data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
  385. data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
  386. data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
  387. data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
  388. data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
  389. data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
  390. data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
  391. data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
  392. data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
  393. data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
  394. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  395. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  396. data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +0 -1301
  397. data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -1075
  398. data/test/TestSuite/Scheduler/Correct/Duration.html +0 -610
  399. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -85
  400. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +0 -413
  401. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  402. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  403. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  404. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  405. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  406. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  407. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  408. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  409. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  410. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  411. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  412. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +0 -1301
  413. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  414. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  415. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/missing-reports +0 -2
  416. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/resource1_2002-03-01.tji +0 -0
  417. data/test/TestSuite/StatusSheets/boss.tji +0 -45
  418. data/test/TestSuite/StatusSheets/boss_mail +0 -51
  419. data/test/TestSuite/StatusSheets/dev2_mail +0 -37
  420. data/test/TestSuite/StatusSheets/project.tjp +0 -275
  421. data/test/TestSuite/StatusSheets/run +0 -54
  422. data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
  423. data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
  424. data/test/TestSuite/Syntax/Correct/css/tjmanual.css +0 -86
  425. data/test/TestSuite/Syntax/Correct/css/tjreport.css +0 -413
  426. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  427. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  428. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  429. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  430. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  431. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  432. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  433. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  434. data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
  435. data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
  436. data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
  437. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +0 -1301
  438. data/test/TestSuite/TimeSheets/dev2_mail1 +0 -84
  439. data/test/TestSuite/TimeSheets/dev2_mail2 +0 -87
  440. data/test/TestSuite/TimeSheets/project.tjp +0 -271
  441. data/test/TestSuite/TimeSheets/receiver.log.mod +0 -1056
  442. data/test/TestSuite/TimeSheets/run +0 -76
  443. data/test/TestSuite/TimeSheets/uu.txt +0 -29
@@ -0,0 +1,89 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
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 -->
4
+ <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
5
+ <head>
6
+ <title>The_TaskJuggler_Syntax</title>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
8
+ </head>
9
+ <link href="css/tjmanual.css" rel="stylesheet" type="text/css"></link>
10
+ <body>
11
+ <div align="center">
12
+ <h3 align="center">The TaskJuggler III User Manual</h3>
13
+ <em align="center">Project Management beyond Gantt Chart Drawing</em>
14
+ </div>
15
+ <br/>
16
+ <hr/>
17
+ <table style="width:90%; margin-left:5%; margin-right:5%"><tr>
18
+ <td style="text-align:left; width:35%;">&lt;&lt; <a href="Tutorial.html">Tutorial</a> &lt;&lt;</td>
19
+ <td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
20
+ <td style="text-align:right; width:35%;">&gt;&gt; <a href="Rich_Text_Attributes.html">Rich_Text_Attributes</a> &gt;&gt;</td>
21
+ </tr></table>
22
+ <hr/>
23
+ <br/>
24
+ <div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
25
+ <h1 class="manual" id="The_TaskJuggler_Syntax">5 The TaskJuggler Syntax</h1>
26
+ <h2 class="manual" id="Understanding_the_Syntax_Reference">5.1 Understanding the Syntax Reference</h2>
27
+ <p class="manual">This manual provides a comprehensive reference of the TaskJuggler syntax. It is automatically generated from the same data that the parser uses to read your project files. This ensures that the software and the manual always match.</p>
28
+ <p class="manual">The syntax reference is organized based on the keywords of the TaskJuggler syntax. There is an entry for every keyword. In some cases, a keyword can appear in different contexts with potentially different meanings. In this case, the context is provided in brackets after the keyword for at least one of them. That way, every keyword is uniquely referenced.</p>
29
+ <p class="manual">The syntax for each keyword is described in the syntax section of the table that is provided for each keyword. The syntax always starts with the keyword. Keywords are then followed by arguments. In some cases, an argument can be automatically generated. In such cases, the argument is enclosed in square brackets.</p>
30
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">keyword [&lt;id&gt;]
31
+ </pre></div>
32
+ <p class="manual">Arguments can be variable or picked from a predefined list of options. Variable arguments are listed with their names enclosed in angle brackets.</p>
33
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">keyword &lt;name&gt;
34
+ </pre></div>
35
+ <p class="manual">List of predefined options are enclosed in brackets, the options separated by a vertical bar.</p>
36
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">keyword ( foo | bar | foobar )
37
+ </pre></div>
38
+ <p class="manual">Variable arguments are further described in the <i>Arguments</i> section of the keyword syntax table. The name is listed immediately followed by the type of the variable argument. The supported types and their meaning is described in the following sections.</p>
39
+ <h3 class="manual" id="ABSOLUTEID">5.1.1 ABSOLUTE_ID</h3>
40
+ <p class="manual">An absolute identifier is composed of identifiers that are concatenated by dots, e. g. <code class="manual">foo.bar</code>. It is used to reference a TaskJuggler property that lives in a hierarchical name space. Accounts, Tasks, Reports are examples for such hierarchical name spaces. To reference the sub-task <code class="manual">bar</code> of task <code class="manual">foo</code> the absolute ID <code class="manual">foo.bar</code> is used.</p>
41
+ <h3 class="manual" id="ID">5.1.2 ID</h3>
42
+ <p class="manual">An identifier is composed of the letters <code class="manual">a</code> to <code class="manual">z</code>, <code class="manual">A</code> to <code class="manual">Z</code>, the underscore and the digits <code class="manual">0</code> to <code class="manual">9</code>. There are no limits for the number of characters, but it may not begin with a digit.</p>
43
+ <h3 class="manual" id="INTEGER">5.1.3 INTEGER</h3>
44
+ <p class="manual">An integer is any natural number, e. g. <code class="manual">0</code>, <code class="manual">1</code>, <code class="manual">2</code> and so on.</p>
45
+ <h3 class="manual" id="STRING">5.1.4 STRING</h3>
46
+ <p class="manual">Strings are character sequences that are enclosed by special character marks. There are three different marks supported. For short strings that fit on one lines, you can either use single or double quotes.</p>
47
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">'This is a single quoted string.'
48
+ "This is a double quoted string."
49
+ </pre></div>
50
+ <p class="manual">Single quoted strings may contain double quotes and vice versa. Alternatively, you can prefix the quote mark with a backslash to use it within a string.</p>
51
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">'It\'s a string with a quote included.'
52
+ </pre></div>
53
+ <p class="manual">If you want to use a backslash right before the included quote you need to escape the backslash with another backslash. Backslashes that aren't followed by a quote mark don't need to be escaped.</p>
54
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">'A backslash \\\' followed by a quote.'
55
+ </pre></div>
56
+ <p class="manual">For multi-line strings or strings with many included quotes cut mark strings are recommended. A cut-mark-string starts with <code class="manual">-8&lt;-</code> (scissor on a dotted line) and ends with <code class="manual">-&gt;8-</code>(scissors looking the other way). The start mark must be immediately followed by a line break. The indentation of the first line after the opening scissors must be repeated for all following lines of the string and is not included in the resulting strings. The terminating cut mark must only be preceded by white spaces in that line. When considering the indentation, tabs are not identical with some number of spaces. Each indented line must be prefixed by the exact same combination of tabs and spaces.</p>
57
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">-8&lt;-
58
+ This is a
59
+ multi-line
60
+ string.
61
+ -&gt;8-
62
+ </pre></div>
63
+ <h2 class="manual" id="Predefined_Macros">5.2 Predefined Macros</h2>
64
+ <p class="manual">TaskJuggler supports a few predefined macros. These are available after the project header. They values correspond to the values provided in the project header.</p>
65
+ <ul>
66
+ <li>
67
+ <code class="manual">projectstart</code> The start date of the project.</li>
68
+ <li>
69
+ <code class="manual">projectend</code> The end date of the project.</li>
70
+ <li>
71
+ <code class="manual">now</code> The current date. If the user does not provide a date with the <a href="now.html">now</a> keyword, the moment of the processing of the file will be inserted. Keep in mind that this will change every time you process your project. The current setting of <a href="timeformat.html">timeformat</a> has no impact on the expansion of the macro.</li>
72
+ <li>
73
+ <code class="manual">today</code> Identical to <code class="manual">now</code> but formatted according to the <a href="timeformat.html">timeformat</a> setting of the current context.</li>
74
+ </ul>
75
+ <h2 class="manual" id="Environment_Variable_Expansions">5.3 Environment Variable Expansions</h2>
76
+ <p class="manual">By using the $(VAR) syntax, you can insert the value of the environment variable name VAR. The name of the variable must consists only of uppercase ASCII letters, underscore or decimal digits.</p>
77
+ </div></div>
78
+ <br/>
79
+ <hr/>
80
+ <table style="width:90%; margin-left:5%; margin-right:5%"><tr>
81
+ <td style="text-align:left; width:35%;">&lt;&lt; <a href="Tutorial.html">Tutorial</a> &lt;&lt;</td>
82
+ <td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
83
+ <td style="text-align:right; width:35%;">&gt;&gt; <a href="Rich_Text_Attributes.html">Rich_Text_Attributes</a> &gt;&gt;</td>
84
+ </tr></table>
85
+ <hr/>
86
+ <br/>
87
+ <div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011 by Chris Schlaeger &lt;chris@linux.com&gt;.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
88
+ </body>
89
+ </html>
@@ -0,0 +1,498 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
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 -->
4
+ <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
5
+ <head>
6
+ <title>Tutorial</title>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
8
+ </head>
9
+ <link href="css/tjmanual.css" rel="stylesheet" type="text/css"></link>
10
+ <body>
11
+ <div align="center">
12
+ <h3 align="center">The TaskJuggler III User Manual</h3>
13
+ <em align="center">Project Management beyond Gantt Chart Drawing</em>
14
+ </div>
15
+ <br/>
16
+ <hr/>
17
+ <table style="width:90%; margin-left:5%; margin-right:5%"><tr>
18
+ <td style="text-align:left; width:35%;">&lt;&lt; <a href="Getting_Started.html">Getting_Started</a> &lt;&lt;</td>
19
+ <td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
20
+ <td style="text-align:right; width:35%;">&gt;&gt; <a href="The_TaskJuggler_Syntax.html">The_TaskJuggler_Syntax</a> &gt;&gt;</td>
21
+ </tr></table>
22
+ <hr/>
23
+ <br/>
24
+ <div style="width:90%; margin-left:5%; margin-right:5%"><div class="manual">
25
+ <h1 class="manual" id="The_Tutorial_Your_first_Project">4 The Tutorial: Your first Project</h1>
26
+ <p class="manual">We have mentioned already that TaskJuggler uses plain text files that describe the project to schedule it. As you will see now, the syntax of these files is easy to understand and very intuitive. This chapter will walk you step by step through your first project. You create the project plan for a made-up accounting software project. This project demonstrates some of the commonly used features of TaskJuggler. The complete example can be downloaded <a href="http://www.taskjuggler.org/tj3/examples/tutorial.tjp" target="_top">here</a>. The resulting reports can be found <a href="http://www.taskjuggler.org/tj3/examples/Overview.html" target="_top">here</a>.</p>
27
+ <h2 class="manual" id="Starting_the_project">4.1 Starting the project</h2>
28
+ <p class="manual">To start a TaskJuggler project file you need to use the <a href="project.html">project</a> property. It tells TaskJuggler the name of your project and a start and end date. The start and end dates don't need to be exact, but must fit all tasks of the project. It is the time interval the TaskJuggler scheduler will use to fit the tasks in. So, make it large enough for all your tasks to fit in. But don't make it too large, because this will result in longer scheduling times and higher memory consumption.</p>
29
+ <div class="codeframe"><pre class="code">project acso "Accounting Software" 2002-01-16 +4m {
30
+ }
31
+ </pre></div>
32
+ <p class="manual">All TaskJuggler properties have two required attributes, a unique ID and a name, and a set of optional attributes. The name must always be specified. The ID can be omitted if you never have to reference the property from another context. If you omit the ID, TaskJuggler will automatically generate a unique ID. The other optional attributes are always enclosed in curly braces. If no optional attributes are specified, the braces can be omitted as well. In this example we will introduce a number of there attributes that may or may not matter to you. If you don't see an immediate need for a specific attribute, feel free to ignore it for now. You can always come back to them later. A full list of the supported attributes can be found in the <i>attributes</i> section of the <a href="project.html">project</a> property documentation.</p>
33
+ <p class="manual">Attributes always start with a keyword that is unique in the context. A context is delimited by a set of curly braces that enclose optional attributes of a property. The area between properties is called the global scope. Usually, attributes have one or more arguments. These arguments can be dates, character strings, numbers or symbols. Strings must be enclosed in single or double quotes. The argument types and meaning is explained for each keyword in the syntax reference section of this manual.</p>
34
+ <p class="manual">TaskJuggler manages all events with an accuracy of up to 15 minutes. In many cases, you don't care about this level of accuracy. Nevertheless, it's good to have it when you need it. All dates can optionally be extended by a time. By default, TaskJuggler assumes that all times are UTC (world time) times. If you prefer a different time zone, you need to use the <a href="timezone.html">timezone</a> attribute.</p>
35
+ <div class="codeframe"><pre class="code"> timezone "Europe/Paris"
36
+ </pre></div>
37
+ <p class="manual">Be aware that the project start and end dates in the project header are specified before you specify the time zone. The project header dates are always assumed to be UTC unless you specify differently. See <a href="interval2.html">interval2</a> for details.</p>
38
+ <div class="manual" codesection="1"><pre class="manual" codesection="1">project acso "Accounting Software" 2002-01-16-0:00-+0100
39
+ </pre></div>
40
+ <p class="manual">The <a href="currency.html">currency</a> attribute specifies the unit of currency values.</p>
41
+ <div class="codeframe"><pre class="code"> currency "USD"
42
+ </pre></div>
43
+ <p class="manual">Because each culture has its own way of specifying dates and numbers, the format for these are configurable. Use the <a href="timeformat.html">timeformat</a> attribute to specify the default format for dates. This format is used for reports, it does not affect the way you specify dates in the project files. Here you always need to use the <a href="date.html">ISO standardized
44
+ notation</a>.</p>
45
+ <div class="codeframe"><pre class="code"> timeformat "%Y-%m-%d"
46
+ numberformat "-" "" "," "." 1
47
+ currencyformat "(" ")" "," "." 0
48
+ </pre></div>
49
+ <p class="manual">We also can specify the way numbers or currency values are shown in the reports. Use the <a href="numberformat.html">numberformat</a> and <a href="currencyformat.html">currencyformat</a> attributes for this.</p>
50
+ <p class="manual">The optional attribute <a href="now.html">now</a> is used to set the current day for the scheduler to another value than to the moment your invoke TaskJuggler. When this attribute is not present, TaskJuggler will use the current moment of time to determine where you are with your tasks. To get a defined result for the reports in this example we've picked a specific date that fits our purpose here. In your projects, you would use <a href="now.html">now</a> to generate status reports for the date you specify.</p>
51
+ <div class="codeframe"><pre class="code"> now 2002-03-05-13:00
52
+ </pre></div>
53
+ <p class="manual">In this tutorial we would like to compare two scenarios of the project. The first scenario is the one that we have planned. The second scenario is how it really happened. The two scenarios have the same task structure, but the start and end dates of the task may vary. In reality we assume that the project got delayed, so we call the second scenario "Delayed". The scenario property is used to specify the scenarios. The delayed scenario is nested into the plan scenario. This tells TaskJuggler to use all values from the plan scenario also for the second scenario unless the second scenario has it's own values. This is a very easy but also powerful way to analyze the impact of certain changes to the plan of record. We'll see further below, how to specify values for a scenario and how to compare the results.</p>
54
+ <div class="codeframe"><pre class="code"> scenario plan "Plan" {
55
+ scenario delayed "Delayed"
56
+ }
57
+ </pre></div>
58
+ <p class="manual">To summarize the above, let's look at the complete header again. Don't get scared by the wealth of attributes here. They are all optional and mostly used to illustrate the flexibility of TaskJuggler.</p>
59
+ <div class="codeframe"><pre class="code">project acso "Accounting Software" 2002-01-16 +4m {
60
+ # Set the default time zone for the project. If not specified, UTC
61
+ # is used.
62
+ timezone "Europe/Paris"
63
+ # Hide the clock time. Only show the date.
64
+ timeformat "%Y-%m-%d"
65
+ # Use US format for numbers
66
+ numberformat "-" "" "," "." 1
67
+ # Use US financial format for currency values. Don't show cents.
68
+ currencyformat "(" ")" "," "." 0
69
+ # Pick a day during the project that will be reported as 'today' in
70
+ # the project reports. If not specified, the current day will be
71
+ # used, but this will likely be outside of the project range, so it
72
+ # can't be seen in the reports.
73
+ now 2002-03-05-13:00
74
+ # The currency for all money values is the Euro.
75
+ currency "USD"
76
+
77
+ # We want to compare the baseline scenario to one with a slightly
78
+ # delayed start.
79
+ scenario plan "Plan" {
80
+ scenario delayed "Delayed"
81
+ }
82
+ extend resource {
83
+ text Phone "Phone"
84
+ }
85
+ }
86
+ </pre></div>
87
+ <h2 class="manual" id="Global_Attributes">4.2 Global Attributes</h2>
88
+ <p class="manual">For this tutorial, we also like to do a simple profit and loss analysis of the project. We will track labor cost versus customer payments. To calculate the labor costs we have to specify the default daily costs of an employee. This can be changed for certain employees later, but it illustrates an important concept of TaskJuggler – inheritance of attributes. In order to reduce the size of the TaskJuggler project file to a readable minimum, properties inherit many optional attributes from their enclosing scopes. We'll see further below, what this actually means. Right after the project property we are at top-level scope, so this is the default for all following properties.</p>
89
+ <div class="codeframe"><pre class="code">rate 390.0
90
+ </pre></div>
91
+ <p class="manual">The <a href="rate.html">rate</a> attribute can be used to specify the daily costs of resources. All subsequent resources will get this rate. But it can be changed to a different rate at group or individual resource level.</p>
92
+ <p class="manual">You may also want to tell TaskJuggler about holidays that affect all resources. Global vacations are time periods where TaskJuggler does not do any resource assignments to tasks.</p>
93
+ <div class="codeframe"><pre class="code">vacation "Good Friday" 2002-03-29
94
+ </pre></div>
95
+ <p class="manual">Use the <a href="vacation.html">vacation</a> attribute to define a global vacation. Global vacations must have a name and a date or date range. This is slightly different from vacations of individual resources. They are defined with the <a href="vacation.resource.html">vacation attribute for resources</a> where the name is optional. The vacation name is purely for documentation purposes.</p>
96
+ <h2 class="manual" id="Macros">4.3 Macros</h2>
97
+ <p class="manual">Macros are another TaskJuggler feature to keep project files small. Macros are text patterns that can be defined once and inserted multiple times in the project file. A <a href="macro.html">macro</a> always has a name and the text pattern is enclosed by square brackets.</p>
98
+ <div class="codeframe"><pre class="code">macro allocate_developers [
99
+ allocate dev1
100
+ allocate dev2
101
+ allocate dev3
102
+ ]
103
+ </pre></div>
104
+ <p class="manual">To use the macro you simply have to write <code class="manual">${allocate_developers}</code> and TaskJuggler will replace the term <code class="manual">${allocate_developers}</code> with the pattern. We will use this macro further below in the example and then explain the meaning of the pattern.</p>
105
+ <h2 class="manual" id="Declaring_Flags">4.4 Declaring Flags</h2>
106
+ <p class="manual">A TaskJuggler feature that you will probably make heavy use of is flags. Once declared you can attach them to many properties. When you generate reports of the TaskJuggler results, you can use the flags to filter out information and limit the report to exactly those details that you want to have included.</p>
107
+ <div class="codeframe"><pre class="code">flags team
108
+ </pre></div>
109
+ <p class="manual">This is flag declaration. All <a href="flags.html">flags</a> need to be declared, before they can be used to avoid hard to find errors due to misspelled flag names. The flags should be declared shortly below the project header. We will see further down, how we can make use of these flags.</p>
110
+ <h2 class="manual" id="Declaring_Accounts">4.5 Declaring Accounts</h2>
111
+ <p class="manual">The use of our resources will create costs. For a profit and loss analysis, we need to balance the costs against the customer payments. In order not to get lost with all the various amounts, we declare 3 <a href="account.html">accounts</a> to credit the amounts to. We create one account for the development costs, one for the documentation costs, and one for the customer payments.</p>
112
+ <div class="codeframe"><pre class="code">account cost "Project Cost" {
113
+ account dev "Development"
114
+ account doc "Documentation"
115
+ }
116
+ account rev "Payments"
117
+ </pre></div>
118
+ <p class="manual">Like all TaskJuggler properties, the account needs an ID and a name. IDs may only consist of the characters a to z, A to Z and the underscore. All but the first character may also be digits 0 to 9. All global TaskJuggler properties have IDs. The ID is necessary so that we can reference the property again later without having to write the potentially much longer name. The name may contain space characters and therefore has to be enclosed with single or double quotes.</p>
119
+ <p class="manual">Accounts can be grouped by nesting them. You can use this feature to create sets of accounts. Such sets can then be balanced against each other to create a profit and loss analysis. When you have specified accounts in your project, you must at least define one default <a href="balance.html">balance</a>.</p>
120
+ <div class="codeframe"><pre class="code">balance cost rev
121
+ </pre></div>
122
+ <h2 class="manual" id="Declaring_Resources">4.6 Declaring Resources</h2>
123
+ <p class="manual">While the above introduced account property is only needed if you want to do a P&amp;L analysis, resources are usually found in almost any project.</p>
124
+ <div class="codeframe"><pre class="code">resource boss "Paul Henry Bullock" {
125
+ email "phb@crappysoftware.com"
126
+ Phone "x100"
127
+ rate 480
128
+ }
129
+ resource dev "Developers" {
130
+ managers boss
131
+ resource dev1 "Paul Smith" {
132
+ email "paul@crappysoftware.com"
133
+ Phone "x362"
134
+ rate 350.0
135
+ }
136
+ resource dev2 "Sébastien Bono" {
137
+ email "SBono@crappysoftware.com"
138
+ Phone "x234"
139
+ }
140
+ resource dev3 "Klaus Müller" {
141
+ email "Klaus.Mueller@crappysoftware.com"
142
+ Phone "x490"
143
+ vacation 2002-02-01 - 2002-02-05
144
+ }
145
+ flags team
146
+ }
147
+ resource misc "The Others" {
148
+ managers boss
149
+ resource test "Peter Murphy" {
150
+ email "murphy@crappysoftware.com"
151
+ Phone "x666"
152
+ limits { dailymax 6.4h }
153
+ rate 310.0
154
+ }
155
+ resource doc "Dim Sung" {
156
+ email "sung@crappysoftware.com"
157
+ Phone "x482"
158
+ rate 300.0
159
+ vacation 2002-03-11 - 2002-03-16
160
+ }
161
+
162
+ flags team
163
+ }
164
+ </pre></div>
165
+ <p class="manual">This snippet of the example shows the use of the <a href="resource.html">
166
+ resource property</a>. Just like accounts, resources always have an ID and a Name. These IDs also need to be unique within their property class. Names are strings and as such enclosed in double quotes. As you can see, resource properties can be nested: <code class="manual">dev</code> is a group or container resource, a team that consists of three other resources.</p>
167
+ <p class="manual">
168
+ <code class="manual">dev1</code>, alias Paul Smith, costs more than the normal employee. So the declaration of <code class="manual">dev1</code> overwrites the inherited default rate with a higher value.</p>
169
+ <p class="manual">The default value has been inherited from the enclosing scope, resource <code class="manual">dev</code>, which in turn has inherited it from the global scope. The declaration of the resource Klaus Müller uses another optional attribute. With vacation you can specify a certain time interval where the resource is not available. Vacations are list attributes. They accumulate the declarations. If you want to get rid of inherited values, you can use the <a href="purge.html">purge</a> attribute to clear the list.</p>
170
+ <p class="manual">It is important that you understand how TaskJuggler handles time intervals. Internally, TaskJuggler uses the number of seconds after January 1st, 1970 to store any date. So all dates are actually stored with an accuracy of 1 second in UTC time. <code class="manual">2002-02-01</code> specifies midnight February 1st, 2002. Following the TaskJuggler concept of requiring as little information as necessary and extending the rest with sensible defaults, TaskJuggler adds the time 0:00:00 if nothing else has been specified. So the vacation ends on midnight February 5th, 2002. Well, almost. Every time you specify a time interval, the end date is not included in the interval. So Klaus Müller's vacation ends exactly at 0:00:00 on February 4th, 2002.</p>
171
+ <p class="manual">Peter Murphy only works 6.4 hours a day. So we use the <a href="limits.resource.html">limits</a> attribute to limit his daily working hours. We could also define exact working hours using the <a href="shift.html">shift
172
+ property</a>, but we ignore this for now.</p>
173
+ <p class="manual">Note that we have attached the flag team after the declaration of the sub-resources to the team resources. This way, these flags don't get passed down to the sub-resources. If we would have declared the flags before the sub-resources, then they would have the flags attached as well.</p>
174
+ <h2 class="manual" id="Specifying_the_Tasks">4.7 Specifying the Tasks</h2>
175
+ <p class="manual">Let's focus on the real work now. The project should solve a problem: the creation of an accounting software. Because the job is quite complicated, we break it down into several subtasks. We need to do a specification, develop the software, test the software, and write a manual. Using the <a href="task.html">task property</a>, thiis would look as follows:</p>
176
+ <div class="codeframe"><pre class="code">task AcSo "Accounting Software" {
177
+ task spec "Specification" {
178
+ }
179
+ task software "Software Development" {
180
+ }
181
+ task test "Software testing" {
182
+ }
183
+ task manual "Manual" {
184
+ journalentry 2002-02-28 "User manual completed" {
185
+ author boss
186
+ summary "The doc writers did a really great job to finish on time."
187
+ }
188
+ }
189
+ task deliveries "Milestones" {
190
+ }
191
+ }
192
+ </pre></div>
193
+ <p class="manual">Similar to resources, tasks are declared by using the task keyword followed by an ID and a name string. All TaskJuggler properties have their own namespaces. This means, that it is quite OK to have a resource and a task with the same ID. Tasks may have optional attributes which can be tasks again, so tasks can be nested. In contrast to all other TaskJuggler properties, task IDs inherit the ID of the enclosing task as a prefix to the ID. The full ID of the spec task is AcSo.spec. You need to use this absolute ID when you want to reference the task later on. This hierarchical name space for tasks was chosen to support large projects where multiple project managers may use the same ID in different sub tasks.</p>
194
+ <p class="manual">To track important milestones of the project, we also added a task called Milestones. This task, like most of the other tasks will get some subtasks later on.</p>
195
+ <p class="manual">We consider the specification task simple enough, so we don't have to break it into further subtasks. So let's add some more details to it.</p>
196
+ <div class="codeframe"><pre class="code"> task spec "Specification" {
197
+ effort 20d
198
+ ${allocate_developers}
199
+ depends !deliveries.start
200
+ }
201
+ </pre></div>
202
+ <p class="manual">The <a href="effort.html">effort</a> to complete the task is specified with 20 man-days. Alternatively we could have used the <a href="length.html">length</a> attribute or the <a href="duration.html">duration</a> attribute. <code class="manual">length</code> specifies the duration of the task in working days while <code class="manual">duration</code> specifies the duration in calendar days. Contrary to <code class="manual">effort</code>, these two don't have to have a specification of the involved resources. Since <code class="manual">effort</code> specifies the duration in man-days, we need to say who should be allocated to the task. The task won't finish before the resources could be allocated long enough to reach the specified effort. Tasks with <code class="manual">length</code> or <code class="manual">duration</code> criteria and allocated resources will last exactly as long as requested. Resources will be allocated only if available. It's possible that such a tasks ends up with no allocations at all since the resources are always assigned to other tasks for that period. Each task can only have one of the three duration criteria. Container tasks may never have a duration specification. They are automatically adjusted to fit all sub tasks.</p>
203
+ <p class="manual">Here we use the allocate_developers macro mentioned above. The expression <code class="manual">${allocate_developers}</code> is simply expanded to</p>
204
+ <div class="codeframe"><pre class="code"> allocate dev1
205
+ allocate dev2
206
+ allocate dev3
207
+ </pre></div>
208
+ <p class="manual">If you need to <a href="allocate.html">allocate</a> the same bunch of people to several tasks, the macro saves you some typing. You could have written the allocate attributes directly instead of using the macro. Since the allocation of multiple resources to a task is a very common place for macro usage, we found it a good idea to use it in this example as well.</p>
209
+ <p class="manual">One more interesting thing to note is the fact that we like the resource <code class="manual">dev2</code> only to work 4 hours each day on this task, so we use the optional attribute <a href="limits.resource.html">limits.resource</a> to specify this.</p>
210
+ <p class="manual">For TaskJuggler to schedule a task, it needs to know either the start and end criteria of a task, or one of them and a duration specification. The start and end criteria can either be fixed dates or relative dates. Relative dates are specifications of the type <i>task B starts after task A has finished</i>. Or in other words, task B depends on task A. In this example the spec task depends on a subtasks of the deliveries task. We have not specified it yet, but it has the local ID start.</p>
211
+ <p class="manual">To specify the dependency between the two tasks, we use the <a href="depends.html">depends</a> attribute. This attribute must be followed by one or more task IDs. If more than one ID is specified, each ID has to be separated with a comma from the previous one. Task IDs can be either absolute IDs or relative IDs. An absolute ID of a task is the ID of this task prepended by the IDs of all enclosing tasks. The task IDs are separated by a dot from each other. The absolute ID of the specification task would be <code class="manual">AcSo.spec</code>.</p>
212
+ <p class="manual">Relative IDs always start with one or more exclamation marks. Each exclamation mark moves the scope to the next enclosing task. So <code class="manual">!deliveries.start</code> is expanded to <code class="manual">AcSo.deliveries.start</code> since <code class="manual">AcSo</code> is the enclosing task of deliveries. Relative task IDs are a little bit confusing at first, but have a real advantage over absolute IDs. Sooner or later you want to move tasks around in your project and then it's a lot less likely that you have to fix dependency specifications of relative IDs.</p>
213
+ <p class="manual">The software development task is still too complex to specify it directly. So we split it further into subtasks.</p>
214
+ <div class="codeframe"><pre class="code"> task software "Software Development" {
215
+ priority 1000
216
+ task database "Database coupling" {
217
+ journalentry 2002-02-03 "Problems with the SQL Libary" {
218
+ author dev1
219
+ alert yellow
220
+ summary -8&lt;-
221
+ We ran into some compatibility problems with the SQL
222
+ Library.
223
+ -&gt;8-
224
+ details -8&lt;-
225
+ We have already contacted the vendor and are now waiting for
226
+ their advise.
227
+ -&gt;8-
228
+ }
229
+ }
230
+ task gui "Graphical User Interface" {
231
+ }
232
+ task backend "Back-End Functions" {
233
+ }
234
+ }
235
+ </pre></div>
236
+ <p class="manual">We use the <a href="priority.html">priority</a> attribute to mark the importance of the tasks. 500 is the default priority of top-level tasks. Setting the priority to 1000 marks the task as most important task, since the possible range is 1 (not important at all) to 1000 (ultimately important). priority is an attribute that is passed down to subtasks if specified before the subtasks' declaration. So all subtasks of software have a priority of 1000 as well, unless they have their own priority definition.</p>
237
+ <div class="codeframe"><pre class="code"> task database "Database coupling" {
238
+ effort 20d
239
+ allocate dev1, dev2
240
+ journalentry 2002-02-03 "Problems with the SQL Libary" {
241
+ author dev1
242
+ alert yellow
243
+ summary -8&lt;-
244
+ We ran into some compatibility problems with the SQL
245
+ Library.
246
+ -&gt;8-
247
+ details -8&lt;-
248
+ We have already contacted the vendor and are now waiting for
249
+ their advise.
250
+ -&gt;8-
251
+ }
252
+ }
253
+ </pre></div>
254
+ <p class="manual">The work on the database coupling should not start before the specification has been finished. So we again use the <a href="depends.html">depends</a> attribute to let TaskJuggler know about this. This time we use two exclamation marks for the relative ID. The first one puts us in the scope of the enclosing software task. The second one is to get into the AcSo scope that contains the spec tasks. For a change, we <a href="allocate.html">allocate</a> resources directly without using a macro.</p>
255
+ <div class="codeframe"><pre class="code"> task gui "Graphical User Interface" {
256
+ effort 35d
257
+ delayed:effort 40d
258
+ depends !database, !backend
259
+ allocate dev2, dev3
260
+ }
261
+ </pre></div>
262
+ <p class="manual">TaskJuggler can schedule your project for two different <a href="scenario.html">
263
+ scenarios</a>. We have called the first scenario <code class="manual">plan</code> scenario and the second <code class="manual">delayed</code> scenario. Many of the reports allow you to put the values of both scenarios side by side to each other, so you can compare the scenarios. All scenario-specific values that are not explicitly stated for the <code class="manual">delayed</code> scenario are taken from the <code class="manual">plan</code> scenario. So the user only has to specify the values that differ in the delayed scenario. The two scenarios must have the same task structure and the same dependencies. But the start and end dates of tasks as well as the duration may vary. In the example we have planned the work on the graphical user interface to be 35 man-days. It turned out that we actually needed 40 man-days. By prefixing the <a href="effort.html">effort</a> attribute with <code class="manual">delayed:</code>, the effort value for the <code class="manual">delayed</code> scenario can be specified.</p>
264
+ <div class="codeframe"><pre class="code"> task backend "Back-End Functions" {
265
+ effort 30d
266
+ complete 95
267
+ depends !database
268
+ allocate dev1, dev2
269
+ }
270
+ </pre></div>
271
+ <p class="manual">By default, TaskJuggler assumes that all tasks are on schedule. Sometimes you want to generate reports that show how much of a task actually has been completed. TaskJuggler uses the current date for this, unless you have specified another date using the now attribute. If a task is ahead of schedule or late, this can be specified using the <a href="complete.html">complete</a> attribute. This specifies how many percent of the task have been completed up to the current date. In our case the back-end implementation is slightly ahead of schedule as we will see from the report.</p>
272
+ <div class="codeframe"><pre class="code"> task test "Software testing" {
273
+
274
+ task alpha "Alpha Test" {
275
+ effort 1w
276
+ depends !!software
277
+ allocate test, dev2
278
+ note "Hopefully most bugs will be found and fixed here."
279
+ journalentry 2002-03-01 "Contract with Peter not yet signed" {
280
+ author boss
281
+ alert red
282
+ summary -8&lt;-
283
+ The paperwork is stuck with HR and I can't hunt it down.
284
+ -&gt;8-
285
+ details -8&lt;-
286
+ If we don't get the contract closed within the next week,
287
+ the start of the testing is at risk.
288
+ -&gt;8-
289
+ }
290
+ }
291
+
292
+ task beta "Beta Test" {
293
+ effort 4w
294
+ depends !alpha
295
+ allocate test, dev1
296
+ }
297
+ }
298
+ </pre></div>
299
+ <p class="manual">The software testing task has been split up into an alpha and a beta test task. The interesting thing here is, that efforts can not only be specified as man-days, but also man-weeks, man-hours, etc. By default, TaskJuggler assumes a man-day is 8 hours, man-week is 40 man-hours or 5 man-days. The conversion factor can be changed using the <a href="dailyworkinghours.html">dailyworkinghours</a> attribute.</p>
300
+ <p class="manual">Let's go back to the outermost task again. At the beginning of the example we stated that we want to credit all development work to one account with ID dev and all documentation work to the account doc. To achieve this, we use the attribute <a href="chargeset.html">chargeset</a> to credit all tasks to the <code class="manual">dev</code> account.</p>
301
+ <p class="manual">For the duration of the <code class="manual">AcSo</code> task we also have running costs for the lease on the building and the equipment. To compensate this, we charge a daily rate of USD 170 per day using the <a href="charge.html">charge</a> attribute.</p>
302
+ <div class="codeframe"><pre class="code">task AcSo "Accounting Software" {
303
+ chargeset dev
304
+ charge 170 perday
305
+ task spec "Specification" {
306
+ </pre></div>
307
+ <p class="manual">Since we specify the attribute for the top-level task before we declare any subtasks, this attribute will be inherited by all subtasks and their subtasks and so on. The only exception is the writing of the manual. We need to change the chargeset for this task again, as it is also a subtask of AcSo and we want to use a different account for it.</p>
308
+ <div class="codeframe"><pre class="code"> task manual "Manual" {
309
+ effort 10w
310
+ depends !deliveries.start
311
+ allocate doc, dev3
312
+ purge chargeset
313
+ chargeset doc
314
+ journalentry 2002-02-28 "User manual completed" {
315
+ author boss
316
+ summary "The doc writers did a really great job to finish on time."
317
+ }
318
+ }
319
+ </pre></div>
320
+ <h2 class="manual" id="Specifying_Milestones">4.8 Specifying Milestones</h2>
321
+ <p class="manual">All tasks that have been discussed so far, had a certain duration. We did not always specify the duration explicitly, but we expect them to last for a certain period of time. Sometimes you just want to capture a certain moment in your project plan. These moments are usually called milestones, since they have some level of importance for the progress of the project.</p>
322
+ <p class="manual">TaskJuggler has support for milestones as well. Milestones are leaf tasks that don't have a duration specification.</p>
323
+ <div class="codeframe"><pre class="code"> task deliveries "Milestones" {
324
+ purge chargeset
325
+ chargeset rev
326
+
327
+ task start "Project start" {
328
+ start ${projectstart}
329
+ delayed:start 2002-01-20
330
+ charge 21000.0 onstart
331
+ }
332
+
333
+ task prev "Technology Preview" {
334
+ depends !!software.backend
335
+ startcredit 31000.0
336
+ note "All '''major''' features should be usable."
337
+ }
338
+
339
+ task beta "Beta version" {
340
+ depends !!test.alpha
341
+ charge 13000.0 onstart
342
+ note "Fully functional, may contain bugs."
343
+ }
344
+
345
+ task done "Ship Product to Customer" {
346
+ # maxend 2002-04-17
347
+ depends !!test.beta, !!manual
348
+ charge 33000.0 onstart
349
+ note "All priority 1 and 2 bugs must be fixed."
350
+ }
351
+ }
352
+ }
353
+ </pre></div>
354
+ <p class="manual">We have put all important milestones of the project as subtasks of the deliveries task. This way they show up nicely grouped in the reports. All milestones either have a dependency or a fixed start date. For the first milestone we have used the attribute <a href="start.html">start</a> to set a fixed start date. All other tasks have direct or indirect dependencies on this task. Moving back the start date will slip the whole project. This has actually happened, so we use the <code class="manual">delayed:</code> prefix again to specify the start date for the delayed scenario.</p>
355
+ <p class="manual">Every milestone is linked to a customer payment. By using the <a href="charge.html">charge</a> attribute we can credit the specified amount to the account associated with this task. Since we have assigned the <code class="manual">rev</code> account to the enclosing task, all milestones will use this account as well. This time, we use the keyword <code class="manual">onstart</code> to indicate that this is not a continuous charge but a one-time charge that is credited at the begin of the task.</p>
356
+ <p class="manual">Did you notice the line in the task done that starts with a hash? This line is commented out. If TaskJuggler finds a hash, it ignores the rest of the line. This way you can include comments in your project. The <a href="maxend.html">maxend</a> attribute specifies that the task should end no later than the specified date. This information is not used for scheduling, but only for checking the schedule afterwards. Since the task will end later than the specified date, commenting out the line would trigger a warning.</p>
357
+ <p class="manual">Now the project has been completely specified. Stopping here would result in a valid TaskJuggler file that could be processed and scheduled. But no reports would be generated to visualize the results.</p>
358
+ <h2 class="manual" id="Visualizing_the_Project">4.9 Visualizing the Project</h2>
359
+ <p class="manual">To see and share the project data you reports can be generated. You can generate any number of reports and you can select from a variety of report types and output formats. To have a report generated after the project scheduling has been completed, you need include a report definition into the project description. Report definitions are properties that are very similar to the task and resource properties that you are already familiar with. Just like these, report definitions can be nested to take advantage of the attribute inheritance mechanism. Every report definition starts with the type of the report. Each type of report has a particular focus. A <a href="taskreport.html">taskreport</a> lists the project data in the form of a task list. A <a href="resourcereport.html">resourcereport</a> does the same in form of a resource list. For a more generic report, you can use the <a href="textreport.html">textreport</a>.</p>
360
+ <p class="manual">A <code class="manual">textreport</code> does not directly present the data in form of a task or resource list. It just consists of text building blocks that are described by <a href="Rich_Text_Attributes.html">Rich Text</a>. There can be a building block at the top and bottom, as well as three columns in the center. The column are called <code class="manual">left</code>, <code class="manual">center</code> and <code class="manual">right</code>.</p>
361
+ <p class="manual">For our first report, we'll just use the center column for now. Like every property, you need to specify a name. This name will be the base name of the generated report file. Depending on the output format, the proper suffix is appended. For this report, we only chose to generate a web page in HTML format. There is no default format defined for reports. If the <a href="formats.html">formats</a> attribute is not specified, no output file will be generated for the report specification.</p>
362
+ <p class="manual">This may seem odd at first glance since TaskJuggler syntax always tries to use the most compact and readable syntax for the common case. As you will see in a minute, reports may be composed of several report specifications. One report specification can include the output of another report specification as well. In this case, the included report does not need to generate it's own file. The output will be included within the output of another report specification. In case of such composed reports, the output format specification of the top-level format will be used for all included reports as well.</p>
363
+ <div class="codeframe"><pre class="code">textreport frame "" {
364
+ textreport index "Overview" {
365
+ formats html
366
+ center '&lt;[report id="overview"]&gt;'
367
+ }
368
+ }
369
+ </pre></div>
370
+ <p class="manual">For the main report, we choose the file name <code class="manual">Overview</code> and the format <code class="manual">html</code>. So, the generated file will be called <code class="manual">Overview.html</code>.</p>
371
+ <p class="manual">As we've mentioned before, the sections of a <code class="manual">textreport</code> are defined in Rich Text format. Here we use a so called block generator to include the HTML output of another report definition. The <code class="manual">report</code> block generator allows us to compose reports by combining their output into a single report. You must provide the <code class="manual">id</code> parameter to specify which report definition you would like to use. In this case, it is a report definition with the ID <code class="manual">overview</code>. Note that generator parameters need to be enclosed in single or double quotes. We are essentially marking a string within a string. This can only work out, if we don't use the same parameter for both. Let's define this report first.</p>
372
+ <div class="codeframe"><pre class="code">taskreport overview "" {
373
+ columns hierarchindex,
374
+ name, start, end, effort, duration, cost,
375
+ revenue, chart { ${TaskTip} }
376
+ }
377
+ </pre></div>
378
+ <p class="manual">Instead of another <a href="textreport.html">textreport</a> definition we are now using a <a href="taskreport.html">taskreport</a>. A task report contains a list of tasks in a table structure. By default, it contains all tasks of the project. As we will see later on, we can use filter expressions to limit the content to a well defined subset of tasks. The table contains a line for each task and comes by default with a few columns like the name of the task, and the start and end dates. For this project overview report, we like to have also the effort for each task, the duration, the effort, the cost and revenue numbers included. To top it off, we also include a column with a Gantt chart.</p>
379
+ <p class="manual">By including the cost and revenue column, we are able to do a simple profit and loss analysis on the project. This P&amp;L is computed from the accounts that we have provided above. For this to work, we need to tell TaskJuggler which accounts are cost accounts and which are revenue accounts. We have already conveniently grouped the accounts and the <a href="balance.html">balance</a> attribute specifies which accounts are used for the P&amp;L in this report.</p>
380
+ <div class="codeframe"><pre class="code"> balance cost rev
381
+ </pre></div>
382
+ <p class="manual">The columns of the report can be customized. You can overwrite the default title or the cell content. See <a href="columns.html">columns</a> for a full list of available attributes. For the chart column, we'd like to have a tool tip that displays additional details when the mouse pointer is placed over a task bar. Since we use this tool tip in several reports, we have defined the <code class="manual">TaskTip</code> macro for it.</p>
383
+ <div class="codeframe"><pre class="code">macro TaskTip [
384
+ tooltip istask() -8&lt;-
385
+ '''Start: ''' &lt;-query attribute='start'-&gt;
386
+ '''End: ''' &lt;-query attribute='end'-&gt;
387
+ ----
388
+ '''Resources:'''
389
+
390
+ &lt;-query attribute='resources'-&gt;
391
+ ----
392
+ '''Precursors: '''
393
+
394
+ &lt;-query attribute='precursors'-&gt;
395
+ ----
396
+ '''Followers: '''
397
+
398
+ &lt;-query attribute='followers'-&gt;
399
+ -&gt;8-
400
+ ]
401
+ </pre></div>
402
+ <p class="manual">The <a href="tooltip.column.html">tooltip</a> attribute describes the content of the tool tip. The first parameter is a logical expression that determines when the tool tip is active. You can specify multiple tool tips. The first matching one is being displayed. The condition is evaluated for each report line. The <code class="manual">istask()</code> function only evaluates to true for task lines. See <a href="functions.html">functions</a> for a complete list of functions that can be used in <a href="logicalexpression.html">logical expressions</a>.</p>
403
+ <p class="manual">The content of the tool tip is a template that uses <a href="Rich_Text_Attributes.html#Block_and_Inline_Generators">query
404
+ generators</a> to include task attributes such as the start and end date.</p>
405
+ <p class="manual">We have chosen to include the start and end date of each task in the report. By default, TaskJuggler lists dates as day, month and year. We like the format to be similar to the format that the project syntax uses, but also like to include the weekday. To change the date format, the <a href="timeformat.html">timeformat</a> attribute can be used.</p>
406
+ <p class="manual">The project will last a few weeks. The most convenient unit to list efforts in is man or resource days. The <a href="loadunit.html">loadunit</a> attribute tells TaskJuggler to list the load of each task or resource in man days. Since this will just be a number without a unit, it is advisable to include a small hint for the reader that these values are indeed man or resource days. The caption of the table is a convenient place to put this information by using the <a href="caption.html">caption</a> attribute.</p>
407
+ <div class="codeframe"><pre class="code"> timeformat "%a %Y-%m-%d"
408
+ loadunit days
409
+ caption 'All effort values are in man days.'
410
+ </pre></div>
411
+ <p class="manual">The <code class="manual">taskreport</code> can contain more than just the table. It is not as flexible as the <code class="manual">textreport</code>, but still has support for a header and footer. Let's look at the header first. We not only like to put a headline here, but several paragraphs of text. The <a href="header.html">header</a> attribute is a <a href="Rich_Text_Attributes.html">Rich Text</a> attribute just like <a href="center.html">center</a>. We could enclose it in single or double quotes again. But for Strings that span multiple lines and potentially include single or double quotes as well, scissor-marks or cut-here-marks are recommended. These marks look like a pair of scissors that cut along a dashed line. Use <code class="manual">-8&lt;-</code> to begin a string and <code class="manual">-&gt;8-</code> to terminate it. The opening cut mark must be immediately followed by a line break. The indentation of the following line defines the indentation that will be ignored for all lines of the string. The following lines must have at least the same indentation. The indentation that exceeds the indentation of the first line will be kept in the resulting string. With this feature, you can define multi-line Rich Text strings without disturbing the indentation structure of your project file.</p>
412
+ <div class="codeframe"><pre class="code"> header -8&lt;-
413
+ === Project Overview ===
414
+
415
+ The project is structured into 3 phases.
416
+
417
+ # Specification
418
+ # &lt;-reportlink id='frame.development'-&gt;
419
+ # Testing
420
+
421
+ === Original Project Plan ===
422
+ -&gt;8-
423
+ </pre></div>
424
+ <p class="manual">Section headers are surrounded by <code class="manual">==</code>. The number of equal signs, define the section level. You need to start with two equal characters for the first level. Text that is surrounded by blank lines will create a paragraph. Bullet lists can be made by starting a line with a <code class="manual">#</code> character. Remember that the indentation of cut-mark strings will be ignored. Your <code class="manual">#</code> character must not be the first character in the line as long it is only preceded by the exact same number of blanks as the first line of the cut-mark string.</p>
425
+ <p class="manual">If you want to reference other reports from this report, you can include the file name of this report by <code class="manual">[[</code> and <code class="manual">]]</code>. Don't include the extension of the file name, it will be automatically appended. The actual representation of the reference depends on the chosen output format. For HTML output, the reference is a click-able link to the referenced report file.</p>
426
+ <p class="manual">For the <a href="footer.html">footer</a> we can proceed accordingly. We just add a few more paragraphs of text the describe certain aspects of the project. By putting it all together, we end up with the following report definition.</p>
427
+ <div class="codeframe"><pre class="code">taskreport overview "" {
428
+ header -8&lt;-
429
+ === Project Overview ===
430
+
431
+ The project is structured into 3 phases.
432
+
433
+ # Specification
434
+ # &lt;-reportlink id='frame.development'-&gt;
435
+ # Testing
436
+
437
+ === Original Project Plan ===
438
+ -&gt;8-
439
+ columns hierarchindex,
440
+ name, start, end, effort, duration, cost,
441
+ revenue, chart { ${TaskTip} }
442
+ # For this report we like to have the abbreviated weekday in front
443
+ # of the date. %a is the tag for this.
444
+ timeformat "%a %Y-%m-%d"
445
+ loadunit days
446
+ hideresource 1
447
+ balance cost rev
448
+ caption 'All effort values are in man days.'
449
+
450
+ footer -8&lt;-
451
+ === Staffing ===
452
+
453
+ All project phases are properly staffed. See [[ResourceGraph]] for
454
+ detailed resource allocations.
455
+
456
+ === Current Status ===
457
+
458
+ The project started off with a delay of 4 days. This slightly affected
459
+ the original schedule. See [[Deliveries]] for the impact on the
460
+ delivery dates.
461
+ -&gt;8-
462
+ }
463
+ </pre></div>
464
+ <p class="manual">The generated report can be found <a href="http://www.taskjuggler.org/tj3/examples/Overview.html" target="_top">here</a>. It servers as an entry page for the other reports. While it already contains some references, a navigator bar would be handy as well. Fortunately, there is a block generator called 'navigator' to take care of this. But before we can include the navigator in the report, we need to define it first.</p>
465
+ <div class="codeframe"><pre class="code">navigator navbar {
466
+ hidereport 0
467
+ }
468
+ </pre></div>
469
+ <p class="manual">
470
+ <a href="hidereport.html">hidereport</a> is a filter attribute. The logical expression determines which reports will be included in the navigator bar. A logical expression of 0 means hide no reports, so all are included.</p>
471
+ <p class="manual">The best place to put a navigator bar in the report is right at the top. We use two horizontal lines to separate the navigator from the main headline and the rest of the report. <code class="manual">----</code> at the begin of the line create such a horizontal separation line.</p>
472
+ <div class="codeframe"><pre class="code">textreport frame "" {
473
+ header -8&lt;-
474
+ == Accounting Software Project ==
475
+ ----
476
+ &lt;[navigator id="navbar"]&gt;
477
+ ----
478
+ -&gt;8-
479
+ footer "----"
480
+ textreport index "Overview" {
481
+ formats html
482
+ center '&lt;[report id="overview"]&gt;'
483
+ }
484
+ }
485
+ </pre></div>
486
+ </div></div>
487
+ <br/>
488
+ <hr/>
489
+ <table style="width:90%; margin-left:5%; margin-right:5%"><tr>
490
+ <td style="text-align:left; width:35%;">&lt;&lt; <a href="Getting_Started.html">Getting_Started</a> &lt;&lt;</td>
491
+ <td style="text-align:center; width:30%;"><a href="toc.html">Table Of Contents</a></td>
492
+ <td style="text-align:right; width:35%;">&gt;&gt; <a href="The_TaskJuggler_Syntax.html">The_TaskJuggler_Syntax</a> &gt;&gt;</td>
493
+ </tr></table>
494
+ <hr/>
495
+ <br/>
496
+ <div align="center" style="font-size:10px;">Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011 by Chris Schlaeger &lt;chris@linux.com&gt;.<a href="http://www.taskjuggler.org">TaskJuggler</a> is a trademark of Chris Schlaeger.</div>
497
+ </body>
498
+ </html>