taskjuggler 0.0.4 → 0.0.5

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 (829) hide show
  1. data/README +1 -1
  2. data/bin/tj3client +3 -0
  3. data/bin/tj3d +3 -0
  4. data/bin/tj3ts_receiver +3 -0
  5. data/bin/tj3ts_sender +3 -0
  6. data/bin/tj3ts_summary +3 -0
  7. data/data/css/tjmanual.css +14 -0
  8. data/data/css/tjreport.css +233 -21
  9. data/data/scripts/wz_tooltip.js +20 -20
  10. data/doc/AppConfig.html +1389 -0
  11. data/doc/Arguments.html +678 -0
  12. data/doc/COPYING.html +837 -0
  13. data/doc/Object.html +996 -0
  14. data/doc/README.html +523 -0
  15. data/doc/RuntimeConfig.html +762 -0
  16. data/doc/String.html +872 -0
  17. data/doc/TaskJuggler/Account.html +691 -0
  18. data/doc/TaskJuggler/AccountAttribute.html +707 -0
  19. data/doc/TaskJuggler/AccountScenario.html +650 -0
  20. data/doc/TaskJuggler/Allocation.html +898 -0
  21. data/doc/TaskJuggler/AllocationAttribute.html +737 -0
  22. data/doc/TaskJuggler/AttributeBase.html +1193 -0
  23. data/doc/TaskJuggler/AttributeDefinition.html +753 -0
  24. data/doc/TaskJuggler/BatchProcessor.html +1112 -0
  25. data/doc/TaskJuggler/Booking.html +797 -0
  26. data/doc/TaskJuggler/BookingListAttribute.html +709 -0
  27. data/doc/TaskJuggler/BooleanAttribute.html +707 -0
  28. data/doc/TaskJuggler/CSVFile.html +924 -0
  29. data/doc/TaskJuggler/CellSettingPattern.html +638 -0
  30. data/doc/TaskJuggler/CellSettingPatternList.html +687 -0
  31. data/doc/TaskJuggler/Charge.html +715 -0
  32. data/doc/TaskJuggler/ChargeListAttribute.html +671 -0
  33. data/doc/TaskJuggler/ChargeSet.html +887 -0
  34. data/doc/TaskJuggler/ChargeSetListAttribute.html +718 -0
  35. data/doc/TaskJuggler/ColumnListAttribute.html +673 -0
  36. data/doc/TaskJuggler/ColumnTable.html +701 -0
  37. data/doc/TaskJuggler/Daemon.html +728 -0
  38. data/doc/TaskJuggler/DateAttribute.html +675 -0
  39. data/doc/TaskJuggler/DefinitionListAttribute.html +593 -0
  40. data/doc/TaskJuggler/DependencyListAttribute.html +713 -0
  41. data/doc/TaskJuggler/DurationAttribute.html +707 -0
  42. data/doc/TaskJuggler/FixnumAttribute.html +629 -0
  43. data/doc/TaskJuggler/FlagListAttribute.html +709 -0
  44. data/doc/TaskJuggler/FloatAttribute.html +671 -0
  45. data/doc/TaskJuggler/FormatListAttribute.html +635 -0
  46. data/doc/TaskJuggler/GanttChart.html +1473 -0
  47. data/doc/TaskJuggler/GanttContainer.html +885 -0
  48. data/doc/TaskJuggler/GanttHeader.html +886 -0
  49. data/doc/TaskJuggler/GanttHeaderScaleItem.html +700 -0
  50. data/doc/TaskJuggler/GanttLine.html +1263 -0
  51. data/doc/TaskJuggler/GanttLoadStack.html +766 -0
  52. data/doc/TaskJuggler/GanttMilestone.html +865 -0
  53. data/doc/TaskJuggler/GanttRouter.html +1433 -0
  54. data/doc/TaskJuggler/GanttTaskBar.html +880 -0
  55. data/doc/TaskJuggler/HTMLDocument.html +719 -0
  56. data/doc/TaskJuggler/HTMLGraphics.html +775 -0
  57. data/doc/TaskJuggler/Interval.html +1016 -0
  58. data/doc/TaskJuggler/IntervalListAttribute.html +713 -0
  59. data/doc/TaskJuggler/JobInfo.html +881 -0
  60. data/doc/TaskJuggler/Journal.html +991 -0
  61. data/doc/TaskJuggler/JournalEntry.html +779 -0
  62. data/doc/TaskJuggler/JournalEntryList.html +952 -0
  63. data/doc/TaskJuggler/KeywordArray.html +628 -0
  64. data/doc/TaskJuggler/KeywordDocumentation.html +1662 -0
  65. data/doc/TaskJuggler/Limits/Limit.html +826 -0
  66. data/doc/TaskJuggler/Limits.html +966 -0
  67. data/doc/TaskJuggler/LimitsAttribute.html +707 -0
  68. data/doc/TaskJuggler/ListAttributeBase.html +641 -0
  69. data/doc/TaskJuggler/Log.html +1103 -0
  70. data/doc/TaskJuggler/LogFile.html +918 -0
  71. data/doc/TaskJuggler/LogicalAttribute.html +698 -0
  72. data/doc/TaskJuggler/LogicalExpression.html +739 -0
  73. data/doc/TaskJuggler/LogicalExpressionAttribute.html +629 -0
  74. data/doc/TaskJuggler/LogicalFlag.html +681 -0
  75. data/doc/TaskJuggler/LogicalFunction.html +1218 -0
  76. data/doc/TaskJuggler/LogicalOperation.html +1078 -0
  77. data/doc/TaskJuggler/Macro.html +646 -0
  78. data/doc/TaskJuggler/MacroParser.html +810 -0
  79. data/doc/TaskJuggler/MacroTable.html +810 -0
  80. data/doc/TaskJuggler/ManagerResponsibilities.html +674 -0
  81. data/doc/TaskJuggler/ManagerStatusRecord.html +678 -0
  82. data/doc/TaskJuggler/Message.html +757 -0
  83. data/doc/TaskJuggler/MessageHandler.html +679 -0
  84. data/doc/TaskJuggler/Navigator.html +867 -0
  85. data/doc/TaskJuggler/NavigatorElement.html +932 -0
  86. data/doc/TaskJuggler/NikuProject.html +662 -0
  87. data/doc/TaskJuggler/NikuReport.html +1316 -0
  88. data/doc/TaskJuggler/NikuResource.html +632 -0
  89. data/doc/TaskJuggler/OnShiftCache.html +864 -0
  90. data/doc/TaskJuggler/ProcessIntercom.html +847 -0
  91. data/doc/TaskJuggler/ProcessIntercomIface.html +664 -0
  92. data/doc/TaskJuggler/Project.html +3056 -0
  93. data/doc/TaskJuggler/ProjectBroker.html +1260 -0
  94. data/doc/TaskJuggler/ProjectBrokerIface.html +734 -0
  95. data/doc/TaskJuggler/ProjectFileParser.html +1951 -0
  96. data/doc/TaskJuggler/ProjectRecord.html +859 -0
  97. data/doc/TaskJuggler/ProjectServer.html +1092 -0
  98. data/doc/TaskJuggler/ProjectServerIface.html +768 -0
  99. data/doc/TaskJuggler/PropertyAttribute.html +629 -0
  100. data/doc/TaskJuggler/PropertyList.html +1336 -0
  101. data/doc/TaskJuggler/PropertySet.html +1785 -0
  102. data/doc/TaskJuggler/PropertyTreeNode.html +2482 -0
  103. data/doc/TaskJuggler/Query.html +1831 -0
  104. data/doc/TaskJuggler/RTFNavigator.html +729 -0
  105. data/doc/TaskJuggler/RTFQuery.html +1038 -0
  106. data/doc/TaskJuggler/RTFReport.html +740 -0
  107. data/doc/TaskJuggler/RealFormat.html +743 -0
  108. data/doc/TaskJuggler/RealFormatAttribute.html +593 -0
  109. data/doc/TaskJuggler/ReferenceAttribute.html +782 -0
  110. data/doc/TaskJuggler/Report.html +1255 -0
  111. data/doc/TaskJuggler/ReportBase.html +1198 -0
  112. data/doc/TaskJuggler/ReportContext.html +711 -0
  113. data/doc/TaskJuggler/ReportServer.html +988 -0
  114. data/doc/TaskJuggler/ReportServerIface.html +838 -0
  115. data/doc/TaskJuggler/ReportServerRecord.html +716 -0
  116. data/doc/TaskJuggler/ReportTable.html +1106 -0
  117. data/doc/TaskJuggler/ReportTableCell.html +1536 -0
  118. data/doc/TaskJuggler/ReportTableColumn.html +828 -0
  119. data/doc/TaskJuggler/ReportTableLegend.html +999 -0
  120. data/doc/TaskJuggler/ReportTableLine.html +1003 -0
  121. data/doc/TaskJuggler/Resource.html +938 -0
  122. data/doc/TaskJuggler/ResourceListAttribute.html +752 -0
  123. data/doc/TaskJuggler/ResourceListRE.html +674 -0
  124. data/doc/TaskJuggler/ResourceScenario.html +2457 -0
  125. data/doc/TaskJuggler/RichText.html +791 -0
  126. data/doc/TaskJuggler/RichTextAttribute.html +743 -0
  127. data/doc/TaskJuggler/RichTextDocument.html +972 -0
  128. data/doc/TaskJuggler/RichTextElement.html +1615 -0
  129. data/doc/TaskJuggler/RichTextException.html +667 -0
  130. data/doc/TaskJuggler/RichTextFunctionExample.html +737 -0
  131. data/doc/TaskJuggler/RichTextFunctionHandler.html +689 -0
  132. data/doc/TaskJuggler/RichTextImage.html +650 -0
  133. data/doc/TaskJuggler/RichTextIntermediate.html +1161 -0
  134. data/doc/TaskJuggler/RichTextParser.html +756 -0
  135. data/doc/TaskJuggler/RichTextScanner.html +2010 -0
  136. data/doc/TaskJuggler/RichTextSnip.html +942 -0
  137. data/doc/TaskJuggler/RichTextSyntaxRules.html +1722 -0
  138. data/doc/TaskJuggler/Scenario.html +594 -0
  139. data/doc/TaskJuggler/ScenarioData.html +815 -0
  140. data/doc/TaskJuggler/ScenarioListAttribute.html +671 -0
  141. data/doc/TaskJuggler/Scoreboard.html +1114 -0
  142. data/doc/TaskJuggler/SheetHandlerBase.html +1115 -0
  143. data/doc/TaskJuggler/SheetReceiver.html +1293 -0
  144. data/doc/TaskJuggler/SheetSender.html +1089 -0
  145. data/doc/TaskJuggler/Shift.html +689 -0
  146. data/doc/TaskJuggler/ShiftAssignment.html +950 -0
  147. data/doc/TaskJuggler/ShiftAssignments.html +1379 -0
  148. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +707 -0
  149. data/doc/TaskJuggler/ShiftScenario.html +720 -0
  150. data/doc/TaskJuggler/SortListAttribute.html +631 -0
  151. data/doc/TaskJuggler/SourceFileInfo.html +698 -0
  152. data/doc/TaskJuggler/StatusSheetReceiver.html +615 -0
  153. data/doc/TaskJuggler/StatusSheetReport.html +872 -0
  154. data/doc/TaskJuggler/StatusSheetSender.html +654 -0
  155. data/doc/TaskJuggler/StringAttribute.html +671 -0
  156. data/doc/TaskJuggler/SymbolAttribute.html +629 -0
  157. data/doc/TaskJuggler/SyntaxReference.html +1155 -0
  158. data/doc/TaskJuggler/TOCEntry.html +723 -0
  159. data/doc/TaskJuggler/TSResourceRecord.html +670 -0
  160. data/doc/TaskJuggler/TSTaskRecord.html +682 -0
  161. data/doc/TaskJuggler/TableColumnDefinition.html +830 -0
  162. data/doc/TaskJuggler/TableOfContents.html +692 -0
  163. data/doc/TaskJuggler/TableReport.html +2444 -0
  164. data/doc/TaskJuggler/Task.html +781 -0
  165. data/doc/TaskJuggler/TaskDependency.html +730 -0
  166. data/doc/TaskJuggler/TaskListAttribute.html +713 -0
  167. data/doc/TaskJuggler/TaskListRE.html +673 -0
  168. data/doc/TaskJuggler/TaskScenario.html +4380 -0
  169. data/doc/TaskJuggler/TextFormatter.html +911 -0
  170. data/doc/TaskJuggler/TextParser/Pattern.html +1482 -0
  171. data/doc/TaskJuggler/TextParser/Rule.html +1288 -0
  172. data/doc/TaskJuggler/TextParser/StackElement.html +726 -0
  173. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +648 -0
  174. data/doc/TaskJuggler/TextParser/TokenDoc.html +680 -0
  175. data/doc/TaskJuggler/TextParser.html +1670 -0
  176. data/doc/TaskJuggler/TextReport.html +856 -0
  177. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +831 -0
  178. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +832 -0
  179. data/doc/TaskJuggler/TextScanner/StreamHandle.html +737 -0
  180. data/doc/TaskJuggler/TextScanner.html +2430 -0
  181. data/doc/TaskJuggler/TimeSheet.html +1233 -0
  182. data/doc/TaskJuggler/TimeSheetReceiver.html +612 -0
  183. data/doc/TaskJuggler/TimeSheetRecord.html +1352 -0
  184. data/doc/TaskJuggler/TimeSheetReport.html +948 -0
  185. data/doc/TaskJuggler/TimeSheetSender.html +637 -0
  186. data/doc/TaskJuggler/TimeSheetSummary.html +865 -0
  187. data/doc/TaskJuggler/TimeSheets.html +674 -0
  188. data/doc/TaskJuggler/Tj3AppBase.html +782 -0
  189. data/doc/TaskJuggler/Tj3Client.html +1455 -0
  190. data/doc/TaskJuggler/Tj3Daemon.html +767 -0
  191. data/doc/TaskJuggler/Tj3SheetAppBase.html +696 -0
  192. data/doc/TaskJuggler/Tj3SsReceiver.html +682 -0
  193. data/doc/TaskJuggler/Tj3SsSender.html +708 -0
  194. data/doc/TaskJuggler/Tj3TsReceiver.html +681 -0
  195. data/doc/TaskJuggler/Tj3TsSender.html +702 -0
  196. data/doc/TaskJuggler/Tj3TsSummary.html +710 -0
  197. data/doc/TaskJuggler/TjException.html +630 -0
  198. data/doc/TaskJuggler/TjTime.html +2590 -0
  199. data/doc/TaskJuggler/TjpExample.html +835 -0
  200. data/doc/TaskJuggler/TjpExportRE.html +1581 -0
  201. data/doc/TaskJuggler/TjpSyntaxRules.html +13004 -0
  202. data/doc/TaskJuggler/UserManual.html +1145 -0
  203. data/doc/TaskJuggler/WorkingHours.html +1101 -0
  204. data/doc/TaskJuggler/WorkingHoursAttribute.html +694 -0
  205. data/doc/TaskJuggler/XMLBlob.html +645 -0
  206. data/doc/TaskJuggler/XMLComment.html +640 -0
  207. data/doc/TaskJuggler/XMLDocument.html +732 -0
  208. data/doc/TaskJuggler/XMLElement.html +900 -0
  209. data/doc/TaskJuggler/XMLNamedText.html +601 -0
  210. data/doc/TaskJuggler/XMLText.html +655 -0
  211. data/doc/TaskJuggler.html +2243 -0
  212. data/doc/index.html +3778 -17
  213. data/doc/lib/AccountScenario_rb.html +67 -0
  214. data/doc/lib/Account_rb.html +69 -0
  215. data/doc/lib/Allocation_rb.html +69 -0
  216. data/doc/lib/AppConfig_rb.html +69 -0
  217. data/doc/lib/AttributeBase_rb.html +67 -0
  218. data/doc/lib/AttributeDefinition_rb.html +65 -0
  219. data/doc/lib/Attributes_rb.html +81 -0
  220. data/doc/lib/BatchProcessor_rb.html +69 -0
  221. data/doc/lib/Booking_rb.html +65 -0
  222. data/doc/lib/ChargeSet_rb.html +67 -0
  223. data/doc/lib/Charge_rb.html +67 -0
  224. data/doc/lib/HTMLDocument_rb.html +67 -0
  225. data/doc/lib/Interval_rb.html +67 -0
  226. data/doc/lib/Journal_rb.html +65 -0
  227. data/doc/lib/KeywordArray_rb.html +65 -0
  228. data/doc/lib/KeywordDocumentation_rb.html +75 -0
  229. data/doc/lib/Limits_rb.html +67 -0
  230. data/doc/lib/LogFile_rb.html +67 -0
  231. data/doc/lib/Log_rb.html +69 -0
  232. data/doc/lib/LogicalExpression_rb.html +71 -0
  233. data/doc/lib/LogicalFunction_rb.html +67 -0
  234. data/doc/lib/LogicalOperation_rb.html +67 -0
  235. data/doc/lib/MacroParser_rb.html +69 -0
  236. data/doc/lib/MacroTable_rb.html +73 -0
  237. data/doc/lib/MessageHandler_rb.html +65 -0
  238. data/doc/lib/Message_rb.html +67 -0
  239. data/doc/lib/ProjectFileParser_rb.html +79 -0
  240. data/doc/lib/Project_rb.html +109 -0
  241. data/doc/lib/PropertyList_rb.html +65 -0
  242. data/doc/lib/PropertySet_rb.html +69 -0
  243. data/doc/lib/PropertyTreeNode_rb.html +65 -0
  244. data/doc/lib/Query_rb.html +67 -0
  245. data/doc/lib/RTFNavigator_rb.html +71 -0
  246. data/doc/lib/RTFQuery_rb.html +71 -0
  247. data/doc/lib/RTFReport_rb.html +69 -0
  248. data/doc/lib/RealFormat_rb.html +65 -0
  249. data/doc/lib/ResourceScenario_rb.html +67 -0
  250. data/doc/lib/Resource_rb.html +69 -0
  251. data/doc/lib/RichTextDocument_rb.html +71 -0
  252. data/doc/lib/RichTextElement_rb.html +73 -0
  253. data/doc/lib/RichTextFunctionExample_rb.html +71 -0
  254. data/doc/lib/RichTextFunctionHandler_rb.html +65 -0
  255. data/doc/lib/RichTextParser_rb.html +71 -0
  256. data/doc/lib/RichTextScanner_rb.html +67 -0
  257. data/doc/lib/RichTextSnip_rb.html +69 -0
  258. data/doc/lib/RichTextSyntaxRules_rb.html +65 -0
  259. data/doc/lib/RichText_rb.html +69 -0
  260. data/doc/lib/RuntimeConfig_rb.html +67 -0
  261. data/doc/lib/ScenarioData_rb.html +69 -0
  262. data/doc/lib/Scenario_rb.html +67 -0
  263. data/doc/lib/Scoreboard_rb.html +65 -0
  264. data/doc/lib/SheetHandlerBase_rb.html +69 -0
  265. data/doc/lib/SheetReceiver_rb.html +75 -0
  266. data/doc/lib/SheetSender_rb.html +73 -0
  267. data/doc/lib/ShiftAssignments_rb.html +67 -0
  268. data/doc/lib/ShiftScenario_rb.html +67 -0
  269. data/doc/lib/Shift_rb.html +69 -0
  270. data/doc/lib/SourceFileInfo_rb.html +65 -0
  271. data/doc/lib/StatusSheetReceiver_rb.html +67 -0
  272. data/doc/lib/StatusSheetSender_rb.html +67 -0
  273. data/doc/lib/SyntaxReference_rb.html +73 -0
  274. data/doc/lib/TOCEntry_rb.html +69 -0
  275. data/doc/lib/TableColumnDefinition_rb.html +65 -0
  276. data/doc/lib/TableOfContents_rb.html +69 -0
  277. data/doc/lib/TaskDependency_rb.html +65 -0
  278. data/doc/lib/TaskJuggler_rb.html +73 -0
  279. data/doc/lib/TaskScenario_rb.html +67 -0
  280. data/doc/lib/Task_rb.html +69 -0
  281. data/doc/lib/TextFormatter_rb.html +67 -0
  282. data/doc/lib/TextParser/Pattern_rb.html +67 -0
  283. data/doc/lib/TextParser/Rule_rb.html +65 -0
  284. data/doc/lib/TextParser/StackElement_rb.html +65 -0
  285. data/doc/lib/TextParser/TokenDoc_rb.html +65 -0
  286. data/doc/lib/TextParser_rb.html +75 -0
  287. data/doc/lib/TextScanner_rb.html +79 -0
  288. data/doc/lib/TimeSheetReceiver_rb.html +67 -0
  289. data/doc/lib/TimeSheetSender_rb.html +67 -0
  290. data/doc/lib/TimeSheetSummary_rb.html +67 -0
  291. data/doc/lib/TimeSheets_rb.html +65 -0
  292. data/doc/lib/Tj3AppBase_rb.html +77 -0
  293. data/doc/lib/Tj3Config_rb.html +69 -0
  294. data/doc/lib/Tj3SheetAppBase_rb.html +67 -0
  295. data/doc/lib/TjException_rb.html +65 -0
  296. data/doc/lib/TjTime_rb.html +69 -0
  297. data/doc/lib/TjpExample_rb.html +67 -0
  298. data/doc/lib/TjpSyntaxRules_rb.html +65 -0
  299. data/doc/lib/UTF8String_rb.html +65 -0
  300. data/doc/lib/UserManual_rb.html +77 -0
  301. data/doc/lib/WorkingHours_rb.html +67 -0
  302. data/doc/lib/XMLDocument_rb.html +67 -0
  303. data/doc/lib/XMLElement_rb.html +67 -0
  304. data/doc/lib/daemon/Daemon_rb.html +67 -0
  305. data/doc/lib/daemon/ProcessIntercom_rb.html +67 -0
  306. data/doc/lib/daemon/ProjectBroker_rb.html +79 -0
  307. data/doc/lib/daemon/ProjectServer_rb.html +83 -0
  308. data/doc/lib/daemon/ReportServer_rb.html +73 -0
  309. data/doc/lib/deep_copy_rb.html +65 -0
  310. data/doc/lib/reports/CSVFile_rb.html +67 -0
  311. data/doc/lib/reports/ColumnTable_rb.html +67 -0
  312. data/doc/lib/reports/GanttChart_rb.html +73 -0
  313. data/doc/lib/reports/GanttContainer_rb.html +67 -0
  314. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +65 -0
  315. data/doc/lib/reports/GanttHeader_rb.html +67 -0
  316. data/doc/lib/reports/GanttLine_rb.html +77 -0
  317. data/doc/lib/reports/GanttLoadStack_rb.html +67 -0
  318. data/doc/lib/reports/GanttMilestone_rb.html +67 -0
  319. data/doc/lib/reports/GanttRouter_rb.html +65 -0
  320. data/doc/lib/reports/GanttTaskBar_rb.html +67 -0
  321. data/doc/lib/reports/HTMLGraphics_rb.html +65 -0
  322. data/doc/lib/reports/Navigator_rb.html +67 -0
  323. data/doc/lib/reports/NikuReport_rb.html +69 -0
  324. data/doc/lib/reports/ReportBase_rb.html +65 -0
  325. data/doc/lib/reports/ReportContext_rb.html +65 -0
  326. data/doc/lib/reports/ReportTableCell_rb.html +65 -0
  327. data/doc/lib/reports/ReportTableColumn_rb.html +65 -0
  328. data/doc/lib/reports/ReportTableLegend_rb.html +65 -0
  329. data/doc/lib/reports/ReportTableLine_rb.html +67 -0
  330. data/doc/lib/reports/ReportTable_rb.html +69 -0
  331. data/doc/lib/reports/Report_rb.html +91 -0
  332. data/doc/lib/reports/ResourceListRE_rb.html +73 -0
  333. data/doc/lib/reports/StatusSheetReport_rb.html +67 -0
  334. data/doc/lib/reports/TableReport_rb.html +75 -0
  335. data/doc/lib/reports/TaskListRE_rb.html +73 -0
  336. data/doc/lib/reports/TextReport_rb.html +67 -0
  337. data/doc/lib/reports/TimeSheetReport_rb.html +67 -0
  338. data/doc/lib/reports/TjpExportRE_rb.html +67 -0
  339. data/doc/lib/ruby-signal-bug_rb.html +54 -0
  340. data/doc/lib/taskjuggler3_rb.html +73 -0
  341. data/doc/lib/tj3client_rb.html +73 -0
  342. data/doc/lib/tj3d_rb.html +73 -0
  343. data/doc/lib/tj3man_rb.html +73 -0
  344. data/doc/lib/tj3ss_receiver_rb.html +69 -0
  345. data/doc/lib/tj3ss_sender_rb.html +69 -0
  346. data/doc/lib/tj3ts_receiver_rb.html +69 -0
  347. data/doc/lib/tj3ts_sender_rb.html +69 -0
  348. data/doc/lib/tj3ts_summary_rb.html +69 -0
  349. data/doc/rdoc.css +701 -0
  350. data/examples/tutorial.tjp +25 -6
  351. data/lib/Attributes.rb +6 -2
  352. data/lib/HTMLDocument.rb +18 -2
  353. data/lib/Journal.rb +47 -4
  354. data/lib/KeywordArray.rb +1 -1
  355. data/lib/KeywordDocumentation.rb +17 -77
  356. data/lib/Log.rb +3 -1
  357. data/lib/LogFile.rb +72 -0
  358. data/lib/LogicalExpression.rb +5 -10
  359. data/lib/LogicalFunction.rb +34 -18
  360. data/lib/LogicalOperation.rb +32 -18
  361. data/lib/Project.rb +85 -13
  362. data/lib/ProjectFileParser.rb +19 -6
  363. data/lib/PropertyList.rb +12 -2
  364. data/lib/PropertyTreeNode.rb +23 -9
  365. data/lib/Query.rb +51 -13
  366. data/lib/RTFReport.rb +2 -2
  367. data/lib/Resource.rb +157 -0
  368. data/lib/ResourceScenario.rb +215 -68
  369. data/lib/RichText.rb +15 -3
  370. data/lib/RichTextDocument.rb +2 -4
  371. data/lib/RichTextElement.rb +87 -25
  372. data/lib/RichTextScanner.rb +32 -5
  373. data/lib/RichTextSnip.rb +6 -4
  374. data/lib/RichTextSyntaxRules.rb +44 -8
  375. data/lib/RuntimeConfig.rb +93 -0
  376. data/lib/Scoreboard.rb +6 -6
  377. data/lib/SheetHandlerBase.rb +215 -0
  378. data/lib/SheetReceiver.rb +355 -0
  379. data/lib/SheetSender.rb +264 -0
  380. data/lib/ShiftAssignments.rb +35 -27
  381. data/lib/StatusSheetReceiver.rb +45 -0
  382. data/lib/StatusSheetSender.rb +54 -0
  383. data/lib/SyntaxReference.rb +2 -7
  384. data/lib/Task.rb +70 -0
  385. data/lib/TaskJuggler.rb +114 -12
  386. data/lib/TaskScenario.rb +131 -22
  387. data/lib/TextFormatter.rb +177 -0
  388. data/lib/TextParser.rb +10 -1
  389. data/lib/TextScanner.rb +63 -33
  390. data/lib/TimeSheetReceiver.rb +42 -0
  391. data/lib/TimeSheetSender.rb +55 -0
  392. data/lib/TimeSheetSummary.rb +149 -0
  393. data/lib/TimeSheets.rb +406 -0
  394. data/lib/Tj3AppBase.rb +114 -0
  395. data/lib/Tj3Config.rb +1 -1
  396. data/lib/Tj3SheetAppBase.rb +59 -0
  397. data/lib/TjTime.rb +14 -1
  398. data/lib/TjpSyntaxRules.rb +573 -211
  399. data/lib/UTF8String.rb +4 -0
  400. data/lib/UserManual.rb +8 -7
  401. data/lib/XMLElement.rb +27 -19
  402. data/lib/daemon/Daemon.rb +70 -0
  403. data/lib/daemon/ProcessIntercom.rb +117 -0
  404. data/lib/daemon/ProjectBroker.rb +450 -0
  405. data/lib/daemon/ProjectServer.rb +348 -0
  406. data/lib/daemon/ReportServer.rb +194 -0
  407. data/lib/reports/ColumnTable.rb +2 -0
  408. data/lib/reports/GanttChart.rb +5 -7
  409. data/lib/reports/GanttContainer.rb +5 -8
  410. data/lib/reports/GanttHeader.rb +1 -1
  411. data/lib/reports/GanttLine.rb +89 -53
  412. data/lib/reports/GanttMilestone.rb +7 -4
  413. data/lib/reports/GanttTaskBar.rb +7 -3
  414. data/lib/reports/HTMLGraphics.rb +24 -9
  415. data/lib/reports/NikuReport.rb +414 -0
  416. data/lib/reports/Report.rb +54 -20
  417. data/lib/reports/ReportBase.rb +21 -0
  418. data/lib/reports/ReportTable.rb +29 -11
  419. data/lib/reports/ReportTableCell.rb +154 -86
  420. data/lib/reports/ReportTableLegend.rb +77 -80
  421. data/lib/reports/ResourceListRE.rb +2 -3
  422. data/lib/reports/StatusSheetReport.rb +231 -0
  423. data/lib/reports/TableReport.rb +74 -65
  424. data/lib/reports/TaskListRE.rb +2 -4
  425. data/lib/reports/TextReport.rb +18 -12
  426. data/lib/reports/TimeSheetReport.rb +145 -80
  427. data/lib/reports/TjpExportRE.rb +4 -4
  428. data/lib/ruby-signal-bug.rb +43 -0
  429. data/lib/taskjuggler3.rb +27 -10
  430. data/lib/tj3client.rb +411 -77
  431. data/lib/tj3d.rb +110 -0
  432. data/lib/tj3ss_receiver.rb +56 -0
  433. data/lib/tj3ss_sender.rb +84 -0
  434. data/lib/tj3ts_receiver.rb +59 -0
  435. data/lib/tj3ts_sender.rb +78 -0
  436. data/lib/tj3ts_summary.rb +87 -0
  437. data/manual/Day_To_Day_Juggling +761 -32
  438. data/manual/Getting_Started +12 -12
  439. data/manual/Rich_Text_Attributes +13 -1
  440. data/manual/TaskJuggler_2x_Migration +41 -3
  441. data/manual/TaskJuggler_Internals +87 -0
  442. data/manual/The_TaskJuggler_Syntax +1 -2
  443. data/manual/Tutorial +10 -10
  444. data/test/TestSuite/CSV-Reports/celltext.tjp +1 -1
  445. data/test/TestSuite/HTML-Reports/TimeSheet.html +79 -0
  446. data/test/TestSuite/HTML-Reports/icons/trend-down.png +0 -0
  447. data/test/TestSuite/HTML-Reports/icons/trend-flat.png +0 -0
  448. data/test/TestSuite/HTML-Reports/icons/trend-up.png +0 -0
  449. data/test/TestSuite/HTML-Reports/reference.html +51 -0
  450. data/test/TestSuite/Scheduler/Correct/Booking2.html +603 -0
  451. data/test/TestSuite/Scheduler/Correct/Booking2.tjp +57 -0
  452. data/test/TestSuite/Scheduler/Correct/Duration.tjp +32 -18
  453. data/test/TestSuite/Scheduler/Correct/Manager.tjp +9 -0
  454. data/test/TestSuite/Scheduler/Correct/Shift.html +429 -0
  455. data/test/TestSuite/Scheduler/Correct/Shift2.html +162 -0
  456. data/test/TestSuite/Scheduler/Correct/Shift2.tjp +67 -0
  457. data/test/TestSuite/{Syntax/Correct/TimeSheet.tjp → Scheduler/Correct/TimeSheet2.tjp} +21 -8
  458. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +52 -0
  459. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +195 -0
  460. data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/details.png +0 -0
  461. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  462. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  463. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  464. data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/resource.png +0 -0
  465. data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/resourcegroup.png +0 -0
  466. data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/task.png +0 -0
  467. data/test/TestSuite/{Syntax → Scheduler}/Correct/icons/taskgroup.png +0 -0
  468. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  469. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  470. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  471. data/test/TestSuite/{HTML-Reports/scripts → Scheduler/Correct}/scripts/wz_tooltip.js +0 -0
  472. data/test/TestSuite/Scheduler/Errors/manager_is_group.tjp +15 -0
  473. data/test/TestSuite/Scheduler/Errors/manager_is_self.tjp +11 -0
  474. data/test/TestSuite/Scheduler/Errors/resource_fail_check.tjp +12 -0
  475. data/test/TestSuite/Scheduler/Errors/resource_warn_check.tjp +12 -0
  476. data/test/TestSuite/Scheduler/Errors/task_fail_check.tjp +8 -0
  477. data/test/TestSuite/Scheduler/Errors/task_warn_check.tjp +8 -0
  478. data/test/TestSuite/Scheduler/Errors/ts_alert1_more_details.tjp +20 -0
  479. data/test/TestSuite/Scheduler/Errors/ts_alert2_more_details.tjp +21 -0
  480. data/test/TestSuite/Scheduler/Errors/ts_no_expected_end.tjp +26 -0
  481. data/test/TestSuite/Scheduler/Errors/ts_no_headline1.tjp +27 -0
  482. data/test/TestSuite/Scheduler/Errors/ts_no_rem_or_end.tjp +26 -0
  483. data/test/TestSuite/Scheduler/Errors/ts_no_remaining.tjp +26 -0
  484. data/test/TestSuite/Scheduler/Errors/ts_no_status_work.tjp +18 -0
  485. data/test/TestSuite/Scheduler/Errors/ts_no_work.tjp +26 -0
  486. data/test/TestSuite/Scheduler/Errors/ts_res_new_task.tjp +20 -0
  487. data/test/TestSuite/Scheduler/Errors/ts_work_too_high.tjp +27 -0
  488. data/test/TestSuite/Scheduler/Errors/ts_work_too_low.tjp +27 -0
  489. data/test/TestSuite/StatusSheets/boss.tji +45 -0
  490. data/test/TestSuite/StatusSheets/boss_mail +51 -0
  491. data/test/TestSuite/StatusSheets/dev2_mail +37 -0
  492. data/test/TestSuite/StatusSheets/project.tjp +275 -0
  493. data/test/TestSuite/StatusSheets/run +50 -0
  494. data/test/TestSuite/Syntax/Correct/Include.tjp +4 -0
  495. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +10 -1
  496. data/test/TestSuite/Syntax/Correct/Manager.tjp +30 -0
  497. data/test/TestSuite/Syntax/Correct/Niku.tjp +66 -0
  498. data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +83 -0
  499. data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +1 -0
  500. data/test/TestSuite/Syntax/Correct/include/dir2/file3.tji +2 -0
  501. data/test/TestSuite/Syntax/Correct/include/file1.tji +3 -0
  502. data/test/TestSuite/Syntax/Correct/tutorial.tjp +29 -8
  503. data/test/TestSuite/Syntax/Errors/ts_bad_priority.tjp +19 -0
  504. data/test/TestSuite/Syntax/Errors/ts_default_details.tjp +22 -0
  505. data/test/TestSuite/Syntax/Errors/ts_default_summary.tjp +22 -0
  506. data/test/TestSuite/Syntax/Errors/ts_duplicate_task.tjp +23 -0
  507. data/test/TestSuite/Syntax/Errors/ts_end_too_early.tjp +18 -0
  508. data/test/TestSuite/Syntax/Errors/ts_headline_too_long.tjp +19 -0
  509. data/test/TestSuite/Syntax/Errors/ts_no_headline2.tjp +27 -0
  510. data/test/TestSuite/Syntax/Errors/ts_summary_too_long.tjp +29 -0
  511. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +36 -0
  512. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +48 -0
  513. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +67 -0
  514. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +67 -0
  515. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +48 -0
  516. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +31 -0
  517. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +36 -0
  518. data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +1 -0
  519. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +1 -0
  520. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +54 -0
  521. data/test/TestSuite/TimeSheets/TimeSheets/all.tji +2 -0
  522. data/test/TestSuite/TimeSheets/dev2_mail1 +84 -0
  523. data/test/TestSuite/TimeSheets/dev2_mail2 +87 -0
  524. data/test/TestSuite/TimeSheets/project.tjp +271 -0
  525. data/test/TestSuite/TimeSheets/receiver.log +102 -0
  526. data/test/TestSuite/TimeSheets/run +75 -0
  527. data/test/TestSuite/TimeSheets/sender.log +794 -0
  528. data/test/TestSuite/TimeSheets/summary.log +884 -0
  529. data/test/TestSuite/TimeSheets/timesheets.log +45 -0
  530. data/test/TestSuite/TimeSheets/tj3d.log +292 -0
  531. data/test/test_CSV-Reports.rb +5 -3
  532. data/test/test_RichText.rb +264 -56
  533. data/test/test_Scheduler.rb +1 -0
  534. data/test/test_TextFormatter.rb +142 -0
  535. data/test/test_TjTime.rb +15 -0
  536. metadata +816 -644
  537. data/benchmarks/UTF-8-Strings.rb +0 -58
  538. data/doc/classes/AppConfig.html +0 -880
  539. data/doc/classes/Arguments.html +0 -230
  540. data/doc/classes/Object.html +0 -229
  541. data/doc/classes/String.html +0 -399
  542. data/doc/classes/TaskJuggler/Account.html +0 -257
  543. data/doc/classes/TaskJuggler/AccountAttribute.html +0 -261
  544. data/doc/classes/TaskJuggler/AccountScenario.html +0 -218
  545. data/doc/classes/TaskJuggler/Allocation.html +0 -423
  546. data/doc/classes/TaskJuggler/AllocationAttribute.html +0 -291
  547. data/doc/classes/TaskJuggler/AttributeBase.html +0 -704
  548. data/doc/classes/TaskJuggler/AttributeDefinition.html +0 -276
  549. data/doc/classes/TaskJuggler/BatchProcessor.html +0 -347
  550. data/doc/classes/TaskJuggler/Booking.html +0 -311
  551. data/doc/classes/TaskJuggler/BookingListAttribute.html +0 -263
  552. data/doc/classes/TaskJuggler/BooleanAttribute.html +0 -261
  553. data/doc/classes/TaskJuggler/CSVFile.html +0 -329
  554. data/doc/classes/TaskJuggler/CellSettingPattern.html +0 -201
  555. data/doc/classes/TaskJuggler/CellSettingPatternList.html +0 -253
  556. data/doc/classes/TaskJuggler/Charge.html +0 -283
  557. data/doc/classes/TaskJuggler/ChargeListAttribute.html +0 -229
  558. data/doc/classes/TaskJuggler/ChargeSet.html +0 -444
  559. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +0 -276
  560. data/doc/classes/TaskJuggler/ColumnListAttribute.html +0 -231
  561. data/doc/classes/TaskJuggler/ColumnTable.html +0 -262
  562. data/doc/classes/TaskJuggler/DateAttribute.html +0 -233
  563. data/doc/classes/TaskJuggler/DefinitionListAttribute.html +0 -162
  564. data/doc/classes/TaskJuggler/DependencyListAttribute.html +0 -267
  565. data/doc/classes/TaskJuggler/DurationAttribute.html +0 -229
  566. data/doc/classes/TaskJuggler/FixnumAttribute.html +0 -194
  567. data/doc/classes/TaskJuggler/FlagListAttribute.html +0 -263
  568. data/doc/classes/TaskJuggler/FloatAttribute.html +0 -229
  569. data/doc/classes/TaskJuggler/FormatListAttribute.html +0 -197
  570. data/doc/classes/TaskJuggler/GanttChart.html +0 -696
  571. data/doc/classes/TaskJuggler/GanttContainer.html +0 -445
  572. data/doc/classes/TaskJuggler/GanttHeader.html +0 -284
  573. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +0 -249
  574. data/doc/classes/TaskJuggler/GanttLine.html +0 -402
  575. data/doc/classes/TaskJuggler/GanttLoadStack.html +0 -331
  576. data/doc/classes/TaskJuggler/GanttMilestone.html +0 -419
  577. data/doc/classes/TaskJuggler/GanttRouter.html +0 -431
  578. data/doc/classes/TaskJuggler/GanttTaskBar.html +0 -433
  579. data/doc/classes/TaskJuggler/HTMLDocument.html +0 -240
  580. data/doc/classes/TaskJuggler/HTMLGraphics.html +0 -231
  581. data/doc/classes/TaskJuggler/Interval.html +0 -558
  582. data/doc/classes/TaskJuggler/IntervalListAttribute.html +0 -267
  583. data/doc/classes/TaskJuggler/JobInfo.html +0 -340
  584. data/doc/classes/TaskJuggler/Journal.html +0 -443
  585. data/doc/classes/TaskJuggler/JournalEntry.html +0 -274
  586. data/doc/classes/TaskJuggler/JournalEntryList.html +0 -454
  587. data/doc/classes/TaskJuggler/KeywordArray.html +0 -179
  588. data/doc/classes/TaskJuggler/KeywordDocumentation.html +0 -846
  589. data/doc/classes/TaskJuggler/Limits/Limit.html +0 -385
  590. data/doc/classes/TaskJuggler/Limits.html +0 -422
  591. data/doc/classes/TaskJuggler/LimitsAttribute.html +0 -261
  592. data/doc/classes/TaskJuggler/ListAttributeBase.html +0 -207
  593. data/doc/classes/TaskJuggler/Log.html +0 -655
  594. data/doc/classes/TaskJuggler/LogicalAttribute.html +0 -259
  595. data/doc/classes/TaskJuggler/LogicalExpression.html +0 -292
  596. data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +0 -194
  597. data/doc/classes/TaskJuggler/LogicalFlag.html +0 -209
  598. data/doc/classes/TaskJuggler/LogicalFunction.html +0 -339
  599. data/doc/classes/TaskJuggler/LogicalOperation.html +0 -351
  600. data/doc/classes/TaskJuggler/Macro.html +0 -198
  601. data/doc/classes/TaskJuggler/MacroParser.html +0 -360
  602. data/doc/classes/TaskJuggler/MacroTable.html +0 -370
  603. data/doc/classes/TaskJuggler/Message.html +0 -285
  604. data/doc/classes/TaskJuggler/MessageHandler.html +0 -231
  605. data/doc/classes/TaskJuggler/Navigator.html +0 -313
  606. data/doc/classes/TaskJuggler/NavigatorElement.html +0 -449
  607. data/doc/classes/TaskJuggler/OnShiftCache.html +0 -316
  608. data/doc/classes/TaskJuggler/Project.html +0 -2257
  609. data/doc/classes/TaskJuggler/ProjectFileParser.html +0 -420
  610. data/doc/classes/TaskJuggler/PropertyAttribute.html +0 -194
  611. data/doc/classes/TaskJuggler/PropertyList.html +0 -668
  612. data/doc/classes/TaskJuggler/PropertySet.html +0 -1286
  613. data/doc/classes/TaskJuggler/PropertyTreeNode.html +0 -1742
  614. data/doc/classes/TaskJuggler/Query.html +0 -870
  615. data/doc/classes/TaskJuggler/RTFNavigator.html +0 -293
  616. data/doc/classes/TaskJuggler/RTFQuery.html +0 -343
  617. data/doc/classes/TaskJuggler/RTFReport.html +0 -304
  618. data/doc/classes/TaskJuggler/RealFormat.html +0 -309
  619. data/doc/classes/TaskJuggler/RealFormatAttribute.html +0 -162
  620. data/doc/classes/TaskJuggler/ReferenceAttribute.html +0 -328
  621. data/doc/classes/TaskJuggler/RemoteServiceManager.html +0 -335
  622. data/doc/classes/TaskJuggler/Report.html +0 -321
  623. data/doc/classes/TaskJuggler/ReportBase.html +0 -437
  624. data/doc/classes/TaskJuggler/ReportContext.html +0 -248
  625. data/doc/classes/TaskJuggler/ReportServer.html +0 -320
  626. data/doc/classes/TaskJuggler/ReportTable.html +0 -526
  627. data/doc/classes/TaskJuggler/ReportTableCell.html +0 -614
  628. data/doc/classes/TaskJuggler/ReportTableColumn.html +0 -368
  629. data/doc/classes/TaskJuggler/ReportTableLegend.html +0 -347
  630. data/doc/classes/TaskJuggler/ReportTableLine.html +0 -481
  631. data/doc/classes/TaskJuggler/Resource.html +0 -211
  632. data/doc/classes/TaskJuggler/ResourceListAttribute.html +0 -302
  633. data/doc/classes/TaskJuggler/ResourceListRE.html +0 -245
  634. data/doc/classes/TaskJuggler/ResourceScenario.html +0 -1229
  635. data/doc/classes/TaskJuggler/RichText.html +0 -357
  636. data/doc/classes/TaskJuggler/RichTextAttribute.html +0 -293
  637. data/doc/classes/TaskJuggler/RichTextDocument.html +0 -424
  638. data/doc/classes/TaskJuggler/RichTextElement.html +0 -932
  639. data/doc/classes/TaskJuggler/RichTextException.html +0 -212
  640. data/doc/classes/TaskJuggler/RichTextFunctionExample.html +0 -301
  641. data/doc/classes/TaskJuggler/RichTextFunctionHandler.html +0 -245
  642. data/doc/classes/TaskJuggler/RichTextIntermediate.html +0 -563
  643. data/doc/classes/TaskJuggler/RichTextParser.html +0 -321
  644. data/doc/classes/TaskJuggler/RichTextScanner.html +0 -424
  645. data/doc/classes/TaskJuggler/RichTextSnip.html +0 -404
  646. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +0 -1105
  647. data/doc/classes/TaskJuggler/Scenario.html +0 -163
  648. data/doc/classes/TaskJuggler/ScenarioData.html +0 -358
  649. data/doc/classes/TaskJuggler/ScenarioListAttribute.html +0 -229
  650. data/doc/classes/TaskJuggler/Scoreboard.html +0 -642
  651. data/doc/classes/TaskJuggler/Shift.html +0 -255
  652. data/doc/classes/TaskJuggler/ShiftAssignment.html +0 -492
  653. data/doc/classes/TaskJuggler/ShiftAssignments.html +0 -719
  654. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +0 -261
  655. data/doc/classes/TaskJuggler/ShiftScenario.html +0 -282
  656. data/doc/classes/TaskJuggler/SortListAttribute.html +0 -196
  657. data/doc/classes/TaskJuggler/SourceFileInfo.html +0 -251
  658. data/doc/classes/TaskJuggler/StringAttribute.html +0 -229
  659. data/doc/classes/TaskJuggler/SymbolAttribute.html +0 -194
  660. data/doc/classes/TaskJuggler/SyntaxReference.html +0 -520
  661. data/doc/classes/TaskJuggler/TOCEntry.html +0 -246
  662. data/doc/classes/TaskJuggler/TSResourceRecord.html +0 -197
  663. data/doc/classes/TaskJuggler/TSTaskRecord.html +0 -215
  664. data/doc/classes/TaskJuggler/TableColumnDefinition.html +0 -309
  665. data/doc/classes/TaskJuggler/TableOfContents.html +0 -260
  666. data/doc/classes/TaskJuggler/TableReport.html +0 -1015
  667. data/doc/classes/TaskJuggler/Task.html +0 -203
  668. data/doc/classes/TaskJuggler/TaskDependency.html +0 -255
  669. data/doc/classes/TaskJuggler/TaskListAttribute.html +0 -267
  670. data/doc/classes/TaskJuggler/TaskListRE.html +0 -245
  671. data/doc/classes/TaskJuggler/TaskScenario.html +0 -2543
  672. data/doc/classes/TaskJuggler/TextParser/Pattern.html +0 -927
  673. data/doc/classes/TaskJuggler/TextParser/Rule.html +0 -783
  674. data/doc/classes/TaskJuggler/TextParser/StackElement.html +0 -272
  675. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +0 -212
  676. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +0 -225
  677. data/doc/classes/TaskJuggler/TextParser.html +0 -754
  678. data/doc/classes/TaskJuggler/TextReport.html +0 -367
  679. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +0 -355
  680. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +0 -348
  681. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +0 -264
  682. data/doc/classes/TaskJuggler/TextScanner.html +0 -815
  683. data/doc/classes/TaskJuggler/TimeSheetReport.html +0 -406
  684. data/doc/classes/TaskJuggler/TjException.html +0 -185
  685. data/doc/classes/TaskJuggler/TjTime.html +0 -1904
  686. data/doc/classes/TaskJuggler/TjpExample.html +0 -314
  687. data/doc/classes/TaskJuggler/TjpExportRE.html +0 -306
  688. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +0 -10812
  689. data/doc/classes/TaskJuggler/UserManual.html +0 -605
  690. data/doc/classes/TaskJuggler/WorkingHours.html +0 -586
  691. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +0 -252
  692. data/doc/classes/TaskJuggler/XMLBlob.html +0 -207
  693. data/doc/classes/TaskJuggler/XMLComment.html +0 -206
  694. data/doc/classes/TaskJuggler/XMLDocument.html +0 -298
  695. data/doc/classes/TaskJuggler/XMLElement.html +0 -389
  696. data/doc/classes/TaskJuggler/XMLNamedText.html +0 -174
  697. data/doc/classes/TaskJuggler/XMLText.html +0 -221
  698. data/doc/classes/TaskJuggler.html +0 -1573
  699. data/doc/files/COPYING.html +0 -448
  700. data/doc/files/README.html +0 -134
  701. data/doc/files/lib/AccountScenario_rb.html +0 -117
  702. data/doc/files/lib/Account_rb.html +0 -119
  703. data/doc/files/lib/Allocation_rb.html +0 -119
  704. data/doc/files/lib/AppConfig_rb.html +0 -119
  705. data/doc/files/lib/AttributeBase_rb.html +0 -117
  706. data/doc/files/lib/AttributeDefinition_rb.html +0 -107
  707. data/doc/files/lib/Attributes_rb.html +0 -131
  708. data/doc/files/lib/BatchProcessor_rb.html +0 -119
  709. data/doc/files/lib/Booking_rb.html +0 -107
  710. data/doc/files/lib/ChargeSet_rb.html +0 -117
  711. data/doc/files/lib/Charge_rb.html +0 -117
  712. data/doc/files/lib/HTMLDocument_rb.html +0 -117
  713. data/doc/files/lib/Interval_rb.html +0 -117
  714. data/doc/files/lib/Journal_rb.html +0 -107
  715. data/doc/files/lib/KeywordArray_rb.html +0 -107
  716. data/doc/files/lib/KeywordDocumentation_rb.html +0 -123
  717. data/doc/files/lib/Limits_rb.html +0 -117
  718. data/doc/files/lib/Log_rb.html +0 -117
  719. data/doc/files/lib/LogicalExpression_rb.html +0 -121
  720. data/doc/files/lib/LogicalFunction_rb.html +0 -117
  721. data/doc/files/lib/LogicalOperation_rb.html +0 -117
  722. data/doc/files/lib/MacroParser_rb.html +0 -119
  723. data/doc/files/lib/MacroTable_rb.html +0 -123
  724. data/doc/files/lib/MessageHandler_rb.html +0 -107
  725. data/doc/files/lib/Message_rb.html +0 -117
  726. data/doc/files/lib/ProjectFileParser_rb.html +0 -129
  727. data/doc/files/lib/Project_rb.html +0 -153
  728. data/doc/files/lib/PropertyList_rb.html +0 -107
  729. data/doc/files/lib/PropertySet_rb.html +0 -119
  730. data/doc/files/lib/PropertyTreeNode_rb.html +0 -107
  731. data/doc/files/lib/Query_rb.html +0 -117
  732. data/doc/files/lib/RTFNavigator_rb.html +0 -121
  733. data/doc/files/lib/RTFQuery_rb.html +0 -121
  734. data/doc/files/lib/RTFReport_rb.html +0 -119
  735. data/doc/files/lib/RealFormat_rb.html +0 -107
  736. data/doc/files/lib/RemoteServiceManager_rb.html +0 -117
  737. data/doc/files/lib/ReportServer_rb.html +0 -107
  738. data/doc/files/lib/ResourceScenario_rb.html +0 -117
  739. data/doc/files/lib/Resource_rb.html +0 -119
  740. data/doc/files/lib/RichTextDocument_rb.html +0 -121
  741. data/doc/files/lib/RichTextElement_rb.html +0 -121
  742. data/doc/files/lib/RichTextFunctionExample_rb.html +0 -121
  743. data/doc/files/lib/RichTextFunctionHandler_rb.html +0 -107
  744. data/doc/files/lib/RichTextParser_rb.html +0 -121
  745. data/doc/files/lib/RichTextScanner_rb.html +0 -117
  746. data/doc/files/lib/RichTextSnip_rb.html +0 -119
  747. data/doc/files/lib/RichTextSyntaxRules_rb.html +0 -107
  748. data/doc/files/lib/RichText_rb.html +0 -119
  749. data/doc/files/lib/ScenarioData_rb.html +0 -119
  750. data/doc/files/lib/Scenario_rb.html +0 -117
  751. data/doc/files/lib/Scoreboard_rb.html +0 -107
  752. data/doc/files/lib/ShiftAssignments_rb.html +0 -117
  753. data/doc/files/lib/ShiftScenario_rb.html +0 -117
  754. data/doc/files/lib/Shift_rb.html +0 -119
  755. data/doc/files/lib/SourceFileInfo_rb.html +0 -107
  756. data/doc/files/lib/SyntaxReference_rb.html +0 -123
  757. data/doc/files/lib/TOCEntry_rb.html +0 -119
  758. data/doc/files/lib/TableColumnDefinition_rb.html +0 -107
  759. data/doc/files/lib/TableOfContents_rb.html +0 -119
  760. data/doc/files/lib/TaskDependency_rb.html +0 -107
  761. data/doc/files/lib/TaskJuggler_rb.html +0 -125
  762. data/doc/files/lib/TaskScenario_rb.html +0 -117
  763. data/doc/files/lib/Task_rb.html +0 -119
  764. data/doc/files/lib/TextParser/Pattern_rb.html +0 -117
  765. data/doc/files/lib/TextParser/Rule_rb.html +0 -107
  766. data/doc/files/lib/TextParser/StackElement_rb.html +0 -107
  767. data/doc/files/lib/TextParser/TokenDoc_rb.html +0 -107
  768. data/doc/files/lib/TextParser_rb.html +0 -125
  769. data/doc/files/lib/TextScanner_rb.html +0 -129
  770. data/doc/files/lib/Tj3Config_rb.html +0 -119
  771. data/doc/files/lib/TjException_rb.html +0 -107
  772. data/doc/files/lib/TjTime_rb.html +0 -119
  773. data/doc/files/lib/TjpExample_rb.html +0 -117
  774. data/doc/files/lib/TjpSyntaxRules_rb.html +0 -107
  775. data/doc/files/lib/UTF8String_rb.html +0 -140
  776. data/doc/files/lib/UserManual_rb.html +0 -127
  777. data/doc/files/lib/WorkingHours_rb.html +0 -117
  778. data/doc/files/lib/XMLDocument_rb.html +0 -117
  779. data/doc/files/lib/XMLElement_rb.html +0 -117
  780. data/doc/files/lib/deep_copy_rb.html +0 -107
  781. data/doc/files/lib/reports/CSVFile_rb.html +0 -117
  782. data/doc/files/lib/reports/ColumnTable_rb.html +0 -117
  783. data/doc/files/lib/reports/GanttChart_rb.html +0 -123
  784. data/doc/files/lib/reports/GanttContainer_rb.html +0 -117
  785. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +0 -107
  786. data/doc/files/lib/reports/GanttHeader_rb.html +0 -117
  787. data/doc/files/lib/reports/GanttLine_rb.html +0 -127
  788. data/doc/files/lib/reports/GanttLoadStack_rb.html +0 -117
  789. data/doc/files/lib/reports/GanttMilestone_rb.html +0 -117
  790. data/doc/files/lib/reports/GanttRouter_rb.html +0 -107
  791. data/doc/files/lib/reports/GanttTaskBar_rb.html +0 -117
  792. data/doc/files/lib/reports/HTMLGraphics_rb.html +0 -107
  793. data/doc/files/lib/reports/Navigator_rb.html +0 -117
  794. data/doc/files/lib/reports/ReportBase_rb.html +0 -107
  795. data/doc/files/lib/reports/ReportContext_rb.html +0 -107
  796. data/doc/files/lib/reports/ReportTableCell_rb.html +0 -107
  797. data/doc/files/lib/reports/ReportTableColumn_rb.html +0 -107
  798. data/doc/files/lib/reports/ReportTableLegend_rb.html +0 -107
  799. data/doc/files/lib/reports/ReportTableLine_rb.html +0 -117
  800. data/doc/files/lib/reports/ReportTable_rb.html +0 -119
  801. data/doc/files/lib/reports/Report_rb.html +0 -137
  802. data/doc/files/lib/reports/ResourceListRE_rb.html +0 -123
  803. data/doc/files/lib/reports/TableReport_rb.html +0 -125
  804. data/doc/files/lib/reports/TaskListRE_rb.html +0 -123
  805. data/doc/files/lib/reports/TextReport_rb.html +0 -117
  806. data/doc/files/lib/reports/TimeSheetReport_rb.html +0 -117
  807. data/doc/files/lib/reports/TjpExportRE_rb.html +0 -117
  808. data/doc/files/lib/taskjuggler3_rb.html +0 -298
  809. data/doc/files/lib/tj3client_rb.html +0 -280
  810. data/doc/files/lib/tj3man_rb.html +0 -190
  811. data/doc/fr_class_index.html +0 -345
  812. data/doc/fr_file_index.html +0 -247
  813. data/doc/fr_method_index.html +0 -2355
  814. data/doc/rdoc-style.css +0 -299
  815. data/lib/RemoteServiceManager.rb +0 -80
  816. data/lib/ReportServer.rb +0 -66
  817. data/test/TestSuite/HTML-Reports/Alerts.html +0 -172
  818. data/test/TestSuite/HTML-Reports/CellText.html +0 -758
  819. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +0 -156
  820. data/test/TestSuite/HTML-Reports/IsOngoing.html +0 -172
  821. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +0 -80
  822. data/test/TestSuite/HTML-Reports/Query.html +0 -31
  823. data/test/TestSuite/HTML-Reports/depArrows.html +0 -842
  824. data/test/TestSuite/Syntax/Correct/RawHTML.tjp +0 -31
  825. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  826. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  827. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  828. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +0 -1301
  829. data/test/TestSuite/Syntax/Errors/export_bad_extn.tjp +0 -9
@@ -32,6 +32,8 @@ but it needs your help. You have to provide the additional information in the
32
32
  project file. In return you get current status reports and an updated project
33
33
  plan based on the current status of the project.
34
34
 
35
+ ==== Using completion values ====
36
+
35
37
  The most simple form of capturing the current status of the project is to use
36
38
  the complete attribute.
37
39
 
@@ -43,27 +45,602 @@ the complete attribute.
43
45
  }
44
46
 
45
47
  This tells TaskJuggler that 50% of the task's effort has been completed by the
46
- current date. Tasks that have no completion specification will be assumed to be
47
- on track. TaskJuggler calculates the completion degree based on the current
48
- date. Completion specifications only need to be supplied for tasks that are
49
- either ahead of schedule or behind schedule. Please keep in mind that the
50
- completion degree does not affect the scheduling and resource allocation. It is
51
- only for reporting purposes. It also does not tell TaskJuggler which resource
52
- actually worked on the tasks.
53
-
54
- If you want the past work to affect scheduling you must use the booking
55
- statements as outlined in the next section.
56
-
57
- When your project plan reflects the current status of your project, TaskJuggler
58
- can generate nice status reports for you. To generate an HTML report for the
59
- last week listing all tasks that are running late, all tasks that are ongoing,
60
- tasks that have been completed last week, and task that will be started next
61
- week, you just specify
62
-
63
- htmlstatusreport "Status-Report.html" {
48
+ [[now|current date]]. Tasks that have no completion specification will
49
+ be assumed to be on track. TaskJuggler calculates the expected
50
+ completion degree based on the current date. Completion specifications
51
+ only need to be supplied for tasks that are either ahead of schedule
52
+ or behind schedule. Please be aware that the completion degree does
53
+ not affect the scheduling and resource allocation. It is only for
54
+ reporting purposes. It also does not tell TaskJuggler which resource
55
+ actually worked on the tasks, nor does it update the total or
56
+ remaining effort.
57
+
58
+ ==== Using bookings ====
59
+
60
+ When TaskJuggler schedules your plan, it can tell you who should work
61
+ when on what. Now, that's the plan. But reality might be different.
62
+ To tell TaskJuggler what really happened, you can use
63
+ [[booking.task|booking statements]]. When the past is exactly
64
+ described by providing booking statements, you can enable
65
+ [[projection|projection mode]].
66
+
67
+ Entering all the bookings for each resource and task may sound like a
68
+ daunting task at first. If you do it manually, it certainly is.
69
+ Fortunately, TaskJuggler can generate them for you by using
70
+ [[export|export reports]]. Before we discuss this in more detail, we
71
+ need to make sure that the plan is up-to-date.
72
+
73
+ === Tracking status and actuals ===
74
+
75
+ Creating a good project plan is one thing. Executing it is a whole
76
+ new story. Usually, the first plan is never fully correct and the
77
+ only way to make sure that you are making progress according to plan
78
+ is to regularly get status updates from all resources.
79
+
80
+ Status updates should be provided by all project contributors on a
81
+ regular basis, usually once a week. These updates should tell project
82
+ managers who really worked how much on what tasks and how much work
83
+ the contributors believe is really left now. There are two categories
84
+ of tasks in a project that need to be treated slightly differently.
85
+
86
+ A task can either be effort based or duration based. In the former
87
+ case, the contributors must tell how much effort is left. For
88
+ duration based task, this doesn't make much sense. For these task,
89
+ the expected end date should be reported.
90
+
91
+ In addition to those numbers, managers in the reporting chain usually
92
+ want to have a textual status that describes what happened and what
93
+ kind of issues were encountered. Usually, these textual status
94
+ reports are combined with alert levels like green, yellow and red.
95
+ Green means everything is progressing according to plan, yellow means
96
+ there is some schedule risk and red means serious trouble. Usually
97
+ first line managers like to get all the details while people further
98
+ up in the reporting chain only like to see summaries varying level of
99
+ details.
100
+
101
+ All of this creates additional overhead but is usually inevitable to
102
+ ensure that you complete the project within time and budget. As a
103
+ comprehensive project management solution, TaskJuggler provides full
104
+ support for all those tracking and reporting steps. It comes with a
105
+ powerful email and web based communication system that simplifies the
106
+ tracking process for individual contributors as well as managers.
107
+
108
+ As a side note we would like to mention that the recording of the work
109
+ time of employees is regulated by labor law in certain countries. You
110
+ might also require approval from a Worker's Council before you can
111
+ deploy time recording tools.
112
+
113
+ We also would like to point out that introducing status reporting and
114
+ time sheets is usually a big change for every staff. Don't
115
+ underestimate the psychological impact and the training requirements.
116
+ We also recommend to test the described process with a small group of
117
+ employees first to get familiar with the process and to adapt it to
118
+ your needs. Don't rush a deployment! You usually only have one chance
119
+ to roll-out such a process.
120
+
121
+ ==== The reporting and tracking cycle ====
122
+
123
+ In this description, we assume that you are using a weekly reporting
124
+ cycle. TaskJuggler does support arbitrary cycles, but we highly
125
+ recommend the described weekly cycle.
126
+
127
+ # '''Time sheets''': Every project contributor needs to fill out a
128
+ [[timesheet|time sheet]] once a week. To simplify this task as much
129
+ as possible, a template will be send out by email. The template
130
+ already lists all tasks that were planned for this week to work on
131
+ with the respective effort values and end dates. It also provides
132
+ sections for textual status reports. The contributor needs to review
133
+ and complete the time sheet and has to send it back via email.
134
+ TaskJuggler validates the submission and returns an email with either
135
+ an error message or a nicely formatted version of the time sheet.
136
+
137
+ # All time sheets must be submitted by a certain deadline, e. g.
138
+ midnight on Sunday. TaskJuggler will then compile a summary report
139
+ and sent it out to a list of interested parties. It will also detect
140
+ missing time sheets and will send out a reminder to those
141
+ contributors that have not submitted their report.
142
+
143
+ # On Monday the project managers need to review the time sheets and
144
+ update the plan accordingly. TaskJuggler can compile a list changes
145
+ compared to the plan. This makes it easy to update the plan according
146
+ to the actual progress that was made. The close the actuals match the
147
+ plan the less work this is. The project managers now generate
148
+ bookings for the last week and add them to the database with previous
149
+ bookings. Doing so, will prevent changes to the plan to affect the
150
+ past. Only the future will be modified.
151
+
152
+ # Once the plan has been updated, managers will receive their status
153
+ sheet templates per email. Each manager will get the information for
154
+ the tasks that they are [[responsible]] for. To consolidate the
155
+ information for the next manager in the reporting chain they can
156
+ moderate the reports in three ways. Consolidated manager reports are
157
+ called dashboard reports.
158
+
159
+ ## A status report for a task can be removed from the dashboard.
160
+
161
+ ## A status report for a task can be corrected or updated.
162
+
163
+ ## All reports for sub tasks of a task can be summarized by creating
164
+ a new status for that task. This will remove all reports for sub
165
+ tasks of that particular tasks from the dashboard.
166
+
167
+ # Managers than need to send back the edited status report via email.
168
+ Like with time sheets, TaskJuggler will check them and return either
169
+ an error message or a plain text version of the dashboard report of
170
+ the manager.
171
+
172
+ In addition to the plain text versions of the time sheet summaries
173
+ and the dashboards, TaskJuggler provides support for publishing them
174
+ as HTML pages from a web server.
175
+
176
+ === Implementing the status tracking system ===
177
+
178
+ ==== Prerequesites ====
179
+
180
+ The .tjp and .tji files of your project plan should be managed by a
181
+ revision control system. TaskJuggler does not require a particular
182
+ software, but for this manual we illustrate the implementation with
183
+ [http://subversion.apache.org Subversion]. It should be obvious how
184
+ to do this with other software though.
185
+
186
+ All communication of time sheets and status sheets is done via email.
187
+ TaskJuggler has built-in support for sending emails. To receive
188
+ emails and to feed them to the correct program, TaskJuggler needs
189
+ support from a mail transfer agent (MTA) and a mail processor. In
190
+ this documentation we describe the setup with
191
+ [http://www.postfix.org/ postfix] as MTA and
192
+ [http://www.procmail.org/ procmail] as mail processor. These are
193
+ standard parts of any Linux distribution and should be easy to setup.
194
+ It's certainly possible to use other MTAs and mail processors, but
195
+ this is not the scope of this manual.
196
+
197
+ Finally, you need a web server to publish your reports. This can
198
+ really be any web server. The generated reports are static HTML pages
199
+ that can simply be put into a directory that the web server is
200
+ serving.
201
+
202
+ For the email based communication you need to provide email addresses
203
+ for all project contributors. This is done in the project plan in the
204
+ resource definition by using the [[email]] attribute.
205
+
206
+ resource joe "Joe Avergage" {
207
+ email "joe@your_company.com
64
208
  }
65
209
 
66
- === Recording Resource Usage ===
210
+ In this manual, we assume you have a dedicated Linux machine with a
211
+ local user called ''''taskjuggler''''. Your project files (*.tjp and
212
+ <nowiki>*</nowiki>.tji) is under Subversion control and the
213
+ taskjuggler user has a checked-out version in
214
+ ''''/home/taskjuggler/projects/prj''''. You can use another user name,
215
+ another source code management system and even another operating
216
+ system like Windows or MacOS. This is all possible, but not the scope
217
+ of this manual.
218
+
219
+ ==== The TaskJuggler Server ====
220
+
221
+ Depending on the size of your project the scheduling time can take
222
+ several minutes or more. Since all operations need to be done on the
223
+ data of a scheduled project, it makes sense to have this data readily
224
+ available. This is the job of the TaskJuggler server or daemon in
225
+ Linux lingo. The program is called ''''tj3d''''. When started, it
226
+ automatically disconnects from the terminal and runs in the
227
+ background. All interactions with the server are done via the TCP/IP
228
+ protocol. For security reasons, only connections from the same
229
+ machine (localhost) are accepted. To get access all clients must
230
+ provide an authentication key. A TaskJuggler server can serve any
231
+ number of projects. Once a project has been loaded successfully,
232
+ clients can retrieve the data in form of reports. Projects are
233
+ identified by their project ID. If a newly added project has the same
234
+ ID such as an already loaded project, the new project will replace
235
+ the old project once it was scheduled successfully. Before you start
236
+ the server, you need to provide a configuration file with some basic
237
+ settings.
238
+
239
+ All taskjuggler components can use the same TaskJuggler configuration
240
+ file. The format is a simple plain text format that follows the
241
+ [http://www.yaml.org/ YAML specification]. The file should be called
242
+ ''''.taskjuglerrc'''' or ''''taskjuggler.rc''''. The settings are
243
+ structured by sections. Section names always start with an underscore.
244
+
245
+ _global:
246
+ authKey: topsecret
247
+ _log:
248
+ logLevel: 3
249
+ outputLevel: 3
250
+
251
+ This file sets the authentication key for all TaskJuggler components.
252
+ You must replace ''topsecret'' with your own random character
253
+ sequence.
254
+
255
+ For the purpose of this documentation we assume you have a local user
256
+ called ''taskjuggler'' and your project data in
257
+ ''''/home/taskjuggler/project/prj''''. Your TaskJuggler configuration
258
+ should then be put into
259
+ ''''/home/taskjuggler/project/prj/.taskjugglerrc''''.
260
+
261
+ The log section controls the content of the log file. Since the
262
+ daemon does not have a terminal attached to it, all messages are
263
+ stored in a file called ''''tj3d.log''''. For debugging purposes, you
264
+ can use the ''''-d'''' option to prevent the daemon from
265
+ disconnecting from the terminal. In this case the ''''outputLevel''''
266
+ configuration option controls the amount of details to be printed out.
267
+
268
+ * 0: No output
269
+ * 1: Only fatal errors
270
+ * 2: Fatal and normal errors
271
+ * 3: Like 2, but additionally with information messages
272
+ * 4: Like 3, but additionally with debug messages
273
+
274
+ The configuration file will be searched in the current directory,
275
+ the current user's home directory or ''''/etc''''. You can also
276
+ explicitly tell the server where to find the configuration file with
277
+ the ''''-c'''' option. See
278
+
279
+ tj3d --help
280
+
281
+ for details.
282
+
283
+ ==== The TaskJuggler Client ====
284
+
285
+ To control the TaskJuggler server, you need to use the TaskJuggler
286
+ client. You can use the client to add or remove projects from the
287
+ server, inquire the status of loaded projects. It can also be used to
288
+ show the available reports for each project and to generate report or
289
+ check time or status sheets.
290
+
291
+ The client must provide the correct authentication key to the server.
292
+ You need to ensure that it can find the proper configuration file
293
+ with the authentication key.
294
+
295
+ tj3client --help
296
+
297
+ will provide a full lust of supported commands. To load a project
298
+ simply type
299
+
300
+ tj3client add yourproject.tjp
301
+
302
+ In case there were no errors
303
+
304
+ tj3client status
305
+
306
+ should now list your project.
307
+
308
+ tj3client list-reports <project_id>
309
+
310
+ shows a list of available reports for the project with the provided
311
+ ID. To generate a report, you can type
312
+
313
+ tj3client report <project_id> <report_id>
314
+
315
+ ==== The Time Sheet Template Sender ====
316
+
317
+ Each project contributor needs to fill out a time sheet each week. To
318
+ simplify the process each contributor will receive a template that
319
+ already contains a lot of the information they need to provide.
320
+
321
+ To send out the time sheets, the command ''''tj3ts_sender'''' must be
322
+ used. It will call ''''tj3client'''' with appropriate parameters. To
323
+ use it, you need to have a properly configured daemon running and the
324
+ appropriate project loaded. Then you need to add the configuration
325
+ data for ''''tj3ts_sender'''' to your TaskJuggler configuration file.
326
+ The time sheet related settings have their own top-level section:
327
+
328
+ _global:
329
+ smtpServer: smtp.your_company.com
330
+ authKey: topsecret
331
+ scmCommand: "svn add %f ; svn commit -m '%m' %f"
332
+ projectId: prj
333
+ _timesheets:
334
+ senderEmail: 'TaskJuggler <timesheets@taskjuggler.your_company.com>'
335
+ _sender:
336
+ hideResource: '~isleaf()'
337
+ _summary:
338
+ sheetRecipients:
339
+ - team@your_company.com
340
+ digestRecipients:
341
+ - managers@your_company.com
342
+
343
+ The ''''smtpServer'''' defines which host will handle your emails. Replace the
344
+ host name with your local SMTP server. The 'scmCommand' setting contains the
345
+ command to add and commit new and old files to the source code management
346
+ system. The command in this example works for Subversion.
347
+
348
+ The TaskJuggler server may serve multiple projects. With the
349
+ ''''projectId'''' option you have to specify which project you would
350
+ like to work with. ''''senderEmail'''' is the email address the time
351
+ sheet infrastructure will use. Outgoing emails will have this address
352
+ as sender so that replies will come back to this email address. We'll
353
+ cover later how these are processed.
354
+
355
+ The hideResource option works similarly to the [[hideresource]]
356
+ attribute in the report definitions of the project plan. It allows
357
+ you to restrict the sending of time sheet templates to a subset of
358
+ your defined resources. In this example, we only want to send
359
+ templates to individual resources and not the teams you might have
360
+ defined.
361
+
362
+ By default the time sheets will cover the week from Monday morning
363
+ 0:00 to Sunday night 24:00. When called without the ''''-e''''
364
+ option, ''''tj3ts_sender'''' will send out templates for the current
365
+ week.
366
+
367
+ To call the ''''tj3ts_sender'''' command you either need to be in the
368
+ ''''/home/taskjuggler/projects/prj'''' directory or use the
369
+ ''''-c'''' command line option to point it to the configuration file
370
+ to use. In the latter case you also need to call it with the
371
+ ''''-d'''' option to change the output directory to your project
372
+ directory.
373
+
374
+ To test the command without sending out actual emails you can use the
375
+ ''''--dryrun'''' option on the command line. To do its job,
376
+ ''''tj3ts_sender'''' needs to generate a number of files and
377
+ directories. A copy of the generated templates will be stored in
378
+ ''''TimeSheetTemplates/<date>/'''' under
379
+ ''''<resource_id>-date.tji''''. ''''<date>'''' is replaced with the
380
+ end date of the reporting interval and ''''<resoruce_id>'''' is the ID
381
+ of the resource.
382
+
383
+ If you re-run the command existing templates will not be regenerated
384
+ nor will they be sent out again. You can use the ''''-f''''
385
+ command line option to force them to be generated and sent out again.
386
+
387
+ The ''''tj3ts_sender'''' command will also add the reporting interval
388
+ to a file called ''''TimeSheetTemplates/acceptable_invervals''''.
389
+ We'll cover this file later on when we deal with the time sheet
390
+ receiver.
391
+
392
+ ==== The Time Sheet Receiver ====
393
+
394
+ To receive the filled-out time sheets and to process them
395
+ automatically you need to create a special user. TaskJuggler requires
396
+ a number of email addresses to be setup to receive emails. We
397
+ recommend to use the following setup. Create a special user called
398
+ ''''taskjuggler'''' on a dedicated Linux machine. Then create the
399
+ following email aliases for this user.
400
+
401
+ timesheets
402
+ timesheet-request
403
+ statussheets
404
+ statussheet-request
405
+
406
+ Your MTA must be configured to use procmail for email delivery. See
407
+ the manual of your MTA for details on how to configure aliases and
408
+ for using procmail for delivery. If you have a resident MTA expert
409
+ you should ask him or her for support.
410
+
411
+ The next step is to configure procmail to forward the incoming emails
412
+ to the appropriate TaskJuggler components. Create a file called
413
+ ''''.procmailrc'''' in the home directory of the taskjuggler user and
414
+ put in the following content:
415
+
416
+ For debugging and testing purposes, all incoming emails are archived
417
+ in a directory called ''''Mail''''. If there is no such directory in
418
+ the taskjuggler home directory, you need to create it now.
419
+
420
+ PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin
421
+ MAILDIR=$HOME/Mail/
422
+ DEFAULT=$HOME/Mail/all
423
+ LOGFILE=$MAILDIR/procmail.log
424
+ SHELL=/bin/sh
425
+ PROJECTDIR=/home/taskjuggler/projects/prj
426
+ LANG=en_US.UTF-8
427
+ LC_ALL=en_US.UTF-8
428
+
429
+ # Archive all incoming emails in a file called all
430
+ :0 c
431
+ all
432
+
433
+ :0
434
+ * ^Subject:.*Out of Office.*
435
+ /dev/null
436
+
437
+ :0
438
+ * ^To:.*timesheets@taskjuggler\.your_company\.com
439
+ {
440
+ :0 c:
441
+ timesheets
442
+
443
+ :0 w: tj3ts_receiver.lock
444
+ | tj3ts_receiver --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
445
+
446
+ :0
447
+ failed_sheets
448
+ }
449
+
450
+ :0
451
+ * ^To:.*timesheet-request@taskjuggler\.your_company\.com
452
+ {
453
+ ID=`formail -xSubject:`
454
+
455
+ :0 c:
456
+ timesheet-request
457
+
458
+ :0 w: tj3ts_sender.lock
459
+ | tj3ts_sender -r $ID -f --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
460
+ }
461
+
462
+ :0
463
+ * ^To:.*statussheets@taskjuggler\.your_company\.com
464
+ {
465
+ :0 c:
466
+ statussheets
467
+
468
+ :0 w: tj3ss_receiver.lock
469
+ | tj3ss_receiver --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
470
+
471
+ :0
472
+ failed_sheets
473
+ }
474
+
475
+ :0
476
+ * ^To:.*statussheet-request@taskjuggler\.your_company\.com
477
+ {
478
+ ID=`formail -xSubject:`
479
+
480
+ :0 c:
481
+ statussheet-request
482
+
483
+ :0 w: tj3ss_sender.lock
484
+ | tj3ss_sender -r $ID -f --silent -c $PROJECTDIR/.taskjugglerrc -d $PROJECTDIR
485
+ }
486
+
487
+ # Forward a copy to project admins
488
+ :0 c
489
+ ! taskjuggler-admin@your_company.com
490
+
491
+ # Since we have archived a copy we can discard all mails here.
492
+ :0
493
+ /dev/null
494
+
495
+ This procmail configuration will cause incoming emails that are
496
+ addressed to timesheets@taskjuggler.your_company.com to be forwarded
497
+ to the ''''tj3ts_receiver'''' program. Of course you need to replace
498
+ ''your_comany.com'' with whatever domain you are using.
499
+
500
+ The received emails are then checked for syntactical and logical
501
+ errors. If such are found, an email is sent back with an appropriate
502
+ error message. The time sheet contains the resource ID of the
503
+ reporting resource. As soon as this has been detected, all email
504
+ communication will be sent to the email address in the project plan.
505
+ Only when the resource ID could not be identified, the sender of the
506
+ email will get the answer. This was implemented as a security measure
507
+ so other users cannot easily retrieve project related information
508
+ from other users.
509
+
510
+ Correct time sheets are archived in the ''''TimeSheets/<date>/''''
511
+ directory where ''''<date>'''' is the end date of the reporting
512
+ period. If the directory does not exist yet, it will be created. The
513
+ file will be called ''''<resource_id>-<date>.tji''''. If
514
+ a SCM command was specified, the file will be automatically put under
515
+ revision control. Subsequent submission of the same time sheet will
516
+ simply overwrite the earlier submissions. The file name will also be
517
+ added to a file called ''''all.tji'''' which consists of include
518
+ statements of all time sheet files in the directory. There also is an
519
+ automatically maintained file ''''all.tji'''' in the
520
+ ''''TimeSheets'''' directory that includes all the ''''<date>/all.tji''''
521
+ files. To add all the submitted time sheets to your project plan,
522
+ simply include the top-level ''''all.tji''''.
523
+
524
+ ''''tj3ts_receiver'''' will only accept time sheets for the time
525
+ periods listed in ''''TimeSheetTemplates/acceptable_intervals''''.
526
+ ''''tj3ts_sender'''' will automatically enable the current period
527
+ when it sends out the templates. If you want to stop receiving time
528
+ sheet updates for a certain period, simply remove the period from the
529
+ ''''acceptable_intervals'''' file.
530
+
531
+ ==== Time Sheet Template Requests ====
532
+
533
+ Normally, the time sheets are sent out once a week automatically. In
534
+ case a project contributor leaves earlier for vacation or has lost
535
+ the template, they can request the template for the current week
536
+ again.
537
+
538
+ By sending an email to
539
+ ''''timesheet-request@taskjuggler.your_company.com'''' and putting
540
+ their resource ID in the subject of the email, they will receive an
541
+ email with the time sheet template. The email will be sent to the
542
+ email address in the project plan, not the sender of the request
543
+ email.
544
+
545
+ ==== Time Sheet Summaries ====
546
+
547
+ All time sheets should be successfully submitted by Sunday 24:00.
548
+ After this deadline, your can send out a summary of all submitted
549
+ time sheets. This summary will also contain a list of those project
550
+ contributors that have not submitted their time sheet. These
551
+ individuals will also get a reminder to submit their time sheets
552
+ immediately.
553
+
554
+ To send out the summary report, the program ''''tj3ts_summary'''' is
555
+ used. Before you can use it, you need to add a few settings to the
556
+ TaskJuggler configuration file.
557
+
558
+ _global:
559
+ smtpServer: smtp.your_company.com
560
+ authKey: topsecret
561
+ projectId: prj
562
+ _timesheets:
563
+ senderEmail: 'TaskJuggler <timesheets@taskjuggler.your_company.com>'
564
+ _summary:
565
+ sheetRecipients:
566
+ - team@your_company.com
567
+ digestRecipients:
568
+ - managers@your_company.com
569
+
570
+ ''''sheetRecipients'''' is a list of email addresses that should
571
+ receive a copy of the submitted time sheet. Each email address must
572
+ be put on a separate, properly indented line that starts with a dash
573
+ followed by a space. The emails will have the email of the original
574
+ time sheet author as sender address.
575
+
576
+ ==== Updating the Project Plan ====
577
+
578
+ The time sheets contain two kind of information that are intended for
579
+ two sets of audiences. Project managers will be interested primarily
580
+ in the scheduling related information but surely like to look at the
581
+ task status as well.
582
+
583
+ Managers responsible for certain parts of the project will be
584
+ primarily interested in the status reports for the ongoing tasks.
585
+ We'll cover the processing of the status information in the next
586
+ sections.
587
+
588
+ This section deals with the processing of the scheduling related
589
+ information. Project contributors can specify several deviations of
590
+ the current project plan.
591
+
592
+ * Task may need more effort or time than was originally planned for.
593
+
594
+ * They may have not worked the planned amounts on the tasks.
595
+
596
+ * They may have started to work on new tasks that are not even in the
597
+ project plan. The is usually a sign of project discipline and should
598
+ be avoided. But in reality this will happen and TaskJuggler is able
599
+ to handle it.
600
+
601
+ TaskJuggler can print a summary of all the deltas between the plan
602
+ and the actual reports in the time sheets.
603
+
604
+ tj3 --warn-ts-deltas YourProject.tjp TimeSheets/all.tji
605
+
606
+ In this example call ''''YourProject.tjp'''' is your main project
607
+ file and all submitted time sheets are included by
608
+ TimeSheets/all.tji. This file and all subsequent include files are
609
+ automatically generated and updated by ''''tj3ts_receiver''''.
610
+
611
+ Project managers should use the printed output of this command to
612
+ update the project plan accordingly. The specified deltas of existing
613
+ tasks must be updated in the main project plan. For new tasks in the
614
+ time sheets, the task has to be created in the project plan. Then the
615
+ newtask statement in the time sheet needs to be converted into a
616
+ normal task report.
617
+
618
+ newtask some.task.id "My new task" {
619
+ ...
620
+ }
621
+
622
+ Needs to be converted into
623
+
624
+ task some.task.id {
625
+ ...
626
+ }
627
+
628
+ The task ID in the status sheet must match the newly created task in
629
+ the project plan.
630
+
631
+ To check that all deltas were properly processed, re-run the check
632
+ command.
633
+
634
+ tj3 --warn-ts-deltas YourProject.tjp TimeSheets/all.tji
635
+
636
+ You may also want to remove the interval from the
637
+ ''''TimeSheetTemplates/acceptable_intervals'''' file to prevent
638
+ further submissions of time sheets for this time period.
639
+
640
+ === Recording actual Resource Usage ===
641
+
642
+ To ensure that future changes won't change the past of the project,
643
+ you should follow the procedure described in this section.
67
644
 
68
645
  The initial project plan should be made by entering the minimum amount of
69
646
  required information such as task dependencies and efforts. TaskJuggler will
@@ -96,15 +673,30 @@ The sloppy attribute defines the accuracy of your bookings. If it's missing or
96
673
  hours. With higher values the interval may overlap with off-hour or vacation
97
674
  time slots. See details on sloppy.
98
675
 
676
+ The booking statements are designed to describe actual work performed
677
+ by resources at a very accurate level. Many project managers are too
678
+ lazy to record information at such a level of detail. TaskJuggler
679
+ offers some mechanisms to simplify your work. Using ''''sloppy'''' is
680
+ one of them, but you should read very carefully what it does. In
681
+ almost every case we recommend to use the procedure described below
682
+ instead.
683
+
684
+ Another popular mistake is that user forget that dates for bookings
685
+ behave just like every other date in TaskJuggler.
686
+
687
+ resource dev1 "Developer 1" {
688
+ booking impl 2005-04-11 +8h { sloppy 2 }
689
+ }
690
+
691
+ This is almost a classic on the mailing list. 2005-04-11 means
692
+ 2005-04-11-0:00. So you are trying to allocate dev1 from midnight to
693
+ 8am. Since dev1 is usually is off duty at this time no allocations
694
+ will be performed. By using the ''''sloppy 2'''' attribute you won't
695
+ even get a warning for this mistake.
696
+
99
697
  If you don't like to mix the resource definitions and their bookings, you can
100
698
  specify the bookings with supplement statements. These supplement statements
101
- can even reside in an other file. Some companies have created a web front-end
102
- for their developers to report the completed work against the project plan. The
103
- reports are stored in a database and include files for TaskJuggler are
104
- generated from this database. This way the project manager gets a very current
105
- status of the project and can compute the current project plan based on these
106
- data without much effort. If you are interested in this you should have a look
107
- at the download section of the TaskJuggler web site.
699
+ can even reside in an other file.
108
700
 
109
701
  It is ok to specify bookings beyond the effort value found in the task
110
702
  definition. In case you want to declare a task as done, even if the bookings do
@@ -114,11 +706,6 @@ not reach the specified effort or length, you can use the scheduled property.
114
706
  actual:scheduled
115
707
  }
116
708
 
117
- As a side note we would like to mention that the recording of the work time of
118
- employees is regulated by labor law in certain countries. You might also
119
- require approval from a Worker's Council before you can deploy time recording
120
- tools.
121
-
122
709
  In case your actual progress does not deviate a lot from your project plan, you
123
710
  can generate the file with the booking statements automatically.
124
711
 
@@ -126,7 +713,7 @@ can generate the file with the booking statements automatically.
126
713
  hideresource 0
127
714
  start 2005-04-11
128
715
  end 2005-04-16
129
- properties bookings
716
+ taskattributes *
130
717
  }
131
718
 
132
719
  This will generate a TaskJuggler include file that contains all bookings
@@ -166,3 +753,145 @@ Each time you review your project status you should generate such an include
166
753
  file for the period that you are reviewing. Then you sync the content with the
167
754
  feedback that you get from your resources and add the file to the project plan.
168
755
 
756
+ ==== Status Sheets =====
757
+
758
+ For larger projects with many contributors the flood of time sheets
759
+ can become hard to manage. Higher level managers are usually not
760
+ interested in all the details as long as the project executes
761
+ according to plan. To keep the managers on each level informed with
762
+ the proper amount and content TaskJuggler provides the concept of
763
+ status sheets.
764
+
765
+ To use status sheets, the reporting chains must be reflected in the
766
+ task hierarchy of the project. The [[responsible]] attribute must be
767
+ used to assign tasks to managers. Leaf tasks or whole sub trees must
768
+ be assigned to the lowest level of management. The responsibility for
769
+ one or more level of parent tasks must be assigned to the next level
770
+ of managers and so on.
771
+
772
+ When all time sheets have been submitted, the reports for all tasks
773
+ are sent to the responsible managers for these tasks. The information
774
+ is generated by the ''''tj3ss_sender'''' program and is called a status
775
+ report template. Each manager will get one template that includes the
776
+ status reports for the tasks they are responsible for.
777
+
778
+ It's not the managers task to prepare the report for the next level
779
+ of management. To do this, the manager has 3 options:
780
+
781
+ * Forward the status report of a task directly to the next level. The
782
+ original authorship can be keep or removed. The content can also be
783
+ edited if needed.
784
+
785
+ * Similar reports for a task or a whole task sub-tree can be combined
786
+ into just one report. To achieve this a new task report must be
787
+ created for the parent tasks of these lower-level tasks. This will
788
+ replace all reports for sub tasks with this newly created report.
789
+
790
+ * A task report can simply be removed from the status report.
791
+
792
+ The status sheet template is designed to perform all three actions in
793
+ a simple manner. The original reports are commented out. To remove a
794
+ report, it needs to be uncommented and the headline must be set to an
795
+ empty string. To change a report, the text must be edited after
796
+ the comment marks have been removed. To create a summary report for a
797
+ group of tasks, a new report for the common parent task must be
798
+ created.
799
+
800
+ ==== The Status Sheet Template Sender ====
801
+
802
+ To send out the time sheets, the command ''''tj3ts_sender'''' must be
803
+ used. It will use the ''''tj3client'''' program to do retrieve the
804
+ necessary data from the TaskJuggler server.
805
+
806
+ Before the program can be used, a new section must be added to the
807
+ TaskJuggelr configuration file.
808
+
809
+ _statussheets:
810
+ projectId: prj
811
+ _sender:
812
+ senderEmail: 'TaskJuggler <statussheets@taskjuggler.amd.com>'
813
+ hideResource: '~(isleaf() & manager)'
814
+
815
+ If you are using status sheets for only one level of management you
816
+ can hardcode that like in the example above. For multiple level of
817
+ management you need to specify which group of managers should the
818
+ report templates be generated for and pass that information on the
819
+ command line. Use the ''''--hideresource'''' option to specify a
820
+ logicalexpression to filter away the resources you don't want
821
+ templates to be generated for. The easiest way to achieve this is by
822
+ using unique flags for each management level. In the example above we
823
+ assume you have assigned the flag ''''manager'''' to each first-level
824
+ manager.
825
+
826
+ For the override mechanism to work, the manager reports must always
827
+ have a newer date than the original report. So, the end date of the
828
+ first-level manager status sheets must be after the time sheet
829
+ interval. The second-level mangers must use a later date than the
830
+ first-level managers and so on.
831
+
832
+ By default ''''tj3ss_sender'''' will use the next Wednesday as end
833
+ date. If you need a different date, you must use the ''''-e''''
834
+ option to specify that date.
835
+
836
+ Let's say you have two levels of managers that use status sheets. The
837
+ time sheets are due midnight on Sunday. The project managers can work
838
+ in the deltas and new tasks on Monday. After that you generate the
839
+ reports for the first level managers with and end date of Wednesday.
840
+ This implies a submission deadline of midnight on Tuesday. The second
841
+ level manager templates will be sent out right after this deadline
842
+ with an end date of Thursday. That would be the deadline for the
843
+ second-level managers. The final report can than be generated by
844
+ TaskJuggler automatically right after that deadline.
845
+
846
+ ==== Requesting Status Sheet Templates ====
847
+
848
+ Usually the status sheets templates should be send out automatically.
849
+ But sometimes a manager needs them earlier or needs an updated
850
+ version due to a late incoming downstream report.
851
+
852
+ The above provided procmail configuration supports the generation of
853
+ status sheets templates on request by email.
854
+
855
+ By sending an email to statussheet-request@taskjuggler.your_company.com
856
+ and putting their resource ID in the subject of the email, managers will
857
+ receive an email with the status sheet template. The email will be sent
858
+ to the email address in the project plan, not the sender of the
859
+ request email.
860
+
861
+ The setup described here only works for first-level managers. By
862
+ adding more email addresses, this can easily be extended for more
863
+ levels of management. You just need to make sure that
864
+ ''''tj3ss_sender'''' is called with the proper parameters to change
865
+ the resource selection and end date.
866
+
867
+ ==== The Status Sheet Receiver ====
868
+
869
+ Similarly to the time sheets a the completed status sheets must be
870
+ send back by email. We already described how the necessary email
871
+ aliases should be configured. For status sheets the address
872
+ ''''statussheets@taskjuggler.your_company.com'''' can be used.
873
+
874
+ The incoming emails will then be forwarded to the
875
+ ''''tj3ss_receiver'''' program that will process them. To use it, you
876
+ first need to add the following settings to the ''''statussheets''''
877
+ section of your TaskJuggler configuration file:
878
+
879
+ _statussheets:
880
+ projectId: prj
881
+ _receiver:
882
+ senderEmail: 'TaskJuggler <statussheets@taskjuggler.amd.com>'
883
+
884
+ This will set the sender email of outgoing emails. Every incoming
885
+ status sheet will be checked and either an error message will be
886
+ returned or a consolidated status report for all tasks that the
887
+ resource is responsible for. This report can either be directly
888
+ forwarded to the next level manager or interested groups, or an HTML
889
+ report can be generated and shared. This is especially useful in case
890
+ the next level management is not getting status sheet templates.
891
+
892
+ Usually status reports only contain task reports for the current
893
+ reporting period. But if there were tasks with an elevated status,
894
+ these will be carried forward until they were removed by providing an
895
+ empty headline or replaced with a new report for the same task or a
896
+ parent task.
897
+