taskjuggler 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. data/CHANGELOG +119 -0
  2. data/benchmarks/allocatedSlots.tjp +1602 -0
  3. data/benchmarks/booking.tjp +40 -30
  4. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/css/tjmanual.css +0 -0
  5. data/{test/TestSuite/Scheduler/Correct → benchmarks}/css/tjreport.css +1 -0
  6. data/benchmarks/gantt.tjp +57 -0
  7. data/benchmarks/htmltaskreport.tjp +26 -1
  8. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/details.png +0 -0
  9. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-green.png +0 -0
  10. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-red.png +0 -0
  11. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/flag-yellow.png +0 -0
  12. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resource.png +0 -0
  13. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/resourcegroup.png +0 -0
  14. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/task.png +0 -0
  15. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/taskgroup.png +0 -0
  16. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-down.png +0 -0
  17. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-flat.png +0 -0
  18. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/icons/trend-up.png +0 -0
  19. data/benchmarks/profile.clt +36082 -0
  20. data/benchmarks/profile.html +58182 -0
  21. data/benchmarks/runbench.rb +6 -0
  22. data/{test/TestSuite/ReportGenerator/Errors → benchmarks}/scripts/wz_tooltip.js +0 -0
  23. data/doc/AppConfig.html +85 -37
  24. data/doc/Arguments.html +11 -1
  25. data/doc/CHANGELOG.html +131 -2
  26. data/doc/COPYING.html +11 -1
  27. data/doc/Object.html +12 -3
  28. data/doc/README.html +11 -1
  29. data/doc/RuntimeConfig.html +11 -1
  30. data/doc/String.html +11 -1
  31. data/doc/StringIO.html +11 -1
  32. data/doc/TaskJuggler.html +250 -219
  33. data/doc/TaskJuggler/Account.html +11 -1
  34. data/doc/TaskJuggler/AccountAttribute.html +11 -1
  35. data/doc/TaskJuggler/AccountScenario.html +11 -1
  36. data/doc/TaskJuggler/Allocation.html +11 -1
  37. data/doc/TaskJuggler/AllocationAttribute.html +11 -1
  38. data/doc/TaskJuggler/AttributeBase.html +11 -1
  39. data/doc/TaskJuggler/AttributeDefinition.html +11 -1
  40. data/doc/TaskJuggler/BatchProcessor.html +11 -1
  41. data/doc/TaskJuggler/Booking.html +11 -1
  42. data/doc/TaskJuggler/BookingListAttribute.html +11 -1
  43. data/doc/TaskJuggler/BooleanAttribute.html +11 -1
  44. data/doc/TaskJuggler/CSVFile.html +12 -2
  45. data/doc/TaskJuggler/CellSettingPattern.html +11 -1
  46. data/doc/TaskJuggler/CellSettingPatternList.html +11 -1
  47. data/doc/TaskJuggler/Charge.html +11 -1
  48. data/doc/TaskJuggler/ChargeListAttribute.html +11 -1
  49. data/doc/TaskJuggler/ChargeSet.html +11 -1
  50. data/doc/TaskJuggler/ChargeSetListAttribute.html +11 -1
  51. data/doc/TaskJuggler/CollisionDetector.html +1063 -0
  52. data/doc/TaskJuggler/ColumnListAttribute.html +11 -1
  53. data/doc/TaskJuggler/ColumnTable.html +11 -1
  54. data/doc/TaskJuggler/Daemon.html +11 -1
  55. data/doc/TaskJuggler/{OnShiftCache.html → DataCache.html} +127 -139
  56. data/doc/TaskJuggler/DataCacheEntry.html +711 -0
  57. data/doc/TaskJuggler/DateAttribute.html +11 -1
  58. data/doc/TaskJuggler/DefinitionListAttribute.html +11 -1
  59. data/doc/TaskJuggler/DependencyListAttribute.html +11 -1
  60. data/doc/TaskJuggler/DurationAttribute.html +16 -5
  61. data/doc/TaskJuggler/FileList.html +11 -1
  62. data/doc/TaskJuggler/FileRecord.html +11 -1
  63. data/doc/TaskJuggler/FixnumAttribute.html +19 -9
  64. data/doc/TaskJuggler/FlagListAttribute.html +29 -19
  65. data/doc/TaskJuggler/FloatAttribute.html +23 -13
  66. data/doc/TaskJuggler/FormatListAttribute.html +19 -9
  67. data/doc/TaskJuggler/GanttChart.html +94 -133
  68. data/doc/TaskJuggler/GanttContainer.html +11 -1
  69. data/doc/TaskJuggler/GanttHeader.html +11 -1
  70. data/doc/TaskJuggler/GanttHeaderScaleItem.html +11 -1
  71. data/doc/TaskJuggler/GanttLine.html +11 -1
  72. data/doc/TaskJuggler/GanttLoadStack.html +11 -1
  73. data/doc/TaskJuggler/GanttMilestone.html +11 -1
  74. data/doc/TaskJuggler/GanttRouter.html +247 -596
  75. data/doc/TaskJuggler/GanttTaskBar.html +11 -1
  76. data/doc/TaskJuggler/HTMLDocument.html +11 -1
  77. data/doc/TaskJuggler/HTMLGraphics.html +11 -1
  78. data/doc/TaskJuggler/Interval.html +11 -1
  79. data/doc/TaskJuggler/IntervalListAttribute.html +33 -23
  80. data/doc/TaskJuggler/JobInfo.html +11 -1
  81. data/doc/TaskJuggler/Journal.html +11 -1
  82. data/doc/TaskJuggler/JournalEntry.html +11 -1
  83. data/doc/TaskJuggler/JournalEntryList.html +11 -1
  84. data/doc/TaskJuggler/KeywordArray.html +11 -1
  85. data/doc/TaskJuggler/KeywordDocumentation.html +16 -6
  86. data/doc/TaskJuggler/Limits.html +11 -1
  87. data/doc/TaskJuggler/Limits/Limit.html +11 -1
  88. data/doc/TaskJuggler/LimitsAttribute.html +24 -14
  89. data/doc/TaskJuggler/ListAttributeBase.html +11 -1
  90. data/doc/TaskJuggler/Log.html +11 -1
  91. data/doc/TaskJuggler/LogFile.html +11 -1
  92. data/doc/TaskJuggler/LogicalAttribute.html +11 -1
  93. data/doc/TaskJuggler/LogicalExpression.html +11 -1
  94. data/doc/TaskJuggler/LogicalExpressionAttribute.html +19 -9
  95. data/doc/TaskJuggler/LogicalFlag.html +11 -1
  96. data/doc/TaskJuggler/LogicalFunction.html +11 -1
  97. data/doc/TaskJuggler/LogicalOperation.html +11 -1
  98. data/doc/TaskJuggler/Macro.html +11 -1
  99. data/doc/TaskJuggler/MacroTable.html +11 -1
  100. data/doc/TaskJuggler/ManagerResponsibilities.html +11 -1
  101. data/doc/TaskJuggler/ManagerStatusRecord.html +11 -1
  102. data/doc/TaskJuggler/Message.html +11 -1
  103. data/doc/TaskJuggler/MessageHandler.html +11 -1
  104. data/doc/TaskJuggler/Navigator.html +12 -2
  105. data/doc/TaskJuggler/NavigatorElement.html +11 -1
  106. data/doc/TaskJuggler/NikuProject.html +11 -1
  107. data/doc/TaskJuggler/NikuReport.html +11 -1
  108. data/doc/TaskJuggler/NikuResource.html +11 -1
  109. data/doc/TaskJuggler/NodeListAttribute.html +17 -7
  110. data/doc/TaskJuggler/PlaceHolderCell.html +722 -0
  111. data/doc/TaskJuggler/ProcessIntercom.html +11 -1
  112. data/doc/TaskJuggler/ProcessIntercomIface.html +11 -1
  113. data/doc/TaskJuggler/Project.html +587 -500
  114. data/doc/TaskJuggler/ProjectBroker.html +11 -1
  115. data/doc/TaskJuggler/ProjectBrokerIface.html +11 -1
  116. data/doc/TaskJuggler/ProjectFileParser.html +205 -192
  117. data/doc/TaskJuggler/ProjectFileScanner.html +230 -207
  118. data/doc/TaskJuggler/ProjectRecord.html +11 -1
  119. data/doc/TaskJuggler/ProjectServer.html +11 -1
  120. data/doc/TaskJuggler/ProjectServerIface.html +11 -1
  121. data/doc/TaskJuggler/PropertyAttribute.html +19 -9
  122. data/doc/TaskJuggler/PropertyList.html +95 -83
  123. data/doc/TaskJuggler/PropertySet.html +11 -1
  124. data/doc/TaskJuggler/PropertyTreeNode.html +11 -1
  125. data/doc/TaskJuggler/Query.html +234 -232
  126. data/doc/TaskJuggler/RTFHandlers.html +11 -1
  127. data/doc/TaskJuggler/RTFNavigator.html +11 -1
  128. data/doc/TaskJuggler/RTFQuery.html +11 -1
  129. data/doc/TaskJuggler/RTFReport.html +11 -1
  130. data/doc/TaskJuggler/RTFReportLink.html +11 -1
  131. data/doc/TaskJuggler/RTFWithQuerySupport.html +11 -1
  132. data/doc/TaskJuggler/RealFormat.html +12 -2
  133. data/doc/TaskJuggler/RealFormatAttribute.html +15 -5
  134. data/doc/TaskJuggler/ReferenceAttribute.html +38 -28
  135. data/doc/TaskJuggler/Report.html +96 -113
  136. data/doc/TaskJuggler/ReportBase.html +161 -152
  137. data/doc/TaskJuggler/ReportContext.html +11 -1
  138. data/doc/TaskJuggler/ReportServer.html +59 -48
  139. data/doc/TaskJuggler/ReportServerIface.html +51 -41
  140. data/doc/TaskJuggler/ReportServerRecord.html +11 -1
  141. data/doc/TaskJuggler/ReportServlet.html +11 -1
  142. data/doc/TaskJuggler/ReportTable.html +46 -25
  143. data/doc/TaskJuggler/ReportTableCell.html +296 -275
  144. data/doc/TaskJuggler/ReportTableColumn.html +14 -4
  145. data/doc/TaskJuggler/ReportTableLegend.html +11 -1
  146. data/doc/TaskJuggler/ReportTableLine.html +19 -7
  147. data/doc/TaskJuggler/Resource.html +12 -2
  148. data/doc/TaskJuggler/ResourceListAttribute.html +40 -30
  149. data/doc/TaskJuggler/ResourceListRE.html +11 -1
  150. data/doc/TaskJuggler/ResourceScenario.html +708 -565
  151. data/doc/TaskJuggler/RichText.html +54 -36
  152. data/doc/TaskJuggler/RichTextAttribute.html +31 -21
  153. data/doc/TaskJuggler/RichTextDocument.html +11 -1
  154. data/doc/TaskJuggler/RichTextElement.html +11 -1
  155. data/doc/TaskJuggler/RichTextFunctionExample.html +11 -1
  156. data/doc/TaskJuggler/RichTextFunctionHandler.html +11 -1
  157. data/doc/TaskJuggler/RichTextImage.html +11 -1
  158. data/doc/TaskJuggler/RichTextIntermediate.html +81 -71
  159. data/doc/TaskJuggler/RichTextParser.html +88 -33
  160. data/doc/TaskJuggler/RichTextScanner.html +45 -35
  161. data/doc/TaskJuggler/RichTextSnip.html +11 -1
  162. data/doc/TaskJuggler/RichTextSyntaxRules.html +436 -389
  163. data/doc/TaskJuggler/Scenario.html +11 -1
  164. data/doc/TaskJuggler/ScenarioData.html +11 -1
  165. data/doc/TaskJuggler/ScenarioListAttribute.html +23 -13
  166. data/doc/TaskJuggler/Scoreboard.html +92 -73
  167. data/doc/TaskJuggler/SheetHandlerBase.html +11 -1
  168. data/doc/TaskJuggler/SheetReceiver.html +11 -1
  169. data/doc/TaskJuggler/SheetSender.html +11 -1
  170. data/doc/TaskJuggler/Shift.html +11 -1
  171. data/doc/TaskJuggler/ShiftAssignment.html +11 -1
  172. data/doc/TaskJuggler/ShiftAssignments.html +11 -1
  173. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +24 -14
  174. data/doc/TaskJuggler/ShiftScenario.html +11 -1
  175. data/doc/TaskJuggler/SimpleQueryExpander.html +11 -1
  176. data/doc/TaskJuggler/SortListAttribute.html +21 -11
  177. data/doc/TaskJuggler/SourceFileInfo.html +11 -1
  178. data/doc/TaskJuggler/StatusSheetReceiver.html +11 -1
  179. data/doc/TaskJuggler/StatusSheetReport.html +11 -1
  180. data/doc/TaskJuggler/StatusSheetSender.html +112 -11
  181. data/doc/TaskJuggler/StringAttribute.html +23 -13
  182. data/doc/TaskJuggler/SymbolAttribute.html +19 -9
  183. data/doc/TaskJuggler/SyntaxReference.html +80 -71
  184. data/doc/TaskJuggler/TOCEntry.html +11 -1
  185. data/doc/TaskJuggler/TSResourceRecord.html +11 -1
  186. data/doc/TaskJuggler/TSTaskRecord.html +11 -1
  187. data/doc/TaskJuggler/TableColumnDefinition.html +11 -1
  188. data/doc/TaskJuggler/TableOfContents.html +11 -1
  189. data/doc/TaskJuggler/TableReport.html +422 -411
  190. data/doc/TaskJuggler/Task.html +11 -1
  191. data/doc/TaskJuggler/TaskDependency.html +11 -1
  192. data/doc/TaskJuggler/TaskListAttribute.html +33 -23
  193. data/doc/TaskJuggler/TaskListRE.html +11 -1
  194. data/doc/TaskJuggler/TaskScenario.html +2007 -1919
  195. data/doc/TaskJuggler/TextFormatter.html +11 -1
  196. data/doc/TaskJuggler/TextParser.html +421 -612
  197. data/doc/TaskJuggler/TextParser/Pattern.html +410 -211
  198. data/doc/TaskJuggler/TextParser/Rule.html +224 -152
  199. data/doc/TaskJuggler/TextParser/StackElement.html +190 -28
  200. data/doc/TaskJuggler/TextParser/State.html +989 -0
  201. data/doc/TaskJuggler/TextParser/StateTransition.html +782 -0
  202. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +25 -14
  203. data/doc/TaskJuggler/TextParser/TokenDoc.html +11 -1
  204. data/doc/TaskJuggler/TextReport.html +11 -1
  205. data/doc/TaskJuggler/TextScanner.html +285 -273
  206. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +17 -7
  207. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +24 -14
  208. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +11 -1
  209. data/doc/TaskJuggler/TextScanner/StreamHandle.html +64 -52
  210. data/doc/TaskJuggler/TimeSheet.html +11 -1
  211. data/doc/TaskJuggler/TimeSheetReceiver.html +11 -1
  212. data/doc/TaskJuggler/TimeSheetRecord.html +11 -1
  213. data/doc/TaskJuggler/TimeSheetReport.html +11 -1
  214. data/doc/TaskJuggler/TimeSheetSender.html +11 -1
  215. data/doc/TaskJuggler/TimeSheetSummary.html +11 -1
  216. data/doc/TaskJuggler/TimeSheets.html +11 -1
  217. data/doc/TaskJuggler/Tj3AppBase.html +11 -1
  218. data/doc/TaskJuggler/Tj3Client.html +11 -1
  219. data/doc/TaskJuggler/Tj3Daemon.html +11 -1
  220. data/doc/TaskJuggler/Tj3SheetAppBase.html +11 -1
  221. data/doc/TaskJuggler/Tj3SsReceiver.html +11 -1
  222. data/doc/TaskJuggler/Tj3SsSender.html +11 -1
  223. data/doc/TaskJuggler/Tj3TsReceiver.html +11 -1
  224. data/doc/TaskJuggler/Tj3TsSender.html +11 -1
  225. data/doc/TaskJuggler/Tj3TsSummary.html +11 -1
  226. data/doc/TaskJuggler/TjException.html +11 -1
  227. data/doc/TaskJuggler/TjTime.html +474 -324
  228. data/doc/TaskJuggler/TjpExample.html +11 -1
  229. data/doc/TaskJuggler/TjpExportRE.html +11 -1
  230. data/doc/TaskJuggler/TjpSyntaxRules.html +3731 -3662
  231. data/doc/TaskJuggler/URLParameter.html +11 -1
  232. data/doc/TaskJuggler/UserManual.html +11 -1
  233. data/doc/TaskJuggler/VimSyntax.html +11 -1
  234. data/doc/TaskJuggler/WebServer.html +11 -1
  235. data/doc/TaskJuggler/WorkingHours.html +295 -221
  236. data/doc/TaskJuggler/WorkingHoursAttribute.html +11 -1
  237. data/doc/TaskJuggler/XMLBlob.html +11 -1
  238. data/doc/TaskJuggler/XMLComment.html +11 -1
  239. data/doc/TaskJuggler/XMLDocument.html +11 -1
  240. data/doc/TaskJuggler/XMLElement.html +11 -1
  241. data/doc/TaskJuggler/XMLNamedText.html +11 -1
  242. data/doc/TaskJuggler/XMLText.html +11 -1
  243. data/doc/index.html +694 -624
  244. data/doc/lib/AppConfig_rb.html +1 -1
  245. data/doc/lib/Attributes_rb.html +1 -1
  246. data/doc/lib/Booking_rb.html +1 -1
  247. data/doc/lib/DataCache_rb.html +69 -0
  248. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  249. data/doc/lib/ProjectFileParser_rb.html +1 -1
  250. data/doc/lib/ProjectFileScanner_rb.html +1 -1
  251. data/doc/lib/Project_rb.html +1 -1
  252. data/doc/lib/PropertyList_rb.html +1 -1
  253. data/doc/lib/Query_rb.html +1 -1
  254. data/doc/lib/RealFormat_rb.html +1 -1
  255. data/doc/lib/ResourceScenario_rb.html +1 -1
  256. data/doc/lib/Resource_rb.html +1 -1
  257. data/doc/lib/RichTextParser_rb.html +1 -1
  258. data/doc/lib/RichTextScanner_rb.html +1 -1
  259. data/doc/lib/RichTextSyntaxRules_rb.html +1 -1
  260. data/doc/lib/RichText_rb.html +1 -1
  261. data/doc/lib/Scoreboard_rb.html +1 -1
  262. data/doc/lib/StatusSheetSender_rb.html +1 -1
  263. data/doc/lib/SyntaxReference_rb.html +1 -1
  264. data/doc/lib/TaskJuggler_rb.html +1 -1
  265. data/doc/lib/TaskScenario_rb.html +3 -1
  266. data/doc/lib/TextParser/Pattern_rb.html +3 -1
  267. data/doc/lib/TextParser/Rule_rb.html +3 -1
  268. data/doc/lib/TextParser/StackElement_rb.html +3 -1
  269. data/doc/lib/TextParser/State_rb.html +65 -0
  270. data/doc/lib/TextParser_rb.html +1 -1
  271. data/doc/lib/TextScanner_rb.html +1 -1
  272. data/doc/lib/Tj3Config_rb.html +1 -1
  273. data/doc/lib/TjTime_rb.html +1 -1
  274. data/doc/lib/TjpSyntaxRules_rb.html +1 -1
  275. data/doc/lib/WorkingHours_rb.html +3 -1
  276. data/doc/lib/daemon/ReportServer_rb.html +1 -1
  277. data/doc/lib/reports/CSVFile_rb.html +1 -1
  278. data/doc/lib/reports/CollisionDetector_rb.html +67 -0
  279. data/doc/lib/reports/GanttChart_rb.html +1 -1
  280. data/doc/lib/reports/GanttRouter_rb.html +3 -1
  281. data/doc/lib/reports/Navigator_rb.html +1 -1
  282. data/doc/lib/reports/ReportBase_rb.html +1 -1
  283. data/doc/lib/reports/ReportTableCell_rb.html +1 -1
  284. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  285. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  286. data/doc/lib/reports/ReportTable_rb.html +1 -1
  287. data/doc/lib/reports/Report_rb.html +1 -1
  288. data/doc/lib/reports/TableReport_rb.html +1 -1
  289. data/doc/lib/taskjuggler3_rb.html +1 -1
  290. data/examples/tutorial.tjp +1 -2
  291. data/lib/AppConfig.rb +10 -4
  292. data/lib/Attributes.rb +4 -4
  293. data/lib/DataCache.rb +124 -0
  294. data/lib/KeywordDocumentation.rb +5 -5
  295. data/lib/Project.rb +54 -10
  296. data/lib/ProjectFileParser.rb +10 -9
  297. data/lib/ProjectFileScanner.rb +38 -25
  298. data/lib/PropertyList.rb +6 -4
  299. data/lib/Query.rb +0 -8
  300. data/lib/RealFormat.rb +1 -1
  301. data/lib/Resource.rb +1 -1
  302. data/lib/ResourceScenario.rb +96 -31
  303. data/lib/RichText.rb +17 -5
  304. data/lib/RichTextParser.rb +22 -9
  305. data/lib/RichTextScanner.rb +34 -34
  306. data/lib/RichTextSyntaxRules.rb +41 -36
  307. data/lib/Scoreboard.rb +16 -7
  308. data/lib/StatusSheetSender.rb +63 -0
  309. data/lib/SyntaxReference.rb +9 -10
  310. data/lib/TaskJuggler.rb +28 -4
  311. data/lib/TaskScenario.rb +66 -19
  312. data/lib/TextParser.rb +219 -384
  313. data/lib/TextParser/Pattern.rb +168 -49
  314. data/lib/TextParser/Rule.rb +33 -17
  315. data/lib/TextParser/StackElement.rb +42 -2
  316. data/lib/TextParser/State.rb +175 -0
  317. data/lib/TextScanner.rb +19 -15
  318. data/lib/Tj3Config.rb +1 -1
  319. data/lib/TjTime.rb +111 -3
  320. data/lib/TjpSyntaxRules.rb +122 -66
  321. data/lib/WorkingHours.rb +91 -186
  322. data/lib/daemon/ReportServer.rb +3 -2
  323. data/lib/reports/CSVFile.rb +1 -1
  324. data/lib/reports/CollisionDetector.rb +177 -0
  325. data/lib/reports/GanttChart.rb +25 -41
  326. data/lib/reports/GanttRouter.rb +104 -233
  327. data/lib/reports/Navigator.rb +1 -1
  328. data/lib/reports/Report.rb +9 -33
  329. data/lib/reports/ReportBase.rb +0 -1
  330. data/lib/reports/ReportTable.rb +19 -8
  331. data/lib/reports/ReportTableCell.rb +61 -25
  332. data/lib/reports/ReportTableColumn.rb +2 -2
  333. data/lib/reports/ReportTableLine.rb +4 -2
  334. data/lib/reports/TableReport.rb +1 -0
  335. data/lib/taskjuggler3.rb +0 -1
  336. data/manual/Installation +7 -3
  337. data/manual/Intro +12 -10
  338. data/manual/The_TaskJuggler_Syntax +4 -4
  339. data/test/TestSuite/CSV-Reports/celltext-Reference.csv +14 -14
  340. data/test/TestSuite/CSV-Reports/genrefs +1 -1
  341. data/test/TestSuite/CSV-Reports/resourcereport-Reference.csv +4 -4
  342. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks-Reference.csv +22 -22
  343. data/test/TestSuite/CSV-Reports/sortByTree-Reference.csv +14 -14
  344. data/test/TestSuite/CSV-Reports/sortBy_duration.down-Reference.csv +14 -14
  345. data/test/TestSuite/CSV-Reports/sortBy_effort.up-Reference.csv +14 -14
  346. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down-Reference.csv +14 -14
  347. data/test/TestSuite/CSV-Reports/taskreport-Reference.csv +14 -14
  348. data/test/TestSuite/CSV-Reports/taskreport_with_resources-Reference.csv +32 -24
  349. data/test/TestSuite/CSV-Reports/weekly-Reference.csv +13 -0
  350. data/test/TestSuite/CSV-Reports/weekly.tjp +9 -0
  351. data/test/TestSuite/HTML-Reports/css/tjreport.css +7 -2
  352. data/test/TestSuite/HTML-Reports/depArrows.html +839 -830
  353. data/test/TestSuite/HTML-Reports/depArrows.tjp +12 -12
  354. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  355. data/test/TestSuite/ReportGenerator/Errors/no_report_defined.tjp +7 -0
  356. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +1 -1
  357. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/missing-reports +2 -0
  358. data/test/TestSuite/StatusSheets/run +2 -0
  359. data/test/TestSuite/Syntax/Correct/Booking.tjp +13 -5
  360. data/test/TestSuite/Syntax/Correct/ResourceRoot.tjp +21 -0
  361. data/test/TestSuite/Syntax/Correct/RollupResource.tjp +21 -0
  362. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +1 -1
  363. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  364. data/test/TestSuite/Syntax/Errors/include_before_project.tjp +2 -0
  365. data/test/TestSuite/Syntax/Errors/no_reduce.tjp +6 -0
  366. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  367. data/test/TestSuite/TimeSheets/run +1 -1
  368. data/test/test_CSV-Reports.rb +2 -4
  369. data/test/test_CollisionDetector.rb +85 -0
  370. data/test/test_Project.rb +2 -2
  371. data/test/test_ProjectFileScanner.rb +73 -31
  372. data/test/test_Query.rb +2 -2
  373. data/test/test_ReportGenerator.rb +1 -1
  374. data/test/test_RichText.rb +4 -4
  375. data/test/test_WorkingHours.rb +150 -11
  376. metadata +75 -67
  377. data/test/TestSuite/ReportGenerator/Errors/css/tjreport.css +0 -407
  378. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.html +0 -26
  379. data/test/TestSuite/Scheduler/Correct/Allocate.html +0 -3210
  380. data/test/TestSuite/Scheduler/Correct/Container.html +0 -349
  381. data/test/TestSuite/Scheduler/Correct/Limits.html +0 -4964
  382. data/test/TestSuite/Scheduler/Correct/Shift.html +0 -1719
  383. data/test/TestSuite/Scheduler/Correct/Shift2.html +0 -476
  384. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -66
  385. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  386. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  387. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  388. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  389. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  390. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  391. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  392. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  393. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  394. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  395. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  396. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +0 -1301
  397. data/test/TestSuite/Scheduler/Errors/css/tjmanual.css +0 -66
  398. data/test/TestSuite/Scheduler/Errors/css/tjreport.css +0 -407
  399. data/test/TestSuite/Scheduler/Errors/icons/details.png +0 -0
  400. data/test/TestSuite/Scheduler/Errors/icons/flag-green.png +0 -0
  401. data/test/TestSuite/Scheduler/Errors/icons/flag-red.png +0 -0
  402. data/test/TestSuite/Scheduler/Errors/icons/flag-yellow.png +0 -0
  403. data/test/TestSuite/Scheduler/Errors/icons/resource.png +0 -0
  404. data/test/TestSuite/Scheduler/Errors/icons/resourcegroup.png +0 -0
  405. data/test/TestSuite/Scheduler/Errors/icons/task.png +0 -0
  406. data/test/TestSuite/Scheduler/Errors/icons/taskgroup.png +0 -0
  407. data/test/TestSuite/Scheduler/Errors/icons/trend-down.png +0 -0
  408. data/test/TestSuite/Scheduler/Errors/icons/trend-flat.png +0 -0
  409. data/test/TestSuite/Scheduler/Errors/icons/trend-up.png +0 -0
  410. data/test/TestSuite/Scheduler/Errors/scripts/wz_tooltip.js +0 -1301
  411. data/test/TestSuite/StatusSheets/resrep.tji +0 -7
  412. data/test/TestSuite/StatusSheets/tj3d.log +0 -312
  413. data/test/TestSuite/Syntax/Correct/Managers.html +0 -263
  414. data/test/TestSuite/TimeSheets/acceptable_intervals +0 -1
  415. data/test/TestSuite/TimeSheets/statussheets.log +0 -1
@@ -198,7 +198,7 @@ class TaskJuggler
198
198
  # _url2_.
199
199
  def normalizeURL(url1, url2)
200
200
  cut = 0
201
- 0.upto(url1.length - 1) do |i|
201
+ url1.length.times do |i|
202
202
  return url1[cut, url1.length - cut] if url1[i] != url2[i]
203
203
  cut = i + 1 if url1[i] == ?/
204
204
  end
@@ -141,7 +141,7 @@ class TaskJuggler
141
141
  cssFileName = (auxSrcDir ? auxSrcDir + '/tjreport.css' : '')
142
142
  # Raise an error if we haven't found the data directory
143
143
  if auxSrcDir.nil? || !File.exists?(cssFileName)
144
- dataDirError(cssFileName)
144
+ dataDirError(cssFileName, AppConfig.dataSearchDirs('data/css'))
145
145
  end
146
146
  cssFile = IO.read(cssFileName)
147
147
  if cssFile.empty?
@@ -214,35 +214,6 @@ EOT
214
214
  # CSV format can only handle the first element.
215
215
  return nil unless (csv = @content.to_csv)
216
216
 
217
- # Expand nested tables into the outer table.
218
- columnIdx = 0
219
- while columnIdx < csv[0].length do
220
- if csv[0][columnIdx].is_a?(Array)
221
- # We've found a nested table.
222
- nestedTable = csv[0][columnIdx]
223
- # The nested table must have exactly as many lines as the outer table.
224
- if csv.length != nestedTable.length
225
- raise "Table size mismatch"
226
- end
227
- # Insert the nested table into the lines of the outer table.
228
- csv.each do |line|
229
- lineIdx = csv.index(line)
230
- if lineIdx == 0
231
- # The header cell can be reused.
232
- line[columnIdx] = nestedTable[lineIdx]
233
- else
234
- # For normal lines we have no cells for the table. Just inject
235
- # them.
236
- line.insert(columnIdx, nestedTable[lineIdx])
237
- end
238
- # Make sure there are no more Arrays nested into the line.
239
- line.flatten!
240
- end
241
- else
242
- columnIdx += 1
243
- end
244
- end
245
-
246
217
  # Use the CSVFile class to write the Array of Arrays to a colon
247
218
  # separated file. Write to $stdout if the filename was set to '.'.
248
219
  begin
@@ -300,7 +271,9 @@ EOT
300
271
  # Find the data directory that came with the TaskJuggler installation.
301
272
  auxSrcDir = AppConfig.dataDirs("data/#{dirName}")[0].untaint
302
273
  # Raise an error if we haven't found the data directory
303
- dataDirError(dirName) if auxSrcDir.nil? || !File.exists?(auxSrcDir)
274
+ if auxSrcDir.nil? || !File.exists?(auxSrcDir)
275
+ dataDirError(dirName, AppConfig.dataSearchDirs("data/#{dirName}"))
276
+ end
304
277
  # Don't copy directory if all files are up-to-date.
305
278
  return if directoryUpToDate?(auxSrcDir, auxDstDir + dirName)
306
279
 
@@ -322,13 +295,16 @@ EOT
322
295
  true
323
296
  end
324
297
 
325
- def dataDirError(dirName)
298
+ def dataDirError(dirName, dirs)
326
299
  error('data_dir_error', <<"EOT"
327
300
  Cannot find the #{dirName} directory. This is usually the result of an
328
301
  improper TaskJuggler installation. If you know the directory, you can use the
329
302
  TASKJUGGLER_DATA_PATH environment variable to specify the location. The
330
303
  variable should be set to the path without the /data at the end. Multiple
331
- directories must be separated by colons.
304
+ directories must be separated by colons. The following directories have been
305
+ tried:
306
+
307
+ #{dirs.join("\n")}
332
308
  EOT
333
309
  )
334
310
  end
@@ -96,7 +96,6 @@ class TaskJuggler
96
96
  delete = true
97
97
  a('scenarios').each do |scenarioIdx|
98
98
  if task.hasResourceAllocated?(scenarioIdx, iv, resource)
99
- #if resource.allocated?(scenarioIdx, iv, task)
100
99
  delete = false
101
100
  break;
102
101
  end
@@ -131,16 +131,27 @@ class TaskJuggler
131
131
 
132
132
  # Convert the intermediate representation into an Array of Arrays. _csv_ is
133
133
  # the destination Array of Arrays. It may contain columns already.
134
- def to_csv(csv = nil)
135
- csv = [ [ ] ] unless csv
136
- @columns.each { |col| col.to_csv(csv) }
134
+ def to_csv(csv = [[ ]], startColumn = 0)
135
+ # Generate the header line.
136
+ columnIdx = startColumn
137
+ @columns.each do |col|
138
+ columnIdx += col.to_csv(csv, columnIdx)
139
+ end
137
140
 
138
- @lines.each do |line|
139
- # Insert a new Array for each line.
140
- csv << []
141
- line.to_csv(csv)
141
+ if @embedded
142
+ columnIdx - startColumn
143
+ else
144
+ # Content of embedded tables is inserted when generating the
145
+ # respective Line.
146
+ lineIdx = 1
147
+ @lines.each do |line|
148
+ # Insert a new Array for each line.
149
+ csv[lineIdx] = []
150
+ line.to_csv(csv, startColumn, lineIdx)
151
+ lineIdx += 1
152
+ end
153
+ csv
142
154
  end
143
- csv
144
155
  end
145
156
 
146
157
  private
@@ -35,6 +35,7 @@ class TaskJuggler
35
35
  @line = line
36
36
  @line.addCell(self) if line
37
37
 
38
+ # Specifies whether this is a header cell or not.
38
39
  @headerCell = headerCell
39
40
  # A copy of a Query object that is needed to access project data via the
40
41
  # query function.
@@ -49,6 +50,7 @@ class TaskJuggler
49
50
  @showTooltipHint = true
50
51
  # The original data of the cell content (optional, nil if not provided)
51
52
  @data = nil
53
+ # Determines the background color of the cell.
52
54
  @category = nil
53
55
  @hidden = false
54
56
  # How to horizontally align the cell
@@ -139,35 +141,43 @@ class TaskJuggler
139
141
  end
140
142
 
141
143
  # Add the text content of the cell to an Array of Arrays form of the table.
142
- def to_csv(csv)
144
+ def to_csv(csv, columnIdx, lineIdx)
143
145
  # We only support left indentation in CSV files as the spaces for right
144
146
  # indentation will be disregarded by most applications.
145
147
  indent = @indent && @alignment == :left ? ' ' * @indent : ''
146
- cell =
147
- if @special
148
- @special.to_csv
149
- indent = nil
150
- elsif @data && @data.is_a?(String)
151
- @data
152
- elsif @text
153
- if @text.respond_to?('functionHandler')
154
- @text.setQuery(@query)
155
- end
156
- str = @text.to_s
157
- # Remove any trailing line breaks. These don't really make much
158
- # sense in CSV files.
159
- while str[-1] == ?\n
160
- str.chomp!
148
+ columns = 1
149
+ if @special
150
+ # This is for nested tables. They will be inserted as whole columns
151
+ # in the existing table.
152
+ csv[lineIdx][columnIdx] = nil
153
+ columns = @special.to_csv(csv, columnIdx)
154
+ else
155
+ cell =
156
+ if @data && @data.is_a?(String)
157
+ @data
158
+ elsif @text
159
+ if @text.respond_to?('functionHandler')
160
+ @text.setQuery(@query)
161
+ end
162
+ str = @text.to_s
163
+ # Remove any trailing line breaks. These don't really make much
164
+ # sense in CSV files.
165
+ while str[-1] == ?\n
166
+ str.chomp!
167
+ end
168
+ str
161
169
  end
162
- str
163
- end
164
170
 
165
- # Try to convert numbers and other types to their native Ruby type if
166
- # they are supported by CSVFile.
167
- native = CSVFile.strToNative(cell)
171
+ # Try to convert numbers and other types to their native Ruby type if
172
+ # they are supported by CSVFile.
173
+ native = CSVFile.strToNative(cell)
168
174
 
169
- # Only for String objects, we add the indentation.
170
- csv[-1] << (native.is_a?(String) ? indent + native : native)
175
+ # Only for String objects, we add the indentation.
176
+ csv[lineIdx][columnIdx] = (native.is_a?(String) ? indent + native :
177
+ native)
178
+ end
179
+
180
+ return columns
171
181
  end
172
182
 
173
183
  private
@@ -260,10 +270,11 @@ class TaskJuggler
260
270
 
261
271
  shortText, singleLine = shortVersion(textAsString)
262
272
 
263
- if (@line && @line.table.equiLines && (!singleLine || @width )) ||
264
- !@category
273
+ if (@line && @line.table.equiLines && (!singleLine || @width )) &&
274
+ !@headerCell
265
275
  # The cell is size-limited. We only put a shortened plain-text version
266
276
  # in the cell and provide the full content via a tooltip.
277
+ # Header cells are never shortened.
267
278
  tooltip = @text if shortText != textAsString
268
279
  td << XMLText.new(shortText)
269
280
  else
@@ -322,5 +333,30 @@ class TaskJuggler
322
333
 
323
334
  end
324
335
 
336
+ # This class is used to model cells that are just placeholders for a line of
337
+ # an embedded ReportTable.
338
+ class PlaceHolderCell
339
+
340
+ # Create a new placeholder cell. _line_ is the line that this cell belongs
341
+ # to. _embeddedLine_ is the ReportTableLine that is embedded in this cell.
342
+ def initialize(line, embeddedLine)
343
+ @line = line
344
+ @line.addCell(self) if line
345
+ @embeddedLine = embeddedLine
346
+ end
347
+
348
+ # Add the current cell to the _csv_ CSV Arrays. _columnIdx_ is the start
349
+ # column in the _csv_. _lineIdx_ is the index of the current line. The
350
+ # return value is the number of added cells.
351
+ def to_csv(csv, columnIdx, lineIdx)
352
+ @embeddedLine.to_csv(csv, columnIdx, lineIdx)
353
+ end
354
+
355
+ def to_html
356
+ nil
357
+ end
358
+
359
+ end
360
+
325
361
  end
326
362
 
@@ -71,9 +71,9 @@ class TaskJuggler
71
71
  # Put the abstract representation into an Array. _csv_ is an Array of Arrays
72
72
  # of Strings. We have an Array with Strings for every cell. The outer Array
73
73
  # holds the Arrays representing the lines.
74
- def to_csv(csv)
74
+ def to_csv(csv, startColumn)
75
75
  # For CSV reports we can only include the first header line.
76
- @cell1.to_csv(csv)
76
+ @cell1.to_csv(csv, startColumn, 0)
77
77
  end
78
78
 
79
79
  end
@@ -83,10 +83,12 @@ class TaskJuggler
83
83
 
84
84
  # Convert the intermediate format into an Array of values. One entry for
85
85
  # every column cell of this line.
86
- def to_csv(csv)
86
+ def to_csv(csv, startColumn, lineIdx)
87
+ columnIdx = startColumn
87
88
  @cells.each do |cell|
88
- cell.to_csv(csv)
89
+ columnIdx += cell.to_csv(csv, columnIdx, lineIdx)
89
90
  end
91
+ columnIdx - startColumn
90
92
  end
91
93
 
92
94
  end
@@ -581,6 +581,7 @@ class TaskJuggler
581
581
  tcLine = ReportTableLine.new(columnDef.column.cell1.special,
582
582
  line.property, line.scopeLine)
583
583
 
584
+ PlaceHolderCell.new(line, tcLine)
584
585
  # Depending on the property type we use different generator functions.
585
586
  if property.is_a?(Task)
586
587
  genCalChartTaskCell(query, tcLine, columnDef, start, sameTimeNextFunc)
data/lib/taskjuggler3.rb CHANGED
@@ -151,7 +151,6 @@ def main
151
151
  exit 0 if @noReports
152
152
 
153
153
  exit 1 if !tj.generateReports(@outputDir) || tj.errors > 0
154
-
155
154
  end
156
155
 
157
156
  main()
data/manual/Installation CHANGED
@@ -21,8 +21,12 @@ have the minimum required version installed.
21
21
  runtime environment to run it. This can be downloaded from
22
22
  [http://www.ruby-lang.org/en/downloads/ here]. Most Linux
23
23
  distributions usually have Ruby already included. So does MacOS X
24
- Leopard. For Windows, there is a one-click installer available.
25
- TaskJuggler currently needs at least Ruby version 1.8.6.
24
+ Leopard. For Windows, there is a one-click installer available. The
25
+ recommended Ruby version to make full use of TaskJuggler is 1.9.2.
26
+ Ruby 1.9.1 contains some bugs that prevent the multi-core support to
27
+ work. For users that are not interested in multi-core support, the web
28
+ server, the time sheet infrastructure and daemon Ruby 1.8.7 is still
29
+ ok to use.
26
30
 
27
31
  * '''RubyGems:''' If it did not come with your OS or the Ruby
28
32
  installation, see [http://docs.rubygems.org here] how to get and
@@ -45,7 +49,7 @@ or command window:
45
49
  gem install taskjuggler
46
50
 
47
51
  This will download and install the latest version from the
48
- [http://gemcutter.org/ Gemcutter] site.
52
+ [http://rubygems.org/gems/taskjuggler RubyGems.org] site.
49
53
 
50
54
  ==== The manual way ====
51
55
 
data/manual/Intro CHANGED
@@ -34,11 +34,11 @@ will become a companion you don't want to miss anymore.
34
34
  === About TaskJuggler III ===
35
35
 
36
36
  TaskJuggler III is the completely re-implemented version of the TaskJuggler
37
- 2.x series. It is currently still in the development stage. It
38
- already is mostly stable and feature complete, but not yet recommended
39
- for any serious work. The code base is still in active development
40
- and the quality and reliability may change daily. You are welcome to try
41
- it and play with it, but expect it to fail.
37
+ 2.x series. We have not yet released a stable version. It already is
38
+ mostly stable and each official release is installed by more than a
39
+ 1000 users. The code base is still in active development and the
40
+ quality and reliability may change daily. You are welcome to try it
41
+ and play with it, but be sure to independently check all results.
42
42
 
43
43
  TaskJuggler is a commandline tool that you use from a
44
44
  [http://en.wikipedia.org/wiki/Shell_(computing) shell]. This does not
@@ -84,22 +84,24 @@ License].
84
84
 
85
85
  === Features and Highlights ===
86
86
 
87
- * Manages tasks, resources and costs in one package
87
+ * Manages tasks, resources, costs and revenue in one package
88
88
  * Automatic resource leveling and tasks conflict resolution
89
89
  * Flexible working hours and vacation handling
90
90
  * Multiple timezone support
91
91
  * Support for shift working
92
92
  * Project tracking and status reporting
93
+ * Server based time sheet system for status and actual collection
93
94
  * Unlimited number of scenarios (baselines) of same project for what-if
94
95
  analysis
95
96
  * CSV data export for exchange with popular office software
97
+ * Support for profit/loss analysis
98
+ * Built-in web server for dynamically generated reports
96
99
  * Project breakdown and management team support
97
100
  * Powerful and flexible filtering functions to provide the right
98
101
  amount of detail to the right audience
99
- * Tasks may have initial costs, finishing costs and run rates
100
- * Resources may have running costs
101
- * Support for profit/loss analysis
102
- * Powerful project description syntax with macro support
102
+ * Project description syntax with macro support
103
+ * Detailed reference manual
104
+ * Support for project management teams and revision control
103
105
 
104
106
  === TaskJuggler on the Web ===
105
107
 
@@ -110,8 +110,8 @@ provided in the project header.
110
110
  * ''''now'''' The current date. If the user does not provide a date
111
111
  with the [[now]] keyword, the moment of the processing of the file
112
112
  will be inserted. Keep in mind that this will change every time you
113
- process your project.
114
- * ''''today'''' Similar to ''''now'''' but formatted according to
115
- the [[timeformat]] when the [[now]] attribute was used. The current
116
- setting of [[timeformat]] has no impact on the expansion of the macro.
113
+ process your project. The current setting of [[timeformat]] has no
114
+ impact on the expansion of the macro.
115
+ * ''''today'''' Identical to ''''now'''' but formatted according to
116
+ the [[timeformat]] setting of the current context.
117
117
 
@@ -1,14 +1,14 @@
1
- WBS;Name
2
- 1;Plan Work (plan)
3
- 1.1; Plan A (plan.plan_a)
4
- 1.2; Plan B (plan.plan_b)
5
- 1.3; Plan C (plan.plan_c)
6
- 2;Execute Work (execute)
7
- 2.1; Step 1 (execute.ex1)
8
- 2.2; Step 2 (execute.ex2)
9
- 2.2.1; Step 2.1 (execute.ex2.ex2_1)
10
- 2.2.2; Step 2.2 (execute.ex2.ex2_2)
11
- 2.3; Milestone 1 (execute.ms1)
12
- 2.4; Step 3 (execute.ex3)
13
- 2.5; Step 4 (execute.ex4)
14
- 3;Check Work (check)
1
+ "WBS";"Name"
2
+ 1;"Plan Work (plan)"
3
+ 1.1;" Plan A (plan.plan_a)"
4
+ 1.2;" Plan B (plan.plan_b)"
5
+ 1.3;" Plan C (plan.plan_c)"
6
+ 2;"Execute Work (execute)"
7
+ 2.1;" Step 1 (execute.ex1)"
8
+ 2.2;" Step 2 (execute.ex2)"
9
+ "2.2.1";" Step 2.1 (execute.ex2.ex2_1)"
10
+ "2.2.2";" Step 2.2 (execute.ex2.ex2_2)"
11
+ 2.4;" Step 3 (execute.ex3)"
12
+ 2.5;" Step 4 (execute.ex4)"
13
+ 2.3;" Milestone 1 (execute.ms1)"
14
+ 3;"Check Work (check)"
@@ -2,5 +2,5 @@
2
2
 
3
3
  for f in *.tjp ; do
4
4
  basename=`echo $f | sed 's/.tjp//g'`
5
- tj3 $f > $basename-Reference.csv
5
+ tj3 --silent $f > $basename-Reference.csv
6
6
  done
@@ -1,4 +1,4 @@
1
- WBS;Name;Effort;2007-12-10-00:00:00;2007-12-17-00:00:00;2007-12-24-00:00:00;2007-12-31-00:00:00;2008-01-07-00:00:00;2008-01-14-00:00:00;2008-01-21-00:00:00;2008-01-28-00:00:00;2008-02-04-00:00:00;2008-02-11-00:00:00;2008-02-18-00:00:00;2008-02-25-00:00:00;2008-03-03-00:00:00;2008-03-10-00:00:00
2
- 1;Jill;42.5;"";5.0;2.5;5.0;5.0;5.0;5.0;5.0;5.0;5.0;"";"";"";""
3
- 2;Joe;14.0;"";5.0;5.0;"";2.0;"";"";"";2.0;"";"";"";"";""
4
- 3;Jack;17.0;"";"";"";"";3.0;5.0;4.0;"";5.0;"";"";"";"";""
1
+ "WBS";"Name";"Effort";"2007-12-03-00:00:00";"2007-12-10-00:00:00";"2007-12-17-00:00:00";"2007-12-24-00:00:00";"2007-12-31-00:00:00";"2008-01-07-00:00:00";"2008-01-14-00:00:00";"2008-01-21-00:00:00";"2008-01-28-00:00:00";"2008-02-04-00:00:00";"2008-02-11-00:00:00";"2008-02-18-00:00:00"
2
+ 3;"Jack";17.0;"";"";"";"";"";3.0;5.0;4.0;"";5.0;"";""
3
+ 1;"Jill";42.5;"";"";5.0;2.5;5.0;5.0;5.0;5.0;5.0;5.0;5.0;""
4
+ 2;"Joe";14.0;"";"";5.0;5.0;"";2.0;"";"";"";2.0;"";""
@@ -1,22 +1,22 @@
1
- WBS;Name;Effort;2007-12-10-00:00:00;2007-12-17-00:00:00;2007-12-24-00:00:00;2007-12-31-00:00:00;2008-01-07-00:00:00;2008-01-14-00:00:00;2008-01-21-00:00:00;2008-01-28-00:00:00;2008-02-04-00:00:00;2008-02-11-00:00:00;2008-02-18-00:00:00;2008-02-25-00:00:00;2008-03-03-00:00:00;2008-03-10-00:00:00
2
- 1;Jill;42.5;"";5.0;2.5;5.0;5.0;5.0;5.0;5.0;5.0;5.0;"";"";"";""
3
- 1; Plan Work;12.5;"";5.0;2.5;5.0;"";"";"";"";"";"";"";"";"";""
4
- 1.2; Plan B;7.5;"";5.0;2.5;"";"";"";"";"";"";"";"";"";"";""
5
- 1.3; Plan C;5.0;"";"";"";5.0;"";"";"";"";"";"";"";"";"";""
6
- 2; Execute Work;25.0;"";"";"";"";5.0;5.0;5.0;5.0;5.0;"";"";"";"";""
7
- 2.1; Step 1;20.0;"";"";"";"";5.0;5.0;5.0;5.0;"";"";"";"";"";""
8
- 2.2; Step 2;5.0;"";"";"";"";"";"";"";"";5.0;"";"";"";"";""
9
- 2.2.2; Step 2.2;5.0;"";"";"";"";"";"";"";"";5.0;"";"";"";"";""
10
- 3; Check Work;5.0;"";"";"";"";"";"";"";"";"";5.0;"";"";"";""
11
- 2;Joe;14.0;"";5.0;5.0;"";2.0;"";"";"";2.0;"";"";"";"";""
12
- 1; Plan Work;10.0;"";5.0;5.0;"";"";"";"";"";"";"";"";"";"";""
13
- 1.1; Plan A;10.0;"";5.0;5.0;"";"";"";"";"";"";"";"";"";"";""
14
- 2; Execute Work;4.0;"";"";"";"";2.0;"";"";"";2.0;"";"";"";"";""
15
- 2.2; Step 2;2.0;"";"";"";"";2.0;"";"";"";"";"";"";"";"";""
16
- 2.2.1; Step 2.1;2.0;"";"";"";"";2.0;"";"";"";"";"";"";"";"";""
17
- 2.5; Step 4;2.0;"";"";"";"";"";"";"";"";2.0;"";"";"";"";""
18
- 3;Jack;17.0;"";"";"";"";3.0;5.0;4.0;"";5.0;"";"";"";"";""
19
- 2; Execute Work;17.0;"";"";"";"";3.0;5.0;4.0;"";5.0;"";"";"";"";""
20
- 2.2; Step 2;5.0;"";"";"";"";"";"";"";"";5.0;"";"";"";"";""
21
- 2.2.2; Step 2.2;5.0;"";"";"";"";"";"";"";"";5.0;"";"";"";"";""
22
- 2.4; Step 3;12.0;"";"";"";"";3.0;5.0;4.0;"";"";"";"";"";"";""
1
+ "WBS";"Name";"Effort";"2007-12-03-00:00:00";"2007-12-10-00:00:00";"2007-12-17-00:00:00";"2007-12-24-00:00:00";"2007-12-31-00:00:00";"2008-01-07-00:00:00";"2008-01-14-00:00:00";"2008-01-21-00:00:00";"2008-01-28-00:00:00";"2008-02-04-00:00:00";"2008-02-11-00:00:00";"2008-02-18-00:00:00"
2
+ 3;"Jack";17.0;"";"";"";"";"";3.0;5.0;4.0;"";5.0;"";""
3
+ 2;" Execute Work";17.0;"";"";"";"";"";3.0;5.0;4.0;"";5.0;"";""
4
+ 2.2;" Step 2";5.0;"";"";"";"";"";"";"";"";"";5.0;"";""
5
+ " 2.2.2";" Step 2.2";5.0;"";"";"";"";"";"";"";"";"";5.0;"";""
6
+ 2.4;" Step 3";12.0;"";"";"";"";"";3.0;5.0;4.0;"";"";"";""
7
+ 1;"Jill";42.5;"";"";5.0;2.5;5.0;5.0;5.0;5.0;5.0;5.0;5.0;""
8
+ 1;" Plan Work";12.5;"";"";5.0;2.5;5.0;"";"";"";"";"";"";""
9
+ 1.2;" Plan B";7.5;"";"";5.0;2.5;"";"";"";"";"";"";"";""
10
+ 1.3;" Plan C";5.0;"";"";"";"";5.0;"";"";"";"";"";"";""
11
+ 2;" Execute Work";25.0;"";"";"";"";"";5.0;5.0;5.0;5.0;5.0;"";""
12
+ 2.1;" Step 1";20.0;"";"";"";"";"";5.0;5.0;5.0;5.0;"";"";""
13
+ 2.2;" Step 2";5.0;"";"";"";"";"";"";"";"";"";5.0;"";""
14
+ " 2.2.2";" Step 2.2";5.0;"";"";"";"";"";"";"";"";"";5.0;"";""
15
+ 3;" Check Work";5.0;"";"";"";"";"";"";"";"";"";"";5.0;""
16
+ 2;"Joe";14.0;"";"";5.0;5.0;"";2.0;"";"";"";2.0;"";""
17
+ 1;" Plan Work";10.0;"";"";5.0;5.0;"";"";"";"";"";"";"";""
18
+ 1.1;" Plan A";10.0;"";"";5.0;5.0;"";"";"";"";"";"";"";""
19
+ 2;" Execute Work";4.0;"";"";"";"";"";2.0;"";"";"";2.0;"";""
20
+ 2.2;" Step 2";2.0;"";"";"";"";"";2.0;"";"";"";"";"";""
21
+ " 2.2.1";" Step 2.1";2.0;"";"";"";"";"";2.0;"";"";"";"";"";""
22
+ 2.5;" Step 4";2.0;"";"";"";"";"";"";"";"";"";2.0;"";""