taskjuggler 0.0.11 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (697) hide show
  1. data/CHANGELOG +6 -1550
  2. data/benchmarks/UTF-8-Strings.rb +58 -0
  3. data/benchmarks/profile.clt +36082 -0
  4. data/benchmarks/profile.html +58182 -0
  5. data/benchmarks/runbench.rb +2 -2
  6. data/data/css/tjmanual.css +0 -1
  7. data/doc/AppConfig.html +1491 -0
  8. data/doc/CHANGELOG.html +557 -0
  9. data/doc/COPYING.html +899 -0
  10. data/doc/Diff.html +1193 -0
  11. data/doc/Diff/Hunk.html +1026 -0
  12. data/doc/Diffable.html +684 -0
  13. data/doc/DiffableString.html +684 -0
  14. data/doc/Object.html +720 -0
  15. data/doc/README_rdoc.html +742 -0
  16. data/doc/RuntimeConfig.html +856 -0
  17. data/doc/String.html +1005 -0
  18. data/doc/TaskJuggler.html +2639 -0
  19. data/doc/TaskJuggler/Account.html +753 -0
  20. data/doc/TaskJuggler/AccountAttribute.html +769 -0
  21. data/doc/TaskJuggler/AccountScenario.html +712 -0
  22. data/doc/TaskJuggler/Allocation.html +963 -0
  23. data/doc/TaskJuggler/AllocationAttribute.html +799 -0
  24. data/doc/TaskJuggler/AttributeBase.html +1328 -0
  25. data/doc/TaskJuggler/AttributeDefinition.html +815 -0
  26. data/doc/TaskJuggler/AttributeOverwrite.html +606 -0
  27. data/doc/TaskJuggler/BatchProcessor.html +1178 -0
  28. data/doc/TaskJuggler/Booking.html +859 -0
  29. data/doc/TaskJuggler/BookingListAttribute.html +769 -0
  30. data/doc/TaskJuggler/BooleanAttribute.html +769 -0
  31. data/doc/TaskJuggler/CSVFile.html +1128 -0
  32. data/doc/TaskJuggler/CellSettingPattern.html +700 -0
  33. data/doc/TaskJuggler/CellSettingPatternList.html +749 -0
  34. data/doc/TaskJuggler/Charge.html +777 -0
  35. data/doc/TaskJuggler/ChargeListAttribute.html +733 -0
  36. data/doc/TaskJuggler/ChargeSet.html +949 -0
  37. data/doc/TaskJuggler/ChargeSetListAttribute.html +778 -0
  38. data/doc/TaskJuggler/CollisionDetector.html +1089 -0
  39. data/doc/TaskJuggler/ColumnListAttribute.html +733 -0
  40. data/doc/TaskJuggler/ColumnTable.html +763 -0
  41. data/doc/TaskJuggler/Daemon.html +819 -0
  42. data/doc/TaskJuggler/DataCache.html +1025 -0
  43. data/doc/TaskJuggler/DataCacheEntry.html +737 -0
  44. data/doc/TaskJuggler/DateAttribute.html +737 -0
  45. data/doc/TaskJuggler/DefinitionListAttribute.html +655 -0
  46. data/doc/TaskJuggler/DependencyListAttribute.html +773 -0
  47. data/doc/TaskJuggler/DurationAttribute.html +770 -0
  48. data/doc/TaskJuggler/FileList.html +793 -0
  49. data/doc/TaskJuggler/FileRecord.html +702 -0
  50. data/doc/TaskJuggler/FixnumAttribute.html +691 -0
  51. data/doc/TaskJuggler/FlagListAttribute.html +769 -0
  52. data/doc/TaskJuggler/FloatAttribute.html +733 -0
  53. data/doc/TaskJuggler/FormatListAttribute.html +697 -0
  54. data/doc/TaskJuggler/GanttChart.html +1487 -0
  55. data/doc/TaskJuggler/GanttContainer.html +945 -0
  56. data/doc/TaskJuggler/GanttHeader.html +948 -0
  57. data/doc/TaskJuggler/GanttHeaderScaleItem.html +762 -0
  58. data/doc/TaskJuggler/GanttLine.html +1325 -0
  59. data/doc/TaskJuggler/GanttLoadStack.html +828 -0
  60. data/doc/TaskJuggler/GanttMilestone.html +926 -0
  61. data/doc/TaskJuggler/GanttRouter.html +1136 -0
  62. data/doc/TaskJuggler/GanttTaskBar.html +948 -0
  63. data/doc/TaskJuggler/HTMLDocument.html +754 -0
  64. data/doc/TaskJuggler/HTMLElements.html +599 -0
  65. data/doc/TaskJuggler/HTMLGraphics.html +837 -0
  66. data/doc/TaskJuggler/Interval.html +1076 -0
  67. data/doc/TaskJuggler/IntervalList.html +797 -0
  68. data/doc/TaskJuggler/IntervalListAttribute.html +773 -0
  69. data/doc/TaskJuggler/JobInfo.html +943 -0
  70. data/doc/TaskJuggler/Journal.html +1248 -0
  71. data/doc/TaskJuggler/JournalEntry.html +860 -0
  72. data/doc/TaskJuggler/JournalEntryList.html +1229 -0
  73. data/doc/TaskJuggler/KeywordArray.html +696 -0
  74. data/doc/TaskJuggler/KeywordDocumentation.html +2250 -0
  75. data/doc/TaskJuggler/Limits.html +1036 -0
  76. data/doc/TaskJuggler/Limits/Limit.html +947 -0
  77. data/doc/TaskJuggler/LimitsAttribute.html +734 -0
  78. data/doc/TaskJuggler/ListAttributeBase.html +703 -0
  79. data/doc/TaskJuggler/Log.html +1163 -0
  80. data/doc/TaskJuggler/LogFile.html +980 -0
  81. data/doc/TaskJuggler/LogicalAttribute.html +760 -0
  82. data/doc/TaskJuggler/LogicalExpression.html +801 -0
  83. data/doc/TaskJuggler/LogicalExpressionAttribute.html +691 -0
  84. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +691 -0
  85. data/doc/TaskJuggler/LogicalFlag.html +753 -0
  86. data/doc/TaskJuggler/LogicalFunction.html +1409 -0
  87. data/doc/TaskJuggler/LogicalOperation.html +1144 -0
  88. data/doc/TaskJuggler/ManagerResponsibilities.html +736 -0
  89. data/doc/TaskJuggler/ManagerStatusRecord.html +740 -0
  90. data/doc/TaskJuggler/Message.html +837 -0
  91. data/doc/TaskJuggler/MessageHandler.html +1056 -0
  92. data/doc/TaskJuggler/Navigator.html +943 -0
  93. data/doc/TaskJuggler/NavigatorElement.html +994 -0
  94. data/doc/TaskJuggler/NikuProject.html +724 -0
  95. data/doc/TaskJuggler/NikuReport.html +1470 -0
  96. data/doc/TaskJuggler/NikuResource.html +694 -0
  97. data/doc/TaskJuggler/NodeListAttribute.html +655 -0
  98. data/doc/TaskJuggler/PlaceHolderCell.html +748 -0
  99. data/doc/TaskJuggler/ProcessIntercom.html +1017 -0
  100. data/doc/TaskJuggler/ProcessIntercomIface.html +773 -0
  101. data/doc/TaskJuggler/Project.html +3478 -0
  102. data/doc/TaskJuggler/ProjectBroker.html +1676 -0
  103. data/doc/TaskJuggler/ProjectBrokerIface.html +851 -0
  104. data/doc/TaskJuggler/ProjectFileParser.html +2102 -0
  105. data/doc/TaskJuggler/ProjectFileScanner.html +1896 -0
  106. data/doc/TaskJuggler/ProjectRecord.html +978 -0
  107. data/doc/TaskJuggler/ProjectServer.html +1249 -0
  108. data/doc/TaskJuggler/ProjectServerIface.html +868 -0
  109. data/doc/TaskJuggler/PropertyAttribute.html +691 -0
  110. data/doc/TaskJuggler/PropertyList.html +1399 -0
  111. data/doc/TaskJuggler/PropertySet.html +1796 -0
  112. data/doc/TaskJuggler/PropertyTreeNode.html +2851 -0
  113. data/doc/TaskJuggler/Query.html +1756 -0
  114. data/doc/TaskJuggler/RTFHandlers.html +664 -0
  115. data/doc/TaskJuggler/RTFNavigator.html +792 -0
  116. data/doc/TaskJuggler/RTFQuery.html +1083 -0
  117. data/doc/TaskJuggler/RTFReport.html +820 -0
  118. data/doc/TaskJuggler/RTFReportLink.html +812 -0
  119. data/doc/TaskJuggler/RTFWithQuerySupport.html +702 -0
  120. data/doc/TaskJuggler/RealFormat.html +805 -0
  121. data/doc/TaskJuggler/RealFormatAttribute.html +655 -0
  122. data/doc/TaskJuggler/ReferenceAttribute.html +880 -0
  123. data/doc/TaskJuggler/Report.html +1501 -0
  124. data/doc/TaskJuggler/ReportBase.html +1266 -0
  125. data/doc/TaskJuggler/ReportContext.html +837 -0
  126. data/doc/TaskJuggler/ReportServer.html +1068 -0
  127. data/doc/TaskJuggler/ReportServerIface.html +902 -0
  128. data/doc/TaskJuggler/ReportServerRecord.html +781 -0
  129. data/doc/TaskJuggler/ReportServlet.html +1029 -0
  130. data/doc/TaskJuggler/ReportTable.html +1179 -0
  131. data/doc/TaskJuggler/ReportTableCell.html +1666 -0
  132. data/doc/TaskJuggler/ReportTableColumn.html +890 -0
  133. data/doc/TaskJuggler/ReportTableLegend.html +1060 -0
  134. data/doc/TaskJuggler/ReportTableLine.html +1067 -0
  135. data/doc/TaskJuggler/Resource.html +1004 -0
  136. data/doc/TaskJuggler/ResourceListAttribute.html +829 -0
  137. data/doc/TaskJuggler/ResourceListRE.html +737 -0
  138. data/doc/TaskJuggler/ResourceScenario.html +2549 -0
  139. data/doc/TaskJuggler/RichText.html +879 -0
  140. data/doc/TaskJuggler/RichTextAttribute.html +811 -0
  141. data/doc/TaskJuggler/RichTextDocument.html +1038 -0
  142. data/doc/TaskJuggler/RichTextElement.html +1780 -0
  143. data/doc/TaskJuggler/RichTextFunctionExample.html +799 -0
  144. data/doc/TaskJuggler/RichTextFunctionHandler.html +750 -0
  145. data/doc/TaskJuggler/RichTextImage.html +712 -0
  146. data/doc/TaskJuggler/RichTextIntermediate.html +1285 -0
  147. data/doc/TaskJuggler/RichTextParser.html +868 -0
  148. data/doc/TaskJuggler/RichTextScanner.html +1565 -0
  149. data/doc/TaskJuggler/RichTextSnip.html +1000 -0
  150. data/doc/TaskJuggler/RichTextSyntaxRules.html +2052 -0
  151. data/doc/TaskJuggler/Scenario.html +656 -0
  152. data/doc/TaskJuggler/ScenarioData.html +838 -0
  153. data/doc/TaskJuggler/ScenarioListAttribute.html +733 -0
  154. data/doc/TaskJuggler/Scoreboard.html +1201 -0
  155. data/doc/TaskJuggler/SheetHandlerBase.html +1297 -0
  156. data/doc/TaskJuggler/SheetReceiver.html +1398 -0
  157. data/doc/TaskJuggler/SheetSender.html +1168 -0
  158. data/doc/TaskJuggler/Shift.html +751 -0
  159. data/doc/TaskJuggler/ShiftAssignment.html +1008 -0
  160. data/doc/TaskJuggler/ShiftAssignments.html +1413 -0
  161. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +734 -0
  162. data/doc/TaskJuggler/ShiftScenario.html +782 -0
  163. data/doc/TaskJuggler/SimpleQueryExpander.html +732 -0
  164. data/doc/TaskJuggler/SortListAttribute.html +691 -0
  165. data/doc/TaskJuggler/StatusSheetReceiver.html +678 -0
  166. data/doc/TaskJuggler/StatusSheetReport.html +935 -0
  167. data/doc/TaskJuggler/StatusSheetSender.html +808 -0
  168. data/doc/TaskJuggler/StdIoWrapper.html +696 -0
  169. data/doc/TaskJuggler/StringAttribute.html +733 -0
  170. data/doc/TaskJuggler/SymbolAttribute.html +691 -0
  171. data/doc/TaskJuggler/SyntaxReference.html +1240 -0
  172. data/doc/TaskJuggler/TOCEntry.html +836 -0
  173. data/doc/TaskJuggler/TSResourceRecord.html +732 -0
  174. data/doc/TaskJuggler/TSTaskRecord.html +744 -0
  175. data/doc/TaskJuggler/TableColumnDefinition.html +949 -0
  176. data/doc/TaskJuggler/TableOfContents.html +790 -0
  177. data/doc/TaskJuggler/TableReport.html +2555 -0
  178. data/doc/TaskJuggler/Task.html +890 -0
  179. data/doc/TaskJuggler/TaskDepListAttribute.html +773 -0
  180. data/doc/TaskJuggler/TaskDependency.html +832 -0
  181. data/doc/TaskJuggler/TaskListAttribute.html +773 -0
  182. data/doc/TaskJuggler/TaskListRE.html +736 -0
  183. data/doc/TaskJuggler/TaskScenario.html +5180 -0
  184. data/doc/TaskJuggler/TernarySearchTree.html +1341 -0
  185. data/doc/TaskJuggler/TextFormatter.html +973 -0
  186. data/doc/TaskJuggler/TextParser.html +1862 -0
  187. data/doc/TaskJuggler/TextParser/Macro.html +708 -0
  188. data/doc/TaskJuggler/TextParser/MacroTable.html +832 -0
  189. data/doc/TaskJuggler/TextParser/Pattern.html +1743 -0
  190. data/doc/TaskJuggler/TextParser/Rule.html +1419 -0
  191. data/doc/TaskJuggler/TextParser/Scanner.html +1516 -0
  192. data/doc/TaskJuggler/TextParser/Scanner/BufferStreamHandle.html +661 -0
  193. data/doc/TaskJuggler/TextParser/Scanner/FileStreamHandle.html +727 -0
  194. data/doc/TaskJuggler/TextParser/Scanner/MacroStackEntry.html +724 -0
  195. data/doc/TaskJuggler/TextParser/Scanner/StreamHandle.html +1095 -0
  196. data/doc/TaskJuggler/TextParser/SourceFileInfo.html +760 -0
  197. data/doc/TaskJuggler/TextParser/StackElement.html +940 -0
  198. data/doc/TaskJuggler/TextParser/State.html +1015 -0
  199. data/doc/TaskJuggler/TextParser/StateTransition.html +808 -0
  200. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +711 -0
  201. data/doc/TaskJuggler/TextParser/TokenDoc.html +742 -0
  202. data/doc/TaskJuggler/TextReport.html +921 -0
  203. data/doc/TaskJuggler/TimeSheet.html +1264 -0
  204. data/doc/TaskJuggler/TimeSheetReceiver.html +675 -0
  205. data/doc/TaskJuggler/TimeSheetRecord.html +1415 -0
  206. data/doc/TaskJuggler/TimeSheetReport.html +1013 -0
  207. data/doc/TaskJuggler/TimeSheetSender.html +700 -0
  208. data/doc/TaskJuggler/TimeSheetSummary.html +959 -0
  209. data/doc/TaskJuggler/TimeSheets.html +736 -0
  210. data/doc/TaskJuggler/Tj3.html +857 -0
  211. data/doc/TaskJuggler/Tj3AppBase.html +942 -0
  212. data/doc/TaskJuggler/Tj3Client.html +1510 -0
  213. data/doc/TaskJuggler/Tj3Daemon.html +870 -0
  214. data/doc/TaskJuggler/Tj3Man.html +768 -0
  215. data/doc/TaskJuggler/Tj3SheetAppBase.html +758 -0
  216. data/doc/TaskJuggler/Tj3SsReceiver.html +747 -0
  217. data/doc/TaskJuggler/Tj3SsSender.html +780 -0
  218. data/doc/TaskJuggler/Tj3TsReceiver.html +747 -0
  219. data/doc/TaskJuggler/Tj3TsSender.html +767 -0
  220. data/doc/TaskJuggler/Tj3TsSummary.html +775 -0
  221. data/doc/TaskJuggler/TjException.html +692 -0
  222. data/doc/TaskJuggler/TjRuntimeError.html +606 -0
  223. data/doc/TaskJuggler/TjTime.html +3117 -0
  224. data/doc/TaskJuggler/TjpExample.html +897 -0
  225. data/doc/TaskJuggler/TjpExportRE.html +1772 -0
  226. data/doc/TaskJuggler/TjpSyntaxRules.html +14329 -0
  227. data/doc/TaskJuggler/URLParameter.html +691 -0
  228. data/doc/TaskJuggler/UserManual.html +1224 -0
  229. data/doc/TaskJuggler/VimSyntax.html +1064 -0
  230. data/doc/TaskJuggler/WebServer.html +757 -0
  231. data/doc/TaskJuggler/WelcomePage.html +789 -0
  232. data/doc/TaskJuggler/WorkingHours.html +1218 -0
  233. data/doc/TaskJuggler/WorkingHoursAttribute.html +756 -0
  234. data/doc/TaskJuggler/XMLBlob.html +707 -0
  235. data/doc/TaskJuggler/XMLComment.html +702 -0
  236. data/doc/TaskJuggler/XMLDocument.html +803 -0
  237. data/doc/TaskJuggler/XMLElement.html +990 -0
  238. data/doc/TaskJuggler/XMLNamedText.html +663 -0
  239. data/doc/TaskJuggler/XMLText.html +717 -0
  240. data/doc/index.html +4518 -0
  241. data/doc/lib/taskjuggler/AccountScenario_rb.html +69 -0
  242. data/doc/lib/taskjuggler/Account_rb.html +71 -0
  243. data/doc/lib/taskjuggler/AlgorithmDiff_rb.html +67 -0
  244. data/doc/lib/taskjuggler/Allocation_rb.html +71 -0
  245. data/doc/lib/taskjuggler/AppConfig_rb.html +69 -0
  246. data/doc/lib/taskjuggler/AttributeBase_rb.html +69 -0
  247. data/doc/lib/taskjuggler/AttributeDefinition_rb.html +67 -0
  248. data/doc/lib/taskjuggler/Attributes_rb.html +83 -0
  249. data/doc/lib/taskjuggler/BatchProcessor_rb.html +71 -0
  250. data/doc/lib/taskjuggler/Booking_rb.html +67 -0
  251. data/doc/lib/taskjuggler/ChargeSet_rb.html +69 -0
  252. data/doc/lib/taskjuggler/Charge_rb.html +69 -0
  253. data/doc/lib/taskjuggler/DataCache_rb.html +71 -0
  254. data/doc/lib/taskjuggler/FileList_rb.html +67 -0
  255. data/doc/lib/taskjuggler/HTMLDocument_rb.html +71 -0
  256. data/doc/lib/taskjuggler/HTMLElements_rb.html +69 -0
  257. data/doc/lib/taskjuggler/IntervalList_rb.html +69 -0
  258. data/doc/lib/taskjuggler/Interval_rb.html +69 -0
  259. data/doc/lib/taskjuggler/Journal_rb.html +67 -0
  260. data/doc/lib/taskjuggler/KeywordArray_rb.html +67 -0
  261. data/doc/lib/taskjuggler/KeywordDocumentation_rb.html +77 -0
  262. data/doc/lib/taskjuggler/Limits_rb.html +69 -0
  263. data/doc/lib/taskjuggler/LogFile_rb.html +69 -0
  264. data/doc/lib/taskjuggler/Log_rb.html +71 -0
  265. data/doc/lib/taskjuggler/LogicalExpression_rb.html +73 -0
  266. data/doc/lib/taskjuggler/LogicalFunction_rb.html +69 -0
  267. data/doc/lib/taskjuggler/LogicalOperation_rb.html +69 -0
  268. data/doc/lib/taskjuggler/MessageHandler_rb.html +69 -0
  269. data/doc/lib/taskjuggler/ProjectFileParser_rb.html +77 -0
  270. data/doc/lib/taskjuggler/ProjectFileScanner_rb.html +69 -0
  271. data/doc/lib/taskjuggler/Project_rb.html +113 -0
  272. data/doc/lib/taskjuggler/PropertyList_rb.html +67 -0
  273. data/doc/lib/taskjuggler/PropertySet_rb.html +71 -0
  274. data/doc/lib/taskjuggler/PropertyTreeNode_rb.html +67 -0
  275. data/doc/lib/taskjuggler/Query_rb.html +69 -0
  276. data/doc/lib/taskjuggler/RealFormat_rb.html +67 -0
  277. data/doc/lib/taskjuggler/ResourceScenario_rb.html +69 -0
  278. data/doc/lib/taskjuggler/Resource_rb.html +71 -0
  279. data/doc/lib/taskjuggler/RichText/Document_rb.html +73 -0
  280. data/doc/lib/taskjuggler/RichText/Element_rb.html +75 -0
  281. data/doc/lib/taskjuggler/RichText/FunctionExample_rb.html +73 -0
  282. data/doc/lib/taskjuggler/RichText/FunctionHandler_rb.html +67 -0
  283. data/doc/lib/taskjuggler/RichText/Parser_rb.html +75 -0
  284. data/doc/lib/taskjuggler/RichText/RTFHandlers_rb.html +75 -0
  285. data/doc/lib/taskjuggler/RichText/RTFNavigator_rb.html +73 -0
  286. data/doc/lib/taskjuggler/RichText/RTFQuery_rb.html +73 -0
  287. data/doc/lib/taskjuggler/RichText/RTFReportLink_rb.html +75 -0
  288. data/doc/lib/taskjuggler/RichText/RTFReport_rb.html +71 -0
  289. data/doc/lib/taskjuggler/RichText/RTFWithQuerySupport_rb.html +69 -0
  290. data/doc/lib/taskjuggler/RichText/Scanner_rb.html +71 -0
  291. data/doc/lib/taskjuggler/RichText/Snip_rb.html +71 -0
  292. data/doc/lib/taskjuggler/RichText/SyntaxRules_rb.html +67 -0
  293. data/doc/lib/taskjuggler/RichText/TOCEntry_rb.html +71 -0
  294. data/doc/lib/taskjuggler/RichText/TableOfContents_rb.html +71 -0
  295. data/doc/lib/taskjuggler/RichText_rb.html +73 -0
  296. data/doc/lib/taskjuggler/RuntimeConfig_rb.html +69 -0
  297. data/doc/lib/taskjuggler/ScenarioData_rb.html +71 -0
  298. data/doc/lib/taskjuggler/Scenario_rb.html +69 -0
  299. data/doc/lib/taskjuggler/Scoreboard_rb.html +69 -0
  300. data/doc/lib/taskjuggler/SheetHandlerBase_rb.html +75 -0
  301. data/doc/lib/taskjuggler/SheetReceiver_rb.html +81 -0
  302. data/doc/lib/taskjuggler/SheetSender_rb.html +79 -0
  303. data/doc/lib/taskjuggler/ShiftAssignments_rb.html +71 -0
  304. data/doc/lib/taskjuggler/ShiftScenario_rb.html +69 -0
  305. data/doc/lib/taskjuggler/Shift_rb.html +71 -0
  306. data/doc/lib/taskjuggler/SimpleQueryExpander_rb.html +69 -0
  307. data/doc/lib/taskjuggler/StatusSheetReceiver_rb.html +69 -0
  308. data/doc/lib/taskjuggler/StatusSheetSender_rb.html +69 -0
  309. data/doc/lib/taskjuggler/StdIoWrapper_rb.html +67 -0
  310. data/doc/lib/taskjuggler/SyntaxReference_rb.html +75 -0
  311. data/doc/lib/taskjuggler/TableColumnDefinition_rb.html +67 -0
  312. data/doc/lib/taskjuggler/TaskDependency_rb.html +67 -0
  313. data/doc/lib/taskjuggler/TaskJuggler_rb.html +75 -0
  314. data/doc/lib/taskjuggler/TaskScenario_rb.html +71 -0
  315. data/doc/lib/taskjuggler/Task_rb.html +71 -0
  316. data/doc/lib/taskjuggler/TernarySearchTree_rb.html +69 -0
  317. data/doc/lib/taskjuggler/TextFormatter_rb.html +69 -0
  318. data/doc/lib/taskjuggler/TextParser/MacroTable_rb.html +67 -0
  319. data/doc/lib/taskjuggler/TextParser/Pattern_rb.html +71 -0
  320. data/doc/lib/taskjuggler/TextParser/Rule_rb.html +69 -0
  321. data/doc/lib/taskjuggler/TextParser/Scanner_rb.html +77 -0
  322. data/doc/lib/taskjuggler/TextParser/SourceFileInfo_rb.html +67 -0
  323. data/doc/lib/taskjuggler/TextParser/StackElement_rb.html +67 -0
  324. data/doc/lib/taskjuggler/TextParser/State_rb.html +67 -0
  325. data/doc/lib/taskjuggler/TextParser/TokenDoc_rb.html +67 -0
  326. data/doc/lib/taskjuggler/TextParser_rb.html +79 -0
  327. data/doc/lib/taskjuggler/TimeSheetReceiver_rb.html +69 -0
  328. data/doc/lib/taskjuggler/TimeSheetSender_rb.html +69 -0
  329. data/doc/lib/taskjuggler/TimeSheetSummary_rb.html +69 -0
  330. data/doc/lib/taskjuggler/TimeSheets_rb.html +67 -0
  331. data/doc/lib/taskjuggler/Tj3AppBase_rb.html +79 -0
  332. data/doc/lib/taskjuggler/Tj3Config_rb.html +71 -0
  333. data/doc/lib/taskjuggler/Tj3SheetAppBase_rb.html +69 -0
  334. data/doc/lib/taskjuggler/TjException_rb.html +67 -0
  335. data/doc/lib/taskjuggler/TjTime_rb.html +71 -0
  336. data/doc/lib/taskjuggler/TjpExample_rb.html +69 -0
  337. data/doc/lib/taskjuggler/TjpSyntaxRules_rb.html +67 -0
  338. data/doc/lib/taskjuggler/URLParameter_rb.html +69 -0
  339. data/doc/lib/taskjuggler/UTF8String_rb.html +69 -0
  340. data/doc/lib/taskjuggler/UserManual_rb.html +81 -0
  341. data/doc/lib/taskjuggler/VimSyntax_rb.html +69 -0
  342. data/doc/lib/taskjuggler/WorkingHours_rb.html +71 -0
  343. data/doc/lib/taskjuggler/XMLDocument_rb.html +69 -0
  344. data/doc/lib/taskjuggler/XMLElement_rb.html +69 -0
  345. data/doc/lib/taskjuggler/apps/Tj3Client_rb.html +75 -0
  346. data/doc/lib/taskjuggler/apps/Tj3Daemon_rb.html +75 -0
  347. data/doc/lib/taskjuggler/apps/Tj3Man_rb.html +75 -0
  348. data/doc/lib/taskjuggler/apps/Tj3SsReceiver_rb.html +71 -0
  349. data/doc/lib/taskjuggler/apps/Tj3SsSender_rb.html +71 -0
  350. data/doc/lib/taskjuggler/apps/Tj3TsReceiver_rb.html +71 -0
  351. data/doc/lib/taskjuggler/apps/Tj3TsSender_rb.html +71 -0
  352. data/doc/lib/taskjuggler/apps/Tj3TsSummary_rb.html +71 -0
  353. data/doc/lib/taskjuggler/apps/Tj3_rb.html +71 -0
  354. data/doc/lib/taskjuggler/daemon/Daemon_rb.html +69 -0
  355. data/doc/lib/taskjuggler/daemon/ProcessIntercom_rb.html +71 -0
  356. data/doc/lib/taskjuggler/daemon/ProjectBroker_rb.html +83 -0
  357. data/doc/lib/taskjuggler/daemon/ProjectServer_rb.html +85 -0
  358. data/doc/lib/taskjuggler/daemon/ReportServer_rb.html +73 -0
  359. data/doc/lib/taskjuggler/daemon/ReportServlet_rb.html +69 -0
  360. data/doc/lib/taskjuggler/daemon/WebServer_rb.html +81 -0
  361. data/doc/lib/taskjuggler/daemon/WelcomePage_rb.html +71 -0
  362. data/doc/lib/taskjuggler/deep_copy_rb.html +67 -0
  363. data/doc/lib/taskjuggler/reports/CSVFile_rb.html +69 -0
  364. data/doc/lib/taskjuggler/reports/CollisionDetector_rb.html +69 -0
  365. data/doc/lib/taskjuggler/reports/ColumnTable_rb.html +69 -0
  366. data/doc/lib/taskjuggler/reports/GanttChart_rb.html +75 -0
  367. data/doc/lib/taskjuggler/reports/GanttContainer_rb.html +69 -0
  368. data/doc/lib/taskjuggler/reports/GanttHeaderScaleItem_rb.html +67 -0
  369. data/doc/lib/taskjuggler/reports/GanttHeader_rb.html +69 -0
  370. data/doc/lib/taskjuggler/reports/GanttLine_rb.html +79 -0
  371. data/doc/lib/taskjuggler/reports/GanttLoadStack_rb.html +69 -0
  372. data/doc/lib/taskjuggler/reports/GanttMilestone_rb.html +69 -0
  373. data/doc/lib/taskjuggler/reports/GanttRouter_rb.html +69 -0
  374. data/doc/lib/taskjuggler/reports/GanttTaskBar_rb.html +69 -0
  375. data/doc/lib/taskjuggler/reports/HTMLGraphics_rb.html +67 -0
  376. data/doc/lib/taskjuggler/reports/Navigator_rb.html +69 -0
  377. data/doc/lib/taskjuggler/reports/NikuReport_rb.html +71 -0
  378. data/doc/lib/taskjuggler/reports/ReportBase_rb.html +67 -0
  379. data/doc/lib/taskjuggler/reports/ReportContext_rb.html +67 -0
  380. data/doc/lib/taskjuggler/reports/ReportTableCell_rb.html +67 -0
  381. data/doc/lib/taskjuggler/reports/ReportTableColumn_rb.html +67 -0
  382. data/doc/lib/taskjuggler/reports/ReportTableLegend_rb.html +67 -0
  383. data/doc/lib/taskjuggler/reports/ReportTableLine_rb.html +69 -0
  384. data/doc/lib/taskjuggler/reports/ReportTable_rb.html +71 -0
  385. data/doc/lib/taskjuggler/reports/Report_rb.html +93 -0
  386. data/doc/lib/taskjuggler/reports/ResourceListRE_rb.html +75 -0
  387. data/doc/lib/taskjuggler/reports/StatusSheetReport_rb.html +69 -0
  388. data/doc/lib/taskjuggler/reports/TableReport_rb.html +77 -0
  389. data/doc/lib/taskjuggler/reports/TaskListRE_rb.html +75 -0
  390. data/doc/lib/taskjuggler/reports/TextReport_rb.html +69 -0
  391. data/doc/lib/taskjuggler/reports/TimeSheetReport_rb.html +69 -0
  392. data/doc/lib/taskjuggler/reports/TjpExportRE_rb.html +69 -0
  393. data/doc/lib/tj3_rb.html +69 -0
  394. data/doc/lib/tj3client_rb.html +69 -0
  395. data/doc/lib/tj3d_rb.html +69 -0
  396. data/doc/lib/tj3man_rb.html +69 -0
  397. data/doc/lib/tj3ss_receiver_rb.html +69 -0
  398. data/doc/lib/tj3ss_sender_rb.html +69 -0
  399. data/doc/lib/tj3ts_receiver_rb.html +69 -0
  400. data/doc/lib/tj3ts_sender_rb.html +69 -0
  401. data/doc/lib/tj3ts_summary_rb.html +69 -0
  402. data/doc/rdoc.css +706 -0
  403. data/examples/tutorial.tjp +2 -1
  404. data/lib/taskjuggler/Attributes.rb +33 -12
  405. data/lib/taskjuggler/DataCache.rb +17 -0
  406. data/lib/taskjuggler/FileList.rb +9 -0
  407. data/lib/taskjuggler/HTMLDocument.rb +19 -21
  408. data/lib/taskjuggler/HTMLElements.rb +46 -0
  409. data/lib/taskjuggler/Journal.rb +95 -46
  410. data/lib/taskjuggler/KeywordDocumentation.rb +248 -185
  411. data/lib/taskjuggler/LogicalExpression.rb +2 -2
  412. data/lib/taskjuggler/LogicalFunction.rb +22 -1
  413. data/lib/taskjuggler/LogicalOperation.rb +15 -5
  414. data/lib/taskjuggler/Project.rb +73 -16
  415. data/lib/taskjuggler/ProjectFileParser.rb +1 -1
  416. data/lib/taskjuggler/ProjectFileScanner.rb +27 -0
  417. data/lib/taskjuggler/PropertySet.rb +22 -45
  418. data/lib/taskjuggler/PropertyTreeNode.rb +99 -128
  419. data/lib/taskjuggler/Query.rb +39 -8
  420. data/lib/taskjuggler/Resource.rb +15 -6
  421. data/lib/taskjuggler/RichText/Document.rb +3 -3
  422. data/lib/taskjuggler/RichText/RTFQuery.rb +4 -4
  423. data/lib/taskjuggler/SheetHandlerBase.rb +14 -12
  424. data/lib/taskjuggler/SheetReceiver.rb +17 -15
  425. data/lib/taskjuggler/SheetSender.rb +16 -10
  426. data/{spec/support → lib/taskjuggler}/StdIoWrapper.rb +17 -0
  427. data/lib/taskjuggler/SyntaxReference.rb +2 -2
  428. data/lib/taskjuggler/TableColumnDefinition.rb +4 -3
  429. data/lib/taskjuggler/Task.rb +7 -2
  430. data/lib/taskjuggler/TaskJuggler.rb +74 -0
  431. data/lib/taskjuggler/TaskScenario.rb +62 -83
  432. data/lib/taskjuggler/TextParser.rb +20 -13
  433. data/lib/taskjuggler/TextParser/Scanner.rb +17 -1
  434. data/lib/taskjuggler/TimeSheetSummary.rb +9 -5
  435. data/lib/taskjuggler/TimeSheets.rb +6 -1
  436. data/lib/taskjuggler/Tj3AppBase.rb +41 -18
  437. data/lib/taskjuggler/Tj3Config.rb +1 -1
  438. data/lib/taskjuggler/TjTime.rb +6 -1
  439. data/lib/taskjuggler/TjpSyntaxRules.rb +408 -227
  440. data/lib/taskjuggler/UTF8String.rb +10 -0
  441. data/lib/taskjuggler/UserManual.rb +89 -81
  442. data/lib/taskjuggler/WorkingHours.rb +2 -3
  443. data/lib/taskjuggler/XMLDocument.rb +13 -4
  444. data/lib/taskjuggler/XMLElement.rb +31 -3
  445. data/lib/taskjuggler/apps/Tj3.rb +53 -21
  446. data/lib/taskjuggler/apps/Tj3Client.rb +19 -17
  447. data/lib/taskjuggler/apps/Tj3Daemon.rb +24 -21
  448. data/lib/taskjuggler/{Tj3Man.rb → apps/Tj3Man.rb} +2 -2
  449. data/lib/taskjuggler/apps/Tj3SsReceiver.rb +14 -11
  450. data/lib/taskjuggler/apps/Tj3SsSender.rb +17 -14
  451. data/lib/taskjuggler/apps/Tj3TsReceiver.rb +14 -11
  452. data/lib/taskjuggler/apps/Tj3TsSender.rb +16 -13
  453. data/lib/taskjuggler/apps/Tj3TsSummary.rb +16 -13
  454. data/lib/taskjuggler/reports/GanttChart.rb +1 -1
  455. data/lib/taskjuggler/reports/GanttRouter.rb +0 -2
  456. data/lib/taskjuggler/reports/GanttTaskBar.rb +2 -1
  457. data/lib/taskjuggler/reports/Navigator.rb +2 -1
  458. data/lib/taskjuggler/reports/NikuReport.rb +11 -7
  459. data/lib/taskjuggler/reports/ReportContext.rb +1 -0
  460. data/lib/taskjuggler/reports/StatusSheetReport.rb +7 -2
  461. data/lib/taskjuggler/reports/TableReport.rb +6 -4
  462. data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -0
  463. data/lib/taskjuggler/reports/TjpExportRE.rb +4 -4
  464. data/lib/tj3man.rb +1 -1
  465. data/manual/Day_To_Day_Juggling +134 -137
  466. data/manual/TaskJuggler_2x_Migration +39 -32
  467. data/manual/The_TaskJuggler_Syntax +6 -0
  468. data/prj_cfg.rb +2 -3
  469. data/spec/StatusSheets_spec.rb +314 -0
  470. data/spec/TimeSheets_spec.rb +237 -16
  471. data/spec/Tj3_spec.rb +1 -1
  472. data/spec/support/DaemonControl.rb +1 -1
  473. data/tasks/changelog.rake +13 -3
  474. data/tasks/manual.rake +1 -1
  475. data/test/TestSuite/CSV-Reports/refs/celltext.csv +1 -1
  476. data/test/TestSuite/CSV-Reports/refs/resourcereport.csv +1 -1
  477. data/test/TestSuite/CSV-Reports/refs/resourcereport_with_tasks.csv +1 -1
  478. data/test/TestSuite/CSV-Reports/refs/sortByTree.csv +1 -1
  479. data/test/TestSuite/CSV-Reports/refs/sortBy_effort.up.csv +1 -1
  480. data/test/TestSuite/CSV-Reports/refs/sortBy_plan.start.down.csv +1 -1
  481. data/test/TestSuite/CSV-Reports/refs/taskreport.csv +1 -1
  482. data/test/TestSuite/CSV-Reports/refs/taskreport_with_resources.csv +1 -1
  483. data/test/TestSuite/CSV-Reports/sortByTree.tjp +3 -1
  484. data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +4 -1
  485. data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +1 -1
  486. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +4 -1
  487. data/test/TestSuite/CSV-Reports/taskreport.tjp +3 -1
  488. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +3 -1
  489. data/test/TestSuite/CSV-Reports/weekly.tjp +1 -0
  490. data/test/TestSuite/Export-Reports/refs/Account.tjp +25 -30
  491. data/test/TestSuite/Export-Reports/refs/AdoptedTasks.tjp +1 -0
  492. data/test/TestSuite/Export-Reports/refs/Allocate-1.tjp +43 -72
  493. data/test/TestSuite/Export-Reports/refs/Alternative.tjp +17 -22
  494. data/test/TestSuite/Export-Reports/refs/AutoID.tjp +11 -10
  495. data/test/TestSuite/Export-Reports/refs/AutoMacros.tjp +1 -0
  496. data/test/TestSuite/Export-Reports/refs/Booking.tjp +16 -23
  497. data/test/TestSuite/Export-Reports/refs/Caption.tjp +13 -16
  498. data/test/TestSuite/Export-Reports/refs/Celltext.tjp +12 -16
  499. data/test/TestSuite/Export-Reports/refs/Comments.tjp +15 -19
  500. data/test/TestSuite/Export-Reports/refs/Complete.tjp +17 -26
  501. data/test/TestSuite/Export-Reports/refs/CompletedWork.tji.tjp +40 -0
  502. data/test/TestSuite/Export-Reports/refs/Currencyformat.tjp +1 -0
  503. data/test/TestSuite/Export-Reports/refs/CustomAttributes.tjp +1 -0
  504. data/test/TestSuite/Export-Reports/refs/Depends1.tjp +5 -4
  505. data/test/TestSuite/Export-Reports/refs/Durations.tjp +18 -27
  506. data/test/TestSuite/Export-Reports/refs/Efficiency.tjp +21 -20
  507. data/test/TestSuite/Export-Reports/refs/EnvVar.tjp +21 -0
  508. data/test/TestSuite/Export-Reports/refs/Flags.tjp +6 -5
  509. data/test/TestSuite/Export-Reports/refs/Gap.tjp +2 -1
  510. data/test/TestSuite/Export-Reports/refs/HtmlTaskReport.tjp +15 -19
  511. data/test/TestSuite/Export-Reports/refs/Include.tjp +21 -20
  512. data/test/TestSuite/Export-Reports/refs/Journal.tjp +6 -5
  513. data/test/TestSuite/Export-Reports/refs/Limits-1.tjp +92 -140
  514. data/test/TestSuite/Export-Reports/refs/LoadUnits.tjp +293 -566
  515. data/test/TestSuite/Export-Reports/refs/LogicalExpression.tjp +1 -0
  516. data/test/TestSuite/Export-Reports/refs/LogicalFunction.tjp +17 -22
  517. data/test/TestSuite/Export-Reports/refs/Macro-1.tjp +32 -53
  518. data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +1 -0
  519. data/test/TestSuite/Export-Reports/refs/Macro-3.tjp +1 -0
  520. data/test/TestSuite/Export-Reports/refs/Manager.tjp +51 -50
  521. data/test/TestSuite/Export-Reports/refs/Mandatory.tjp +22 -31
  522. data/test/TestSuite/Export-Reports/refs/Milestone.tjp +1 -0
  523. data/test/TestSuite/Export-Reports/refs/MinMax.tjp +2 -1
  524. data/test/TestSuite/Export-Reports/refs/Niku.tjp +80 -139
  525. data/test/TestSuite/Export-Reports/refs/Numberformat.tjp +1 -0
  526. data/test/TestSuite/Export-Reports/refs/Period.tjp +1 -0
  527. data/test/TestSuite/Export-Reports/refs/Persistent.tjp +17 -21
  528. data/test/TestSuite/Export-Reports/refs/Precedes1.tjp +1 -0
  529. data/test/TestSuite/Export-Reports/refs/Priority.tjp +121 -107
  530. data/test/TestSuite/Export-Reports/refs/Project.tjp +1 -0
  531. data/test/TestSuite/Export-Reports/refs/ProjectIDs.tjp +1 -0
  532. data/test/TestSuite/Export-Reports/refs/Query.tjp +17 -26
  533. data/test/TestSuite/Export-Reports/refs/Reports.tjp +42 -61
  534. data/test/TestSuite/Export-Reports/refs/Resource.tjp +21 -20
  535. data/test/TestSuite/Export-Reports/refs/ResourcePrefix.tjp +16 -20
  536. data/test/TestSuite/Export-Reports/refs/ResourceRoot.tjp +36 -35
  537. data/test/TestSuite/Export-Reports/refs/Responsible.tjp +17 -21
  538. data/test/TestSuite/Export-Reports/refs/RollupResource.tjp +36 -35
  539. data/test/TestSuite/Export-Reports/refs/Scenario.tjp +3 -1
  540. data/test/TestSuite/Export-Reports/refs/Scheduling.tjp +1 -0
  541. data/test/TestSuite/Export-Reports/refs/Select.tjp +29 -43
  542. data/test/TestSuite/Export-Reports/refs/Shift.tjp +12 -11
  543. data/test/TestSuite/Export-Reports/refs/Simple.tjp +15 -19
  544. data/test/TestSuite/Export-Reports/refs/StatusSheet.tjp +33 -47
  545. data/test/TestSuite/Export-Reports/refs/String.tjp +9 -10
  546. data/test/TestSuite/Export-Reports/refs/Supplement.tjp +7 -8
  547. data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +10 -11
  548. data/test/TestSuite/Export-Reports/refs/TaskRoot.tjp +10 -9
  549. data/test/TestSuite/Export-Reports/refs/TimeFrame.tjp +9 -9
  550. data/test/TestSuite/Export-Reports/refs/TimeSheet1.tjp +25 -37
  551. data/test/TestSuite/Export-Reports/refs/Timezone.tjp +1 -0
  552. data/test/TestSuite/Export-Reports/refs/Vacation.tjp +26 -25
  553. data/test/TestSuite/Export-Reports/refs/tutorial.tjp +453 -821
  554. data/test/TestSuite/HTML-Reports/Alerts.html +160 -412
  555. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  556. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  557. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  558. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  559. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  560. data/test/TestSuite/HTML-Reports/css/tjmanual.css +0 -20
  561. data/test/TestSuite/HTML-Reports/css/tjreport.css +6 -7
  562. data/test/TestSuite/HTML-Reports/depArrows.html +851 -0
  563. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  564. data/test/TestSuite/{ReportGenerator/Correct → HTML-Reports/scripts}/scripts/wz_tooltip.js +20 -20
  565. data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +27 -3
  566. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions3.tjp +20 -0
  567. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions4.tjp +16 -0
  568. data/test/TestSuite/ReportGenerator/Correct/refs/DependencyList-1.csv +4 -0
  569. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +2 -0
  570. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-2.csv +8 -0
  571. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions3-1.csv +4 -0
  572. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions4-1.csv +2 -0
  573. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +3 -1
  574. data/test/TestSuite/Scheduler/Correct/Booking.tjp +8 -7
  575. data/test/TestSuite/Scheduler/Correct/Booking2.tjp +16 -9
  576. data/test/TestSuite/Scheduler/Correct/Booking3.tjp +28 -0
  577. data/test/TestSuite/Scheduler/Correct/Container.tjp +2 -2
  578. data/test/TestSuite/Scheduler/Correct/Depends.tjp +3 -3
  579. data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +4 -4
  580. data/test/TestSuite/Scheduler/Correct/Limits.tjp +3 -1
  581. data/test/TestSuite/Scheduler/Correct/Mandatory.tjp +2 -2
  582. data/test/TestSuite/Scheduler/Correct/MultipleMandatories.tjp +2 -2
  583. data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +2 -2
  584. data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +3 -3
  585. data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +3 -3
  586. data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +3 -3
  587. data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +7 -7
  588. data/test/TestSuite/Scheduler/Correct/Scenarios.tjp +2 -2
  589. data/test/TestSuite/Scheduler/Correct/Shift.tjp +7 -5
  590. data/test/TestSuite/Scheduler/Correct/Shift2.tjp +1 -1
  591. data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +5 -2
  592. data/test/TestSuite/Scheduler/Errors/booking_no_duty.tjp +1 -1
  593. data/test/TestSuite/Scheduler/Errors/ts_alert1_more_details.tjp +4 -2
  594. data/test/TestSuite/Scheduler/Errors/ts_alert2_more_details.tjp +4 -2
  595. data/test/TestSuite/Scheduler/Errors/ts_no_expected_end.tjp +4 -2
  596. data/test/TestSuite/Scheduler/Errors/ts_no_headline1.tjp +4 -2
  597. data/test/TestSuite/Scheduler/Errors/ts_no_rem_or_end.tjp +4 -2
  598. data/test/TestSuite/Scheduler/Errors/ts_no_remaining.tjp +4 -2
  599. data/test/TestSuite/Scheduler/Errors/ts_no_status_work.tjp +4 -2
  600. data/test/TestSuite/Scheduler/Errors/ts_no_work.tjp +4 -2
  601. data/test/TestSuite/Scheduler/Errors/ts_res_new_task.tjp +5 -2
  602. data/test/TestSuite/Scheduler/Errors/ts_work_too_high.tjp +4 -2
  603. data/test/TestSuite/Scheduler/Errors/ts_work_too_low.tjp +4 -2
  604. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  605. data/test/TestSuite/StatusSheets/run +1 -1
  606. data/test/TestSuite/Syntax/Correct/Booking.tjp +0 -5
  607. data/test/TestSuite/Syntax/Correct/CompletedWork.tji.tjp +38 -0
  608. data/test/TestSuite/Syntax/Correct/EnvVar.tjp +12 -0
  609. data/test/TestSuite/Syntax/Correct/Freeze.tjp +1 -3
  610. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +9 -5
  611. data/test/TestSuite/Syntax/Correct/Priority.tjp +22 -11
  612. data/test/TestSuite/Syntax/Correct/Scenario.tjp +1 -1
  613. data/test/TestSuite/Syntax/Correct/StatusSheet.tjp +2 -0
  614. data/test/TestSuite/Syntax/Correct/TimeSheet1.tjp +4 -4
  615. data/test/TestSuite/Syntax/Correct/css/tjmanual.css +20 -0
  616. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -6
  617. data/test/TestSuite/Syntax/Correct/tutorial.tjp +2 -1
  618. data/test/TestSuite/Syntax/Errors/no_own_resource_booking.tjp +16 -0
  619. data/test/TestSuite/Syntax/Errors/no_own_task_booking.tjp +16 -0
  620. data/test/TestSuite/Syntax/Errors/resourceroot_leaf.tjp +10 -0
  621. data/test/TestSuite/Syntax/Errors/runaway_token.tjp +8 -0
  622. data/test/TestSuite/Syntax/Errors/sorting_bsi.tjp +11 -0
  623. data/test/TestSuite/Syntax/Errors/ss_no_tracking_scenario.tjp +14 -0
  624. data/test/TestSuite/Syntax/Errors/taskroot_leaf.tjp +8 -0
  625. data/test/TestSuite/Syntax/Errors/ts_bad_priority.tjp +4 -2
  626. data/test/TestSuite/Syntax/Errors/ts_default_details.tjp +4 -2
  627. data/test/TestSuite/Syntax/Errors/ts_default_summary.tjp +4 -2
  628. data/test/TestSuite/Syntax/Errors/ts_duplicate_task.tjp +4 -2
  629. data/test/TestSuite/Syntax/Errors/ts_end_too_early.tjp +4 -2
  630. data/test/TestSuite/Syntax/Errors/ts_headline_too_long.tjp +4 -2
  631. data/test/TestSuite/Syntax/Errors/ts_no_headline2.tjp +4 -2
  632. data/test/TestSuite/Syntax/Errors/ts_no_tracking_scenario.tjp +14 -0
  633. data/test/TestSuite/Syntax/Errors/ts_summary_too_long.tjp +4 -2
  634. data/test/TestSuite/Syntax/Errors/unknown_env_var.tjp +7 -0
  635. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  636. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  637. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  638. data/test/test_Export-Reports.rb +3 -0
  639. data/test/test_Journal.rb +4 -4
  640. data/test/test_PropertySet.rb +5 -5
  641. data/test/test_Syntax.rb +3 -0
  642. data/test/test_WorkingHours.rb +11 -18
  643. metadata +1012 -649
  644. data/lib/exchangebug.rb +0 -42
  645. data/lib/ruby-signal-bug.rb +0 -55
  646. data/spec/tj3client.log +0 -23
  647. data/test/TestSuite/CSV-Reports/alert.tjp +0 -9
  648. data/test/TestSuite/CSV-Reports/refs/alert.csv +0 -15
  649. data/test/TestSuite/Export-Reports/refs/CriticalPath.tjp +0 -41
  650. data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -89
  651. data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -79
  652. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  653. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  654. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.csv +0 -1
  655. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.html +0 -78
  656. data/test/TestSuite/ReportGenerator/Correct/Journal-1.csv +0 -6
  657. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  658. data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +0 -66
  659. data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +0 -413
  660. data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
  661. data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
  662. data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
  663. data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
  664. data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
  665. data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
  666. data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
  667. data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
  668. data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
  669. data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
  670. data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
  671. data/test/TestSuite/ReportGenerator/Correct/opennodes-1.csv +0 -2
  672. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  673. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  674. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  675. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -86
  676. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +0 -413
  677. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  678. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  679. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  680. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  681. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  682. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  683. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  684. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  685. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  686. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  687. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  688. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +0 -1301
  689. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  690. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  691. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/resource1_2002-03-01.tji +0 -0
  692. data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +0 -33
  693. data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
  694. data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
  695. data/test/TestSuite/Syntax/Correct/niku.xml +0 -30
  696. data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +0 -11
  697. data/test/TestSuite/TimeSheets/uu.txt +0 -29
@@ -14,7 +14,7 @@
14
14
  require 'taskjuggler/UTF8String'
15
15
  require 'taskjuggler/AppConfig'
16
16
 
17
- AppConfig.version = '0.0.11'
17
+ AppConfig.version = '0.1.0'
18
18
  AppConfig.packageName = 'taskjuggler'
19
19
  AppConfig.softwareName = 'TaskJuggler III'
20
20
  AppConfig.packageInfo = 'A Project Management Software'
@@ -143,32 +143,37 @@ class TaskJuggler
143
143
 
144
144
  # Return true if time is smaller than _t_.
145
145
  def <(t)
146
+ return false unless t
146
147
  @time < t.time
147
148
  end
148
149
 
149
150
  # Return true if time is smaller or equal than _t_.
150
151
  def <=(t)
152
+ return false unless t
151
153
  @time <= t.time
152
154
  end
153
155
 
154
156
  # Return true if time is larger than _t_.
155
157
  def >(t)
158
+ return true unless t
156
159
  @time > t.time
157
160
  end
158
161
 
159
162
  # Return true if time is larger or equal than _t_.
160
163
  def >=(t)
164
+ return true unless t
161
165
  @time >= t.time
162
166
  end
163
167
 
164
168
  # Return true if time and _t_ are identical.
165
169
  def ==(t)
166
- return false if t.nil?
170
+ return false unless t
167
171
  @time == t.time
168
172
  end
169
173
 
170
174
  # Coparison operator for time with another time _t_.
171
175
  def <=>(t)
176
+ return -1 unless t
172
177
  @time <=> t.time
173
178
  end
174
179
 
@@ -635,21 +635,22 @@ each cell.
635
635
  EOT
636
636
  )
637
637
 
638
- pattern(%w( _listmode $INTEGER ), lambda {
639
- @column.listMode = @val[1]
638
+ pattern(%w( _listitem $STRING ), lambda {
639
+ @column.listItem = @val[1]
640
640
  })
641
- also(%w( listtype.column ))
642
- doc('listmode.column', <<'EOT'
643
- Specifies how the list items look like. The result of this setting depends on
644
- the actual column. Please refer to the [columnid|documentation for the
645
- specific column] to learn more about the effect that this setting has.
641
+ doc('listitem.column', <<'EOT'
642
+ Specifies a RichText pattern that is used to generate the text for the list
643
+ items. The pattern should contain at least one ''''<nowiki><</nowiki>-query
644
+ attribute='XXX'->'''' element that will be replaced with the value of
645
+ attribute XXX. For the replacement, the property of the query will be the list
646
+ item.
646
647
  EOT
647
648
  )
648
649
 
649
650
  pattern(%w( _listtype !listType ), lambda {
650
651
  @column.listType = @val[1]
651
652
  })
652
- also(%w( listmode.column ))
653
+ also(%w( listitem.column ))
653
654
  doc('listtype.column', <<'EOT'
654
655
  Specifies what type of list should be used. This attribute only affects
655
656
  columns that contain a list of items.
@@ -727,6 +728,22 @@ EOT
727
728
  )
728
729
  end
729
730
 
731
+ def rule_currencyFormat
732
+ pattern(%w( _currencyformat $STRING $STRING $STRING $STRING $INTEGER ),
733
+ lambda {
734
+ RealFormat.new(@val.slice(1, 5))
735
+ })
736
+ doc('currencyformat',
737
+ 'These values specify the default format used for all currency ' +
738
+ 'values.')
739
+ example('Currencyformat')
740
+ arg(1, 'negativeprefix', 'Prefix for negative numbers')
741
+ arg(2, 'negativesuffix', 'Suffix for negative numbers')
742
+ arg(3, 'thousandsep', 'Separator used for every 3rd digit')
743
+ arg(4, 'fractionsep', 'Separator used to separate the fraction digits')
744
+ arg(5, 'fractiondigits', 'Number of fraction digits to show')
745
+ end
746
+
730
747
  def rule_date
731
748
  pattern(%w( !dateCalcedOrNot ), lambda {
732
749
  resolution = @project.nil? ? Project.maxScheduleGranularity :
@@ -870,7 +887,7 @@ EOT
870
887
 
871
888
  # By default, we export all scenarios.
872
889
  scenarios = Array.new(@project.scenarios.items) { |i| i }
873
- scenarios.delete_if { |sc| !@project.scenario(sc).get('enabled') }
890
+ scenarios.delete_if { |sc| !@project.scenario(sc).get('active') }
874
891
  report.set('scenarios', scenarios)
875
892
  # Show all tasks, sorted by seqno-up.
876
893
  report.set('hideTask', LogicalExpression.new(LogicalOperation.new(0)))
@@ -925,9 +942,12 @@ EOT
925
942
  { 'vacation' => 'Include vacations',
926
943
  'workinghours' => 'Include working hours' })
927
944
 
945
+ pattern(%w( !rollupresource ))
946
+ pattern(%w( !rolluptask ))
947
+
928
948
  pattern(%w( _scenarios !scenarioIdList ), lambda {
929
949
  # Don't include disabled scenarios in the report
930
- @val[1].delete_if { |sc| !@project.scenario(sc).get('enabled') }
950
+ @val[1].delete_if { |sc| !@project.scenario(sc).get('active') }
931
951
  @property.set('scenarios', @val[1])
932
952
  })
933
953
  doc('scenarios.export', <<'EOT'
@@ -1125,8 +1145,7 @@ EOT
1125
1145
  def rule_fail
1126
1146
  pattern(%w( _fail !logicalExpression ), lambda {
1127
1147
  begin
1128
- @property['fail', @scenarioIdx] =
1129
- @property['fail', @scenarioIdx] + [ @val[1] ]
1148
+ @property.set('fail', @property.get('fail') + [ @val[1] ])
1130
1149
  rescue AttributeOverwrite
1131
1150
  end
1132
1151
  })
@@ -1149,15 +1168,109 @@ EOT
1149
1168
  })
1150
1169
  end
1151
1170
 
1171
+ def rule_flagLogicalExpression
1172
+ pattern(%w( !flagOperation ), lambda {
1173
+ LogicalExpression.new(@val[0], sourceFileInfo)
1174
+ })
1175
+ doc('logicalflagexpression', <<'EOT'
1176
+ A logical flag expression is a combination of operands and mathematical
1177
+ operations. The final result of a logical expression is always true or false.
1178
+ Logical expressions are used the reduce the properties in a report to a
1179
+ certain subset or to select alternatives for the cell content of a table. When
1180
+ used with attributes like [[hidejournalentry]] the logical expression
1181
+ evaluates to true for a certain property, this property is hidden or rolled-up
1182
+ in the report.
1183
+
1184
+ Operands must be previously declared flags or another logical expression.
1185
+ When you combine logical operations to a more complex expression, the
1186
+ operators are evaluated from left to right. '''a | b & c''' is identical to
1187
+ '''(a | b) & c'''. It's highly recommended that you always use brackets to
1188
+ control the evaluation sequence. Currently, TaskJuggler does not support the
1189
+ concept of operator precedence or right-left associativity. This may change in
1190
+ the future.
1191
+ EOT
1192
+ )
1193
+ also(%w( functions ))
1194
+ end
1195
+
1196
+ def rule_flagOperand
1197
+ pattern(%w( _( !flagOperation _) ), lambda {
1198
+ @val[1]
1199
+ })
1200
+ pattern(%w( _~ !flagOperand ), lambda {
1201
+ operation = LogicalOperation.new(@val[1])
1202
+ operation.operator = '~'
1203
+ operation
1204
+ })
1205
+
1206
+ pattern(%w( $ID ), lambda {
1207
+ unless @project['flags'].include?(@val[0])
1208
+ error('operand_unkn_flag', "Undeclared flag '#{@val[0]}'",
1209
+ @sourceFileInfo[0])
1210
+ end
1211
+ LogicalFlag.new(@val[0])
1212
+ })
1213
+ end
1214
+
1215
+ def rule_flagOperation
1216
+ pattern(%w( !flagOperand !flagOperationChain ), lambda {
1217
+ operation = LogicalOperation.new(@val[0])
1218
+ if @val[1]
1219
+ # Further operators/operands create an operation tree.
1220
+ @val[1].each do |ops|
1221
+ operation = LogicalOperation.new(operation)
1222
+ operation.operator = ops[0]
1223
+ operation.operand2 = ops[1]
1224
+ end
1225
+ end
1226
+ operation
1227
+ })
1228
+ arg(0, 'operand', <<'EOT'
1229
+ An operand is a declared flag. An operand can be a negated operand by
1230
+ prefixing a ~ charater or it can be another logical expression enclosed in
1231
+ braces.
1232
+ EOT
1233
+ )
1234
+ end
1235
+
1236
+ def rule_flagOperationChain
1237
+ optional
1238
+ repeatable
1239
+ pattern(%w( !flagOperatorAndOperand), lambda {
1240
+ @val[0]
1241
+ })
1242
+ end
1243
+
1244
+ def rule_flagOperatorAndOperand
1245
+ pattern(%w( !flagOperator !flagOperand), lambda{
1246
+ [ @val[0], @val[1] ]
1247
+ })
1248
+ arg(1, 'operand', <<'EOT'
1249
+ An operand is a declared flag. An operand can be a negated operand by
1250
+ prefixing a ~ charater or it can be another logical expression enclosed in
1251
+ braces.
1252
+ EOT
1253
+ )
1254
+ end
1255
+
1256
+ def rule_flagOperator
1257
+ singlePattern('_|')
1258
+ descr('The \'or\' operator')
1259
+
1260
+ singlePattern('_&')
1261
+ descr('The \'and\' operator')
1262
+ end
1263
+
1264
+
1152
1265
  def rule_flags
1153
1266
  pattern(%w( _flags !flagList ), lambda {
1154
1267
  @val[1].each do |flag|
1155
- unless @property['flags', @scenarioIdx].include?(flag)
1156
- # We allow multiple instances of flag definitions.
1157
- begin
1158
- @property['flags', @scenarioIdx] += @val[1]
1159
- rescue AttributeOverwrite
1160
- end
1268
+ next if @property['flags', @scenarioIdx].include?(flag)
1269
+
1270
+ # We allow multiple instances of flag definitions.
1271
+ begin
1272
+ @property['flags', @scenarioIdx] << flag
1273
+ rescue AttributeOverwrite
1161
1274
  end
1162
1275
  end
1163
1276
  })
@@ -1245,6 +1358,14 @@ EOT
1245
1358
  )
1246
1359
  arg(2, 'ID', 'A scenario ID')
1247
1360
 
1361
+ pattern(%w( _ischildof _( $ID _) ))
1362
+ doc('ischildof', <<'EOT'
1363
+ Will evaluate to true for tasks and resources if current property is a child
1364
+ of the provided parent property.
1365
+ EOT
1366
+ )
1367
+ arg(2, 'ID', 'The ID of the parent')
1368
+
1248
1369
  pattern(%w( _isdependencyof _( $ID _, $ID _, $INTEGER _) ))
1249
1370
  doc('isdependencyof', <<'EOT'
1250
1371
  Will evaluate to true for tasks that depend on the specified task in
@@ -1278,6 +1399,13 @@ EOT
1278
1399
  pattern(['_isleaf', '_(', '_)' ])
1279
1400
  doc('isleaf', 'The result is true if the property is not a container.')
1280
1401
 
1402
+ pattern(%w( _ismilestone _( $ID _) ))
1403
+ doc('ismilestone', <<'EOT'
1404
+ The result is true if the property is a milestone in the provided scenario.
1405
+ EOT
1406
+ )
1407
+ arg(2, 'Scenario ID', 'A scenario ID')
1408
+
1281
1409
  pattern(%w( _isongoing _( $ID _) ))
1282
1410
  doc('isongoing', <<'EOT'
1283
1411
  Will evaluate to true for tasks that overlap with the report period in given
@@ -1332,14 +1460,24 @@ EOT
1332
1460
  )
1333
1461
  end
1334
1462
 
1463
+ def rule_hidejournalentry
1464
+ pattern(%w( _hidejournalentry !flagLogicalExpression ), lambda {
1465
+ @property.set('hideJournalEntry', @val[1])
1466
+ })
1467
+ doc('hidejournalentry', <<'EOT'
1468
+ Do not include journal entries that match the specified logical expression.
1469
+ EOT
1470
+ )
1471
+ end
1472
+
1335
1473
  def rule_hideresource
1336
1474
  pattern(%w( _hideresource !logicalExpression ), lambda {
1337
1475
  @property.set('hideResource', @val[1])
1338
1476
  })
1339
1477
  doc('hideresource', <<'EOT'
1340
1478
  Do not include resources that match the specified logical expression. If the
1341
- report is sorted in tree mode (default) then enclosing resources are listed
1342
- even if the expression matches the resource.
1479
+ report is sorted in ''''tree'''' mode (default) then enclosing resources are
1480
+ listed even if the expression matches the resource.
1343
1481
  EOT
1344
1482
  )
1345
1483
  also(%w( sortresources ))
@@ -1351,8 +1489,8 @@ EOT
1351
1489
  })
1352
1490
  doc('hidetask', <<'EOT'
1353
1491
  Do not include tasks that match the specified logical expression. If the
1354
- report is sorted in tree mode (default) then enclosing tasks are listed even
1355
- if the expression matches the task.
1492
+ report is sorted in ''''tree'''' mode (default) then enclosing tasks are
1493
+ listed even if the expression matches the task.
1356
1494
  EOT
1357
1495
  )
1358
1496
  also(%w( sorttasks ))
@@ -1611,6 +1749,19 @@ EOT
1611
1749
 
1612
1750
  pattern(%w( !author ))
1613
1751
 
1752
+ pattern(%w( _flags !flagList ), lambda {
1753
+ @val[1].each do |flag|
1754
+ next if @journalEntry.flags.include?(flag)
1755
+
1756
+ @journalEntry.flags << flag
1757
+ end
1758
+ })
1759
+ doc('flags.journalentry', <<'EOT'
1760
+ Journal entries can have flags attached to them. These can be used to
1761
+ include only entries in a report that have a certain flag.
1762
+ EOT
1763
+ )
1764
+
1614
1765
  pattern(%w( !summary ))
1615
1766
 
1616
1767
  pattern(%w( !details ))
@@ -1983,7 +2134,7 @@ EOT
1983
2134
  end
1984
2135
 
1985
2136
  def rule_morePredTasks
1986
- commaListRule('!taskPredList')
2137
+ commaListRule('!taskPred')
1987
2138
  end
1988
2139
 
1989
2140
  def rule_moreSortCriteria
@@ -2042,10 +2193,16 @@ EOT
2042
2193
  pattern(%w( !headline ))
2043
2194
  pattern(%w( !hideresource ))
2044
2195
  pattern(%w( !hidetask ))
2196
+
2197
+ pattern(%w( !numberFormat ), lambda {
2198
+ @property.set('numberFormat', @val[0])
2199
+ })
2200
+
2045
2201
  pattern(%w( !reportEnd ))
2046
2202
  pattern(%w( !reportPeriod ))
2047
2203
  pattern(%w( !reportStart ))
2048
2204
  pattern(%w( !reportTitle ))
2205
+
2049
2206
  pattern(%w( _timeoff $STRING $STRING ), lambda {
2050
2207
  @property.set('timeOffId', @val[1])
2051
2208
  @property.set('timeOffName', @val[2])
@@ -2067,6 +2224,7 @@ EOF
2067
2224
  def rule_nikuReportHeader
2068
2225
  pattern(%w( _nikureport !optionalID $STRING ), lambda {
2069
2226
  newReport(@val[1], @val[2], :niku, sourceFileInfo)
2227
+ @property.set('numberFormat', RealFormat.new(['-', '', '', '.', 2]))
2070
2228
  })
2071
2229
  arg(1, 'file name', <<'EOT'
2072
2230
  The name of the time sheet report file to generate. It must end with a .tji
@@ -2139,6 +2297,21 @@ EOT
2139
2297
  singlePattern('$FLOAT')
2140
2298
  end
2141
2299
 
2300
+ def rule_numberFormat
2301
+ pattern(%w( _numberformat $STRING $STRING $STRING $STRING $INTEGER ),
2302
+ lambda {
2303
+ RealFormat.new(@val.slice(1, 5))
2304
+ })
2305
+ doc('numberformat',
2306
+ 'These values specify the default format used for all numerical ' +
2307
+ 'real values.')
2308
+ arg(1, 'negativeprefix', 'Prefix for negative numbers')
2309
+ arg(2, 'negativesuffix', 'Suffix for negative numbers')
2310
+ arg(3, 'thousandsep', 'Separator used for every 3rd digit')
2311
+ arg(4, 'fractionsep', 'Separator used to separate the fraction digits')
2312
+ arg(5, 'fractiondigits', 'Number of fraction digits to show')
2313
+ end
2314
+
2142
2315
  def rule_operand
2143
2316
  pattern(%w( _( !operation _) ), lambda {
2144
2317
  @val[1]
@@ -2160,7 +2333,7 @@ EOT
2160
2333
  error('operand_unkn_scen', "Unknown scenario ID #{scenario}",
2161
2334
  @sourceFileInfo[0])
2162
2335
  end
2163
- LogicalAttribute.new(attribute, scenarioIdx)
2336
+ LogicalAttribute.new(attribute, @project.scenario(scenarioIdx))
2164
2337
  })
2165
2338
  pattern(%w( !date ), lambda {
2166
2339
  LogicalOperation.new(@val[0])
@@ -2345,19 +2518,9 @@ EOT
2345
2518
  repeatable
2346
2519
  optional
2347
2520
 
2348
- pattern(%w( _currencyformat $STRING $STRING $STRING $STRING $INTEGER ),
2349
- lambda {
2350
- @project['currencyFormat'] = RealFormat.new(@val.slice(1, 5))
2521
+ pattern(%w( !currencyFormat ), lambda {
2522
+ @project['currencyFormat'] = @val[0]
2351
2523
  })
2352
- doc('currencyformat',
2353
- 'These values specify the default format used for all currency ' +
2354
- 'values.')
2355
- example('Currencyformat')
2356
- arg(1, 'negativeprefix', 'Prefix for negative numbers')
2357
- arg(2, 'negativesuffix', 'Suffix for negative numbers')
2358
- arg(3, 'thousandsep', 'Separator used for every 3rd digit')
2359
- arg(4, 'fractionsep', 'Separator used to separate the fraction digits')
2360
- arg(5, 'fractiondigits', 'Number of fraction digits to show')
2361
2524
 
2362
2525
  pattern(%w( _currency $STRING ), lambda {
2363
2526
  @project['currency'] = @val[1]
@@ -2416,18 +2579,9 @@ EOT
2416
2579
  arg(1, 'date', 'Alternative date to be used as current date for all ' +
2417
2580
  'computations')
2418
2581
 
2419
- pattern(%w( _numberformat $STRING $STRING $STRING $STRING $INTEGER ),
2420
- lambda {
2421
- @project['numberFormat'] = RealFormat.new(@val.slice(1, 5))
2582
+ pattern(%w( !numberFormat ), lambda {
2583
+ @project['numberFormat'] = @val[0]
2422
2584
  })
2423
- doc('numberformat',
2424
- 'These values specify the default format used for all numerical ' +
2425
- 'real values.')
2426
- arg(1, 'negativeprefix', 'Prefix for negative numbers')
2427
- arg(2, 'negativesuffix', 'Suffix for negative numbers')
2428
- arg(3, 'thousandsep', 'Separator used for every 3rd digit')
2429
- arg(4, 'fractionsep', 'Separator used to separate the fraction digits')
2430
- arg(5, 'fractiondigits', 'Number of fraction digits to show')
2431
2585
 
2432
2586
  pattern(%w( !scenario ))
2433
2587
  pattern(%w( _shorttimeformat $STRING ), lambda {
@@ -2478,6 +2632,29 @@ Do not use this option after you've set the time zone!
2478
2632
  EOT
2479
2633
  )
2480
2634
 
2635
+ pattern(%w( _trackingscenario !scenarioId ), lambda {
2636
+ @project['trackingScenarioIdx'] = @val[1]
2637
+ # The tracking scenario and all child scenarios will always be scheduled
2638
+ # in projection mode.
2639
+ @project.scenario(@val[1]).all.each do |scenario|
2640
+ scenario.set('projection', true)
2641
+ end
2642
+ })
2643
+ doc('trackingscenario', <<'EOT'
2644
+ Specifies which scenario is used to capture what actually has happened with
2645
+ the project. All sub-scenarios of this scenario inherit the bookings of the
2646
+ tracking scenario and may not have any bookings of their own. The tracking
2647
+ scenario must also be specified to use time and status sheet reports.
2648
+
2649
+ The tracking scenario and all scenarios derived from it will be scheduled in
2650
+ projection mode. This means that the scheduler will only add bookings after
2651
+ the current date or the date specified by [[now]]. It is assumed that all
2652
+ allocations prior to this date have been provided as [[booking.task|
2653
+ task bookings]] or [[booking.resource|resource bookings]].
2654
+ EOT
2655
+ )
2656
+ example('TimeSheet1', '2')
2657
+
2481
2658
  pattern(%w( _weekstartsmonday ), lambda {
2482
2659
  @project['weekStartsMonday'] = true
2483
2660
  })
@@ -2514,6 +2691,14 @@ EOT
2514
2691
 
2515
2692
  def rule_projectDeclaration
2516
2693
  pattern(%w( !projectHeader !projectBody ), lambda {
2694
+ # If the user has specified a tracking scenario, we mark all children of
2695
+ # that scenario to disallow own bookings. These scenarios will inherit
2696
+ # their bookings from the tracking scenario.
2697
+ if (idx = @project['trackingScenarioIdx'])
2698
+ @project.scenario(idx).allLeaves(true).each do |scenario|
2699
+ scenario.set('ownbookings', false)
2700
+ end
2701
+ end
2517
2702
  @val[0]
2518
2703
  })
2519
2704
  doc('project', <<'EOT'
@@ -2554,19 +2739,23 @@ EOT
2554
2739
  optional
2555
2740
  repeatable
2556
2741
  pattern(%w( _sloppy ), lambda {
2557
- @property.set('strict', false)
2742
+ warning('projection_sloppy',
2743
+ 'The sloppy projection mode has been deprecated. The ' +
2744
+ 'functionality is no longer supported.')
2558
2745
  })
2559
2746
  doc('sloppy.projection', <<'EOT'
2560
- In sloppy mode tasks with no bookings will be filled from the original start.
2747
+ The sloppy projection mode has been deprecated. Please use
2748
+ [[trackingscenario]] feature instead.
2561
2749
  EOT
2562
2750
  )
2563
2751
 
2564
2752
  pattern(%w( _strict ), lambda {
2565
- @property.set('strict', true)
2753
+ warning('projection_strict',
2754
+ 'The strict mode is now always used.')
2566
2755
  })
2567
2756
  doc('strict.projection', <<'EOT'
2568
- In strict mode all tasks will be filled starting with the current date. No
2569
- bookings will be added prior to the current date.
2757
+ The strict projection mode has been deprecated. Please use
2758
+ [[trackingscenario]] feature instead.
2570
2759
  EOT
2571
2760
  )
2572
2761
  end
@@ -2748,16 +2937,6 @@ part-time, or vice versa, please refer to the 'Shift' property.
2748
2937
  EOT
2749
2938
  )
2750
2939
  arg(1, 'name', 'Name or purpose of the vacation')
2751
-
2752
- pattern(%w( _trackingscenario !scenarioId ), lambda {
2753
- @project['trackingScenarioIdx'] = @val[1]
2754
- })
2755
- doc('trackingscenario', <<'EOT'
2756
- Specifies which scenario should be used for time sheet reports. By default,
2757
- the top-level scenario will be used.
2758
- EOT
2759
- )
2760
- example('TimeSheet1', '2')
2761
2940
  end
2762
2941
 
2763
2942
  def rule_propertiesFile
@@ -2800,7 +2979,7 @@ EOT
2800
2979
  "#{@val[1]} is not a list attribute. Only those can be purged.",
2801
2980
  @sourceFileInfo[1])
2802
2981
  end
2803
- @property.getAttr(@val[1], @scenarioIdx).reset
2982
+ @property.getAttribute(@val[1], @scenarioIdx).reset
2804
2983
  })
2805
2984
  doc('purge', <<'EOT'
2806
2985
  List attributes, like regular attributes, can inherit their values from the
@@ -2935,13 +3114,7 @@ EOT
2935
3114
  descr(<<'EOT'
2936
3115
  The resources that have this resource assigned as manager.
2937
3116
 
2938
- The list can be customized by the [listmode.column listmode] attribute. The
2939
- following modes are supported:
2940
-
2941
- # ID
2942
- # Name ''(This is the default)''
2943
- # Name (ID)
2944
- # ID: Name
3117
+ The list can be customized by the [listitem.column listitem] attribute.
2945
3118
  EOT
2946
3119
  )
2947
3120
 
@@ -2983,21 +3156,9 @@ symbols are used for <nowiki><dep></nowiki>.
2983
3156
  * '''<nowiki>]->]</nowiki>''': End-to-End dependency
2984
3157
  * '''<nowiki>[->]</nowiki>''': Start-to-End dependency
2985
3158
 
2986
- The list can be customized by the [listmode.column listmode] attribute. The
2987
- following modes are supported:
2988
-
2989
- # ID <nowiki><dep></nowiki> Date
2990
- # Name <nowiki><dep></nowiki> Date
2991
- # Name (ID) <nowiki><dep></nowiki> Date
2992
- # ID: Name <nowiki><dep></nowiki> Date
2993
- # ID <nowiki><dep></nowiki>
2994
- # Name <nowiki><dep></nowiki>
2995
- # Name (ID) <nowiki><dep></nowiki>
2996
- # ID: Name <nowiki><dep></nowiki>
2997
- # ID
2998
- # Name
2999
- # Name (ID)
3000
- # ID: Name
3159
+ The list can be customized by the [listitem.column listitem] attribute.
3160
+ The dependency symbol can be generated via the ''''dependency'''' attribute
3161
+ inthe query, the target date via the ''''date'''' attribute.
3001
3162
  EOT
3002
3163
  )
3003
3164
 
@@ -3022,9 +3183,9 @@ EOT
3022
3183
  descr('The headcount number of the resource or group')
3023
3184
 
3024
3185
  pattern([ '_hierarchindex' ], lambda {
3025
- 'wbs'
3186
+ 'bsi'
3026
3187
  })
3027
- descr('Deprecated alias for wbs')
3188
+ descr('Deprecated alias for bsi')
3028
3189
 
3029
3190
  singlePattern('_hourly')
3030
3191
  descr('A group of columns with one column for each hour')
@@ -3041,17 +3202,7 @@ A list of milestones that are a prerequiste for the current task. For
3041
3202
  container tasks it will also include the inputs of the child tasks. Inputs may
3042
3203
  not have any predecessors.
3043
3204
 
3044
- The list can be customized by the [listmode.column listmode] attribute. The
3045
- following modes are supported:
3046
-
3047
- # ID
3048
- # Name
3049
- # Name (ID)
3050
- # ID: Name
3051
- # ID (Date)
3052
- # Name (Date)
3053
- # Name (ID) Date ''(This is the default)''
3054
- # ID: Name Date
3205
+ The list can be customized by the [listitem.column listitem] attribute.
3055
3206
  EOT
3056
3207
  )
3057
3208
 
@@ -3089,13 +3240,7 @@ EOT
3089
3240
  descr(<<'EOT'
3090
3241
  A list of managers that the resource reports to.
3091
3242
 
3092
- The list can be customized by the [listmode.column listmode] attribute. The
3093
- following modes are supported:
3094
-
3095
- # ID
3096
- # Name ''(This is the default)''
3097
- # Name (ID)
3098
- # ID: Name
3243
+ The list can be customized by the [listitem.column listitem] attribute.
3099
3244
  EOT
3100
3245
  )
3101
3246
 
@@ -3138,21 +3283,9 @@ are used
3138
3283
  * '''<nowiki>]->]</nowiki>''': End-to-End dependency
3139
3284
  * '''<nowiki>[->]</nowiki>''': Start-to-End dependency
3140
3285
 
3141
- The list can be customized by the [listmode.column listmode] attribute. The
3142
- following modes are supported:
3143
-
3144
- # ID <nowiki><dep></nowiki> Date
3145
- # Name <nowiki><dep></nowiki> Date
3146
- # Name (ID) <nowiki><dep></nowiki> Date
3147
- # ID: Name <nowiki><dep></nowiki> Date
3148
- # ID <nowiki><dep></nowiki>
3149
- # Name <nowiki><dep></nowiki>
3150
- # Name (ID) <nowiki><dep></nowiki>
3151
- # ID: Name <nowiki><dep></nowiki>
3152
- # ID
3153
- # Name
3154
- # Name (ID)
3155
- # ID: Name
3286
+ The list can be customized by the [listitem.column listitem] attribute.
3287
+ The dependency symbol can be generated via the ''''dependency'''' attribute
3288
+ inthe query, the target date via the ''''date'''' attribute.
3156
3289
  EOT
3157
3290
  )
3158
3291
 
@@ -3169,13 +3302,7 @@ EOT
3169
3302
  descr(<<'EOT'
3170
3303
  All resources that have this resource assigned as a direct or indirect manager.
3171
3304
 
3172
- The list can be customized by the [listmode.column listmode] attribute. The
3173
- following modes are supported:
3174
-
3175
- # ID
3176
- # Name ''(This is the default)''
3177
- # Name (ID)
3178
- # ID: Name
3305
+ The list can be customized by the [listitem.column listitem] attribute.
3179
3306
  EOT
3180
3307
  )
3181
3308
 
@@ -3183,13 +3310,7 @@ EOT
3183
3310
  descr(<<'EOT'
3184
3311
  A list of resources that are assigned to the task in the report time frame.
3185
3312
 
3186
- The list can be customized by the [listmode.column listmode] attribute. The
3187
- following modes are supported:
3188
-
3189
- # ID
3190
- # Name ''(This is the default)''
3191
- # Name (ID)
3192
- # ID: Name
3313
+ The list can be customized by the [listitem.column listitem] attribute.
3193
3314
  EOT
3194
3315
  )
3195
3316
 
@@ -3197,13 +3318,7 @@ EOT
3197
3318
  descr(<<'EOT'
3198
3319
  The responsible people for this task.
3199
3320
 
3200
- The list can be customized by the [listmode.column listmode] attribute. The
3201
- following modes are supported:
3202
-
3203
- # ID
3204
- # Name ''(This is the default)''
3205
- # Name (ID)
3206
- # ID: Name
3321
+ The list can be customized by the [listitem.column listitem] attribute.
3207
3322
  EOT
3208
3323
  )
3209
3324
 
@@ -3236,21 +3351,16 @@ A list of milestones that depend on the current task. For container tasks it
3236
3351
  will also include the targets of the child tasks. Targets may not have any
3237
3352
  follower tasks.
3238
3353
 
3239
- The list can be customized by the [listmode.column listmode] attribute. The
3240
- following modes are supported:
3241
-
3242
- # ID
3243
- # Name
3244
- # Name (ID)
3245
- # ID: Name
3246
- # ID (Date)
3247
- # Name (Date)
3248
- # Name (ID) Date ''(This is the default)''
3249
- # ID: Name Date
3354
+ The list can be customized by the [listitem.column listitem] attribute.
3250
3355
  EOT
3251
3356
  )
3252
3357
 
3253
- singlePattern('_wbs')
3358
+ pattern([ '_wbs' ], lambda {
3359
+ 'bsi'
3360
+ })
3361
+ descr('Deprecated alias for bsi.')
3362
+
3363
+ singlePattern('_bsi')
3254
3364
  descr('The hierarchical or work breakdown structure index')
3255
3365
 
3256
3366
  singlePattern('_weekly')
@@ -3304,6 +3414,10 @@ report.
3304
3414
  EOT
3305
3415
  )
3306
3416
 
3417
+ pattern(%w( !currencyFormat ), lambda {
3418
+ @property.set('currencyFormat', @val[0])
3419
+ })
3420
+
3307
3421
  pattern(%w( !reportEnd ))
3308
3422
 
3309
3423
  pattern(%w( _epilog $STRING ), lambda {
@@ -3346,6 +3460,7 @@ EOT
3346
3460
  also(%w( epilog footer prolog ))
3347
3461
 
3348
3462
  pattern(%w( !headline ))
3463
+ pattern(%w( !hidejournalentry ))
3349
3464
  pattern(%w( !hideresource ))
3350
3465
 
3351
3466
  pattern(%w( !hidetask ))
@@ -3368,6 +3483,10 @@ Determines what unit should be used to display all load values in this report.
3368
3483
  EOT
3369
3484
  )
3370
3485
 
3486
+ pattern(%w( !numberFormat ), lambda {
3487
+ @property.set('numberFormat', @val[0])
3488
+ })
3489
+
3371
3490
  pattern(%w( !reportPeriod ))
3372
3491
 
3373
3492
  pattern(%w( _prolog $STRING ), lambda {
@@ -3397,27 +3516,12 @@ span the [[header]] or [[footer]] sections.
3397
3516
  EOT
3398
3517
  )
3399
3518
 
3400
- pattern(%w( _rollupresource !logicalExpression ), lambda {
3401
- @property.set('rollupResource', @val[1])
3402
- })
3403
- doc('rollupresource', <<'EOT'
3404
- Do not show sub-resources of resources that match the specified logical
3405
- expression.
3406
- EOT
3407
- )
3408
- example('RollupResource')
3409
-
3410
- pattern(%w( _rolluptask !logicalExpression ), lambda {
3411
- @property.set('rollupTask', @val[1])
3412
- })
3413
- doc('rolluptask', <<'EOT'
3414
- Do not show sub-tasks of tasks that match the specified logical expression.
3415
- EOT
3416
- )
3519
+ pattern(%w( !rollupresource ))
3520
+ pattern(%w( !rolluptask ))
3417
3521
 
3418
3522
  pattern(%w( _scenarios !scenarioIdList ), lambda {
3419
3523
  # Don't include disabled scenarios in the report
3420
- @val[1].delete_if { |sc| !@project.scenario(sc).get('enabled') }
3524
+ @val[1].delete_if { |sc| !@project.scenario(sc).get('active') }
3421
3525
  @property.set('scenarios', @val[1])
3422
3526
  })
3423
3527
  doc('scenarios', <<'EOT'
@@ -3445,6 +3549,11 @@ EOT
3445
3549
  pattern(%w( !reportStart ))
3446
3550
 
3447
3551
  pattern(%w( _resourceroot !resourceId), lambda {
3552
+ if @val[1].leaf?
3553
+ error('resourceroot_leaf',
3554
+ "#{@val[1].fullId} is not a group resource",
3555
+ @sourceFileInfo[1])
3556
+ end
3448
3557
  @property.set('resourceRoot', @val[1])
3449
3558
  })
3450
3559
  doc('resourceroot', <<'EOT'
@@ -3457,6 +3566,11 @@ EOT
3457
3566
  example('ResourceRoot')
3458
3567
 
3459
3568
  pattern(%w( _taskroot !taskId), lambda {
3569
+ if @val[1].leaf?
3570
+ error('taskroot_leaf',
3571
+ "#{@val[1].fullId} is not a container task",
3572
+ @sourceFileInfo[1])
3573
+ end
3460
3574
  @property.set('taskRoot', @val[1])
3461
3575
  })
3462
3576
  doc('taskroot', <<'EOT'
@@ -3577,7 +3691,7 @@ EOT
3577
3691
  @property.typeSpec = :taskreport
3578
3692
  unless @property.modified?('columns')
3579
3693
  # Set the default columns for this report.
3580
- %w( wbs name start end effort chart ).each do |col|
3694
+ %w( bsi name start end effort chart ).each do |col|
3581
3695
  @property.get('columns') <<
3582
3696
  TableColumnDefinition.new(col, columnTitle(col))
3583
3697
  end
@@ -3752,6 +3866,12 @@ EOT
3752
3866
 
3753
3867
  def rule_resourceBooking
3754
3868
  pattern(%w( !resourceBookingHeader !bookingBody ), lambda {
3869
+ unless @project.scenario(@scenarioIdx).get('ownbookings')
3870
+ error('no_own_resource_booking',
3871
+ "The scenario #{@project.scenario(@scenarioIdx).fullId} " +
3872
+ 'inherits its bookings from the tracking ' +
3873
+ 'scenario. You cannot specificy additional bookings for it.')
3874
+ end
3755
3875
  @val[0].task.addBooking(@scenarioIdx, @val[0])
3756
3876
  })
3757
3877
  end
@@ -3837,14 +3957,16 @@ EOT
3837
3957
 
3838
3958
  pattern(%w( _booking !resourceBooking ))
3839
3959
  doc('booking.resource', <<'EOT'
3840
- The booking attribute can be used to report completed work. This can be part
3841
- of the necessary effort or the whole effort. When the scenario is scheduled in
3842
- [[projection]] mode, TaskJuggler assumes that only the work reported with
3843
- bookings has been done up to now. It then schedules a plan for the still
3844
- missing effort. All task with bookings must be scheduled in ''''asap'''' mode.
3960
+ The booking attribute can be used to report actually completed work. A task
3961
+ with bookings must be [[scheduling|scheduled]] in ''''asap'''' mode. If the
3962
+ scenario is not the [[trackingscenario|tracking scenario]] or derived from it,
3963
+ the scheduler will not allocate resources prior to the current date or the
3964
+ date specified with [[now]] when a task has at least one booking.
3845
3965
 
3846
3966
  Bookings are only valid in the scenario they have been defined in. They will
3847
- not be passed to any other scenario.
3967
+ in general not be passed to any other scenario. If you have defined a
3968
+ [[trackingscenario|tracking scenario]], the bookings of this scenario will be
3969
+ passed to all the derived scenarios of the tracking scenario.
3848
3970
 
3849
3971
  The sloppy attribute can be used when you want to skip non-working time or
3850
3972
  other allocations automatically. If it's not given, all bookings must only
@@ -3941,6 +4063,29 @@ EOT
3941
4063
  # Other attributes will be added automatically.
3942
4064
  end
3943
4065
 
4066
+ def rule_rollupresource
4067
+ pattern(%w( _rollupresource !logicalExpression ), lambda {
4068
+ @property.set('rollupResource', @val[1])
4069
+ })
4070
+ doc('rollupresource', <<'EOT'
4071
+ Do not show sub-resources of resources that match the specified logical
4072
+ expression.
4073
+ EOT
4074
+ )
4075
+ example('RollupResource')
4076
+ end
4077
+
4078
+ def rule_rolluptask
4079
+ pattern(%w( _rolluptask !logicalExpression ), lambda {
4080
+ @property.set('rollupTask', @val[1])
4081
+ })
4082
+ doc('rolluptask', <<'EOT'
4083
+ Do not show sub-tasks of tasks that match the specified logical expression.
4084
+ EOT
4085
+ )
4086
+ end
4087
+
4088
+
3944
4089
  def rule_scenario
3945
4090
  pattern(%w( !scenarioHeader !scenarioBody ), lambda {
3946
4091
  @property = @property.parent
@@ -3971,53 +4116,47 @@ EOT
3971
4116
  optional
3972
4117
  repeatable
3973
4118
 
4119
+ pattern(%w( _active !yesNo), lambda {
4120
+ @property.set('active', @val[1])
4121
+ })
4122
+ doc('active', <<'EOT'
4123
+ Enable the scenario to be scheduled or not. By default, all scenarios will be
4124
+ scheduled. If a scenario is marked as inactive, it not be scheduled and will
4125
+ be ignored in the reports.
4126
+ EOT
4127
+ )
3974
4128
  pattern(%w( _disabled ), lambda {
3975
- @property.set('enabled', false)
4129
+ @property.set('active', false)
3976
4130
  })
3977
4131
  doc('disabled', <<'EOT'
4132
+ This attribute is deprecated. Please use [active] instead.
4133
+
3978
4134
  Disable the scenario for scheduling. The default for the top-level
3979
4135
  scenario is to be enabled.
3980
4136
  EOT
3981
4137
  )
3982
4138
  example('Scenario')
3983
4139
  pattern(%w( _enabled ), lambda {
3984
- @property.set('enabled', true)
4140
+ @property.set('active', true)
3985
4141
  })
3986
4142
  doc('enabled', <<'EOT'
4143
+ This attribute is deprecated. Please use [active] instead.
4144
+
3987
4145
  Enable the scenario for scheduling. This is the default for the top-level
3988
4146
  scenario.
3989
- EOT
3990
- )
3991
-
3992
- pattern(%w( _minslackrate !number ), lambda {
3993
- @property.set('minslackrate', @val[1] / 100.0)
3994
- })
3995
- doc('minslackrate', <<'EOT'
3996
- Specifies the minimum percentage of slack a task path must have before it is
3997
- marked as critical. A path is any list of explicitely or implicitely connected
3998
- tasks measured from first task to last task. The slack is the time between
3999
- start of the first task and end of the last task that is not covered by any
4000
- task of the path.
4001
-
4002
- Larger values in combination with a project that uses lots of inherited
4003
- dependencies and long dependency pathes can result in very long scheduling
4004
- times. The more slack you require, the more pathes have to be searched till
4005
- the end. For larger projects an increase of 5% can turn a 10 second scheduling
4006
- run into a 1 hour or more scheduling run. If you need larger slack rate
4007
- values, avoid the use of inherited dependencies.
4008
-
4009
- The default value is 0% which turns off the critical path detector.
4010
4147
  EOT
4011
4148
  )
4012
4149
 
4013
4150
  pattern(%w( _projection !projection ), lambda {
4014
- @property.set('projection', true)
4151
+ warning('projection',
4152
+ 'The \'projection\' keyword has been deprecated. Please use ' +
4153
+ '[[trackingscenario]] feature instead.')
4015
4154
  })
4016
4155
  doc('projection', <<'EOT'
4017
- Enables the projection mode for the scenario. All tasks will be scheduled
4018
- taking the manual bookings into account. The tasks will be extended by
4019
- scheduling new bookings starting with the current date until the specified
4020
- effort, length or duration has been reached.
4156
+ This keyword has been deprecated! Don't use it anymore!
4157
+
4158
+ Projection mode is now automatically enabled as soon as a scenario has
4159
+ bookings.
4021
4160
  EOT
4022
4161
  )
4023
4162
 
@@ -4259,9 +4398,9 @@ EOT
4259
4398
  "Sorting criterium expected (e.g. tree, start.up or " +
4260
4399
  "plan.end.down).", @sourceFileInfo[0])
4261
4400
  end
4262
- if attribute == 'wbs'
4263
- error('sorting_wbs',
4264
- "Sorting by wbs is not supported. Please use 'tree' " +
4401
+ if attribute == 'bsi'
4402
+ error('sorting_bsi',
4403
+ "Sorting by bsi is not supported. Please use 'tree' " +
4265
4404
  '(without appended .up or .down) instead.',
4266
4405
  @sourceFileInfo[0])
4267
4406
  end
@@ -4367,6 +4506,20 @@ EOT
4367
4506
 
4368
4507
  pattern(%w( !author ))
4369
4508
  pattern(%w( !details ))
4509
+
4510
+ pattern(%w( _flags !flagList ), lambda {
4511
+ @val[1].each do |flag|
4512
+ next if @journalEntry.flags.include?(flag)
4513
+
4514
+ @journalEntry.flags << flag
4515
+ end
4516
+ })
4517
+ doc('flags.statussheet', <<'EOT'
4518
+ Status sheet entries can have flags attached to them. These can be used to
4519
+ include only entries in a report that have a certain flag.
4520
+ EOT
4521
+ )
4522
+
4370
4523
  pattern(%w( !summary ))
4371
4524
  end
4372
4525
 
@@ -4430,6 +4583,10 @@ EOT
4430
4583
 
4431
4584
  def rule_statusSheetHeader
4432
4585
  pattern(%w( _statussheet !resourceId !valIntervalOrDate ), lambda {
4586
+ unless (scenarioIdx = @project['trackingScenarioIdx'])
4587
+ error('ss_no_tracking_scenario',
4588
+ 'No trackingscenario defined.')
4589
+ end
4433
4590
  @sheetAuthor = @val[1]
4434
4591
  @sheetStart = @val[2].start
4435
4592
  @sheetEnd = @val[2].end
@@ -4451,7 +4608,8 @@ A status sheet report is a template for a status sheet. It collects all the
4451
4608
  status information of the top-level task that a resource is responsible for.
4452
4609
  This report is typically used by managers or team leads to review the time
4453
4610
  sheet status information and destill it down to a summary that can be
4454
- forwarded to the next person in the reporting chain.
4611
+ forwarded to the next person in the reporting chain. The report will be for
4612
+ the specified [trackingscenario].
4455
4613
  EOT
4456
4614
  )
4457
4615
  end
@@ -4658,6 +4816,12 @@ EOT
4658
4816
 
4659
4817
  def rule_taskBooking
4660
4818
  pattern(%w( !taskBookingHeader !bookingBody ), lambda {
4819
+ unless @project.scenario(@scenarioIdx).get('ownbookings')
4820
+ error('no_own_task_booking',
4821
+ "The scenario #{@project.scenario(@scenarioIdx).fullId} " +
4822
+ 'inherits its bookings from the tracking ' +
4823
+ 'scenario. You cannot specificy additional bookings for it.')
4824
+ end
4661
4825
  @val[0].task.addBooking(@scenarioIdx, @val[0])
4662
4826
  })
4663
4827
  end
@@ -4863,14 +5027,16 @@ EOT
4863
5027
 
4864
5028
  pattern(%w( _booking !taskBooking ))
4865
5029
  doc('booking.task', <<'EOT'
4866
- The booking attribute can be used to report completed work. This can be part
4867
- of the necessary effort or the whole effort. When the scenario is scheduled in
4868
- [[projection]] mode, TaskJuggler assumes that only the work reported with
4869
- bookings has been done up to now. It then schedules a plan for the still
4870
- missing effort. All task with bookings must be scheduled in ''''asap'''' mode.
5030
+ The booking attribute can be used to report actually completed work. A task
5031
+ with bookings must be [[scheduling|scheduled]] in ''''asap'''' mode. If the
5032
+ scenario is not the [[trackingscenario|tracking scenario]] or derived from it,
5033
+ the scheduler will not allocate resources prior to the current date or the
5034
+ date specified with [[now]] when a task has at least one booking.
4871
5035
 
4872
5036
  Bookings are only valid in the scenario they have been defined in. They will
4873
- not be passed to any other scenario.
5037
+ in general not be passed to any other scenario. If you have defined a
5038
+ [[trackingscenario|tracking scenario]], the bookings of this scenario will be
5039
+ passed to all the derived scenarios of the tracking scenario.
4874
5040
 
4875
5041
  The sloppy attribute can be used when you want to skip non-working time or
4876
5042
  other allocations automatically. If it's not given, all bookings must only
@@ -5147,8 +5313,7 @@ EOT
5147
5313
  )
5148
5314
 
5149
5315
  pattern(%w( _startcredit !number ), lambda {
5150
- @property['charge', @scenarioIdx] =
5151
- @property['charge', @scenarioIdx] +
5316
+ @property['charge', @scenarioIdx] +=
5152
5317
  [ Charge.new(@val[1], :onStart, @property, @scenarioIdx) ]
5153
5318
  })
5154
5319
  doc('startcredit', <<'EOT'
@@ -5162,8 +5327,7 @@ EOT
5162
5327
  pattern(%w( _precedes !taskPredList ), lambda {
5163
5328
  checkContainer('precedes')
5164
5329
  begin
5165
- @property['precedes', @scenarioIdx] =
5166
- @property['precedes', @scenarioIdx] + @val[1]
5330
+ @property['precedes', @scenarioIdx] += @val[1]
5167
5331
  @property['forward', @scenarioIdx] = false
5168
5332
  rescue AttributeOverwrite
5169
5333
  end
@@ -5206,6 +5370,7 @@ of the subtask.
5206
5370
  EOT
5207
5371
  )
5208
5372
  arg(1, 'value', 'Priority value (1 - 1000)')
5373
+ example('Priority')
5209
5374
 
5210
5375
  pattern(%w( _projectid $ID ), lambda {
5211
5376
  unless @project['projectids'].include?(@val[1])
@@ -5226,8 +5391,8 @@ EOT
5226
5391
  )
5227
5392
 
5228
5393
  pattern(%w( _responsible !resourceList ), lambda {
5229
- @property['responsible', @scenarioIdx] =
5230
- @property['responsible', @scenarioIdx] + @val[1]
5394
+ @property['responsible', @scenarioIdx] += @val[1]
5395
+ @property['responsible', @scenarioIdx].uniq!
5231
5396
  })
5232
5397
  doc('responsible', <<'EOT'
5233
5398
  The ID of the resource that is responsible for this task. This value is for
@@ -5610,9 +5775,12 @@ EOT
5610
5775
  'A resource group cannot file a time sheet',
5611
5776
  @sourceFileInfo[1])
5612
5777
  end
5778
+ unless (scenarioIdx = @project['trackingScenarioIdx'])
5779
+ error('ts_no_tracking_scenario',
5780
+ 'No trackingscenario defined.')
5781
+ end
5613
5782
  # Currently time sheets are hardcoded for scenario 0.
5614
- @timeSheet = TimeSheet.new(@sheetAuthor, @val[2],
5615
- @project['trackingScenarioIdx'])
5783
+ @timeSheet = TimeSheet.new(@sheetAuthor, @val[2], scenarioIdx)
5616
5784
  @timeSheet.sourceFileInfo = @sourceFileInfo[0]
5617
5785
  @project.timeSheets << @timeSheet
5618
5786
  })
@@ -5627,7 +5795,7 @@ For projects that flow mostly according to plan, TaskJuggler already knows
5627
5795
  much of the information that should be contained in the time sheets. With this
5628
5796
  property, you can generate a report that contains drafts of the time sheets
5629
5797
  for one or more resources. The time sheet drafts will be for the
5630
- specified report period.
5798
+ specified report period and the specified [trackingscenario].
5631
5799
  EOT
5632
5800
  )
5633
5801
  end
@@ -5710,6 +5878,20 @@ EOT
5710
5878
  repeatable
5711
5879
 
5712
5880
  pattern(%w( !details ))
5881
+
5882
+ pattern(%w( _flags !flagList ), lambda {
5883
+ @val[1].each do |flag|
5884
+ next if @journalEntry.flags.include?(flag)
5885
+
5886
+ @journalEntry.flags << flag
5887
+ end
5888
+ })
5889
+ doc('flags.timesheet', <<'EOT'
5890
+ Time sheet entries can have flags attached to them. These can be used to
5891
+ include only entries in a report that have a certain flag.
5892
+ EOT
5893
+ )
5894
+
5713
5895
  pattern(%w( !summary ))
5714
5896
  end
5715
5897
 
@@ -5958,8 +6140,7 @@ EOT
5958
6140
  def rule_warn
5959
6141
  pattern(%w( _warn !logicalExpression ), lambda {
5960
6142
  begin
5961
- @property['warn', @scenarioIdx] =
5962
- @property['warn', @scenarioIdx] + [ @val[1] ]
6143
+ @property.set('warn', @property.get('warn') + [ @val[1] ])
5963
6144
  rescue AttributeOverwrite
5964
6145
  end
5965
6146
  })