taskjuggler 3.1.0 → 3.2.0

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 (410) hide show
  1. data/CHANGELOG +44 -0
  2. data/bin/tj3webd +4 -0
  3. data/data/css/tjreport.css +14 -5
  4. data/data/tjp.vim +22 -7
  5. data/examples/Fedora-20/reports.tji +2 -4
  6. data/examples/Scrum/Product Burndown.csv +26 -0
  7. data/examples/Scrum/Sprint 1 Burndown.csv +26 -0
  8. data/examples/Scrum/Sprint 2 Burndown.csv +26 -0
  9. data/examples/Scrum/Sprint 3 Burndown.csv +26 -0
  10. data/examples/Scrum/scrum.tjp +141 -0
  11. data/examples/Tutorial/tutorial.tjp +13 -7
  12. data/lib/taskjuggler/Attributes.rb +2 -3
  13. data/lib/taskjuggler/HTMLDocument.rb +25 -18
  14. data/lib/taskjuggler/Journal.rb +85 -65
  15. data/lib/taskjuggler/KeywordDocumentation.rb +25 -13
  16. data/lib/taskjuggler/LeaveList.rb +1 -1
  17. data/lib/taskjuggler/Limits.rb +3 -5
  18. data/lib/taskjuggler/MessageHandler.rb +173 -19
  19. data/lib/taskjuggler/Painter.rb +75 -0
  20. data/lib/taskjuggler/Painter/BasicShapes.rb +76 -0
  21. data/lib/taskjuggler/Painter/Color.rb +273 -0
  22. data/lib/taskjuggler/Painter/Element.rb +56 -0
  23. data/lib/taskjuggler/Painter/FontData.rb +221 -0
  24. data/lib/taskjuggler/Painter/FontMetrics.rb +125 -0
  25. data/lib/taskjuggler/Painter/FontMetricsData.rb +151 -0
  26. data/lib/taskjuggler/Painter/Group.rb +77 -0
  27. data/lib/taskjuggler/Painter/Points.rb +47 -0
  28. data/lib/taskjuggler/Painter/Primitives.rb +100 -0
  29. data/lib/taskjuggler/Painter/SVGSupport.rb +36 -0
  30. data/lib/taskjuggler/Painter/Text.rb +36 -0
  31. data/lib/taskjuggler/Project.rb +46 -29
  32. data/lib/taskjuggler/ProjectFileParser.rb +24 -22
  33. data/lib/taskjuggler/ProjectFileScanner.rb +2 -2
  34. data/lib/taskjuggler/PropertyTreeNode.rb +26 -34
  35. data/lib/taskjuggler/Query.rb +8 -5
  36. data/lib/taskjuggler/RealFormat.rb +3 -0
  37. data/lib/taskjuggler/Resource.rb +3 -5
  38. data/lib/taskjuggler/ResourceScenario.rb +19 -7
  39. data/lib/taskjuggler/RichText.rb +4 -6
  40. data/lib/taskjuggler/RichText/FunctionExample.rb +1 -1
  41. data/lib/taskjuggler/RichText/FunctionHandler.rb +5 -6
  42. data/lib/taskjuggler/RichText/Parser.rb +4 -6
  43. data/lib/taskjuggler/RichText/RTFNavigator.rb +1 -1
  44. data/lib/taskjuggler/RichText/RTFQuery.rb +2 -3
  45. data/lib/taskjuggler/RichText/RTFReport.rb +1 -1
  46. data/lib/taskjuggler/RichText/RTFReportLink.rb +1 -2
  47. data/lib/taskjuggler/RichText/RTFWithQuerySupport.rb +1 -1
  48. data/lib/taskjuggler/RichText/Scanner.rb +6 -6
  49. data/lib/taskjuggler/RichText/Snip.rb +1 -2
  50. data/lib/taskjuggler/RuntimeConfig.rb +9 -6
  51. data/lib/taskjuggler/ScenarioData.rb +4 -3
  52. data/lib/taskjuggler/Scoreboard.rb +6 -0
  53. data/lib/taskjuggler/SheetHandlerBase.rb +25 -8
  54. data/lib/taskjuggler/SimpleQueryExpander.rb +14 -5
  55. data/lib/taskjuggler/SyntaxReference.rb +1 -2
  56. data/lib/taskjuggler/TableColumnSorter.rb +84 -0
  57. data/lib/taskjuggler/Task.rb +3 -5
  58. data/lib/taskjuggler/TaskJuggler.rb +36 -29
  59. data/lib/taskjuggler/TaskScenario.rb +154 -66
  60. data/lib/taskjuggler/TextParser.rb +24 -17
  61. data/lib/taskjuggler/TextParser/Scanner.rb +16 -11
  62. data/lib/taskjuggler/TextParser/SourceFileInfo.rb +20 -15
  63. data/lib/taskjuggler/TimeSheets.rb +6 -12
  64. data/lib/taskjuggler/Tj3AppBase.rb +35 -16
  65. data/lib/taskjuggler/Tj3Config.rb +1 -1
  66. data/lib/taskjuggler/TjpSyntaxRules.rb +239 -49
  67. data/lib/taskjuggler/XMLElement.rb +9 -2
  68. data/lib/taskjuggler/apps/Tj3.rb +43 -37
  69. data/lib/taskjuggler/apps/Tj3Client.rb +62 -112
  70. data/lib/taskjuggler/apps/Tj3Daemon.rb +66 -29
  71. data/lib/taskjuggler/apps/Tj3Man.rb +5 -5
  72. data/lib/taskjuggler/apps/Tj3SsReceiver.rb +10 -13
  73. data/lib/taskjuggler/apps/Tj3SsSender.rb +13 -16
  74. data/lib/taskjuggler/apps/Tj3TsReceiver.rb +10 -13
  75. data/lib/taskjuggler/apps/Tj3TsSender.rb +12 -15
  76. data/lib/taskjuggler/apps/Tj3TsSummary.rb +12 -15
  77. data/lib/taskjuggler/apps/Tj3WebD.rb +99 -0
  78. data/lib/taskjuggler/daemon/Daemon.rb +50 -10
  79. data/lib/taskjuggler/daemon/DaemonConnector.rb +127 -0
  80. data/lib/taskjuggler/daemon/ProcessIntercom.rb +36 -21
  81. data/lib/taskjuggler/daemon/ProjectBroker.rb +122 -112
  82. data/lib/taskjuggler/daemon/ProjectServer.rb +78 -46
  83. data/lib/taskjuggler/daemon/ReportServer.rb +52 -28
  84. data/lib/taskjuggler/daemon/ReportServlet.rb +92 -21
  85. data/lib/taskjuggler/daemon/WebServer.rb +75 -22
  86. data/lib/taskjuggler/daemon/WelcomePage.rb +1 -0
  87. data/lib/taskjuggler/reports/AccountListRE.rb +3 -3
  88. data/lib/taskjuggler/reports/CSVFile.rb +9 -2
  89. data/lib/taskjuggler/reports/ChartPlotter.rb +453 -0
  90. data/lib/taskjuggler/reports/Navigator.rb +1 -0
  91. data/lib/taskjuggler/reports/NikuReport.rb +4 -4
  92. data/lib/taskjuggler/reports/Report.rb +6 -18
  93. data/lib/taskjuggler/reports/ReportBase.rb +9 -9
  94. data/lib/taskjuggler/reports/ReportContext.rb +2 -2
  95. data/lib/taskjuggler/reports/StatusSheetReport.rb +6 -6
  96. data/lib/taskjuggler/reports/TableReport.rb +24 -15
  97. data/lib/taskjuggler/reports/TimeSheetReport.rb +5 -5
  98. data/lib/taskjuggler/reports/TraceReport.rb +251 -0
  99. data/lib/tj3webd.rb +17 -0
  100. data/manual/Day_To_Day_Juggling +10 -3
  101. data/manual/Installation +38 -19
  102. data/manual/Software +25 -19
  103. data/manual/Tutorial +119 -110
  104. data/manual/html/Day_To_Day_Juggling.html +7 -5
  105. data/manual/html/Getting_Started.html +4 -4
  106. data/manual/html/How_To_Contribute.html +4 -4
  107. data/manual/html/Installation.html +19 -11
  108. data/manual/html/Intro.html +4 -4
  109. data/manual/html/Reporting_Bugs.html +4 -4
  110. data/manual/html/Rich_Text_Attributes.html +4 -4
  111. data/manual/html/Software.html +15 -11
  112. data/manual/html/TaskJuggler_2x_Migration.html +4 -4
  113. data/manual/html/TaskJuggler_Internals.html +4 -4
  114. data/manual/html/The_TaskJuggler_Syntax.html +4 -4
  115. data/manual/html/Tutorial.html +41 -32
  116. data/manual/html/account.html +4 -4
  117. data/manual/html/account.task.html +4 -4
  118. data/manual/html/accountprefix.html +4 -4
  119. data/manual/html/accountreport.html +27 -9
  120. data/manual/html/accountroot.html +5 -5
  121. data/manual/html/active.html +4 -4
  122. data/manual/html/adopt.task.html +4 -4
  123. data/manual/html/aggregate.html +4 -4
  124. data/manual/html/alert.html +4 -4
  125. data/manual/html/alertlevels.html +4 -4
  126. data/manual/html/allocate.html +5 -5
  127. data/manual/html/alphabet.html +4 -4
  128. data/manual/html/alternative.html +4 -4
  129. data/manual/html/author.html +4 -4
  130. data/manual/html/balance.html +5 -5
  131. data/manual/html/booking.resource.html +4 -4
  132. data/manual/html/booking.task.html +4 -4
  133. data/manual/html/caption.html +5 -5
  134. data/manual/html/cellcolor.column.html +43 -8
  135. data/manual/html/celltext.column.html +4 -4
  136. data/manual/html/center.html +5 -5
  137. data/manual/html/charge.html +4 -4
  138. data/manual/html/chargeset.html +4 -4
  139. data/manual/html/columnid.html +27 -15
  140. data/manual/html/columns.html +5 -5
  141. data/manual/html/complete.html +4 -4
  142. data/manual/html/copyright.html +4 -4
  143. data/manual/html/credits.html +4 -4
  144. data/manual/html/css/tjreport.css +14 -5
  145. data/manual/html/currency.html +4 -4
  146. data/manual/html/currencyformat.html +5 -5
  147. data/manual/html/dailymax.html +5 -5
  148. data/manual/html/dailymin.html +5 -5
  149. data/manual/html/dailyworkinghours.html +4 -4
  150. data/manual/html/date.extend.html +4 -4
  151. data/manual/html/date.html +5 -5
  152. data/manual/html/definitions.html +4 -4
  153. data/manual/html/depends.html +4 -4
  154. data/manual/html/details.html +4 -4
  155. data/manual/html/disabled.html +4 -4
  156. data/manual/html/duration.html +4 -4
  157. data/manual/html/efficiency.html +4 -4
  158. data/manual/html/effort.html +4 -4
  159. data/manual/html/email.html +4 -4
  160. data/manual/html/enabled.html +4 -4
  161. data/manual/html/end.column.html +4 -4
  162. data/manual/html/end.html +4 -4
  163. data/manual/html/end.limit.html +4 -4
  164. data/manual/html/end.report.html +5 -5
  165. data/manual/html/end.timesheet.html +4 -4
  166. data/manual/html/endcredit.html +4 -4
  167. data/manual/html/epilog.html +5 -5
  168. data/manual/html/export.html +4 -4
  169. data/manual/html/extend.html +4 -4
  170. data/manual/html/fail.html +43 -8
  171. data/manual/html/fdl.html +4 -4
  172. data/manual/html/flags.account.html +4 -4
  173. data/manual/html/flags.html +4 -4
  174. data/manual/html/flags.journalentry.html +4 -4
  175. data/manual/html/flags.report.html +5 -5
  176. data/manual/html/flags.resource.html +4 -4
  177. data/manual/html/flags.statussheet.html +4 -4
  178. data/manual/html/flags.task.html +4 -4
  179. data/manual/html/flags.timesheet.html +4 -4
  180. data/manual/html/fontcolor.column.html +43 -8
  181. data/manual/html/footer.html +5 -5
  182. data/manual/html/formats.html +5 -5
  183. data/manual/html/functions.html +4 -4
  184. data/manual/html/gapduration.html +4 -4
  185. data/manual/html/gaplength.html +4 -4
  186. data/manual/html/halign.center.html +4 -4
  187. data/manual/html/halign.column.html +43 -8
  188. data/manual/html/halign.left.html +4 -4
  189. data/manual/html/halign.right.html +4 -4
  190. data/manual/html/hasalert.html +4 -4
  191. data/manual/html/header.html +5 -5
  192. data/manual/html/headline.html +7 -7
  193. data/manual/html/height.html +72 -0
  194. data/manual/html/hideaccount.html +46 -11
  195. data/manual/html/hidejournalentry.html +5 -5
  196. data/manual/html/hidereport.html +43 -8
  197. data/manual/html/hideresource.html +44 -9
  198. data/manual/html/hidetask.html +44 -9
  199. data/manual/html/icalreport.html +4 -4
  200. data/manual/html/include.macro.html +4 -4
  201. data/manual/html/include.project.html +4 -4
  202. data/manual/html/include.properties.html +4 -4
  203. data/manual/html/index.html +2 -1
  204. data/manual/html/inherit.extend.html +4 -4
  205. data/manual/html/interval1.html +4 -4
  206. data/manual/html/interval2.html +4 -4
  207. data/manual/html/interval3.html +4 -4
  208. data/manual/html/interval4.html +4 -4
  209. data/manual/html/isactive.html +4 -4
  210. data/manual/html/ischildof.html +4 -4
  211. data/manual/html/isdependencyof.html +4 -4
  212. data/manual/html/isdutyof.html +4 -4
  213. data/manual/html/isfeatureof.html +4 -4
  214. data/manual/html/isleaf.html +4 -4
  215. data/manual/html/ismilestone.html +4 -4
  216. data/manual/html/isongoing.html +4 -4
  217. data/manual/html/isresource.html +4 -4
  218. data/manual/html/isresponsibilityof.html +4 -4
  219. data/manual/html/istask.html +4 -4
  220. data/manual/html/journalattributes.html +11 -7
  221. data/manual/html/journalentry.html +4 -4
  222. data/manual/html/journalmode.html +5 -5
  223. data/manual/html/leaveallowance.html +5 -5
  224. data/manual/html/leaves.html +5 -6
  225. data/manual/html/left.html +5 -5
  226. data/manual/html/length.html +4 -4
  227. data/manual/html/limits.allocate.html +4 -4
  228. data/manual/html/limits.html +4 -4
  229. data/manual/html/limits.resource.html +4 -4
  230. data/manual/html/limits.task.html +4 -4
  231. data/manual/html/listitem.column.html +4 -4
  232. data/manual/html/listtype.column.html +4 -4
  233. data/manual/html/loadunit.html +5 -5
  234. data/manual/html/logicalexpression.html +8 -44
  235. data/manual/html/logicalflagexpression.html +4 -4
  236. data/manual/html/macro.html +4 -4
  237. data/manual/html/managers.html +4 -4
  238. data/manual/html/mandatory.html +4 -4
  239. data/manual/html/maxend.html +4 -4
  240. data/manual/html/maximum.html +5 -5
  241. data/manual/html/maxstart.html +4 -4
  242. data/manual/html/milestone.html +4 -4
  243. data/manual/html/minend.html +4 -4
  244. data/manual/html/minimum.html +5 -5
  245. data/manual/html/minstart.html +4 -4
  246. data/manual/html/monthlymax.html +5 -5
  247. data/manual/html/monthlymin.html +5 -5
  248. data/manual/html/navbar.html +10 -4
  249. data/manual/html/navigator.html +4 -4
  250. data/manual/html/newtask.html +4 -4
  251. data/manual/html/nikureport.html +4 -4
  252. data/manual/html/note.task.html +4 -4
  253. data/manual/html/now.html +4 -4
  254. data/manual/html/numberformat.html +5 -5
  255. data/manual/html/onend.html +4 -4
  256. data/manual/html/onstart.html +4 -4
  257. data/manual/html/opennodes.html +5 -5
  258. data/manual/html/overtime.booking.html +4 -4
  259. data/manual/html/period.column.html +4 -4
  260. data/manual/html/period.limit.html +4 -4
  261. data/manual/html/period.report.html +5 -5
  262. data/manual/html/period.task.html +4 -4
  263. data/manual/html/persistent.html +4 -4
  264. data/manual/html/precedes.html +4 -4
  265. data/manual/html/priority.html +4 -4
  266. data/manual/html/priority.timesheet.html +4 -4
  267. data/manual/html/project.html +4 -4
  268. data/manual/html/projectid.html +4 -4
  269. data/manual/html/projectid.task.html +4 -4
  270. data/manual/html/projectids.html +4 -4
  271. data/manual/html/projection.html +5 -7
  272. data/manual/html/prolog.html +5 -5
  273. data/manual/html/properties.html +11 -5
  274. data/manual/html/purge.html +5 -5
  275. data/manual/html/rate.html +4 -4
  276. data/manual/html/rate.resource.html +4 -4
  277. data/manual/html/reference.extend.html +4 -4
  278. data/manual/html/remaining.html +4 -4
  279. data/manual/html/replace.html +4 -4
  280. data/manual/html/reportprefix.html +4 -4
  281. data/manual/html/resource.html +4 -10
  282. data/manual/html/resourceattributes.html +4 -4
  283. data/manual/html/resourceprefix.html +4 -4
  284. data/manual/html/resourcereport.html +28 -10
  285. data/manual/html/resourceroot.html +5 -5
  286. data/manual/html/resources.limit.html +4 -4
  287. data/manual/html/responsible.html +4 -4
  288. data/manual/html/richtext.extend.html +4 -4
  289. data/manual/html/right.html +5 -5
  290. data/manual/html/rollupaccount.html +44 -9
  291. data/manual/html/rollupresource.html +44 -9
  292. data/manual/html/rolluptask.html +44 -9
  293. data/manual/html/scale.column.html +4 -4
  294. data/manual/html/scenario.html +4 -22
  295. data/manual/html/scenario.ical.html +4 -4
  296. data/manual/html/scenarios.export.html +4 -4
  297. data/manual/html/scenarios.html +5 -5
  298. data/manual/html/scenariospecific.extend.html +4 -4
  299. data/manual/html/scheduled.html +4 -4
  300. data/manual/html/scheduling.html +4 -4
  301. data/manual/html/select.html +4 -4
  302. data/manual/html/selfcontained.html +5 -5
  303. data/manual/html/shift.allocate.html +4 -4
  304. data/manual/html/shift.html +4 -4
  305. data/manual/html/shift.resource.html +5 -5
  306. data/manual/html/shift.task.html +4 -4
  307. data/manual/html/shift.timesheet.html +4 -4
  308. data/manual/html/shifts.allocate.html +4 -4
  309. data/manual/html/shifts.resource.html +4 -4
  310. data/manual/html/shifts.task.html +4 -4
  311. data/manual/html/shorttimeformat.html +4 -4
  312. data/manual/html/sloppy.booking.html +4 -4
  313. data/manual/html/sloppy.projection.html +5 -5
  314. data/manual/html/sortaccounts.html +5 -5
  315. data/manual/html/sortjournalentries.html +5 -5
  316. data/manual/html/sortresources.html +5 -5
  317. data/manual/html/sorttasks.html +5 -5
  318. data/manual/html/start.column.html +4 -4
  319. data/manual/html/start.html +4 -4
  320. data/manual/html/start.limit.html +4 -4
  321. data/manual/html/start.report.html +5 -5
  322. data/manual/html/startcredit.html +4 -4
  323. data/manual/html/status.statussheet.html +4 -4
  324. data/manual/html/status.timesheet.html +4 -4
  325. data/manual/html/statussheet.html +4 -4
  326. data/manual/html/statussheetreport.html +4 -4
  327. data/manual/html/strict.projection.html +5 -5
  328. data/manual/html/summary.html +4 -4
  329. data/manual/html/supplement.html +4 -4
  330. data/manual/html/supplement.resource.html +4 -10
  331. data/manual/html/supplement.task.html +4 -28
  332. data/manual/html/tagfile.html +4 -4
  333. data/manual/html/task.html +4 -28
  334. data/manual/html/task.statussheet.html +4 -4
  335. data/manual/html/task.timesheet.html +4 -4
  336. data/manual/html/taskattributes.html +4 -4
  337. data/manual/html/taskprefix.html +4 -4
  338. data/manual/html/taskreport.html +28 -10
  339. data/manual/html/taskroot.html +5 -5
  340. data/manual/html/text.extend.html +4 -4
  341. data/manual/html/textreport.html +27 -9
  342. data/manual/html/timeformat.html +5 -5
  343. data/manual/html/timeoff.nikureport.html +4 -4
  344. data/manual/html/timesheet.html +4 -4
  345. data/manual/html/timesheetreport.html +23 -5
  346. data/manual/html/timezone.export.html +4 -4
  347. data/manual/html/timezone.html +4 -4
  348. data/manual/html/timezone.report.html +5 -5
  349. data/manual/html/timezone.shift.html +4 -4
  350. data/manual/html/timingresolution.html +4 -4
  351. data/manual/html/title.column.html +4 -4
  352. data/manual/html/title.html +5 -5
  353. data/manual/html/toc.html +207 -179
  354. data/manual/html/tooltip.column.html +45 -10
  355. data/manual/html/tracereport.html +405 -0
  356. data/manual/html/trackingscenario.html +6 -6
  357. data/manual/html/treelevel.html +4 -4
  358. data/manual/html/vacation.html +4 -4
  359. data/manual/html/vacation.resource.html +4 -4
  360. data/manual/html/vacation.shift.html +4 -4
  361. data/manual/html/warn.html +43 -8
  362. data/manual/html/weeklymax.html +5 -5
  363. data/manual/html/weeklymin.html +5 -5
  364. data/manual/html/weekstartsmonday.html +4 -4
  365. data/manual/html/weekstartssunday.html +6 -6
  366. data/manual/html/width.column.html +6 -6
  367. data/manual/html/width.html +72 -0
  368. data/manual/html/work.html +4 -4
  369. data/manual/html/workinghours.project.html +4 -4
  370. data/manual/html/workinghours.resource.html +4 -4
  371. data/manual/html/workinghours.shift.html +4 -4
  372. data/manual/html/yearlyworkingdays.html +4 -4
  373. data/spec/Color_spec.rb +60 -0
  374. data/spec/ProjectBroker_spec.rb +3 -2
  375. data/spec/StatusSheets_spec.rb +5 -4
  376. data/spec/TableColumnSorter_spec.rb +78 -0
  377. data/spec/TimeSheets_spec.rb +6 -2
  378. data/spec/Tj3Daemon_spec.rb +2 -2
  379. data/spec/TraceReport_spec.rb +117 -0
  380. data/taskjuggler.gemspec +1 -1
  381. data/test/MessageChecker.rb +3 -1
  382. data/test/ReferenceGenerator.rb +1 -1
  383. data/test/TestSuite/CSV-Reports/Leave.tjp +1 -1
  384. data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +3 -0
  385. data/test/TestSuite/CSV-Reports/refs/taskcounter.csv +9 -0
  386. data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +19 -16
  387. data/test/TestSuite/CSV-Reports/refs/weekly.csv +1 -0
  388. data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +14 -2
  389. data/test/TestSuite/Export-Reports/refs/tutorial.tjp +98 -86
  390. data/test/TestSuite/Scheduler/Correct/Leaves.tjp +25 -0
  391. data/test/TestSuite/Syntax/Correct/Leave.tjp +1 -1
  392. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +9 -1
  393. data/test/TestSuite/Syntax/Correct/TraceReport.tjp +10 -0
  394. data/test/TestSuite/Syntax/Correct/tutorial.tjp +10 -4
  395. data/test/test_CSV-Reports.rb +3 -3
  396. data/test/test_Export-Reports.rb +91 -86
  397. data/test/test_Journal.rb +15 -12
  398. data/test/test_Limits.rb +3 -3
  399. data/test/test_Project.rb +1 -2
  400. data/test/test_ProjectFileScanner.rb +1 -1
  401. data/test/test_PropertySet.rb +1 -1
  402. data/test/test_Query.rb +5 -6
  403. data/test/test_ReportGenerator.rb +15 -7
  404. data/test/test_RichText.rb +4 -3
  405. data/test/test_Scheduler.rb +19 -7
  406. data/test/test_ShiftAssignments.rb +2 -2
  407. data/test/test_SimpleQueryExpander.rb +29 -2
  408. data/test/test_Syntax.rb +14 -5
  409. metadata +49 -10
  410. data/lib/taskjuggler/LogFile.rb +0 -73
@@ -23,8 +23,9 @@ class TaskJuggler
23
23
  pb.logStdIO = false
24
24
  pb.port = 0
25
25
  # Don't generate any debug or info messages
26
- pb.log.outputLevel = 1
27
- pb.log.logLevel = 1
26
+ mh = MessageHandlerInstance.instance
27
+ mh.outputLevel = 1
28
+ mh.logLevel = 1
28
29
  t = Thread.new { pb.start }
29
30
  yield
30
31
  pb.stop
@@ -26,7 +26,6 @@ class TaskJuggler
26
26
  include DaemonControl
27
27
 
28
28
  before(:all) do
29
- @beforeExecuted = true
30
29
  # Make sure we run in the same directory as the spec file.
31
30
  @pwd = pwd
32
31
  cd(File.dirname(__FILE__))
@@ -122,9 +121,9 @@ timesheet r2 2011-03-14-00:00-+0000 - 2011-03-21-00:00-+0000 {
122
121
  }
123
122
  EOT
124
123
  res = stdIoWrapper(prj) do
125
- Tj3Client.new.main(%w( --unsafe --silent add . ))
124
+ Tj3Client.new.main(%w( --unsafe add . ))
126
125
  end
127
- unless res.stdErr =~ /Project sstest loaded/
126
+ unless res.stdErr.include?("Info: Project(s) . added")
128
127
  raise "Project not loaded: #{res.stdErr}"
129
128
  end
130
129
  raise "Can't load project: #{res.stdErr}" unless res.returnValue == 0
@@ -132,8 +131,10 @@ EOT
132
131
  res = stdIoWrapper do
133
132
  Tj3SsSender.new.main(%w( --dryrun --silent -e 2011-03-23 ))
134
133
  end
134
+ unless res.returnValue == 0
135
+ raise " Status sheet template generation failed: #{res.stdErr}"
136
+ end
135
137
  @sss_mails = collectMails(res.stdOut)
136
- raise " Status sheet generation failed" unless res.returnValue == 0
137
138
 
138
139
  @sheet = <<'EOT'
139
140
  # --------8<--------8<--------
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = TraceReport_spec.rb -- The TaskJuggler III Project Management Software
5
+ #
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
7
+ # by Chris Schlaeger <chris@linux.com>
8
+ #
9
+ # This program is free software; you can redistribute it and/or modify
10
+ # it under the terms of version 2 of the GNU General Public License as
11
+ # published by the Free Software Foundation.
12
+ #
13
+
14
+ require 'rubygems'
15
+
16
+ require 'taskjuggler/TableColumnSorter'
17
+
18
+ class TaskJuggler
19
+
20
+ describe TableColumnSorter do
21
+
22
+ before do
23
+ @table = [ %w( One Two Three ), [ 1, 2, 3 ] ]
24
+ @sorter = TableColumnSorter.new(@table)
25
+ end
26
+
27
+ it "should not change for same header" do
28
+ t = @sorter.sort(%w( One Two Three ))
29
+ t.should == @table
30
+ @sorter.discontinuedColumns.should == 0
31
+ end
32
+
33
+ it "should not change for all remove" do
34
+ t = @sorter.sort(%w( ))
35
+ t.should == @table
36
+ @sorter.discontinuedColumns.should == 3
37
+ end
38
+
39
+ it "should move Two to back" do
40
+ t = @sorter.sort(%w( One Three ))
41
+ t.should == [ %w( One Three Two ), [ 1, 3, 2 ] ]
42
+ @sorter.discontinuedColumns.should == 1
43
+ end
44
+
45
+ it "should not change when last columns is missing" do
46
+ t = @sorter.sort(%w( One Two ))
47
+ t.should == @table
48
+ @sorter.discontinuedColumns.should == 1
49
+ end
50
+
51
+ it "should insert Four in front" do
52
+ t = @sorter.sort(%w( Four One Two Three ))
53
+ t.should == [ %w( Four One Two Three ), [ nil, 1, 2, 3 ] ]
54
+ @sorter.discontinuedColumns.should == 0
55
+ end
56
+
57
+ it "should insert Four and Five at end" do
58
+ t = @sorter.sort(%w( One Two Three Four Five ))
59
+ t.should == [ %w( One Two Three Four Five ), [ 1, 2, 3, nil, nil ] ]
60
+ @sorter.discontinuedColumns.should == 0
61
+ end
62
+
63
+ it "should insert Four at end and move Three to back" do
64
+ t = @sorter.sort(%w( One Two Four ))
65
+ t.should == [ %w( One Two Four Three ), [ 1, 2, nil, 3 ] ]
66
+ @sorter.discontinuedColumns.should == 1
67
+ end
68
+
69
+ it "should keep first columns and insert new directly after" do
70
+ t = @sorter.sort(%w( One Four Five ))
71
+ t.should == [ %w( One Four Five Two Three), [ 1, nil, nil, 2, 3 ] ]
72
+ @sorter.discontinuedColumns.should == 2
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
@@ -31,6 +31,7 @@ class TaskJuggler
31
31
 
32
32
  cleanup
33
33
  startDaemon(<<'EOT'
34
+ emailDeliveryMethod: smtp
34
35
  smtpServer: foobar.com
35
36
  _timesheets:
36
37
  projectId: tstest
@@ -76,9 +77,9 @@ task t3 "T3" {
76
77
  }
77
78
  EOT
78
79
  res = stdIoWrapper(prj) do
79
- Tj3Client.new.main(%w( --unsafe --silent add . ))
80
+ Tj3Client.new.main(%w( --unsafe add . ))
80
81
  end
81
- unless res.stdErr =~ /Project tstest loaded/
82
+ unless res.stdErr.include?("Info: Project(s) . added")
82
83
  raise "Project not loaded: #{res.stdErr}"
83
84
  end
84
85
  raise "Can't load project" unless res.returnValue == 0
@@ -86,6 +87,9 @@ EOT
86
87
  res = stdIoWrapper do
87
88
  Tj3TsSender.new.main(%w( --dryrun --silent -e 2011-03-21 ))
88
89
  end
90
+ if res.stdErr != ''
91
+ raise "Tj3TsSender failed: #{res.stdErr}"
92
+ end
89
93
  @tss_mails = collectMails(res.stdOut)
90
94
  raise "Timesheet generation failed" unless res.returnValue == 0
91
95
 
@@ -42,10 +42,10 @@ class TaskJuggler
42
42
  it 'should be able to load a project' do
43
43
  prj = 'project foo "Foo" 2011-03-14 +1d task "Foo"'
44
44
  res = stdIoWrapper(prj) do
45
- Tj3Client.new.main(%w( --unsafe --silent add . ))
45
+ Tj3Client.new.main(%w( --unsafe add . ))
46
46
  end
47
47
  res.returnValue.should == 0
48
- res.stdErr.should match /Project foo loaded/
48
+ res.stdErr.should match /Project\(s\) \. added/
49
49
  end
50
50
 
51
51
  end
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = TimeSheets_spec.rb -- The TaskJuggler III Project Management Software
5
+ #
6
+ # Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012
7
+ # by Chris Schlaeger <chris@linux.com>
8
+ #
9
+ # This program is free software; you can redistribute it and/or modify
10
+ # it under the terms of version 2 of the GNU General Public License as
11
+ # published by the Free Software Foundation.
12
+ #
13
+
14
+ require 'taskjuggler/TaskJuggler'
15
+ require 'taskjuggler/StdIoWrapper'
16
+ require 'taskjuggler/apps/Tj3'
17
+
18
+ class TaskJuggler
19
+
20
+
21
+ describe TraceReport do
22
+
23
+ include StdIoWrapper
24
+
25
+ before(:all) do
26
+ tf = 'tracereport'
27
+ @tf = tf + '.csv'
28
+ @prj = <<"EOT"
29
+ project "Test" 2012-03-01 +2m {
30
+ now 2012-03-11
31
+ }
32
+
33
+ resource r "R"
34
+
35
+ task t1 "T1" {
36
+ effort 10d
37
+ allocate r
38
+ }
39
+ task t2 "T2" {
40
+ depends t1
41
+ duration 5d
42
+ }
43
+ task t3 "T3" {
44
+ depends t2
45
+ }
46
+
47
+ tracereport '#{tf}' {
48
+ columns complete
49
+ }
50
+ EOT
51
+ end
52
+
53
+ after(:all) do
54
+ File.delete(@tf)
55
+ end
56
+
57
+ it 'should generate a trace report' do
58
+ File.delete(@tf) if File.exists?(@tf)
59
+ tj3(@prj)
60
+ ref = <<'EOT'
61
+ "Date";"t1:plan.complete";"t2:plan.complete";"t3:plan.complete"
62
+ "2012-03-11";70.0;0.0;0.0
63
+ EOT
64
+ checkCSV(@tf, ref)
65
+ end
66
+
67
+ it 'should replace the existing line' do
68
+ before = File.read(@tf)
69
+ tj3(@prj)
70
+ after = File.read(@tf)
71
+ before.should == after
72
+ end
73
+
74
+ it 'should add a new line for another day' do
75
+ prj = @prj.gsub(/now 2012-03-11/, 'now 2012-03-18')
76
+ tj3(prj)
77
+ ref = <<'EOT'
78
+ "Date";"t1:plan.complete";"t2:plan.complete";"t3:plan.complete"
79
+ "2012-03-11";70.0;0.0;0.0
80
+ "2012-03-18";100.0;65.83333333333333;0.0
81
+ EOT
82
+ checkCSV(@tf, ref)
83
+ end
84
+
85
+ it 'should add to a file without data columns' do
86
+ File.write(@tf, <<'EOT'
87
+ "Date"
88
+ "2012-03-11"
89
+ EOT
90
+ )
91
+ tj3(@prj)
92
+ ref = <<'EOT'
93
+ "Date";"t1:plan.complete";"t2:plan.complete";"t3:plan.complete"
94
+ "2012-03-11";70.0;0.0;0.0
95
+ EOT
96
+ checkCSV(@tf, ref)
97
+ end
98
+
99
+ private
100
+
101
+ def tj3(prj)
102
+ res = stdIoWrapper(prj) do
103
+ Tj3.new.main(%w( --silent --add-trace . ))
104
+ end
105
+ res.stdOut.should == ''
106
+ res.stdErr.should == ''
107
+ res.returnValue.should == 0
108
+ end
109
+
110
+ def checkCSV(file, ref)
111
+ File.read(file).should == ref
112
+ end
113
+
114
+ end
115
+
116
+ end
117
+
@@ -63,7 +63,7 @@ EOT
63
63
  s.has_rdoc = true
64
64
  s.extra_rdoc_files = %w( README.rdoc COPYING CHANGELOG )
65
65
 
66
- s.add_dependency('mail', '>= 2.2.15')
66
+ s.add_dependency('mail', '>= 2.4.3')
67
67
  s.add_dependency('term-ansicolor', '>= 1.0.7')
68
68
  s.add_development_dependency('rspec', '>= 2.5.0')
69
69
  s.platform = Gem::Platform::RUBY
@@ -11,13 +11,15 @@
11
11
  # published by the Free Software Foundation.
12
12
  #
13
13
 
14
+ require 'taskjuggler/MessageHandler'
15
+
14
16
  module MessageChecker
15
17
 
16
18
  # Check that all messages that were generated during the TaskJuggler run
17
19
  # match the references specified in the test file.
18
20
  def checkMessages(tj, file)
19
21
  refMessages = collectMessages(file)
20
- tj.messageHandler.messages.each do |message|
22
+ TaskJuggler::MessageHandlerInstance.instance.messages.each do |message|
21
23
  assert(ref = refMessages.pop, "Unexpected #{message.type.to_s} #{message.id}: #{message}")
22
24
  assert_equal(ref[0], message.type.to_s,
23
25
  "Error in #{file}: Got #{message.type.to_s} instead of #{ref[0]}")
@@ -48,7 +48,7 @@ class TaskJuggler
48
48
  deleteOldReports(tjpFile[0..-5])
49
49
 
50
50
  puts "Generating references for #{tjpFile}"
51
- tj = TaskJuggler.new(true)
51
+ tj = TaskJuggler.new
52
52
  tj.parse([ tjpFile ]) || error("Parser failed for ${tjpFile}")
53
53
  tj.schedule || error("Scheduler failed for #{tjpFile}")
54
54
  tj.generateReports(outputDir) ||
@@ -25,7 +25,7 @@ resource team "Team" {
25
25
  }
26
26
  }
27
27
  resource r3 "R3" {
28
- shift s1 2011-12-19 +3w
28
+ shifts s1 2011-12-19 +3w
29
29
  leaves sick 2012-01-04 +2d
30
30
  }
31
31
 
@@ -1,5 +1,6 @@
1
1
  "BSI";"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"
2
2
  3;"Jack";17.0;"";"";"";"";3.0;5.0;4.0;"";5.0;"";""
3
+ 4;" Virtual View";5.0;"";"";"";"";"";"";"";"";5.0;"";""
3
4
  2;" Execute Work";17.0;"";"";"";"";3.0;5.0;4.0;"";5.0;"";""
4
5
  2.2;" Step 2";5.0;"";"";"";"";"";"";"";"";5.0;"";""
5
6
  " 2.2.2";" Step 2.2";5.0;"";"";"";"";"";"";"";"";5.0;"";""
@@ -8,6 +9,7 @@
8
9
  1;" Plan Work";12.5;"";5.0;2.5;5.0;"";"";"";"";"";"";""
9
10
  1.2;" Plan B";7.5;"";5.0;2.5;"";"";"";"";"";"";"";""
10
11
  1.3;" Plan C";5.0;"";"";"";5.0;"";"";"";"";"";"";""
12
+ 4;" Virtual View";17.5;"";5.0;2.5;"";"";"";"";"";5.0;5.0;""
11
13
  2;" Execute Work";25.0;"";"";"";"";5.0;5.0;5.0;5.0;5.0;"";""
12
14
  2.1;" Step 1";20.0;"";"";"";"";5.0;5.0;5.0;5.0;"";"";""
13
15
  2.2;" Step 2";5.0;"";"";"";"";"";"";"";"";5.0;"";""
@@ -16,6 +18,7 @@
16
18
  2;"Joe";14.0;"";5.0;5.0;"";2.0;"";"";"";2.0;"";""
17
19
  1;" Plan Work";10.0;"";5.0;5.0;"";"";"";"";"";"";"";""
18
20
  1.1;" Plan A";10.0;"";5.0;5.0;"";"";"";"";"";"";"";""
21
+ 4;" Virtual View";2.0;"";"";"";"";2.0;"";"";"";"";"";""
19
22
  2;" Execute Work";4.0;"";"";"";"";2.0;"";"";"";2.0;"";""
20
23
  2.2;" Step 2";2.0;"";"";"";"";2.0;"";"";"";"";"";""
21
24
  " 2.2.1";" Step 2.1";2.0;"";"";"";"";2.0;"";"";"";"";"";""
@@ -0,0 +1,9 @@
1
+ "Id";"Active Tasks";"Open Tasks";"Closed Tasks"
2
+ "_Task_1";2;3;2
3
+ "_Task_1._Task_2";0;0;1
4
+ "_Task_1._Task_4";1;2;1
5
+ "_Task_1._Task_4._Task_5";0;0;1
6
+ "_Task_1._Task_4._Task_6";1;1;0
7
+ "_Task_1._Task_4._Task_7";1;1;0
8
+ "_Task_1._Task_3";1;1;0
9
+ "_Task_8";1;1;0
@@ -1,7 +1,7 @@
1
1
  "BSI";"Name";"Start";"End";"Duration";"Effort";"2007-12-10-00:00:00-+0000";"2007-12-17-00:00:00-+0000";"2007-12-24-00:00:00-+0000";"2007-12-31-00:00:00-+0000";"2008-01-07-00:00:00-+0000";"2008-01-14-00:00:00-+0000";"2008-01-21-00:00:00-+0000";"2008-01-28-00:00:00-+0000";"2008-02-04-00:00:00-+0000";"2008-02-11-00:00:00-+0000";"2008-02-18-00:00:00-+0000"
2
2
  1;"Plan Work";"2007-12-16-00:00:00-+0000";"2008-01-04-18:00:00-+0000";19.8;22.5;"";10.0;7.5;5.0;"";"";"";"";"";"";""
3
- 1;" Jill";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
4
- 2;" Joe";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
3
+ 1;" Jill";"";"";"";12.5;"";5.0;2.5;5.0;"";"";"";"";"";"";""
4
+ 2;" Joe";"";"";"";10.0;"";5.0;5.0;"";"";"";"";"";"";"";""
5
5
  1.1;" Plan A";"2007-12-17-09:00:00-+0000";"2007-12-28-18:00:00-+0000";11.4;10.0;"";5.0;5.0;"";"";"";"";"";"";"";""
6
6
  2;" Joe";"";"";"";10.0;"";5.0;5.0;"";"";"";"";"";"";"";""
7
7
  1.2;" Plan B";"2007-12-17-09:00:00-+0000";"2007-12-26-14:00:00-+0000";9.2;7.5;"";5.0;2.5;"";"";"";"";"";"";"";""
@@ -9,30 +9,33 @@
9
9
  1.3;" Plan C";"2007-12-31-09:00:00-+0000";"2008-01-04-18:00:00-+0000";4.4;5.0;"";"";"";5.0;"";"";"";"";"";"";""
10
10
  1;" Jill";"";"";"";5.0;"";"";"";5.0;"";"";"";"";"";"";""
11
11
  4;"Virtual View";"2007-12-17-09:00:00-+0000";"2008-02-15-18:00:00-+0000";60.4;24.5;"";5.0;2.5;"";2.0;"";"";"";10.0;5.0;""
12
+ 3;" Jack";"";"";"";5.0;"";"";"";"";"";"";"";"";5.0;"";""
13
+ 1;" Jill";"";"";"";17.5;"";5.0;2.5;"";"";"";"";"";5.0;5.0;""
14
+ 2;" Joe";"";"";"";2.0;"";"";"";"";2.0;"";"";"";"";"";""
12
15
  1.2;" Plan B";"2007-12-17-09:00:00-+0000";"2007-12-26-14:00:00-+0000";9.2;7.5;"";5.0;2.5;"";"";"";"";"";"";"";""
13
- 1;" Jill";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
16
+ 1;" Jill";"";"";"";7.5;"";5.0;2.5;"";"";"";"";"";"";"";""
14
17
  2.2;" Step 2";"2008-01-07-09:00:00-+0000";"2008-02-08-18:00:00-+0000";32.4;12.0;"";"";"";"";2.0;"";"";"";10.0;"";""
15
- 3;" Jack";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
16
- 1;" Jill";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
17
- 2;" Joe";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
18
+ 3;" Jack";"";"";"";5.0;"";"";"";"";"";"";"";"";5.0;"";""
19
+ 1;" Jill";"";"";"";5.0;"";"";"";"";"";"";"";"";5.0;"";""
20
+ 2;" Joe";"";"";"";2.0;"";"";"";"";2.0;"";"";"";"";"";""
18
21
  "2.2.1";" Step 2.1";"2008-01-07-09:00:00-+0000";"2008-01-08-18:00:00-+0000";1.4;2.0;"";"";"";"";2.0;"";"";"";"";"";""
19
- 2;" Joe";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
22
+ 2;" Joe";"";"";"";2.0;"";"";"";"";2.0;"";"";"";"";"";""
20
23
  "2.2.2";" Step 2.2";"2008-02-04-09:00:00-+0000";"2008-02-08-18:00:00-+0000";4.4;10.0;"";"";"";"";"";"";"";"";10.0;"";""
21
- 3;" Jack";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
22
- 1;" Jill";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
24
+ 3;" Jack";"";"";"";5.0;"";"";"";"";"";"";"";"";5.0;"";""
25
+ 1;" Jill";"";"";"";5.0;"";"";"";"";"";"";"";"";5.0;"";""
23
26
  2.3;" Milestone 1";"2008-02-08-18:00:00-+0000";"2008-02-08-18:00:00-+0000";0.0;0.0;"";"";"";"";"";"";"";"";"";"";""
24
27
  3;" Check Work";"2008-02-11-09:00:00-+0000";"2008-02-15-18:00:00-+0000";4.4;5.0;"";"";"";"";"";"";"";"";"";5.0;""
25
- 1;" Jill";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
28
+ 1;" Jill";"";"";"";5.0;"";"";"";"";"";"";"";"";"";5.0;""
26
29
  2;"Execute Work";"2008-01-07-09:00:00-+0000";"2008-02-08-18:00:00-+0000";32.4;46.0;"";"";"";"";10.0;10.0;9.0;5.0;12.0;"";""
27
- 3;" Jack";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
28
- 1;" Jill";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
29
- 2;" Joe";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
30
+ 3;" Jack";"";"";"";17.0;"";"";"";"";3.0;5.0;4.0;"";5.0;"";""
31
+ 1;" Jill";"";"";"";25.0;"";"";"";"";5.0;5.0;5.0;5.0;5.0;"";""
32
+ 2;" Joe";"";"";"";4.0;"";"";"";"";2.0;"";"";"";2.0;"";""
30
33
  2.1;" Step 1";"2008-01-07-09:00:00-+0000";"2008-02-01-18:00:00-+0000";25.4;20.0;"";"";"";"";5.0;5.0;5.0;5.0;"";"";""
31
34
  1;" Jill";"";"";"";20.0;"";"";"";"";5.0;5.0;5.0;5.0;"";"";""
32
35
  2.2;" Step 2";"2008-01-07-09:00:00-+0000";"2008-02-08-18:00:00-+0000";32.4;12.0;"";"";"";"";2.0;"";"";"";10.0;"";""
33
- 3;" Jack";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
34
- 1;" Jill";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
35
- 2;" Joe";"";"";"";0.0;"";"";"";"";"";"";"";"";"";"";""
36
+ 3;" Jack";"";"";"";5.0;"";"";"";"";"";"";"";"";5.0;"";""
37
+ 1;" Jill";"";"";"";5.0;"";"";"";"";"";"";"";"";5.0;"";""
38
+ 2;" Joe";"";"";"";2.0;"";"";"";"";2.0;"";"";"";"";"";""
36
39
  "2.2.1";" Step 2.1";"2008-01-07-09:00:00-+0000";"2008-01-08-18:00:00-+0000";1.4;2.0;"";"";"";"";2.0;"";"";"";"";"";""
37
40
  2;" Joe";"";"";"";2.0;"";"";"";"";2.0;"";"";"";"";"";""
38
41
  "2.2.2";" Step 2.2";"2008-02-04-09:00:00-+0000";"2008-02-08-18:00:00-+0000";4.4;10.0;"";"";"";"";"";"";"";"";10.0;"";""
@@ -8,6 +8,7 @@
8
8
  " Execute Work";"";5.0;5.0;32.4;"";5.0;5.0;10.0
9
9
  " Step 1";"";5.0;5.0;25.4;"";5.0;5.0;10.0
10
10
  "Joe";"";2.0;"";"";"";2.0;"";2.0
11
+ " Virtual View";"";2.0;"";60.4;"";2.0;"";2.0
11
12
  " Execute Work";"";2.0;"";32.4;"";2.0;"";2.0
12
13
  " Step 2";"";2.0;"";32.4;"";2.0;"";2.0
13
14
  " Step 2.1";"";2.0;"";1.4;"";2.0;"";2.0
@@ -7,13 +7,25 @@ project prj "LogExp" "1.0" 2009-10-19-00:00-+0000 - 2009-12-18-20:00-+0000 {
7
7
 
8
8
  projectids prj
9
9
 
10
+ resource r "R"
10
11
 
11
12
  task _Task_1 "T" {
12
- start 2009-10-19-00:00-+0000
13
- milestone
13
+ start 2009-10-19-15:00-+0000
14
+ end 2009-10-19-23:00-+0000
15
+ scheduling asap
14
16
  scheduled
15
17
  }
16
18
  supplement task _Task_1 {
19
+ booking r 2009-10-19-15:00-+0000 + 8.0h { overtime 2 }
17
20
  priority 500
18
21
  projectid prj
19
22
  }
23
+ supplement resource r {
24
+ workinghours sun off
25
+ workinghours mon 9:00 - 17:00
26
+ workinghours tue 9:00 - 17:00
27
+ workinghours wed 9:00 - 17:00
28
+ workinghours thu 9:00 - 17:00
29
+ workinghours fri 9:00 - 17:00
30
+ workinghours sat off
31
+ }