taskjuggler 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (432) hide show
  1. data/Rakefile +1 -0
  2. data/benchmarks/depends.tjp +2 -1
  3. data/benchmarks/htmltaskreport.tjp +2 -1
  4. data/doc/classes/AppConfig.html +124 -120
  5. data/doc/classes/Arguments.html +10 -6
  6. data/doc/classes/Object.html +229 -0
  7. data/doc/classes/String.html +35 -31
  8. data/doc/classes/TaskJuggler/Account.html +18 -18
  9. data/doc/classes/TaskJuggler/AccountAttribute.html +261 -0
  10. data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
  11. data/doc/classes/TaskJuggler/Allocation.html +34 -30
  12. data/doc/classes/TaskJuggler/AllocationAttribute.html +70 -70
  13. data/doc/classes/TaskJuggler/AttributeBase.html +131 -147
  14. data/doc/classes/TaskJuggler/AttributeDefinition.html +38 -21
  15. data/doc/classes/TaskJuggler/BatchProcessor.html +313 -0
  16. data/doc/classes/TaskJuggler/Booking.html +22 -18
  17. data/doc/classes/TaskJuggler/BookingListAttribute.html +42 -42
  18. data/doc/classes/TaskJuggler/BooleanAttribute.html +40 -40
  19. data/doc/classes/TaskJuggler/CSVFile.html +28 -24
  20. data/doc/classes/TaskJuggler/Charge.html +22 -18
  21. data/doc/classes/TaskJuggler/ChargeListAttribute.html +30 -30
  22. data/doc/classes/TaskJuggler/ChargeSet.html +41 -37
  23. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +46 -46
  24. data/doc/classes/TaskJuggler/ColumnListAttribute.html +231 -0
  25. data/doc/classes/TaskJuggler/ColumnTable.html +23 -21
  26. data/doc/classes/TaskJuggler/DateAttribute.html +20 -20
  27. data/doc/classes/TaskJuggler/DefinitionListAttribute.html +162 -0
  28. data/doc/classes/TaskJuggler/DependencyListAttribute.html +46 -46
  29. data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
  30. data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
  31. data/doc/classes/TaskJuggler/FlagListAttribute.html +42 -42
  32. data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
  33. data/doc/classes/TaskJuggler/FormatListAttribute.html +197 -0
  34. data/doc/classes/TaskJuggler/GanttChart.html +236 -207
  35. data/doc/classes/TaskJuggler/GanttContainer.html +46 -42
  36. data/doc/classes/TaskJuggler/GanttHeader.html +16 -12
  37. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +16 -12
  38. data/doc/classes/TaskJuggler/GanttLine.html +28 -24
  39. data/doc/classes/TaskJuggler/GanttLoadStack.html +22 -18
  40. data/doc/classes/TaskJuggler/GanttMilestone.html +46 -42
  41. data/doc/classes/TaskJuggler/GanttRouter.html +104 -98
  42. data/doc/classes/TaskJuggler/GanttTaskBar.html +46 -42
  43. data/doc/classes/TaskJuggler/HTMLDocument.html +12 -12
  44. data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
  45. data/doc/classes/TaskJuggler/Interval.html +126 -120
  46. data/doc/classes/TaskJuggler/IntervalListAttribute.html +46 -46
  47. data/doc/classes/TaskJuggler/JobInfo.html +284 -0
  48. data/doc/classes/TaskJuggler/Journal.html +197 -0
  49. data/doc/classes/TaskJuggler/JournalEntry.html +218 -0
  50. data/doc/classes/TaskJuggler/KeywordArray.html +179 -0
  51. data/doc/classes/TaskJuggler/KeywordDocumentation.html +445 -396
  52. data/doc/classes/TaskJuggler/Limits/Limit.html +34 -30
  53. data/doc/classes/TaskJuggler/Limits.html +68 -62
  54. data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
  55. data/doc/classes/TaskJuggler/ListAttributeBase.html +207 -0
  56. data/doc/classes/TaskJuggler/Log.html +72 -68
  57. data/doc/classes/TaskJuggler/LogicalAttribute.html +38 -34
  58. data/doc/classes/TaskJuggler/LogicalExpression.html +16 -12
  59. data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +194 -0
  60. data/doc/classes/TaskJuggler/LogicalFlag.html +32 -32
  61. data/doc/classes/TaskJuggler/LogicalFunction.html +28 -24
  62. data/doc/classes/TaskJuggler/LogicalOperation.html +17 -13
  63. data/doc/classes/TaskJuggler/Macro.html +10 -6
  64. data/doc/classes/TaskJuggler/MacroParser.html +36 -36
  65. data/doc/classes/TaskJuggler/MacroTable.html +40 -36
  66. data/doc/classes/TaskJuggler/Message.html +16 -12
  67. data/doc/classes/TaskJuggler/MessageHandler.html +16 -12
  68. data/doc/classes/TaskJuggler/Navigator.html +249 -0
  69. data/doc/classes/TaskJuggler/OnShiftCache.html +316 -0
  70. data/doc/classes/TaskJuggler/Project.html +1064 -678
  71. data/doc/classes/TaskJuggler/ProjectFileParser.html +90 -85
  72. data/doc/classes/TaskJuggler/PropertyAttribute.html +194 -0
  73. data/doc/classes/TaskJuggler/PropertyList.html +114 -113
  74. data/doc/classes/TaskJuggler/PropertySet.html +355 -312
  75. data/doc/classes/TaskJuggler/PropertyTreeNode.html +527 -474
  76. data/doc/classes/TaskJuggler/Query.html +90 -85
  77. data/doc/classes/TaskJuggler/RTPNavigator.html +292 -0
  78. data/doc/classes/TaskJuggler/RTPReport.html +301 -0
  79. data/doc/classes/TaskJuggler/RealFormat.html +114 -57
  80. data/doc/classes/TaskJuggler/RealFormatAttribute.html +162 -0
  81. data/doc/classes/TaskJuggler/ReferenceAttribute.html +87 -20
  82. data/doc/classes/TaskJuggler/Report.html +82 -291
  83. data/doc/classes/TaskJuggler/ReportBase.html +448 -0
  84. data/doc/classes/TaskJuggler/ReportContext.html +243 -0
  85. data/doc/classes/TaskJuggler/ReportTable.html +158 -129
  86. data/doc/classes/TaskJuggler/ReportTableCell.html +30 -26
  87. data/doc/classes/TaskJuggler/ReportTableColumn.html +29 -25
  88. data/doc/classes/TaskJuggler/ReportTableLegend.html +28 -24
  89. data/doc/classes/TaskJuggler/ReportTableLine.html +34 -30
  90. data/doc/classes/TaskJuggler/Resource.html +12 -12
  91. data/doc/classes/TaskJuggler/ResourceListAttribute.html +46 -46
  92. data/doc/classes/TaskJuggler/ResourceListRE.html +49 -57
  93. data/doc/classes/TaskJuggler/ResourceScenario.html +126 -126
  94. data/doc/classes/TaskJuggler/RichText.html +52 -48
  95. data/doc/classes/TaskJuggler/RichTextAttribute.html +30 -30
  96. data/doc/classes/TaskJuggler/RichTextDocument.html +41 -37
  97. data/doc/classes/TaskJuggler/RichTextElement.html +274 -264
  98. data/doc/classes/TaskJuggler/RichTextException.html +13 -13
  99. data/doc/classes/TaskJuggler/RichTextParser.html +48 -47
  100. data/doc/classes/TaskJuggler/RichTextProtocolExample.html +52 -55
  101. data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +55 -10
  102. data/doc/classes/TaskJuggler/RichTextScanner.html +106 -245
  103. data/doc/classes/TaskJuggler/RichTextSnip.html +28 -24
  104. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +381 -301
  105. data/doc/classes/TaskJuggler/Scenario.html +6 -6
  106. data/doc/classes/TaskJuggler/ScenarioData.html +40 -36
  107. data/doc/classes/TaskJuggler/ScenarioListAttribute.html +229 -0
  108. data/doc/classes/TaskJuggler/Scoreboard.html +70 -66
  109. data/doc/classes/TaskJuggler/Shift.html +18 -18
  110. data/doc/classes/TaskJuggler/ShiftAssignment.html +58 -54
  111. data/doc/classes/TaskJuggler/ShiftAssignments.html +82 -78
  112. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
  113. data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
  114. data/doc/classes/TaskJuggler/SortListAttribute.html +196 -0
  115. data/doc/classes/TaskJuggler/SourceFileInfo.html +16 -12
  116. data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
  117. data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
  118. data/doc/classes/TaskJuggler/SyntaxReference.html +46 -42
  119. data/doc/classes/TaskJuggler/TOCEntry.html +16 -12
  120. data/doc/classes/TaskJuggler/TableColumnDefinition.html +48 -33
  121. data/doc/classes/TaskJuggler/TableOfContents.html +22 -18
  122. data/doc/classes/TaskJuggler/TableReport.html +1036 -0
  123. data/doc/classes/TaskJuggler/Task.html +12 -12
  124. data/doc/classes/TaskJuggler/TaskDependency.html +16 -12
  125. data/doc/classes/TaskJuggler/TaskListAttribute.html +46 -46
  126. data/doc/classes/TaskJuggler/TaskListRE.html +49 -58
  127. data/doc/classes/TaskJuggler/TaskScenario.html +1270 -1180
  128. data/doc/classes/TaskJuggler/TextParser/Pattern.html +100 -96
  129. data/doc/classes/TaskJuggler/TextParser/Rule.html +88 -84
  130. data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -12
  131. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
  132. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +10 -6
  133. data/doc/classes/TaskJuggler/TextParser.html +203 -140
  134. data/doc/classes/TaskJuggler/TextReport.html +364 -0
  135. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
  136. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +50 -42
  137. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +16 -12
  138. data/doc/classes/TaskJuggler/TextScanner.html +334 -240
  139. data/doc/classes/TaskJuggler/TjException.html +6 -6
  140. data/doc/classes/TaskJuggler/TjTime.html +547 -497
  141. data/doc/classes/TaskJuggler/TjpExample.html +29 -25
  142. data/doc/classes/TaskJuggler/TjpExportRE.html +77 -97
  143. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +3911 -3886
  144. data/doc/classes/TaskJuggler/UserManual.html +54 -54
  145. data/doc/classes/TaskJuggler/WorkingHours.html +53 -49
  146. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -85
  147. data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
  148. data/doc/classes/TaskJuggler/XMLComment.html +21 -21
  149. data/doc/classes/TaskJuggler/XMLDocument.html +28 -24
  150. data/doc/classes/TaskJuggler/XMLElement.html +70 -58
  151. data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
  152. data/doc/classes/TaskJuggler/XMLText.html +36 -36
  153. data/doc/classes/TaskJuggler.html +266 -183
  154. data/doc/files/COPYING.html +1 -1
  155. data/doc/files/README.html +1 -1
  156. data/doc/files/lib/AccountScenario_rb.html +1 -1
  157. data/doc/files/lib/Account_rb.html +1 -1
  158. data/doc/files/lib/Allocation_rb.html +1 -1
  159. data/doc/files/lib/AppConfig_rb.html +1 -1
  160. data/doc/files/lib/AttributeBase_rb.html +11 -1
  161. data/doc/files/lib/AttributeDefinition_rb.html +1 -1
  162. data/doc/files/lib/Attributes_rb.html +1 -1
  163. data/doc/files/lib/{LogicalFlag_rb.html → BatchProcessor_rb.html} +8 -6
  164. data/doc/files/lib/Booking_rb.html +1 -1
  165. data/doc/files/lib/ChargeSet_rb.html +1 -1
  166. data/doc/files/lib/Charge_rb.html +1 -1
  167. data/doc/files/lib/HTMLDocument_rb.html +1 -1
  168. data/doc/files/lib/Interval_rb.html +1 -1
  169. data/doc/files/lib/Journal_rb.html +106 -0
  170. data/doc/files/lib/KeywordArray_rb.html +106 -0
  171. data/doc/files/lib/KeywordDocumentation_rb.html +1 -1
  172. data/doc/files/lib/Limits_rb.html +1 -1
  173. data/doc/files/lib/Log_rb.html +1 -1
  174. data/doc/files/lib/LogicalExpression_rb.html +1 -3
  175. data/doc/files/lib/LogicalFunction_rb.html +1 -1
  176. data/doc/files/lib/LogicalOperation_rb.html +1 -1
  177. data/doc/files/lib/MacroParser_rb.html +1 -1
  178. data/doc/files/lib/MacroTable_rb.html +1 -1
  179. data/doc/files/lib/MessageHandler_rb.html +1 -1
  180. data/doc/files/lib/Message_rb.html +1 -1
  181. data/doc/files/lib/ProjectFileParser_rb.html +5 -1
  182. data/doc/files/lib/Project_rb.html +5 -1
  183. data/doc/files/lib/PropertyList_rb.html +1 -1
  184. data/doc/files/lib/PropertySet_rb.html +1 -1
  185. data/doc/files/lib/PropertyTreeNode_rb.html +1 -1
  186. data/doc/files/lib/Query_rb.html +1 -1
  187. data/doc/files/lib/RTPNavigator_rb.html +120 -0
  188. data/doc/files/lib/RTPReport_rb.html +118 -0
  189. data/doc/files/lib/RealFormat_rb.html +1 -1
  190. data/doc/files/lib/ResourceScenario_rb.html +1 -1
  191. data/doc/files/lib/Resource_rb.html +1 -1
  192. data/doc/files/lib/RichTextDocument_rb.html +1 -1
  193. data/doc/files/lib/RichTextElement_rb.html +1 -1
  194. data/doc/files/lib/RichTextParser_rb.html +1 -1
  195. data/doc/files/lib/RichTextProtocolExample_rb.html +1 -1
  196. data/doc/files/lib/RichTextProtocolHandler_rb.html +1 -1
  197. data/doc/files/lib/RichTextScanner_rb.html +1 -1
  198. data/doc/files/lib/RichTextSnip_rb.html +1 -1
  199. data/doc/files/lib/RichTextSyntaxRules_rb.html +1 -1
  200. data/doc/files/lib/RichText_rb.html +1 -1
  201. data/doc/files/lib/ScenarioData_rb.html +1 -1
  202. data/doc/files/lib/Scenario_rb.html +1 -1
  203. data/doc/files/lib/Scoreboard_rb.html +1 -1
  204. data/doc/files/lib/ShiftAssignments_rb.html +1 -1
  205. data/doc/files/lib/ShiftScenario_rb.html +1 -1
  206. data/doc/files/lib/Shift_rb.html +1 -1
  207. data/doc/files/lib/SourceFileInfo_rb.html +1 -1
  208. data/doc/files/lib/SyntaxReference_rb.html +1 -1
  209. data/doc/files/lib/TOCEntry_rb.html +1 -1
  210. data/doc/files/lib/TableColumnDefinition_rb.html +1 -1
  211. data/doc/files/lib/TableOfContents_rb.html +1 -1
  212. data/doc/files/lib/TaskDependency_rb.html +1 -1
  213. data/doc/files/lib/TaskJuggler_rb.html +1 -1
  214. data/doc/files/lib/TaskScenario_rb.html +1 -1
  215. data/doc/files/lib/Task_rb.html +1 -1
  216. data/doc/files/lib/TextParser/Pattern_rb.html +1 -1
  217. data/doc/files/lib/TextParser/Rule_rb.html +1 -1
  218. data/doc/files/lib/TextParser/StackElement_rb.html +1 -1
  219. data/doc/files/lib/TextParser/TokenDoc_rb.html +1 -1
  220. data/doc/files/lib/TextParser_rb.html +1 -1
  221. data/doc/files/lib/TextScanner_rb.html +1 -1
  222. data/doc/files/lib/Tj3Config_rb.html +1 -1
  223. data/doc/files/lib/TjException_rb.html +1 -1
  224. data/doc/files/lib/TjTime_rb.html +1 -1
  225. data/doc/files/lib/TjpExample_rb.html +1 -1
  226. data/doc/files/lib/TjpSyntaxRules_rb.html +1 -1
  227. data/doc/files/lib/UTF8String_rb.html +1 -1
  228. data/doc/files/lib/UserManual_rb.html +1 -1
  229. data/doc/files/lib/WorkingHours_rb.html +1 -1
  230. data/doc/files/lib/XMLDocument_rb.html +1 -1
  231. data/doc/files/lib/XMLElement_rb.html +1 -1
  232. data/doc/files/lib/deep_copy_rb.html +106 -0
  233. data/doc/files/lib/ms_test_rb.html +90 -0
  234. data/doc/files/lib/reports/CSVFile_rb.html +1 -1
  235. data/doc/files/lib/reports/ColumnTable_rb.html +1 -1
  236. data/doc/files/lib/reports/GanttChart_rb.html +1 -1
  237. data/doc/files/lib/reports/GanttContainer_rb.html +1 -1
  238. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  239. data/doc/files/lib/reports/GanttHeader_rb.html +1 -1
  240. data/doc/files/lib/reports/GanttLine_rb.html +1 -1
  241. data/doc/files/lib/reports/GanttLoadStack_rb.html +1 -1
  242. data/doc/files/lib/reports/GanttMilestone_rb.html +1 -1
  243. data/doc/files/lib/reports/GanttRouter_rb.html +1 -1
  244. data/doc/files/lib/reports/GanttTaskBar_rb.html +1 -1
  245. data/doc/files/lib/reports/HTMLGraphics_rb.html +1 -1
  246. data/doc/files/lib/reports/{ReportElement_rb.html → Navigator_rb.html} +6 -8
  247. data/doc/files/lib/reports/ReportBase_rb.html +106 -0
  248. data/doc/files/lib/reports/ReportContext_rb.html +106 -0
  249. data/doc/files/lib/reports/ReportTableCell_rb.html +1 -1
  250. data/doc/files/lib/reports/ReportTableColumn_rb.html +1 -1
  251. data/doc/files/lib/reports/ReportTableLegend_rb.html +1 -1
  252. data/doc/files/lib/reports/ReportTableLine_rb.html +1 -1
  253. data/doc/files/lib/reports/ReportTable_rb.html +1 -1
  254. data/doc/files/lib/reports/Report_rb.html +8 -2
  255. data/doc/files/lib/reports/ResourceListRE_rb.html +2 -2
  256. data/doc/files/lib/reports/{ReportTableElement_rb.html → TableReport_rb.html} +7 -5
  257. data/doc/files/lib/reports/TaskListRE_rb.html +2 -2
  258. data/doc/files/lib/reports/TextReport_rb.html +116 -0
  259. data/doc/files/lib/reports/TjpExportRE_rb.html +2 -2
  260. data/doc/files/lib/taskjuggler3_rb.html +61 -56
  261. data/doc/files/lib/tj3man_rb.html +1 -1
  262. data/doc/fr_class_index.html +41 -3
  263. data/doc/fr_file_index.html +21 -5
  264. data/doc/fr_method_index.html +1069 -959
  265. data/examples/ContactList.html +1467 -0
  266. data/examples/Deliveries.html +485 -0
  267. data/examples/Development.html +2525 -0
  268. data/examples/Overview.html +747 -0
  269. data/examples/Resource Graph.html +616 -0
  270. data/examples/tutorial.tjp +63 -67
  271. data/lib/AttributeBase.rb +27 -31
  272. data/lib/AttributeDefinition.rb +12 -7
  273. data/lib/Attributes.rb +134 -34
  274. data/lib/Interval.rb +2 -0
  275. data/lib/Journal.rb +44 -0
  276. data/lib/{LogicalFlag.rb → KeywordArray.rb} +5 -13
  277. data/lib/KeywordDocumentation.rb +84 -47
  278. data/lib/Limits.rb +7 -5
  279. data/lib/LogicalExpression.rb +1 -1
  280. data/lib/LogicalOperation.rb +33 -0
  281. data/lib/Project.rb +313 -99
  282. data/lib/ProjectFileParser.rb +88 -11
  283. data/lib/PropertyList.rb +2 -1
  284. data/lib/PropertySet.rb +13 -4
  285. data/lib/PropertyTreeNode.rb +34 -15
  286. data/lib/Query.rb +2 -1
  287. data/lib/RTPNavigator.rb +53 -0
  288. data/lib/RTPReport.rb +62 -0
  289. data/lib/RealFormat.rb +28 -10
  290. data/lib/RichTextElement.rb +18 -12
  291. data/lib/RichTextParser.rb +1 -0
  292. data/lib/RichTextProtocolExample.rb +8 -11
  293. data/lib/RichTextProtocolHandler.rb +11 -1
  294. data/lib/RichTextScanner.rb +308 -164
  295. data/lib/RichTextSyntaxRules.rb +24 -0
  296. data/lib/TableColumnDefinition.rb +5 -1
  297. data/lib/TaskJuggler.rb +3 -2
  298. data/lib/TaskScenario.rb +123 -31
  299. data/lib/TextParser.rb +14 -3
  300. data/lib/TextScanner.rb +210 -34
  301. data/lib/Tj3Config.rb +1 -1
  302. data/lib/TjTime.rb +15 -0
  303. data/lib/TjpExample.rb +1 -1
  304. data/lib/TjpSyntaxRules.rb +674 -473
  305. data/lib/WorkingHours.rb +1 -1
  306. data/lib/XMLElement.rb +11 -3
  307. data/lib/deep_copy.rb +72 -0
  308. data/lib/ms_test.rb +27 -0
  309. data/lib/reports/ColumnTable.rb +7 -5
  310. data/lib/reports/GanttChart.rb +60 -34
  311. data/lib/reports/GanttHeader.rb +1 -1
  312. data/lib/reports/GanttRouter.rb +7 -5
  313. data/lib/reports/Navigator.rb +72 -0
  314. data/lib/reports/Report.rb +58 -73
  315. data/lib/reports/ReportBase.rb +241 -0
  316. data/lib/reports/ReportContext.rb +41 -0
  317. data/lib/reports/ReportTable.rb +7 -2
  318. data/lib/reports/ReportTableCell.rb +3 -3
  319. data/lib/reports/ResourceListRE.rb +19 -26
  320. data/lib/reports/{ReportTableElement.rb → TableReport.rb} +297 -97
  321. data/lib/reports/TaskListRE.rb +16 -24
  322. data/lib/reports/TextReport.rb +87 -0
  323. data/lib/reports/TjpExportRE.rb +55 -50
  324. data/lib/taskjuggler3.rb +6 -1
  325. data/manual/Getting_Started +57 -6
  326. data/manual/How_To_Contribute +2 -4
  327. data/manual/Intro +2 -2
  328. data/manual/Reporting_Bugs +9 -2
  329. data/manual/Rich_Text_Attributes +41 -0
  330. data/manual/Tutorial +219 -173
  331. data/tasks/test.rake +3 -0
  332. data/test/TestSuite/CSV-Reports/celltext.tjp +2 -1
  333. data/test/TestSuite/CSV-Reports/resourcereport.tjp +2 -1
  334. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +2 -1
  335. data/test/TestSuite/CSV-Reports/sortByTree.tjp +2 -1
  336. data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +2 -1
  337. data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +2 -1
  338. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
  339. data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
  340. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
  341. data/test/TestSuite/HTML-Reports/depArrows.tjp +72 -0
  342. data/test/TestSuite/HTML-Reports/reference-export.html +187 -0
  343. data/test/TestSuite/HTML-Reports/reference.tjp +21 -0
  344. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -1
  345. data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +3 -3
  346. data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
  347. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +37 -0
  348. data/test/TestSuite/Scheduler/Correct/Container.tjp +40 -0
  349. data/test/TestSuite/Scheduler/Correct/Depends.tjp +9 -14
  350. data/test/TestSuite/Scheduler/Correct/Duration.tjp +2 -1
  351. data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +20 -29
  352. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -13
  353. data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +6 -5
  354. data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +10 -6
  355. data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +9 -6
  356. data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +9 -6
  357. data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +13 -10
  358. data/test/TestSuite/Scheduler/Correct/Precedes.tjp +9 -14
  359. data/test/TestSuite/Scheduler/Correct/Shift.tjp +9 -8
  360. data/test/TestSuite/Scheduler/Correct/checks.tji +4 -0
  361. data/test/TestSuite/Scheduler/Errors/weak_end_dep.tjp +16 -0
  362. data/test/TestSuite/Scheduler/Errors/weak_start_dep.tjp +16 -0
  363. data/test/TestSuite/Syntax/Correct/Account.tjp +1 -1
  364. data/test/TestSuite/Syntax/Correct/AutoID.tjp +21 -0
  365. data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +2 -1
  366. data/test/TestSuite/Syntax/Correct/Caption.tjp +7 -6
  367. data/test/TestSuite/Syntax/Correct/Celltext.tjp +7 -4
  368. data/test/TestSuite/Syntax/Correct/Comments.tjp +1 -1
  369. data/test/TestSuite/Syntax/Correct/CompletedWork.tji +11 -19
  370. data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +4 -3
  371. data/test/TestSuite/Syntax/Correct/Export.tjp +3 -1
  372. data/test/TestSuite/Syntax/Correct/Flags.tjp +2 -1
  373. data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +2 -1
  374. data/test/TestSuite/Syntax/Correct/Journal.tjp +18 -0
  375. data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +2 -1
  376. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +16 -0
  377. data/test/TestSuite/Syntax/Correct/Period.tjp +2 -1
  378. data/test/TestSuite/Syntax/Correct/RawHTML.tjp +4 -2
  379. data/test/TestSuite/Syntax/Correct/Reports.tjp +4 -2
  380. data/test/TestSuite/Syntax/Correct/ResourcePrefix.tji +2 -0
  381. data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +23 -0
  382. data/test/TestSuite/Syntax/Correct/Responsible.tjp +1 -1
  383. data/test/TestSuite/Syntax/Correct/Simple.tjp +1 -1
  384. data/test/TestSuite/Syntax/Correct/String.tjp +1 -1
  385. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +2 -1
  386. data/test/TestSuite/Syntax/Correct/tutorial.tjp +92 -70
  387. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +7 -0
  388. data/test/TestSuite/Syntax/Errors/bad_include.tjp +1 -1
  389. data/test/TestSuite/Syntax/Errors/bad_time_zone.tjp +6 -0
  390. data/test/TestSuite/Syntax/Errors/bad_timing_res.tjp +5 -0
  391. data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +1 -1
  392. data/test/TestSuite/Syntax/Errors/container_attribute.tjp +1 -1
  393. data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +3 -2
  394. data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +1 -1
  395. data/test/TestSuite/Syntax/Errors/eof_in_istring1.tjp +5 -0
  396. data/test/TestSuite/Syntax/Errors/eof_in_istring2.tjp +5 -0
  397. data/test/TestSuite/Syntax/Errors/eof_in_istring3.tjp +6 -0
  398. data/test/TestSuite/Syntax/Errors/eof_in_istring4.tjp +6 -0
  399. data/test/TestSuite/Syntax/Errors/eof_in_istring5.tjp +6 -0
  400. data/test/TestSuite/Syntax/Errors/include_recursion.tji +1 -0
  401. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +7 -0
  402. data/test/TestSuite/Syntax/Errors/junk_after_cut.tjp +6 -0
  403. data/test/TestSuite/Syntax/Errors/navigator_exists.tjp +10 -0
  404. data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +1 -1
  405. data/test/TestSuite/Syntax/Errors/report_end.tjp +1 -1
  406. data/test/TestSuite/Syntax/Errors/report_exists.tjp +10 -0
  407. data/test/TestSuite/Syntax/Errors/report_start.tjp +1 -1
  408. data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +1 -1
  409. data/test/TestSuite/Syntax/Errors/sort_direction.tjp +1 -1
  410. data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +1 -1
  411. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +1 -1
  412. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +1 -1
  413. data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +1 -1
  414. data/test/TestSuite/Syntax/Errors/too_large_timing_res.tjp +7 -0
  415. data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +1 -1
  416. data/test/TestSuite/Syntax/Errors/unknown_task.tjp +1 -1
  417. data/test/all.rb +1 -16
  418. data/test/test_CSV-Reports.rb +8 -5
  419. data/test/test_Query.rb +2 -2
  420. data/test/test_RichText.rb +95 -0
  421. data/test/test_Scheduler.rb +8 -4
  422. data/test/test_Syntax.rb +8 -4
  423. data/test/test_deep_copy.rb +83 -0
  424. metadata +549 -487
  425. data/benchmarks/UTF-8-Strings.rb +0 -58
  426. data/doc/classes/TaskJuggler/ReportElement.html +0 -1070
  427. data/doc/classes/TaskJuggler/ReportTableElement.html +0 -644
  428. data/lib/reports/ReportElement.rb +0 -427
  429. data/test/TestSuite/Syntax/Correct/csvtest +0 -16
  430. data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +0 -10
  431. data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +0 -10
  432. data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +0 -10
data/manual/Tutorial CHANGED
@@ -9,31 +9,33 @@ demonstrates some of the commonly used features of TaskJuggler. The
9
9
  complete example can be downloaded
10
10
  [http://www.taskjuggler.org/tj3/examples/tutorial.tjp here]. The
11
11
  resulting reports can be found
12
- [http://www.taskjuggler.org/tj3/examples/ProjectPlanOverview.html
12
+ [http://www.taskjuggler.org/tj3/examples/Overview.html
13
13
  here].
14
14
 
15
15
  === Starting the project ===
16
16
 
17
17
  To start a TaskJuggler project file you need to use the [[project]]
18
- property. It tells TaskJuggler the default project ID, a short name
19
- for your project, a version number and a start and end date. The start
20
- and end dates don't need to be exact, but must fit all tasks of the
21
- project. It is the time interval the TaskJuggler scheduler will use
22
- to fit the tasks in. So, make it large enough for all your tasks to
23
- fit in. But don't make it too large, because this will result in
24
- longer scheduling times and higher memory consumption.
25
-
26
- [[example:tutorial header1]]
27
-
28
- All TaskJuggler properties have a certain number of fixed attributes
29
- and a set of optional attributes. Optional attributes are always
30
- enclosed in curly braces. If no optional attributes are specified,
31
- the braces can be omitted as well. In this example we will introduce
32
- a number of there attributes that may or may not matter to you. If
33
- you don't see an immediate need for a specific attribute, feel free
34
- to ignore it for now. You can always come back to them later. A full
35
- list of the supported attributes can be found in the ''attributes''
36
- section of the [[project]] property documentation.
18
+ property. It tells TaskJuggler the name of your project and a start
19
+ and end date. The start and end dates don't need to be exact, but must
20
+ fit all tasks of the project. It is the time interval the TaskJuggler
21
+ scheduler will use to fit the tasks in. So, make it large enough for
22
+ all your tasks to fit in. But don't make it too large, because this
23
+ will result in longer scheduling times and higher memory consumption.
24
+
25
+ <[example file="tutorial" tag="header1"]>
26
+
27
+ All TaskJuggler properties have two required attributes, a unique ID
28
+ and a name, and a set of optional attributes. The name must always be
29
+ specified. The ID can be omitted if you never have to reference the
30
+ property from another context. If you omit the ID, TaskJuggler will
31
+ automatically generate a unique ID. The other optional attributes are
32
+ always enclosed in curly braces. If no optional attributes are
33
+ specified, the braces can be omitted as well. In this example we will
34
+ introduce a number of there attributes that may or may not matter to
35
+ you. If you don't see an immediate need for a specific attribute, feel
36
+ free to ignore it for now. You can always come back to them later. A
37
+ full list of the supported attributes can be found in the
38
+ ''attributes'' section of the [[project]] property documentation.
37
39
 
38
40
  Attributes always start with a keyword that is unique in the context.
39
41
  A context is delimited by a set of curly braces that enclose optional
@@ -46,7 +48,7 @@ of this manual.
46
48
 
47
49
  The [[currency]] attribute specifies the unit of currency values.
48
50
 
49
- [[example:tutorial currency]]
51
+ <[example file="tutorial" tag="currency"]>
50
52
 
51
53
  Because each culture has its own way of specifying dates and numbers,
52
54
  the format for these are configurable. Use the [[timeformat]]
@@ -55,7 +57,7 @@ for reports, it does not affect the way you specify dates in the
55
57
  project files. Here you always need to use the [[date ISO standardized
56
58
  notation]].
57
59
 
58
- [[example:tutorial formats]]
60
+ <[example file="tutorial" tag="formats"]>
59
61
 
60
62
  We also can specify the way numbers or currency values are shown in
61
63
  the reports. Use the [[numberformat]] and [[currencyformat]]
@@ -69,7 +71,7 @@ defined result for the reports in this example we've picked a specific
69
71
  date that fits our purpose here. In your projects, you would use
70
72
  [[now]] to generate status reports for the date you specify.
71
73
 
72
- [[example:tutorial now]]
74
+ <[example file="tutorial" tag="now"]>
73
75
 
74
76
  In this tutorial we would like to compare two scenarios of the
75
77
  project. The first scenario is the one that we have planned. The
@@ -85,13 +87,13 @@ impact of certain changes to the plan of record. We'll see further
85
87
  below, how to specify values for a scenario and how to compare the
86
88
  results.
87
89
 
88
- [[example:tutorial scenario]]
90
+ <[example file="tutorial" tag="scenario"]>
89
91
 
90
92
  To summarize the above, let's look at the complete header again.
91
93
  Don't get scared by the wealth of attributes here. They are all
92
94
  optional and mostly used to illustrate the flexibility of TaskJuggler.
93
95
 
94
- [[example:tutorial header2]]
96
+ <[example file="tutorial" tag="header2"]>
95
97
 
96
98
  === Global Attributes ===
97
99
 
@@ -107,7 +109,7 @@ further below, what this actually means. Right after the project
107
109
  property we are at top-level scope, so this is the default for all
108
110
  following properties.
109
111
 
110
- [[example:tutorial rate]]
112
+ <[example file="tutorial" tag="rate"]>
111
113
 
112
114
  The [[rate]] attribute can be used to specify the daily costs of
113
115
  resources. All subsequent resources will get this rate. But it can be
@@ -117,7 +119,7 @@ You may also want to tell TaskJuggler about holidays that affect
117
119
  all resources. Global vacations are time periods where TaskJuggler
118
120
  does not do any resource assignments to tasks.
119
121
 
120
- [[example:tutorial vacation]]
122
+ <[example file="tutorial" tag="vacation"]>
121
123
 
122
124
  Use the [[vacation]] attribute to define a global vacation. Global
123
125
  vacations must have a name and a date or date range. This is slightly
@@ -133,7 +135,7 @@ Macros are text patterns that can be defined once and inserted
133
135
  multiple times in the project file. A [[macro]] always has a name and the
134
136
  text pattern is enclosed by square brackets.
135
137
 
136
- [[example:tutorial macro]]
138
+ <[example file="tutorial" tag="macro"]>
137
139
 
138
140
  To use the macro you simply have to write
139
141
  ''''${allocate_developers}'''' and TaskJuggler will replace the term
@@ -149,7 +151,7 @@ generate reports of the TaskJuggler results, you can use the flags to
149
151
  filter out information and limit the report to exactly those details
150
152
  that you want to have included.
151
153
 
152
- [[example:tutorial flags]]
154
+ <[example file="tutorial" tag="flags"]>
153
155
 
154
156
  This is flag declaration. All [[flags]] need to be declared, before they
155
157
  can be used to avoid hard to find errors due to misspelled flag
@@ -165,15 +167,16 @@ In order not to get lost with all the various amounts, we declare 3
165
167
  for the development costs, one for the documentation costs, and one
166
168
  for the customer payments.
167
169
 
168
- [[example:tutorial accounts]]
170
+ <[example file="tutorial" tag="accounts"]>
169
171
 
170
172
  Like all TaskJuggler properties, the account needs an ID and a name.
171
- IDs may only consist of ASCII characters, numbers and the underline
172
- character. All global TaskJuggler properties have IDs. The ID is
173
- necessary so that we can reference the property again later without
174
- having to write the potentially much longer name. The name may
175
- contain space characters and therefore has to be enclosed with single
176
- or double quotes.
173
+ IDs may only consist of the characters a to z, A to Z and the
174
+ underscore. All but the first character may also be digits 0 to 9.
175
+ All global TaskJuggler properties have IDs. The ID is necessary so
176
+ that we can reference the property again later without having to write
177
+ the potentially much longer name. The name may contain space
178
+ characters and therefore has to be enclosed with single or double
179
+ quotes.
177
180
 
178
181
  Accounts can be grouped by nesting them. You can use this feature to
179
182
  create sets of accounts. Such sets can then be balanced against each
@@ -181,7 +184,7 @@ other to create a profit and loss analysis. When you have specified
181
184
  accounts in your project, you must at least define one default
182
185
  [[balance]].
183
186
 
184
- [[example:tutorial balance]]
187
+ <[example file="tutorial" tag="balance"]>
185
188
 
186
189
  === Declaring Resources ===
187
190
 
@@ -189,7 +192,7 @@ While the above introduced account property is only needed if you
189
192
  want to do a P&L analysis, resources are usually found in almost any
190
193
  project.
191
194
 
192
- [[example:tutorial resources]]
195
+ <[example file="tutorial" tag="resources"]>
193
196
 
194
197
  This snippet of the example shows the use of the [[resource
195
198
  resource property]]. Just like accounts, resources always have an ID
@@ -242,7 +245,7 @@ complicated, we break it down into several subtasks. We need to do a
242
245
  specification, develop the software, test the software, and write a
243
246
  manual. Using the [[task task property]], thiis would look as follows:
244
247
 
245
- [[example:tutorial task1]]
248
+ <[example file="tutorial" tag="task1"]>
246
249
 
247
250
  Similar to resources, tasks are declared by using the task keyword
248
251
  followed by an ID and a name string. All TaskJuggler properties have
@@ -263,7 +266,7 @@ some subtasks later on.
263
266
  We consider the specification task simple enough, so we don't have to
264
267
  break it into further subtasks. So let's add some more details to it.
265
268
 
266
- [[example:tutorial spec]]
269
+ <[example file="tutorial" tag="spec"]>
267
270
 
268
271
  The [[effort]] to complete the task is specified with 20 man-days.
269
272
  Alternatively we could have used the [[length]] attribute or
@@ -286,7 +289,7 @@ sub tasks.
286
289
  Here we use the allocate_developers macro mentioned above. The
287
290
  expression ''''${allocate_developers}'''' is simply expanded to
288
291
 
289
- [[example:tutorial expandedmacro]]
292
+ <[example file="tutorial" tag="expandedmacro"]>
290
293
 
291
294
  If you need to [[allocate]] the same bunch of people to several tasks,
292
295
  the macro saves you some typing. You could have written the allocate
@@ -328,7 +331,7 @@ dependency specifications of relative IDs.
328
331
  The software development task is still too complex to specify it
329
332
  directly. So we split it further into subtasks.
330
333
 
331
- [[example:tutorial software]]
334
+ <[example file="tutorial" tag="software"]>
332
335
 
333
336
  We use the [[priority]] attribute to mark the importance of
334
337
  the tasks. 500 is the default priority of top-level tasks. Setting the
@@ -339,7 +342,7 @@ if specified before the subtasks' declaration. So all subtasks of
339
342
  software have a priority of 1000 as well, unless they have their own
340
343
  priority definition.
341
344
 
342
- [[example:tutorial database]]
345
+ <[example file="tutorial" tag="database"]>
343
346
 
344
347
  The work on the database coupling should not start before the
345
348
  specification has been finished. So we again use the [[depends]]
@@ -349,7 +352,7 @@ scope of the enclosing software task. The second one is to get into
349
352
  the AcSo scope that contains the spec tasks. For a change, we
350
353
  [[allocate]] resources directly without using a macro.
351
354
 
352
- [[example:tutorial gui]]
355
+ <[example file="tutorial" tag="gui"]>
353
356
 
354
357
  TaskJuggler can schedule your project for two different [[scenario
355
358
  scenarios]]. We have called the first scenario ''''plan'''' scenario
@@ -366,7 +369,7 @@ man-days. It turned out that we actually needed 40 man-days. By
366
369
  prefixing the [[effort]] attribute with ''''delayed:'''', the
367
370
  effort value for the ''''delayed'''' scenario can be specified.
368
371
 
369
- [[example:tutorial backend]]
372
+ <[example file="tutorial" tag="backend"]>
370
373
 
371
374
  By default, TaskJuggler assumes that all tasks are on schedule.
372
375
  Sometimes you want to generate reports that show how much of a task
@@ -378,7 +381,7 @@ of the task have been completed up to the current date. In our case
378
381
  the back-end implementation is slightly ahead of schedule as we will
379
382
  see from the report.
380
383
 
381
- [[example:tutorial test]]
384
+ <[example file="tutorial" tag="test"]>
382
385
 
383
386
  The software testing task has been split up into an alpha and
384
387
  a beta test task. The interesting thing here is, that efforts can not
@@ -398,7 +401,7 @@ for the lease on the building and the equipment. To compensate this,
398
401
  we charge a daily rate of USD 170 per day using the [[charge]]
399
402
  attribute.
400
403
 
401
- [[example:tutorial charge]]
404
+ <[example file="tutorial" tag="charge"]>
402
405
 
403
406
  Since we specify the attribute for the top-level task before we
404
407
  declare any subtasks, this attribute will be inherited by all subtasks
@@ -406,7 +409,7 @@ and their subtasks and so on. The only exception is the writing of the
406
409
  manual. We need to change the chargeset for this task again, as it is
407
410
  also a subtask of AcSo and we want to use a different account for it.
408
411
 
409
- [[example:tutorial manual]]
412
+ <[example file="tutorial" tag="manual"]>
410
413
 
411
414
  === Specifying Milestones ===
412
415
 
@@ -420,7 +423,7 @@ progress of the project.
420
423
  TaskJuggler has support for milestones as well. Milestones are leaf
421
424
  tasks that don't have a duration specification.
422
425
 
423
- [[example:tutorial deliveries]]
426
+ <[example file="tutorial" tag="deliveries"]>
424
427
 
425
428
  We have put all important milestones of the project as subtasks of the
426
429
  deliveries task. This way they show up nicely grouped in the reports.
@@ -452,128 +455,171 @@ Now the project has been completely specified. Stopping here would
452
455
  result in a valid TaskJuggler file that could be processed and
453
456
  scheduled. But no reports would be generated to visualize the results.
454
457
 
455
- === Generating Reports of the scheduled Project ===
456
-
457
- TaskJuggler offers a number of report types. Probably the most popular ones are interactive reports and HTML reports.
458
-
459
- ==== Generating Interactive Reports ====
460
-
461
- Interactive reports are only available in the TaskJuggler GUI. The
462
- command line version will just ignore interactive report definitions.
463
- To view a task report in the GUI, you have to add the following lines
464
- to your project. This will give you a list of all the project's tasks
465
- and the classical Gantt chart.
466
-
467
- [[example:tutorial planoverview]]
468
-
469
- The GUI requires the name column to be present in the report. If you
470
- don't specify it, it will be added automatically. It does not support
471
- any of the index columns. They will not be shown in the GUI.
472
- Nonetheless, it's a good idea to request it, as the printed version of
473
- the interactive reports behave like the other reports. They only show
474
- specified columns. The printed reports repeat the first column on
475
- every page in case it does not fit on a single page. To print a report
476
- from the GUI just select File->Print from the menu or click the
477
- printer icon in the toolbar.
478
-
479
- For this report we like to have the abbreviated weekday in front of
480
- the date. %a is the tag for this. See the manual for a complete list
481
- of all options.
482
-
483
- We don't want to see any resources in this report, so we hide them
484
- all. 1 means always hide a resource. To show all resources we could
485
- write a 0, which means never hide a resource. Or we could write a
486
- logical expression that only shows the leaf resources and sorts them
487
- by name as we did for the next report. It's a list of all tasks
488
- showing the resources assigned to each task.
489
-
490
- taskreport "Task Usage" {
491
- headline "Task Usage Report"
492
- columns hierarchindex, name, start, end, effort { title "Work" }, duration,
493
- cost, revenue
494
- timeformat "%Y-%m-%d"
495
- loadunit days
496
- hideresource ~isLeaf()
497
- sortresources nameup
498
- }
499
-
500
- The default title for the effort column is replaced with a custom
501
- title. Additionally we show the cost and revenue of all tasks and
502
- resources. All loads are shown as resource-days. The next report is
503
- similar to the first one, but has the completion degree as additional
504
- column.
505
-
506
- # A list of all tasks with the percentage complete for each task
507
- taskreport "Tracking Gantt" {
508
- headline "Tracking Gantt Chart"
509
- columns hierarchindex, name, start, end, effort { title "Work" }, duration,
510
- completed, chart
511
- timeformat "%a %Y-%m-%d"
512
- loadunit days
513
- hideresource 1
514
- }
515
-
516
- We can also have resource-centric reports. This is done with the
517
- report type resourcereport. The following report is showing resource
518
- allocation. It identifies whether each resource is under- or
519
- over-allocated for.
520
-
521
- resourcereport "Resource Graph" {
522
- headline "Resource Allocation Graph"
523
- columns no, name, rate, utilization, freeload, chart
524
- loadunit days
525
- hidetask 1
526
- }
527
-
528
- The next report is a list of all project resources, both human and
529
- material resources, together with the associated costs.
530
-
531
- resourcereport "Resource Sheet" {
532
- headline "Resource Sheet"
533
- columns no, name, efficiency, id, maxeffort, rate
534
- loadunit days
535
- hidetask 1
536
- }
537
-
538
- The next report is similar to the previous one, but also lists the
539
- tasks for each of the resources. It also provides details about the
540
- cost for each resource and task.
541
-
542
- # A list of resources and each task associated with each resource.
543
- resourcereport "Resource Usage" {
544
- headline "Resource Usage Report"
545
- columns no, name, utilization, freeload, cost
546
- loadunit days
547
- hidetask 0
548
- }
549
-
550
- ==== Generating HTML Reports ====
551
-
552
- In addition to the interactive reports, TaskJuggler also provides HTML
553
- reports. These reports have the benefit that you can create report
554
- files that you can publish on a web server. TaskJuggler supports a
555
- variety of HTML reports. Please refer to the manual for a full list.
556
- In this tutorial we will only cover a subset of them.
557
-
558
- To conclude the HTML reports, a report is generated that shows how
559
- poorly the project is calculated. The company won't get rich with this
560
- project. Due to the slip, it actually needs a loan from the bank to
561
- pay the salaries.
562
-
563
- htmlaccountreport "Accounting.html" {
564
- columns no, name, scenario, total, monthly
565
- headline "P&L for the Project"
566
- caption "The table shows the profit and loss analysis as well as
567
- the cashflow situation of the Accounting Software Project."
568
- accumulate
569
- scenarios plan, delayed
570
- }
571
-
572
- The htmlaccountreport property produces similar reports as the ones
573
- shown above, but it lists accounts instead of tasks or resources. The
574
- total column shows the value of the account at the end of the reported
575
- time interval. The accumulate attribute puts the calendar in
576
- accumulation mode. The monthly columns list the value of the account
577
- at the end of the month. Normally the amount that has been added or
578
- subtracted from the account would be listed.
458
+ === Visualizing the Project ===
459
+
460
+ To see and share the project data you reports can be generated. You
461
+ can generate any number of reports and you can select from a variety
462
+ of report types and output formats. To have a report generated after
463
+ the project scheduling has been completed, you need include a report
464
+ definition into the project description. Report definitions are
465
+ properties that are very similar to the task and resource properties
466
+ that you are already familiar with. Just like these, report
467
+ definitions can be nested to take advantage of the attribute
468
+ inheritance mechanism. Every report definition starts with the type
469
+ of the report. Each type of report has a particular focus. A
470
+ [[taskreport]] lists the project data in the form of a task list.
471
+ A [[resourcereport]] does the same in form of a resource list. For a
472
+ more generic report, you can use the [[textreport]].
473
+
474
+ A ''''textreport'''' does not directly present the data in form of a
475
+ task or resource list. It just consists of text building blocks that
476
+ are described by [[Rich_Text_Attributes Rich Text]]. There can be a
477
+ building block at the top and bottom, as well as three columns in
478
+ the center. The column are called ''''left'''', ''''center'''' and
479
+ ''''right''''.
480
+
481
+ For our first report, we'll just use the center column for now. Like
482
+ every property, you need to specify a name. This name will be the
483
+ base name of the generated report file. Depending on the output
484
+ format, the proper suffix is appended. For this report, we only chose
485
+ to generate a web page in HTML format. There is no default format
486
+ defined for reports. If the [[formats]] attribute is not specified,
487
+ no output file will be generated for the report specification.
488
+
489
+ This may seem odd at first glance since TaskJuggler syntax always
490
+ tries to use the most compact and readable syntax for the common
491
+ case. As you will see in a minute, reports may be composed of several
492
+ report specifications. One report specification can include the
493
+ output of another report specification as well. In this case, the
494
+ included report does not need to generate it's own file. The output
495
+ will be included within the output of another report specification.
496
+ In case of such composed reports, the output format specification of
497
+ the top-level format will be used for all included reports as well.
498
+
499
+ <[example file="tutorial" tag="overview_report1"]>
500
+
501
+ Web browsers usually look for a file called ''''Overview.html'''' when
502
+ they are pointed to a directory. For the main report, we choose the
503
+ file name ''''Overview'''' and the format ''''html''''.
504
+
505
+ As we've mentioned before, the sections of a ''''textreport'''' are
506
+ defined in Rich Text format. Here we use a so called block generator
507
+ to include the HTML output of another report definition. The
508
+ ''''report'''' block generator allows us to compose reports by
509
+ combining their output into a single report. You must provide the
510
+ ''''id'''' parameter to specify which report definition you would
511
+ like to use. In this case, it is a report definition with the ID
512
+ ''''overview''''. Note that generator parameters need to be enclosed
513
+ in single or double quotes. We are essentially marking a string
514
+ within a string. This can only work out, if we don't use the same
515
+ parameter for both. Let's define this report first.
516
+
517
+ <[example file="tutorial" tag="overview1"]>
518
+
519
+ Instead of another [[textreport]] definition we are now using a
520
+ [[taskreport]]. A task report contains a list of tasks in a table
521
+ structure. By default, it contains all tasks of the project. As we
522
+ will see later on, we can use filter expressions to limit the content
523
+ to a well defined subset of tasks. The table contains a line for each
524
+ task and comes by default with a few columns like the name of the
525
+ task, and the start and end dates. For this project overview report,
526
+ we like to have also the effort for each task, the duration, the
527
+ effort, the cost and revenue numbers included. To top it off, we also
528
+ include a column with a Gantt chart.
529
+
530
+ By including the cost and revenue column, we are able to do a simple
531
+ profit and loss analysis on the project. This P&L is computed from
532
+ the accounts that we have provided above. For this to work, we need
533
+ to tell TaskJuggler which accounts are cost accounts and which are
534
+ revenue accounts. We have already conveniently grouped the accounts
535
+ and the [[balance]] attribute specifies which accounts are used for
536
+ the P&L in this report.
537
+
538
+ <[example file="tutorial" tag="overview2"]>
539
+
540
+ We have chosen to include the start and end date of each task in the
541
+ report. By default, TaskJuggler lists dates as day, month and year.
542
+ We like the format to be similar to the format that the project
543
+ syntax uses, but also like to include the weekday. To change the date
544
+ format, the [[timeformat]] attribute can be used.
545
+
546
+ The project will last a few weeks. The most convenient unit to list
547
+ efforts in is man or resource days. The [[loadunit]] attribute tells
548
+ TaskJuggler to list the load of each task or resource in man days.
549
+ Since this will just be a number without a unit, it is advisable to
550
+ include a small hint for the reader that these values are indeed man
551
+ or resource days. The caption of the table is a convenient place to
552
+ put this information by using the [[caption]] attribute.
553
+
554
+ <[example file="tutorial" tag="overview3"]>
555
+
556
+ The ''''taskreport'''' can contain more than just the table. It is
557
+ not as flexible as the ''''textreport'''', but still has support for
558
+ a header and footer. Let's look at the header first. We not only
559
+ like to put a headline here, but several paragraphs of text. The
560
+ [[header]] attribute is a [[Rich_Text_Attributes Rich Text]]
561
+ attribute just like [[center]]. We could enclose it in single or
562
+ double quotes again. But for Strings that span multiple lines and
563
+ potentially include single or double quotes as well, scissor-marks or
564
+ cut-here-marks are recommended. These marks look like a pair of
565
+ scissors that cut along a dashed line. Use ''''-8<-'''' to begin a
566
+ string and ''''->8-'''' to terminate it. The opening cut mark must be
567
+ immediately followed by a line break. The indentation of the
568
+ following line defines the indentation that will be ignored for all
569
+ lines of the string. The following lines must have at least the same
570
+ indentation. The indentation that exceeds the indentation of the
571
+ first line will be kept in the resulting string. With this feature,
572
+ you can define multi-line Rich Text strings without disturbing the
573
+ indentation structure of your project file.
574
+
575
+ <[example file="tutorial" tag="overview4"]>
576
+
577
+ Section headers are surrounded by ''''<nowiki>==</nowiki>''''. The
578
+ number of equal signs, define the section level. You need to start
579
+ with two equal characters for the first level. Text that is surrounded
580
+ by blank lines will create a paragraph. Bullet lists can be made by
581
+ starting a line with a ''''#'''' character. Remember that the
582
+ indentation of cut-mark strings will be ignored. Your ''''#''''
583
+ character must not be the first character in the line as long it is
584
+ only preceded by the exact same number of blanks as the first line of
585
+ the cut-mark string.
586
+
587
+ If you want to reference other reports from this report, you can
588
+ include the file name of this report by ''''<nowiki>[[</nowiki>''''
589
+ and ''''<nowiki>]]</nowiki>''''. Don't include the extension of the
590
+ file name, it will be automatically appended. The actual
591
+ representation of the reference depends on the chosen output format.
592
+ For HTML output, the reference is a click-able link to the referenced
593
+ report file.
594
+
595
+ For the [[footer]] we can proceed accordingly. We just add a few more
596
+ paragraphs of text the describe certain aspects of the project. By
597
+ putting it all together, we end up with the following report
598
+ definition.
599
+
600
+ <[example file="tutorial" tag="overview"]>
601
+
602
+ The generated report can be found
603
+ [http://www.taskjuggler.org/tj3/examples/Overview.html
604
+ here]. It servers as an entry page for the other reports. While it
605
+ already contains some references, a navigator bar would be handy as
606
+ well. Fortunately, there is a block generator called 'navigator' to
607
+ take care of this. But before we can include the navigator in the
608
+ report, we need to define it first.
609
+
610
+ <[example file="tutorial" tag="navigator"]>
611
+
612
+ [[hidereport]] is a filter attribute. The logical expression
613
+ determines which reports will be included in the navigator bar. A
614
+ logical expression of 0 means hide no reports, so all are included.
615
+
616
+ The best place to put a navigator bar in the report is right at the
617
+ top. We use two horizontal lines to separate the navigator from the
618
+ main headline and the rest of the report.
619
+ ''''<nowiki>----</nowiki>'''' at the begin of the line create such a
620
+ horizontal separation line.
621
+
622
+ <[example file="tutorial" tag="overview_report2"]>
623
+
624
+
579
625
 
data/tasks/test.rake CHANGED
@@ -1,6 +1,9 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'test')
1
2
 
2
3
  require 'rake/testtask'
3
4
 
5
+ REQUIRE_PATHS.unshift File.join(File.dirname(__FILE__), '..')
6
+
4
7
  # TEST TASK
5
8
  test_task_name = HAVE_EXT ? :test_ext : :test
6
9
  Rake::TestTask.new( test_task_name ) do |t|
@@ -1,7 +1,8 @@
1
1
  project test "Test" "1.0" 2007-12-16 +3m
2
2
  include "project-1.tji"
3
3
 
4
- csvtaskreport "." {
4
+ taskreport csv "." {
5
+ formats csv
5
6
  columns wbs, name { celltext "$${name} ($${id})" }
6
7
  }
7
8
 
@@ -1,7 +1,8 @@
1
1
  project test "Test" "1.0" 2007-12-16 +3m
2
2
  include "project-1.tji"
3
3
 
4
- csvresourcereport "." {
4
+ resourcereport csv "." {
5
+ formats csv
5
6
  columns wbs, name, effort, weekly
6
7
  timeformat "%Y-%m-%d-%H:%M:%S"
7
8
  loadunit days
@@ -1,7 +1,8 @@
1
1
  project test "Test" "1.0" 2007-12-16 +3m
2
2
  include "project-1.tji"
3
3
 
4
- csvresourcereport "." {
4
+ resourcereport csv "." {
5
+ formats csv
5
6
  columns wbs, name, effort, weekly
6
7
  timeformat "%Y-%m-%d-%H:%M:%S"
7
8
  loadunit days