taskjuggler 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }