taskjuggler 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (563) hide show
  1. data/CHANGELOG +37 -5
  2. data/README.rdoc +4 -2
  3. data/benchmarks/UTF-8-Strings.rb +58 -0
  4. data/benchmarks/css/tjmanual.css +0 -1
  5. data/benchmarks/htmltaskreport-1.html +47702 -0
  6. data/benchmarks/htmltaskreport-2.html +23345 -0
  7. data/benchmarks/htmltaskreport-3.html +23265 -0
  8. data/benchmarks/htmltaskreport-4.html +22135 -0
  9. data/benchmarks/profile.clt +36082 -0
  10. data/benchmarks/tj3.profile +0 -0
  11. data/benchmarks/tj3.profile.grind +6185 -0
  12. data/benchmarks/tj3.profile.symbols +432 -0
  13. data/benchmarks/tj3.profile.txt +448 -0
  14. data/data/tjp.vim +689 -0
  15. data/doc/AppConfig.html +26 -2
  16. data/doc/CHANGELOG.html +60 -8
  17. data/doc/COPYING.html +26 -2
  18. data/doc/Diff/Hunk.html +26 -2
  19. data/doc/Diff.html +26 -2
  20. data/doc/Diffable.html +26 -2
  21. data/doc/DiffableString.html +26 -2
  22. data/doc/Object.html +26 -104
  23. data/doc/README_rdoc.html +39 -7
  24. data/doc/RuntimeConfig.html +26 -2
  25. data/doc/String.html +26 -2
  26. data/doc/TaskJuggler/Account.html +27 -3
  27. data/doc/TaskJuggler/AccountAttribute.html +30 -6
  28. data/doc/TaskJuggler/AccountScenario.html +28 -4
  29. data/doc/TaskJuggler/Allocation.html +33 -9
  30. data/doc/TaskJuggler/AllocationAttribute.html +31 -7
  31. data/doc/TaskJuggler/AttributeBase.html +162 -111
  32. data/doc/TaskJuggler/AttributeDefinition.html +26 -2
  33. data/doc/TaskJuggler/AttributeOverwrite.html +26 -2
  34. data/doc/TaskJuggler/BatchProcessor.html +26 -2
  35. data/doc/TaskJuggler/Booking.html +29 -5
  36. data/doc/TaskJuggler/BookingListAttribute.html +29 -5
  37. data/doc/TaskJuggler/BooleanAttribute.html +30 -6
  38. data/doc/TaskJuggler/CSVFile.html +26 -2
  39. data/doc/TaskJuggler/CellSettingPattern.html +26 -2
  40. data/doc/TaskJuggler/CellSettingPatternList.html +26 -2
  41. data/doc/TaskJuggler/Charge.html +30 -6
  42. data/doc/TaskJuggler/ChargeListAttribute.html +29 -5
  43. data/doc/TaskJuggler/ChargeSet.html +26 -2
  44. data/doc/TaskJuggler/ChargeSetListAttribute.html +30 -6
  45. data/doc/TaskJuggler/CollisionDetector.html +26 -2
  46. data/doc/TaskJuggler/ColumnListAttribute.html +28 -4
  47. data/doc/TaskJuggler/ColumnTable.html +26 -2
  48. data/doc/TaskJuggler/Daemon.html +26 -2
  49. data/doc/TaskJuggler/DataCache.html +26 -2
  50. data/doc/TaskJuggler/DataCacheEntry.html +26 -2
  51. data/doc/TaskJuggler/DateAttribute.html +30 -6
  52. data/doc/TaskJuggler/DefinitionListAttribute.html +28 -4
  53. data/doc/TaskJuggler/DependencyListAttribute.html +30 -6
  54. data/doc/TaskJuggler/DurationAttribute.html +31 -7
  55. data/doc/TaskJuggler/FileList.html +26 -2
  56. data/doc/TaskJuggler/FileRecord.html +26 -2
  57. data/doc/TaskJuggler/FixnumAttribute.html +28 -4
  58. data/doc/TaskJuggler/FlagListAttribute.html +30 -6
  59. data/doc/TaskJuggler/FloatAttribute.html +29 -5
  60. data/doc/TaskJuggler/FormatListAttribute.html +29 -5
  61. data/doc/TaskJuggler/GanttChart.html +26 -2
  62. data/doc/TaskJuggler/GanttContainer.html +26 -2
  63. data/doc/TaskJuggler/GanttHeader.html +26 -2
  64. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -2
  65. data/doc/TaskJuggler/GanttLine.html +27 -3
  66. data/doc/TaskJuggler/GanttLoadStack.html +26 -2
  67. data/doc/TaskJuggler/GanttMilestone.html +26 -2
  68. data/doc/TaskJuggler/GanttRouter.html +26 -2
  69. data/doc/TaskJuggler/GanttTaskBar.html +26 -2
  70. data/doc/TaskJuggler/HTMLDocument.html +26 -2
  71. data/doc/TaskJuggler/HTMLElements.html +623 -0
  72. data/doc/TaskJuggler/HTMLGraphics.html +26 -2
  73. data/doc/TaskJuggler/ICalReport.html +864 -0
  74. data/doc/TaskJuggler/ICalendar/Component.html +969 -0
  75. data/doc/TaskJuggler/ICalendar/Event.html +742 -0
  76. data/doc/TaskJuggler/ICalendar/Journal.html +722 -0
  77. data/doc/TaskJuggler/ICalendar/Person.html +633 -0
  78. data/doc/TaskJuggler/ICalendar/Todo.html +789 -0
  79. data/doc/TaskJuggler/ICalendar.html +1035 -0
  80. data/doc/TaskJuggler/Interval.html +99 -172
  81. data/doc/TaskJuggler/IntervalList.html +31 -7
  82. data/doc/TaskJuggler/JobInfo.html +26 -2
  83. data/doc/TaskJuggler/Journal.html +26 -2
  84. data/doc/TaskJuggler/JournalEntry.html +26 -2
  85. data/doc/TaskJuggler/JournalEntryList.html +26 -2
  86. data/doc/TaskJuggler/KeywordArray.html +26 -2
  87. data/doc/TaskJuggler/KeywordDocumentation.html +26 -2
  88. data/doc/TaskJuggler/Limits/Limit.html +124 -49
  89. data/doc/TaskJuggler/Limits.html +139 -156
  90. data/doc/TaskJuggler/LimitsAttribute.html +39 -14
  91. data/doc/TaskJuggler/ListAttributeBase.html +35 -11
  92. data/doc/TaskJuggler/Log.html +26 -2
  93. data/doc/TaskJuggler/LogFile.html +26 -2
  94. data/doc/TaskJuggler/LogicalAttribute.html +26 -2
  95. data/doc/TaskJuggler/LogicalExpression.html +26 -2
  96. data/doc/TaskJuggler/LogicalExpressionAttribute.html +35 -11
  97. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +35 -11
  98. data/doc/TaskJuggler/LogicalFlag.html +26 -2
  99. data/doc/TaskJuggler/LogicalFunction.html +28 -4
  100. data/doc/TaskJuggler/LogicalOperation.html +26 -2
  101. data/doc/TaskJuggler/ManagerResponsibilities.html +26 -2
  102. data/doc/TaskJuggler/ManagerStatusRecord.html +26 -2
  103. data/doc/TaskJuggler/Message.html +26 -2
  104. data/doc/TaskJuggler/MessageHandler.html +108 -62
  105. data/doc/TaskJuggler/Navigator.html +26 -2
  106. data/doc/TaskJuggler/NavigatorElement.html +26 -2
  107. data/doc/TaskJuggler/NikuProject.html +26 -2
  108. data/doc/TaskJuggler/NikuReport.html +27 -3
  109. data/doc/TaskJuggler/NikuResource.html +26 -2
  110. data/doc/TaskJuggler/NodeListAttribute.html +31 -7
  111. data/doc/TaskJuggler/PlaceHolderCell.html +26 -2
  112. data/doc/TaskJuggler/ProcessIntercom.html +26 -2
  113. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -2
  114. data/doc/TaskJuggler/Project.html +1236 -973
  115. data/doc/TaskJuggler/ProjectBroker.html +26 -2
  116. data/doc/TaskJuggler/ProjectBrokerIface.html +26 -2
  117. data/doc/TaskJuggler/ProjectFileParser.html +29 -4
  118. data/doc/TaskJuggler/ProjectFileScanner.html +56 -31
  119. data/doc/TaskJuggler/ProjectRecord.html +26 -2
  120. data/doc/TaskJuggler/ProjectServer.html +26 -2
  121. data/doc/TaskJuggler/ProjectServerIface.html +26 -2
  122. data/doc/TaskJuggler/PropertyAttribute.html +35 -11
  123. data/doc/TaskJuggler/PropertyList.html +26 -2
  124. data/doc/TaskJuggler/PropertySet.html +126 -106
  125. data/doc/TaskJuggler/PropertyTreeNode.html +595 -551
  126. data/doc/TaskJuggler/Query.html +127 -100
  127. data/doc/TaskJuggler/RTFHandlers.html +26 -2
  128. data/doc/TaskJuggler/RTFNavigator.html +26 -2
  129. data/doc/TaskJuggler/RTFQuery.html +28 -4
  130. data/doc/TaskJuggler/RTFReport.html +26 -2
  131. data/doc/TaskJuggler/RTFReportLink.html +26 -2
  132. data/doc/TaskJuggler/RTFWithQuerySupport.html +26 -2
  133. data/doc/TaskJuggler/RealFormat.html +26 -2
  134. data/doc/TaskJuggler/RealFormatAttribute.html +31 -7
  135. data/doc/TaskJuggler/ReferenceAttribute.html +58 -34
  136. data/doc/TaskJuggler/Report.html +427 -284
  137. data/doc/TaskJuggler/ReportBase.html +28 -102
  138. data/doc/TaskJuggler/ReportContext.html +26 -2
  139. data/doc/TaskJuggler/ReportScenario.html +633 -0
  140. data/doc/TaskJuggler/ReportServer.html +26 -2
  141. data/doc/TaskJuggler/ReportServerIface.html +26 -2
  142. data/doc/TaskJuggler/ReportServerRecord.html +26 -2
  143. data/doc/TaskJuggler/ReportServlet.html +26 -2
  144. data/doc/TaskJuggler/ReportTable.html +26 -2
  145. data/doc/TaskJuggler/ReportTableCell.html +26 -2
  146. data/doc/TaskJuggler/ReportTableColumn.html +26 -2
  147. data/doc/TaskJuggler/ReportTableLegend.html +26 -2
  148. data/doc/TaskJuggler/ReportTableLine.html +26 -2
  149. data/doc/TaskJuggler/Resource.html +225 -163
  150. data/doc/TaskJuggler/ResourceListAttribute.html +71 -47
  151. data/doc/TaskJuggler/ResourceListRE.html +26 -2
  152. data/doc/TaskJuggler/ResourceScenario.html +645 -603
  153. data/doc/TaskJuggler/RichText.html +26 -2
  154. data/doc/TaskJuggler/RichTextAttribute.html +53 -29
  155. data/doc/TaskJuggler/RichTextDocument.html +26 -2
  156. data/doc/TaskJuggler/RichTextElement.html +26 -2
  157. data/doc/TaskJuggler/RichTextFunctionExample.html +26 -2
  158. data/doc/TaskJuggler/RichTextFunctionHandler.html +26 -2
  159. data/doc/TaskJuggler/RichTextImage.html +26 -2
  160. data/doc/TaskJuggler/RichTextIntermediate.html +29 -5
  161. data/doc/TaskJuggler/RichTextParser.html +26 -2
  162. data/doc/TaskJuggler/RichTextScanner.html +26 -2
  163. data/doc/TaskJuggler/RichTextSnip.html +26 -2
  164. data/doc/TaskJuggler/RichTextSyntaxRules.html +26 -2
  165. data/doc/TaskJuggler/Scenario.html +26 -2
  166. data/doc/TaskJuggler/ScenarioData.html +95 -28
  167. data/doc/TaskJuggler/ScenarioListAttribute.html +39 -15
  168. data/doc/TaskJuggler/Scoreboard.html +137 -73
  169. data/doc/TaskJuggler/ScoreboardInterval.html +1116 -0
  170. data/doc/TaskJuggler/SheetHandlerBase.html +26 -2
  171. data/doc/TaskJuggler/SheetReceiver.html +26 -2
  172. data/doc/TaskJuggler/SheetSender.html +26 -2
  173. data/doc/TaskJuggler/Shift.html +27 -3
  174. data/doc/TaskJuggler/ShiftAssignment.html +27 -3
  175. data/doc/TaskJuggler/ShiftAssignments.html +174 -149
  176. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +41 -16
  177. data/doc/TaskJuggler/ShiftScenario.html +26 -2
  178. data/doc/TaskJuggler/SimpleQueryExpander.html +26 -2
  179. data/doc/TaskJuggler/SortListAttribute.html +35 -11
  180. data/doc/TaskJuggler/StatusSheetReceiver.html +26 -2
  181. data/doc/TaskJuggler/StatusSheetReport.html +26 -2
  182. data/doc/TaskJuggler/StatusSheetSender.html +26 -2
  183. data/doc/TaskJuggler/StdIoWrapper.html +26 -2
  184. data/doc/TaskJuggler/StringAttribute.html +39 -15
  185. data/doc/TaskJuggler/SymbolAttribute.html +35 -11
  186. data/doc/TaskJuggler/SyntaxReference.html +26 -2
  187. data/doc/TaskJuggler/TOCEntry.html +26 -2
  188. data/doc/TaskJuggler/TSResourceRecord.html +26 -2
  189. data/doc/TaskJuggler/TSTaskRecord.html +26 -2
  190. data/doc/TaskJuggler/TableColumnDefinition.html +26 -2
  191. data/doc/TaskJuggler/TableOfContents.html +26 -2
  192. data/doc/TaskJuggler/TableReport.html +239 -214
  193. data/doc/TaskJuggler/TagFile/TagFileEntry.html +841 -0
  194. data/doc/TaskJuggler/TagFile.html +817 -0
  195. data/doc/TaskJuggler/Task.html +27 -3
  196. data/doc/TaskJuggler/TaskDepListAttribute.html +47 -23
  197. data/doc/TaskJuggler/TaskDependency.html +26 -2
  198. data/doc/TaskJuggler/TaskListAttribute.html +47 -23
  199. data/doc/TaskJuggler/TaskListRE.html +26 -2
  200. data/doc/TaskJuggler/TaskScenario.html +2235 -2178
  201. data/doc/TaskJuggler/TernarySearchTree.html +26 -2
  202. data/doc/TaskJuggler/TextFormatter.html +26 -2
  203. data/doc/TaskJuggler/TextParser/Macro.html +26 -2
  204. data/doc/TaskJuggler/TextParser/MacroTable.html +26 -2
  205. data/doc/TaskJuggler/TextParser/Pattern.html +26 -2
  206. data/doc/TaskJuggler/TextParser/Rule.html +26 -2
  207. data/doc/TaskJuggler/TextParser/Scanner/BufferStreamHandle.html +32 -8
  208. data/doc/TaskJuggler/TextParser/Scanner/FileStreamHandle.html +39 -15
  209. data/doc/TaskJuggler/TextParser/Scanner/MacroStackEntry.html +26 -2
  210. data/doc/TaskJuggler/TextParser/Scanner/StreamHandle.html +119 -86
  211. data/doc/TaskJuggler/TextParser/Scanner.html +317 -291
  212. data/doc/TaskJuggler/TextParser/SourceFileInfo.html +26 -2
  213. data/doc/TaskJuggler/TextParser/StackElement.html +26 -2
  214. data/doc/TaskJuggler/TextParser/State.html +26 -2
  215. data/doc/TaskJuggler/TextParser/StateTransition.html +26 -2
  216. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +26 -2
  217. data/doc/TaskJuggler/TextParser/TokenDoc.html +26 -2
  218. data/doc/TaskJuggler/TextParser.html +85 -61
  219. data/doc/TaskJuggler/TextReport.html +26 -2
  220. data/doc/TaskJuggler/TimeInterval.html +841 -0
  221. data/doc/TaskJuggler/{IntervalListAttribute.html → TimeIntervalListAttribute.html} +33 -9
  222. data/doc/TaskJuggler/TimeSheet.html +26 -2
  223. data/doc/TaskJuggler/TimeSheetReceiver.html +26 -2
  224. data/doc/TaskJuggler/TimeSheetRecord.html +27 -3
  225. data/doc/TaskJuggler/TimeSheetReport.html +29 -5
  226. data/doc/TaskJuggler/TimeSheetSender.html +26 -2
  227. data/doc/TaskJuggler/TimeSheetSummary.html +26 -2
  228. data/doc/TaskJuggler/TimeSheets.html +26 -2
  229. data/doc/TaskJuggler/Tj3.html +150 -111
  230. data/doc/TaskJuggler/Tj3AppBase.html +26 -2
  231. data/doc/TaskJuggler/Tj3Client.html +26 -2
  232. data/doc/TaskJuggler/Tj3Daemon.html +26 -2
  233. data/doc/TaskJuggler/Tj3Man.html +26 -2
  234. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -2
  235. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -2
  236. data/doc/TaskJuggler/Tj3SsSender.html +26 -2
  237. data/doc/TaskJuggler/Tj3TsReceiver.html +26 -2
  238. data/doc/TaskJuggler/Tj3TsSender.html +26 -2
  239. data/doc/TaskJuggler/Tj3TsSummary.html +26 -2
  240. data/doc/TaskJuggler/TjException.html +26 -2
  241. data/doc/TaskJuggler/TjRuntimeError.html +26 -2
  242. data/doc/TaskJuggler/TjTime.html +539 -477
  243. data/doc/TaskJuggler/TjpExample.html +26 -2
  244. data/doc/TaskJuggler/TjpExportRE.html +240 -161
  245. data/doc/TaskJuggler/TjpSyntaxRules.html +4236 -3844
  246. data/doc/TaskJuggler/URLParameter.html +26 -2
  247. data/doc/TaskJuggler/UserManual.html +26 -2
  248. data/doc/TaskJuggler/VimSyntax.html +31 -7
  249. data/doc/TaskJuggler/WebServer.html +26 -2
  250. data/doc/TaskJuggler/WelcomePage.html +26 -2
  251. data/doc/TaskJuggler/WorkingHours.html +227 -152
  252. data/doc/TaskJuggler/WorkingHoursAttribute.html +62 -38
  253. data/doc/TaskJuggler/XMLBlob.html +26 -2
  254. data/doc/TaskJuggler/XMLComment.html +26 -2
  255. data/doc/TaskJuggler/XMLDocument.html +26 -2
  256. data/doc/TaskJuggler/XMLElement.html +26 -2
  257. data/doc/TaskJuggler/XMLNamedText.html +26 -2
  258. data/doc/TaskJuggler/XMLText.html +26 -2
  259. data/doc/TaskJuggler.html +486 -427
  260. data/doc/index.html +801 -659
  261. data/doc/lib/taskjuggler/AccountScenario_rb.html +1 -1
  262. data/doc/lib/taskjuggler/Account_rb.html +1 -1
  263. data/doc/lib/taskjuggler/AlgorithmDiff_rb.html +1 -1
  264. data/doc/lib/taskjuggler/Allocation_rb.html +1 -1
  265. data/doc/lib/taskjuggler/AppConfig_rb.html +1 -1
  266. data/doc/lib/taskjuggler/AttributeBase_rb.html +1 -1
  267. data/doc/lib/taskjuggler/AttributeDefinition_rb.html +1 -1
  268. data/doc/lib/taskjuggler/Attributes_rb.html +1 -1
  269. data/doc/lib/taskjuggler/BatchProcessor_rb.html +1 -1
  270. data/doc/lib/taskjuggler/Booking_rb.html +1 -1
  271. data/doc/lib/taskjuggler/ChargeSet_rb.html +1 -1
  272. data/doc/lib/taskjuggler/Charge_rb.html +1 -1
  273. data/doc/lib/taskjuggler/DataCache_rb.html +1 -1
  274. data/doc/lib/taskjuggler/FileList_rb.html +1 -1
  275. data/doc/lib/taskjuggler/HTMLDocument_rb.html +1 -1
  276. data/doc/lib/{ruby-signal-bug_rb.html → taskjuggler/HTMLElements_rb.html} +9 -9
  277. data/doc/lib/{exchangebug_rb.html → taskjuggler/ICalendar_rb.html} +9 -9
  278. data/doc/lib/taskjuggler/IntervalList_rb.html +1 -1
  279. data/doc/lib/taskjuggler/Interval_rb.html +1 -1
  280. data/doc/lib/taskjuggler/Journal_rb.html +1 -1
  281. data/doc/lib/taskjuggler/KeywordArray_rb.html +1 -1
  282. data/doc/lib/taskjuggler/KeywordDocumentation_rb.html +1 -1
  283. data/doc/lib/taskjuggler/Limits_rb.html +1 -1
  284. data/doc/lib/taskjuggler/LogFile_rb.html +1 -1
  285. data/doc/lib/taskjuggler/Log_rb.html +1 -1
  286. data/doc/lib/taskjuggler/LogicalExpression_rb.html +1 -1
  287. data/doc/lib/taskjuggler/LogicalFunction_rb.html +1 -1
  288. data/doc/lib/taskjuggler/LogicalOperation_rb.html +1 -1
  289. data/doc/lib/taskjuggler/MessageHandler_rb.html +1 -1
  290. data/doc/lib/taskjuggler/ProjectFileParser_rb.html +1 -1
  291. data/doc/lib/taskjuggler/ProjectFileScanner_rb.html +1 -1
  292. data/doc/lib/taskjuggler/Project_rb.html +1 -1
  293. data/doc/lib/taskjuggler/PropertyList_rb.html +1 -1
  294. data/doc/lib/taskjuggler/PropertySet_rb.html +1 -1
  295. data/doc/lib/taskjuggler/PropertyTreeNode_rb.html +1 -1
  296. data/doc/lib/taskjuggler/Query_rb.html +1 -1
  297. data/doc/lib/taskjuggler/RealFormat_rb.html +1 -1
  298. data/doc/lib/taskjuggler/ResourceScenario_rb.html +1 -1
  299. data/doc/lib/taskjuggler/Resource_rb.html +1 -1
  300. data/doc/lib/taskjuggler/RichText/Document_rb.html +1 -1
  301. data/doc/lib/taskjuggler/RichText/Element_rb.html +1 -1
  302. data/doc/lib/taskjuggler/RichText/FunctionExample_rb.html +1 -1
  303. data/doc/lib/taskjuggler/RichText/FunctionHandler_rb.html +1 -1
  304. data/doc/lib/taskjuggler/RichText/Parser_rb.html +1 -1
  305. data/doc/lib/taskjuggler/RichText/RTFHandlers_rb.html +1 -1
  306. data/doc/lib/taskjuggler/RichText/RTFNavigator_rb.html +1 -1
  307. data/doc/lib/taskjuggler/RichText/RTFQuery_rb.html +1 -1
  308. data/doc/lib/taskjuggler/RichText/RTFReportLink_rb.html +1 -1
  309. data/doc/lib/taskjuggler/RichText/RTFReport_rb.html +1 -1
  310. data/doc/lib/taskjuggler/RichText/RTFWithQuerySupport_rb.html +1 -1
  311. data/doc/lib/taskjuggler/RichText/Scanner_rb.html +1 -1
  312. data/doc/lib/taskjuggler/RichText/Snip_rb.html +1 -1
  313. data/doc/lib/taskjuggler/RichText/SyntaxRules_rb.html +1 -1
  314. data/doc/lib/taskjuggler/RichText/TOCEntry_rb.html +1 -1
  315. data/doc/lib/taskjuggler/RichText/TableOfContents_rb.html +1 -1
  316. data/doc/lib/taskjuggler/RichText_rb.html +1 -1
  317. data/doc/lib/taskjuggler/RuntimeConfig_rb.html +1 -1
  318. data/doc/lib/taskjuggler/ScenarioData_rb.html +1 -1
  319. data/doc/lib/taskjuggler/Scenario_rb.html +1 -1
  320. data/doc/lib/taskjuggler/Scoreboard_rb.html +1 -1
  321. data/doc/lib/taskjuggler/SheetHandlerBase_rb.html +1 -1
  322. data/doc/lib/taskjuggler/SheetReceiver_rb.html +1 -1
  323. data/doc/lib/taskjuggler/SheetSender_rb.html +1 -1
  324. data/doc/lib/taskjuggler/ShiftAssignments_rb.html +1 -1
  325. data/doc/lib/taskjuggler/ShiftScenario_rb.html +1 -1
  326. data/doc/lib/taskjuggler/Shift_rb.html +1 -1
  327. data/doc/lib/taskjuggler/SimpleQueryExpander_rb.html +1 -1
  328. data/doc/lib/taskjuggler/StatusSheetReceiver_rb.html +1 -1
  329. data/doc/lib/taskjuggler/StatusSheetSender_rb.html +1 -1
  330. data/doc/lib/taskjuggler/StdIoWrapper_rb.html +1 -1
  331. data/doc/lib/taskjuggler/SyntaxReference_rb.html +1 -1
  332. data/doc/lib/taskjuggler/TableColumnDefinition_rb.html +1 -1
  333. data/doc/lib/taskjuggler/TaskDependency_rb.html +1 -1
  334. data/doc/lib/taskjuggler/TaskJuggler_rb.html +1 -1
  335. data/doc/lib/taskjuggler/TaskScenario_rb.html +1 -1
  336. data/doc/lib/taskjuggler/Task_rb.html +1 -1
  337. data/doc/lib/taskjuggler/TernarySearchTree_rb.html +1 -1
  338. data/doc/lib/taskjuggler/TextFormatter_rb.html +1 -1
  339. data/doc/lib/taskjuggler/TextParser/MacroTable_rb.html +1 -1
  340. data/doc/lib/taskjuggler/TextParser/Pattern_rb.html +1 -1
  341. data/doc/lib/taskjuggler/TextParser/Rule_rb.html +1 -1
  342. data/doc/lib/taskjuggler/TextParser/Scanner_rb.html +1 -1
  343. data/doc/lib/taskjuggler/TextParser/SourceFileInfo_rb.html +1 -1
  344. data/doc/lib/taskjuggler/TextParser/StackElement_rb.html +1 -1
  345. data/doc/lib/taskjuggler/TextParser/State_rb.html +1 -1
  346. data/doc/lib/taskjuggler/TextParser/TokenDoc_rb.html +1 -1
  347. data/doc/lib/taskjuggler/TextParser_rb.html +1 -1
  348. data/doc/lib/taskjuggler/TimeSheetReceiver_rb.html +1 -1
  349. data/doc/lib/taskjuggler/TimeSheetSender_rb.html +1 -1
  350. data/doc/lib/taskjuggler/TimeSheetSummary_rb.html +1 -1
  351. data/doc/lib/taskjuggler/TimeSheets_rb.html +1 -1
  352. data/doc/lib/taskjuggler/Tj3AppBase_rb.html +1 -1
  353. data/doc/lib/taskjuggler/Tj3Config_rb.html +1 -1
  354. data/doc/lib/taskjuggler/Tj3SheetAppBase_rb.html +1 -1
  355. data/doc/lib/taskjuggler/TjException_rb.html +1 -1
  356. data/doc/lib/taskjuggler/TjTime_rb.html +1 -1
  357. data/doc/lib/taskjuggler/TjpExample_rb.html +1 -1
  358. data/doc/lib/taskjuggler/TjpSyntaxRules_rb.html +1 -1
  359. data/doc/lib/taskjuggler/URLParameter_rb.html +1 -1
  360. data/doc/lib/taskjuggler/UTF8String_rb.html +1 -1
  361. data/doc/lib/taskjuggler/UserManual_rb.html +1 -1
  362. data/doc/lib/taskjuggler/VimSyntax_rb.html +1 -1
  363. data/doc/lib/taskjuggler/WorkingHours_rb.html +1 -1
  364. data/doc/lib/taskjuggler/XMLDocument_rb.html +1 -1
  365. data/doc/lib/taskjuggler/XMLElement_rb.html +1 -1
  366. data/doc/lib/taskjuggler/apps/Tj3Client_rb.html +1 -1
  367. data/doc/lib/taskjuggler/apps/Tj3Daemon_rb.html +1 -1
  368. data/doc/lib/taskjuggler/apps/Tj3Man_rb.html +1 -1
  369. data/doc/lib/taskjuggler/apps/Tj3SsReceiver_rb.html +1 -1
  370. data/doc/lib/taskjuggler/apps/Tj3SsSender_rb.html +1 -1
  371. data/doc/lib/taskjuggler/apps/Tj3TsReceiver_rb.html +1 -1
  372. data/doc/lib/taskjuggler/apps/Tj3TsSender_rb.html +1 -1
  373. data/doc/lib/taskjuggler/apps/Tj3TsSummary_rb.html +1 -1
  374. data/doc/lib/taskjuggler/apps/Tj3_rb.html +1 -1
  375. data/doc/lib/taskjuggler/daemon/Daemon_rb.html +1 -1
  376. data/doc/lib/taskjuggler/daemon/ProcessIntercom_rb.html +1 -1
  377. data/doc/lib/taskjuggler/daemon/ProjectBroker_rb.html +1 -1
  378. data/doc/lib/taskjuggler/daemon/ProjectServer_rb.html +1 -1
  379. data/doc/lib/taskjuggler/daemon/ReportServer_rb.html +1 -1
  380. data/doc/lib/taskjuggler/daemon/ReportServlet_rb.html +1 -1
  381. data/doc/lib/taskjuggler/daemon/WebServer_rb.html +1 -1
  382. data/doc/lib/taskjuggler/daemon/WelcomePage_rb.html +1 -1
  383. data/doc/lib/taskjuggler/deep_copy_rb.html +1 -1
  384. data/doc/lib/taskjuggler/reports/CSVFile_rb.html +1 -1
  385. data/doc/lib/taskjuggler/reports/CollisionDetector_rb.html +1 -1
  386. data/doc/lib/taskjuggler/reports/ColumnTable_rb.html +1 -1
  387. data/doc/lib/taskjuggler/reports/GanttChart_rb.html +1 -1
  388. data/doc/lib/taskjuggler/reports/GanttContainer_rb.html +1 -1
  389. data/doc/lib/taskjuggler/reports/GanttHeaderScaleItem_rb.html +1 -1
  390. data/doc/lib/taskjuggler/reports/GanttHeader_rb.html +1 -1
  391. data/doc/lib/taskjuggler/reports/GanttLine_rb.html +1 -1
  392. data/doc/lib/taskjuggler/reports/GanttLoadStack_rb.html +1 -1
  393. data/doc/lib/taskjuggler/reports/GanttMilestone_rb.html +1 -1
  394. data/doc/lib/taskjuggler/reports/GanttRouter_rb.html +1 -1
  395. data/doc/lib/taskjuggler/reports/GanttTaskBar_rb.html +1 -1
  396. data/doc/lib/taskjuggler/reports/HTMLGraphics_rb.html +1 -1
  397. data/doc/lib/taskjuggler/reports/ICalReport_rb.html +71 -0
  398. data/doc/lib/taskjuggler/reports/Navigator_rb.html +1 -1
  399. data/doc/lib/taskjuggler/reports/NikuReport_rb.html +1 -1
  400. data/doc/lib/taskjuggler/reports/ReportBase_rb.html +1 -1
  401. data/doc/lib/taskjuggler/reports/ReportContext_rb.html +1 -1
  402. data/doc/lib/taskjuggler/reports/ReportTableCell_rb.html +1 -1
  403. data/doc/lib/taskjuggler/reports/ReportTableColumn_rb.html +1 -1
  404. data/doc/lib/taskjuggler/reports/ReportTableLegend_rb.html +1 -1
  405. data/doc/lib/taskjuggler/reports/ReportTableLine_rb.html +1 -1
  406. data/doc/lib/taskjuggler/reports/ReportTable_rb.html +1 -1
  407. data/doc/lib/taskjuggler/reports/Report_rb.html +5 -1
  408. data/doc/lib/taskjuggler/reports/ResourceListRE_rb.html +1 -1
  409. data/doc/lib/taskjuggler/reports/StatusSheetReport_rb.html +1 -1
  410. data/doc/lib/taskjuggler/reports/TableReport_rb.html +1 -1
  411. data/doc/lib/taskjuggler/reports/TagFile_rb.html +71 -0
  412. data/doc/lib/taskjuggler/reports/TaskListRE_rb.html +1 -1
  413. data/doc/lib/taskjuggler/reports/TextReport_rb.html +1 -1
  414. data/doc/lib/taskjuggler/reports/TimeSheetReport_rb.html +1 -1
  415. data/doc/lib/taskjuggler/reports/TjpExportRE_rb.html +1 -1
  416. data/doc/lib/tj3_rb.html +1 -1
  417. data/doc/lib/tj3client_rb.html +1 -1
  418. data/doc/lib/tj3d_rb.html +1 -1
  419. data/doc/lib/tj3man_rb.html +1 -1
  420. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  421. data/doc/lib/tj3ss_sender_rb.html +1 -1
  422. data/doc/lib/tj3ts_receiver_rb.html +1 -1
  423. data/doc/lib/tj3ts_sender_rb.html +1 -1
  424. data/doc/lib/tj3ts_summary_rb.html +1 -1
  425. data/lib/taskjuggler/Account.rb +1 -1
  426. data/lib/taskjuggler/AccountScenario.rb +1 -1
  427. data/lib/taskjuggler/Allocation.rb +5 -5
  428. data/lib/taskjuggler/AttributeBase.rb +30 -22
  429. data/lib/taskjuggler/Attributes.rb +80 -78
  430. data/lib/taskjuggler/Booking.rb +2 -2
  431. data/lib/taskjuggler/Charge.rb +3 -3
  432. data/lib/taskjuggler/ICalendar.rb +251 -0
  433. data/lib/taskjuggler/Interval.rb +215 -53
  434. data/lib/taskjuggler/IntervalList.rb +5 -5
  435. data/lib/taskjuggler/Limits.rb +79 -69
  436. data/lib/taskjuggler/LogicalFunction.rb +2 -2
  437. data/lib/taskjuggler/MessageHandler.rb +11 -6
  438. data/lib/taskjuggler/Project.rb +208 -95
  439. data/lib/taskjuggler/ProjectFileParser.rb +2 -2
  440. data/lib/taskjuggler/ProjectFileScanner.rb +7 -6
  441. data/lib/taskjuggler/PropertySet.rb +1 -5
  442. data/lib/taskjuggler/PropertyTreeNode.rb +21 -16
  443. data/lib/taskjuggler/Query.rb +10 -7
  444. data/lib/taskjuggler/Resource.rb +6 -1
  445. data/lib/taskjuggler/ResourceScenario.rb +85 -69
  446. data/lib/taskjuggler/RichText/RTFQuery.rb +2 -2
  447. data/lib/taskjuggler/ScenarioData.rb +11 -1
  448. data/lib/taskjuggler/Scoreboard.rb +8 -1
  449. data/lib/taskjuggler/Shift.rb +1 -1
  450. data/lib/taskjuggler/ShiftAssignments.rb +22 -20
  451. data/lib/taskjuggler/Task.rb +1 -1
  452. data/lib/taskjuggler/TaskJuggler.rb +65 -51
  453. data/lib/taskjuggler/TaskScenario.rb +486 -419
  454. data/lib/taskjuggler/TextParser/Scanner.rb +22 -11
  455. data/lib/taskjuggler/TimeSheets.rb +1 -1
  456. data/lib/taskjuggler/Tj3Config.rb +1 -1
  457. data/lib/taskjuggler/TjTime.rb +7 -3
  458. data/lib/taskjuggler/TjpSyntaxRules.rb +157 -23
  459. data/lib/taskjuggler/VimSyntax.rb +18 -0
  460. data/lib/taskjuggler/WorkingHours.rb +20 -4
  461. data/lib/taskjuggler/apps/Tj3.rb +16 -1
  462. data/lib/taskjuggler/reports/GanttLine.rb +1 -1
  463. data/lib/taskjuggler/reports/ICalReport.rb +136 -0
  464. data/lib/taskjuggler/reports/NikuReport.rb +1 -1
  465. data/lib/taskjuggler/reports/Report.rb +59 -0
  466. data/lib/taskjuggler/reports/ReportBase.rb +2 -67
  467. data/lib/taskjuggler/reports/TableReport.rb +9 -8
  468. data/lib/taskjuggler/reports/TagFile.rb +120 -0
  469. data/lib/taskjuggler/reports/TimeSheetReport.rb +3 -3
  470. data/lib/taskjuggler/reports/TjpExportRE.rb +33 -9
  471. data/manual/Installation +126 -0
  472. data/spec/ICalendar_spec.rb +45 -0
  473. data/spec/IntervalList_spec.rb +11 -11
  474. data/tasks/changelog.rake +150 -60
  475. data/tasks/gem.rake +1 -0
  476. data/tasks/vim.rake +2 -2
  477. data/test/TestSuite/Export-Reports/refs/Booking.tjp +1 -1
  478. data/test/TestSuite/Export-Reports/refs/CompletedWork.tji.tjp +40 -0
  479. data/test/TestSuite/Export-Reports/refs/Macro-2.tjp +10 -1
  480. data/test/TestSuite/Export-Reports/refs/TaskPrefix.tjp +1 -1
  481. data/test/TestSuite/HTML-Reports/Alerts.html +160 -412
  482. data/test/TestSuite/HTML-Reports/CellText.html +758 -0
  483. data/test/TestSuite/HTML-Reports/ColumnPeriods.html +156 -0
  484. data/test/TestSuite/HTML-Reports/IsOngoing.html +172 -0
  485. data/test/TestSuite/HTML-Reports/LogicalFunctions.html +245 -0
  486. data/test/TestSuite/HTML-Reports/Query.html +31 -0
  487. data/test/TestSuite/HTML-Reports/css/tjmanual.css +0 -20
  488. data/test/TestSuite/HTML-Reports/css/tjreport.css +6 -7
  489. data/test/TestSuite/HTML-Reports/depArrows.html +851 -0
  490. data/test/TestSuite/HTML-Reports/profile.html +37581 -0
  491. data/test/TestSuite/{Scheduler/Correct → HTML-Reports/scripts}/scripts/wz_tooltip.js +20 -20
  492. data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
  493. data/test/TestSuite/Scheduler/Correct/Duration.tjp +3 -3
  494. data/test/TestSuite/Scheduler/Errors/R.html +113 -0
  495. data/test/TestSuite/Scheduler/Errors/allocate_no_assigned.tjp +15 -0
  496. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjmanual.css +0 -1
  497. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/css/tjreport.css +0 -0
  498. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/details.png +0 -0
  499. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-green.png +0 -0
  500. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-red.png +0 -0
  501. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/flag-yellow.png +0 -0
  502. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resource.png +0 -0
  503. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/resourcegroup.png +0 -0
  504. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/task.png +0 -0
  505. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/taskgroup.png +0 -0
  506. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-down.png +0 -0
  507. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-flat.png +0 -0
  508. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/icons/trend-up.png +0 -0
  509. data/test/TestSuite/Scheduler/Errors/overbooked_duration.tjp +11 -0
  510. data/test/TestSuite/Scheduler/Errors/overbooked_effort.tjp +11 -0
  511. data/test/TestSuite/Scheduler/Errors/overbooked_length.tjp +13 -0
  512. data/test/TestSuite/{ReportGenerator/Correct → Scheduler/Errors}/scripts/wz_tooltip.js +0 -0
  513. data/test/TestSuite/StatusSheets/dev2.tji +22 -0
  514. data/test/TestSuite/Syntax/Correct/CompletedWork.tji.tjp +38 -0
  515. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +5 -2
  516. data/test/TestSuite/Syntax/Errors/scenario_after_tracking.tjp +8 -0
  517. data/test/TestSuite/TimeSheets/resrep.tji +7 -0
  518. data/test/TestSuite/TimeSheets/ts.tji +351 -0
  519. data/test/TestSuite/TimeSheets/tsdef.tji +2 -0
  520. data/test/test_Limits.rb +38 -30
  521. data/test/test_Scheduler.rb +2 -2
  522. data/test/test_ShiftAssignments.rb +8 -8
  523. data/test/test_WorkingHours.rb +4 -4
  524. metadata +1015 -1005
  525. data/lib/exchangebug.rb +0 -42
  526. data/lib/ruby-signal-bug.rb +0 -55
  527. data/test/TestSuite/Export-Reports/refs/DST.tjp +0 -60
  528. data/test/TestSuite/Export-Reports/refs/ReleasePlan.tjp +0 -80
  529. data/test/TestSuite/HTML-Reports/TimeSheet.html +0 -79
  530. data/test/TestSuite/HTML-Reports/reference.html +0 -51
  531. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.csv +0 -412
  532. data/test/TestSuite/ReportGenerator/Correct/Alerts-1.html +0 -680
  533. data/test/TestSuite/ReportGenerator/Correct/DependencyList.csv +0 -4
  534. data/test/TestSuite/ReportGenerator/Correct/DependencyList.tjp +0 -25
  535. data/test/TestSuite/ReportGenerator/Correct/Journal-1.csv +0 -8
  536. data/test/TestSuite/ReportGenerator/Correct/Journal-2.csv +0 -8
  537. data/test/TestSuite/ReportGenerator/Correct/Journal-3.html +0 -28
  538. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +0 -3
  539. data/test/TestSuite/ReportGenerator/Correct/opennodes-1.csv +0 -2
  540. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +0 -2
  541. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +0 -26
  542. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +0 -2
  543. data/test/TestSuite/Scheduler/' +0 -23
  544. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +0 -86
  545. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +0 -413
  546. data/test/TestSuite/Scheduler/Correct/icons/details.png +0 -0
  547. data/test/TestSuite/Scheduler/Correct/icons/flag-green.png +0 -0
  548. data/test/TestSuite/Scheduler/Correct/icons/flag-red.png +0 -0
  549. data/test/TestSuite/Scheduler/Correct/icons/flag-yellow.png +0 -0
  550. data/test/TestSuite/Scheduler/Correct/icons/resource.png +0 -0
  551. data/test/TestSuite/Scheduler/Correct/icons/resourcegroup.png +0 -0
  552. data/test/TestSuite/Scheduler/Correct/icons/task.png +0 -0
  553. data/test/TestSuite/Scheduler/Correct/icons/taskgroup.png +0 -0
  554. data/test/TestSuite/Scheduler/Correct/icons/trend-down.png +0 -0
  555. data/test/TestSuite/Scheduler/Correct/icons/trend-flat.png +0 -0
  556. data/test/TestSuite/Scheduler/Correct/icons/trend-up.png +0 -0
  557. data/test/TestSuite/StatusSheetTemplates/project.tji +0 -35
  558. data/test/TestSuite/StatusSheetTemplates/project.tjp +0 -56
  559. data/test/TestSuite/StatusSheets/TimeSheets/2002-03-01/resource1_2002-03-01.tji +0 -0
  560. data/test/TestSuite/Syntax/Correct/DST.tjp +0 -11
  561. data/test/TestSuite/Syntax/Correct/ReleasePlan.tjp +0 -32
  562. data/test/TestSuite/TimeSheets/receiver.log.mod +0 -1056
  563. data/test/TestSuite/TimeSheets/uu.txt +0 -29
@@ -279,12 +279,24 @@
279
279
 
280
280
  <li><a href="../TaskJuggler/HTMLGraphics.html">TaskJuggler::HTMLGraphics</a></li>
281
281
 
282
+ <li><a href="../TaskJuggler/ICalReport.html">TaskJuggler::ICalReport</a></li>
283
+
284
+ <li><a href="../TaskJuggler/ICalendar.html">TaskJuggler::ICalendar</a></li>
285
+
286
+ <li><a href="../TaskJuggler/ICalendar/Component.html">TaskJuggler::ICalendar::Component</a></li>
287
+
288
+ <li><a href="../TaskJuggler/ICalendar/Event.html">TaskJuggler::ICalendar::Event</a></li>
289
+
290
+ <li><a href="../TaskJuggler/ICalendar/Journal.html">TaskJuggler::ICalendar::Journal</a></li>
291
+
292
+ <li><a href="../TaskJuggler/ICalendar/Person.html">TaskJuggler::ICalendar::Person</a></li>
293
+
294
+ <li><a href="../TaskJuggler/ICalendar/Todo.html">TaskJuggler::ICalendar::Todo</a></li>
295
+
282
296
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
283
297
 
284
298
  <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
285
299
 
286
- <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
287
-
288
300
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
289
301
 
290
302
  <li><a href="../TaskJuggler/Journal.html">TaskJuggler::Journal</a></li>
@@ -399,6 +411,8 @@
399
411
 
400
412
  <li><a href="../TaskJuggler/ReportContext.html">TaskJuggler::ReportContext</a></li>
401
413
 
414
+ <li><a href="../TaskJuggler/ReportScenario.html">TaskJuggler::ReportScenario</a></li>
415
+
402
416
  <li><a href="../TaskJuggler/ReportServer.html">TaskJuggler::ReportServer</a></li>
403
417
 
404
418
  <li><a href="../TaskJuggler/ReportServerIface.html">TaskJuggler::ReportServerIface</a></li>
@@ -457,6 +471,8 @@
457
471
 
458
472
  <li><a href="../TaskJuggler/Scoreboard.html">TaskJuggler::Scoreboard</a></li>
459
473
 
474
+ <li><a href="../TaskJuggler/ScoreboardInterval.html">TaskJuggler::ScoreboardInterval</a></li>
475
+
460
476
  <li><a href="../TaskJuggler/SheetHandlerBase.html">TaskJuggler::SheetHandlerBase</a></li>
461
477
 
462
478
  <li><a href="../TaskJuggler/SheetReceiver.html">TaskJuggler::SheetReceiver</a></li>
@@ -503,6 +519,10 @@
503
519
 
504
520
  <li><a href="../TaskJuggler/TableReport.html">TaskJuggler::TableReport</a></li>
505
521
 
522
+ <li><a href="../TaskJuggler/TagFile.html">TaskJuggler::TagFile</a></li>
523
+
524
+ <li><a href="../TaskJuggler/TagFile/TagFileEntry.html">TaskJuggler::TagFile::TagFileEntry</a></li>
525
+
506
526
  <li><a href="../TaskJuggler/Task.html">TaskJuggler::Task</a></li>
507
527
 
508
528
  <li><a href="../TaskJuggler/TaskDepListAttribute.html">TaskJuggler::TaskDepListAttribute</a></li>
@@ -553,6 +573,10 @@
553
573
 
554
574
  <li><a href="../TaskJuggler/TextReport.html">TaskJuggler::TextReport</a></li>
555
575
 
576
+ <li><a href="../TaskJuggler/TimeInterval.html">TaskJuggler::TimeInterval</a></li>
577
+
578
+ <li><a href="../TaskJuggler/TimeIntervalListAttribute.html">TaskJuggler::TimeIntervalListAttribute</a></li>
579
+
556
580
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
557
581
 
558
582
  <li><a href="../TaskJuggler/TimeSheetReceiver.html">TaskJuggler::TimeSheetReceiver</a></li>
@@ -720,8 +744,17 @@
720
744
  46: <span class="ruby-comment cmt"># Same but for each assigned resource.</span>
721
745
  47: <span class="ruby-ivar">@lastBookedSlots</span> = {}
722
746
  48:
723
- 49: <span class="ruby-ivar">@dCache</span> = <span class="ruby-constant">DataCache</span>.<span class="ruby-identifier">instance</span>
724
- 50: <span class="ruby-keyword kw">end</span></pre>
747
+ 49: <span class="ruby-comment cmt"># Attributed are only really created when they are accessed the first</span>
748
+ 50: <span class="ruby-comment cmt"># time. So make sure some needed attributes really exist so we don't</span>
749
+ 51: <span class="ruby-comment cmt"># have to check for existance each time we access them.</span>
750
+ 52: <span class="ruby-node">%( alloctdeffort criticalness directreports duties efficiency
751
+ 53: effort limits managers rate reports shifts
752
+ 54: vacations workinghours )</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attr</span><span class="ruby-operator">|</span>
753
+ 55: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">attr</span>, <span class="ruby-ivar">@scenarioIdx</span>]
754
+ 56: <span class="ruby-keyword kw">end</span>
755
+ 57:
756
+ 58: <span class="ruby-ivar">@dCache</span> = <span class="ruby-constant">DataCache</span>.<span class="ruby-identifier">instance</span>
757
+ 59: <span class="ruby-keyword kw">end</span></pre>
725
758
  </div>
726
759
 
727
760
  </div>
@@ -753,8 +786,9 @@
753
786
 
754
787
  <p>
755
788
  Returns true if the resource or any of its children is allocated during the
756
- period specified with the <a href="Interval.html">Interval</a> <em>iv</em>.
757
- If task is not nil only allocations to this tasks are respected.
789
+ period specified with the <a href="TimeInterval.html">TimeInterval</a>
790
+ <em>iv</em>. If task is not nil only allocations to this tasks are
791
+ respected.
758
792
  </p>
759
793
 
760
794
 
@@ -762,18 +796,18 @@ If task is not nil only allocations to this tasks are respected.
762
796
  <div class="method-source-code"
763
797
  id="allocated--source">
764
798
  <pre>
765
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 440</span>
766
- 440: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">allocated?</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
767
- 441: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'duties'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
768
- 442:
769
- 443: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">start</span>)
770
- 444: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">end</span>)
771
- 445:
772
- 446: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
773
- 447: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
774
- 448:
775
- 449: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">allocatedSub</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
776
- 450: <span class="ruby-keyword kw">end</span></pre>
799
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 449</span>
800
+ 449: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">allocated?</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
801
+ 450: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@duties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
802
+ 451:
803
+ 452: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">start</span>)
804
+ 453: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">end</span>)
805
+ 454:
806
+ 455: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
807
+ 456: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
808
+ 457:
809
+ 458: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">allocatedSub</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
810
+ 459: <span class="ruby-keyword kw">end</span></pre>
777
811
  </div>
778
812
 
779
813
  </div>
@@ -807,15 +841,15 @@ Returns true if the resource is available at the time specified by
807
841
  <div class="method-source-code"
808
842
  id="available--source">
809
843
  <pre>
810
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 137</span>
811
- 137: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">available?</span>(<span class="ruby-identifier">sbIdx</span>)
812
- 138: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>].<span class="ruby-identifier">nil?</span>
813
- 139:
814
- 140: <span class="ruby-identifier">limits</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'limits'</span>)
815
- 141: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">limits</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">limits</span>.<span class="ruby-identifier">ok?</span>(<span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span>))
816
- 142:
817
- 143: <span class="ruby-keyword kw">true</span>
818
- 144: <span class="ruby-keyword kw">end</span></pre>
844
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 146</span>
845
+ 146: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">available?</span>(<span class="ruby-identifier">sbIdx</span>)
846
+ 147: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>].<span class="ruby-identifier">nil?</span>
847
+ 148:
848
+ 149: <span class="ruby-identifier">limits</span> = <span class="ruby-ivar">@limits</span>
849
+ 150: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">limits</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">limits</span>.<span class="ruby-identifier">ok?</span>(<span class="ruby-identifier">sbIdx</span>)
850
+ 151:
851
+ 152: <span class="ruby-keyword kw">true</span>
852
+ 153: <span class="ruby-keyword kw">end</span></pre>
819
853
  </div>
820
854
 
821
855
  </div>
@@ -851,47 +885,47 @@ the slot was available.
851
885
  <div class="method-source-code"
852
886
  id="book-source">
853
887
  <pre>
854
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 155</span>
855
- 155: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">book</span>(<span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">force</span> = <span class="ruby-keyword kw">false</span>)
856
- 156: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">force</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">available?</span>(<span class="ruby-identifier">sbIdx</span>)
857
- 157:
858
- 158: <span class="ruby-comment cmt"># Make sure the task is in the list of duties.</span>
859
- 159: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duties'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
860
- 160: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'duties'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">task</span>
861
- 161: <span class="ruby-keyword kw">end</span>
862
- 162:
863
- 163: <span class="ruby-comment cmt">#puts &quot;Booking resource #{@property.fullId} at &quot; +</span>
864
- 164: <span class="ruby-comment cmt"># &quot;#{@scoreboard.idxToDate(sbIdx)}/#{sbIdx} for task #{task.fullId}\n&quot;</span>
865
- 165: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>] = <span class="ruby-identifier">task</span>
866
- 166: <span class="ruby-comment cmt"># Track the total allocated slots for this resource and all parent</span>
867
- 167: <span class="ruby-comment cmt"># resources.</span>
868
- 168: <span class="ruby-identifier">t</span> = <span class="ruby-ivar">@property</span>
869
- 169: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">t</span>
870
- 170: <span class="ruby-identifier">t</span>[<span class="ruby-value str">'effort'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
871
- 171: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">parent</span>
872
- 172: <span class="ruby-keyword kw">end</span>
873
- 173: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'limits'</span>).<span class="ruby-identifier">inc</span>(<span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'limits'</span>)
874
- 174:
875
- 175: <span class="ruby-comment cmt"># Scoreboard iterations are fairly expensive but they are very frequent</span>
876
- 176: <span class="ruby-comment cmt"># operations in later processing. To limit the interations to the</span>
877
- 177: <span class="ruby-comment cmt"># relevant intervals, we store the interval for all bookings and for</span>
878
- 178: <span class="ruby-comment cmt"># each individual task.</span>
879
- 179: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@firstBookedSlot</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">sbIdx</span>
880
- 180: <span class="ruby-ivar">@firstBookedSlot</span> = <span class="ruby-identifier">sbIdx</span>
888
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 164</span>
889
+ 164: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">book</span>(<span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">force</span> = <span class="ruby-keyword kw">false</span>)
890
+ 165: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">force</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">available?</span>(<span class="ruby-identifier">sbIdx</span>)
891
+ 166:
892
+ 167: <span class="ruby-comment cmt"># Make sure the task is in the list of duties.</span>
893
+ 168: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@duties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
894
+ 169: <span class="ruby-ivar">@duties</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">task</span>
895
+ 170: <span class="ruby-keyword kw">end</span>
896
+ 171:
897
+ 172: <span class="ruby-comment cmt">#puts &quot;Booking resource #{@property.fullId} at &quot; +</span>
898
+ 173: <span class="ruby-comment cmt"># &quot;#{@scoreboard.idxToDate(sbIdx)}/#{sbIdx} for task #{task.fullId}\n&quot;</span>
899
+ 174: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>] = <span class="ruby-identifier">task</span>
900
+ 175: <span class="ruby-comment cmt"># Track the total allocated slots for this resource and all parent</span>
901
+ 176: <span class="ruby-comment cmt"># resources.</span>
902
+ 177: <span class="ruby-identifier">t</span> = <span class="ruby-ivar">@property</span>
903
+ 178: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">t</span>
904
+ 179: <span class="ruby-identifier">t</span>[<span class="ruby-value str">'effort'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
905
+ 180: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">parent</span>
881
906
  181: <span class="ruby-keyword kw">end</span>
882
- 182: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">sbIdx</span>
883
- 183: <span class="ruby-ivar">@lastBookedSlot</span> = <span class="ruby-identifier">sbIdx</span>
884
- 184: <span class="ruby-keyword kw">end</span>
885
- 185: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>
886
- 186: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">sbIdx</span>
887
- 187: <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] = <span class="ruby-identifier">sbIdx</span>
888
- 188: <span class="ruby-keyword kw">end</span>
889
- 189: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">sbIdx</span>
890
- 190: <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] = <span class="ruby-identifier">sbIdx</span>
891
- 191: <span class="ruby-keyword kw">end</span>
892
- 192: <span class="ruby-keyword kw">end</span>
893
- 193: <span class="ruby-keyword kw">true</span>
894
- 194: <span class="ruby-keyword kw">end</span></pre>
907
+ 182: <span class="ruby-ivar">@limits</span>.<span class="ruby-identifier">inc</span>(<span class="ruby-identifier">sbIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@limits</span>
908
+ 183:
909
+ 184: <span class="ruby-comment cmt"># Scoreboard iterations are fairly expensive but they are very frequent</span>
910
+ 185: <span class="ruby-comment cmt"># operations in later processing. To limit the interations to the</span>
911
+ 186: <span class="ruby-comment cmt"># relevant intervals, we store the interval for all bookings and for</span>
912
+ 187: <span class="ruby-comment cmt"># each individual task.</span>
913
+ 188: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@firstBookedSlot</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">sbIdx</span>
914
+ 189: <span class="ruby-ivar">@firstBookedSlot</span> = <span class="ruby-identifier">sbIdx</span>
915
+ 190: <span class="ruby-keyword kw">end</span>
916
+ 191: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">sbIdx</span>
917
+ 192: <span class="ruby-ivar">@lastBookedSlot</span> = <span class="ruby-identifier">sbIdx</span>
918
+ 193: <span class="ruby-keyword kw">end</span>
919
+ 194: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>
920
+ 195: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">sbIdx</span>
921
+ 196: <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] = <span class="ruby-identifier">sbIdx</span>
922
+ 197: <span class="ruby-keyword kw">end</span>
923
+ 198: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">sbIdx</span>
924
+ 199: <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] = <span class="ruby-identifier">sbIdx</span>
925
+ 200: <span class="ruby-keyword kw">end</span>
926
+ 201: <span class="ruby-keyword kw">end</span>
927
+ 202: <span class="ruby-keyword kw">true</span>
928
+ 203: <span class="ruby-keyword kw">end</span></pre>
895
929
  </div>
896
930
 
897
931
  </div>
@@ -922,45 +956,45 @@ the slot was available.
922
956
  <div class="method-source-code"
923
957
  id="book-ooking-source">
924
958
  <pre>
925
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 196</span>
926
- 196: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookBooking</span>(<span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">booking</span>)
927
- 197: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
928
- 198:
929
- 199: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>].<span class="ruby-identifier">nil?</span>
930
- 200: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booked?</span>(<span class="ruby-identifier">sbIdx</span>)
931
- 201: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_conflict'</span>,
932
- 202: <span class="ruby-node">&quot;Resource #{@property.fullId} has multiple conflicting &quot;</span> <span class="ruby-operator">+</span>
933
- 203: <span class="ruby-node">&quot;bookings for #{@scoreboard.idxToDate(sbIdx)}. The &quot;</span> <span class="ruby-operator">+</span>
934
- 204: <span class="ruby-node">&quot;conflicting tasks are #{@scoreboard[sbIdx].fullId} and &quot;</span> <span class="ruby-operator">+</span>
935
- 205: <span class="ruby-node">&quot;#{booking.task.fullId}.&quot;</span>, <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
936
- 206: <span class="ruby-keyword kw">end</span>
937
- 207: <span class="ruby-identifier">val</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>]
938
- 208: <span class="ruby-keyword kw">if</span> ((<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">2</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">overtime</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>)
939
- 209: <span class="ruby-comment cmt"># The booking is blocked due to the overtime attribute. Now let's</span>
940
- 210: <span class="ruby-comment cmt"># see if the user wants to be warned about it.</span>
941
- 211: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sloppy</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>
942
- 212: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_no_duty'</span>,
943
- 213: <span class="ruby-node">&quot;Resource #{@property.fullId} has no duty at &quot;</span> <span class="ruby-operator">+</span>
944
- 214: <span class="ruby-node">&quot;#{@scoreboard.idxToDate(sbIdx)}.&quot;</span>,
945
- 215: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
946
- 216: <span class="ruby-keyword kw">end</span>
947
- 217: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
948
- 218: <span class="ruby-keyword kw">end</span>
949
- 219: <span class="ruby-keyword kw">if</span> ((<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">overtime</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>)
950
- 220: <span class="ruby-comment cmt"># The booking is blocked due to the overtime attribute. Now let's</span>
951
- 221: <span class="ruby-comment cmt"># see if the user wants to be warned about it.</span>
952
- 222: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sloppy</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>
953
- 223: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_on_vacation'</span>,
954
- 224: <span class="ruby-node">&quot;Resource #{@property.fullId} is on vacation at &quot;</span> <span class="ruby-operator">+</span>
955
- 225: <span class="ruby-node">&quot;#{@scoreboard.idxToDate(sbIdx)}.&quot;</span>,
956
- 226: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
957
- 227: <span class="ruby-keyword kw">end</span>
958
- 228: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
959
- 229: <span class="ruby-keyword kw">end</span>
960
- 230: <span class="ruby-keyword kw">end</span>
961
- 231:
962
- 232: <span class="ruby-identifier">book</span>(<span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">task</span>, <span class="ruby-keyword kw">true</span>)
963
- 233: <span class="ruby-keyword kw">end</span></pre>
959
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 205</span>
960
+ 205: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookBooking</span>(<span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">booking</span>)
961
+ 206: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
962
+ 207:
963
+ 208: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>].<span class="ruby-identifier">nil?</span>
964
+ 209: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booked?</span>(<span class="ruby-identifier">sbIdx</span>)
965
+ 210: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_conflict'</span>,
966
+ 211: <span class="ruby-node">&quot;Resource #{@property.fullId} has multiple conflicting &quot;</span> <span class="ruby-operator">+</span>
967
+ 212: <span class="ruby-node">&quot;bookings for #{@scoreboard.idxToDate(sbIdx)}. The &quot;</span> <span class="ruby-operator">+</span>
968
+ 213: <span class="ruby-node">&quot;conflicting tasks are #{@scoreboard[sbIdx].fullId} and &quot;</span> <span class="ruby-operator">+</span>
969
+ 214: <span class="ruby-node">&quot;#{booking.task.fullId}.&quot;</span>, <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
970
+ 215: <span class="ruby-keyword kw">end</span>
971
+ 216: <span class="ruby-identifier">val</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>]
972
+ 217: <span class="ruby-keyword kw">if</span> ((<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">2</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">overtime</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>)
973
+ 218: <span class="ruby-comment cmt"># The booking is blocked due to the overtime attribute. Now let's</span>
974
+ 219: <span class="ruby-comment cmt"># see if the user wants to be warned about it.</span>
975
+ 220: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sloppy</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>
976
+ 221: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_no_duty'</span>,
977
+ 222: <span class="ruby-node">&quot;Resource #{@property.fullId} has no duty at &quot;</span> <span class="ruby-operator">+</span>
978
+ 223: <span class="ruby-node">&quot;#{@scoreboard.idxToDate(sbIdx)}.&quot;</span>,
979
+ 224: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
980
+ 225: <span class="ruby-keyword kw">end</span>
981
+ 226: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
982
+ 227: <span class="ruby-keyword kw">end</span>
983
+ 228: <span class="ruby-keyword kw">if</span> ((<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">overtime</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>)
984
+ 229: <span class="ruby-comment cmt"># The booking is blocked due to the overtime attribute. Now let's</span>
985
+ 230: <span class="ruby-comment cmt"># see if the user wants to be warned about it.</span>
986
+ 231: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sloppy</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>
987
+ 232: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_on_vacation'</span>,
988
+ 233: <span class="ruby-node">&quot;Resource #{@property.fullId} is on vacation at &quot;</span> <span class="ruby-operator">+</span>
989
+ 234: <span class="ruby-node">&quot;#{@scoreboard.idxToDate(sbIdx)}.&quot;</span>,
990
+ 235: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
991
+ 236: <span class="ruby-keyword kw">end</span>
992
+ 237: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
993
+ 238: <span class="ruby-keyword kw">end</span>
994
+ 239: <span class="ruby-keyword kw">end</span>
995
+ 240:
996
+ 241: <span class="ruby-identifier">book</span>(<span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">task</span>, <span class="ruby-keyword kw">true</span>)
997
+ 242: <span class="ruby-keyword kw">end</span></pre>
964
998
  </div>
965
999
 
966
1000
  </div>
@@ -994,10 +1028,10 @@ Return true if the resource is booked for a tasks at the time specified by
994
1028
  <div class="method-source-code"
995
1029
  id="booked--source">
996
1030
  <pre>
997
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 148</span>
998
- 148: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">booked?</span>(<span class="ruby-identifier">sbIdx</span>)
999
- 149: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>)
1000
- 150: <span class="ruby-keyword kw">end</span></pre>
1031
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 157</span>
1032
+ 157: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">booked?</span>(<span class="ruby-identifier">sbIdx</span>)
1033
+ 158: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">sbIdx</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>)
1034
+ 159: <span class="ruby-keyword kw">end</span></pre>
1001
1035
  </div>
1002
1036
 
1003
1037
  </div>
@@ -1034,20 +1068,20 @@ guarantee, though.
1034
1068
  <div class="method-source-code"
1035
1069
  id="calc-riticalness-source">
1036
1070
  <pre>
1037
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 66</span>
1038
- 66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcCriticalness</span>
1039
- 67: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1040
- 68: <span class="ruby-comment cmt"># Resources that are not allocated are not critical at all.</span>
1041
- 69: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'criticalness'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-value">0.0</span>
1042
- 70: <span class="ruby-keyword kw">else</span>
1043
- 71: <span class="ruby-identifier">freeSlots</span> = <span class="ruby-value">0</span>
1044
- 72: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">slot</span><span class="ruby-operator">|</span>
1045
- 73: <span class="ruby-identifier">freeSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">slot</span>.<span class="ruby-identifier">nil?</span>
1046
- 74: <span class="ruby-keyword kw">end</span>
1047
- 75: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'criticalness'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">freeSlots</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">:</span>
1048
- 76: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'alloctdeffort'</span>) <span class="ruby-operator">/</span> <span class="ruby-identifier">freeSlots</span>
1049
- 77: <span class="ruby-keyword kw">end</span>
1050
- 78: <span class="ruby-keyword kw">end</span></pre>
1071
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 75</span>
1072
+ 75: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcCriticalness</span>
1073
+ 76: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1074
+ 77: <span class="ruby-comment cmt"># Resources that are not allocated are not critical at all.</span>
1075
+ 78: <span class="ruby-ivar">@criticalness</span> = <span class="ruby-value">0.0</span>
1076
+ 79: <span class="ruby-keyword kw">else</span>
1077
+ 80: <span class="ruby-identifier">freeSlots</span> = <span class="ruby-value">0</span>
1078
+ 81: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">slot</span><span class="ruby-operator">|</span>
1079
+ 82: <span class="ruby-identifier">freeSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">slot</span>.<span class="ruby-identifier">nil?</span>
1080
+ 83: <span class="ruby-keyword kw">end</span>
1081
+ 84: <span class="ruby-ivar">@criticalness</span> = <span class="ruby-identifier">freeSlots</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-value">1.0</span> <span class="ruby-operator">:</span>
1082
+ 85: <span class="ruby-ivar">@alloctdeffort</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">freeSlots</span>
1083
+ 86: <span class="ruby-keyword kw">end</span>
1084
+ 87: <span class="ruby-keyword kw">end</span></pre>
1051
1085
  </div>
1052
1086
 
1053
1087
  </div>
@@ -1088,18 +1122,18 @@ result is an Array of
1088
1122
  <div class="method-source-code"
1089
1123
  id="collect-ime-ff-ntervals-source">
1090
1124
  <pre>
1091
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 511</span>
1092
- 511: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collectTimeOffIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>)
1093
- 512: <span class="ruby-comment cmt"># Time-off intervals are only useful for leaf resources. Group resources</span>
1094
- 513: <span class="ruby-comment cmt"># would just default to the global working hours.</span>
1095
- 514: <span class="ruby-keyword kw">return</span> [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
1096
- 515:
1097
- 516: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1098
- 517:
1099
- 518: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">collectIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
1100
- 519: <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x3E</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1101
- 520: <span class="ruby-keyword kw">end</span>
1102
- 521: <span class="ruby-keyword kw">end</span></pre>
1125
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 530</span>
1126
+ 530: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collectTimeOffIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>)
1127
+ 531: <span class="ruby-comment cmt"># Time-off intervals are only useful for leaf resources. Group resources</span>
1128
+ 532: <span class="ruby-comment cmt"># would just default to the global working hours.</span>
1129
+ 533: <span class="ruby-keyword kw">return</span> [] <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
1130
+ 534:
1131
+ 535: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1132
+ 536:
1133
+ 537: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">collectIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
1134
+ 538: <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x3E</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1135
+ 539: <span class="ruby-keyword kw">end</span>
1136
+ 540: <span class="ruby-keyword kw">end</span></pre>
1103
1137
  </div>
1104
1138
 
1105
1139
  </div>
@@ -1125,7 +1159,7 @@ result is an Array of
1125
1159
 
1126
1160
  <p>
1127
1161
  Returns the cost for using this resource during the specified <a
1128
- href="Interval.html">Interval</a> <em>period</em>. If a <a
1162
+ href="TimeInterval.html">TimeInterval</a> <em>period</em>. If a <a
1129
1163
  href="Task.html">Task</a> <em>task</em> is provided, only the work on this
1130
1164
  particular task is considered.
1131
1165
  </p>
@@ -1135,10 +1169,10 @@ particular task is considered.
1135
1169
  <div class="method-source-code"
1136
1170
  id="cost-source">
1137
1171
  <pre>
1138
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 433</span>
1139
- 433: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cost</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
1140
- 434: <span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>) * <span class="ruby-identifier">a</span>(<span class="ruby-value str">'rate'</span>)
1141
- 435: <span class="ruby-keyword kw">end</span></pre>
1172
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 442</span>
1173
+ 442: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cost</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
1174
+ 443: <span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>) * <span class="ruby-ivar">@rate</span>
1175
+ 444: <span class="ruby-keyword kw">end</span></pre>
1142
1176
  </div>
1143
1177
 
1144
1178
  </div>
@@ -1173,22 +1207,22 @@ descends into all child resources.
1173
1207
  <div class="method-source-code"
1174
1208
  id="finish-cheduling-source">
1175
1209
  <pre>
1176
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 119</span>
1177
- 119: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishScheduling</span>
1178
- 120: <span class="ruby-comment cmt"># Recursively descend into all child resources.</span>
1179
- 121: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1180
- 122: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-ivar">@scenarioIdx</span>)
1181
- 123: <span class="ruby-keyword kw">end</span>
1182
- 124:
1183
- 125: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">parent</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>)
1184
- 126: <span class="ruby-comment cmt"># Add the assigned task to the parent duties list.</span>
1185
- 127: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duties'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1186
- 128: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">parent</span>[<span class="ruby-value str">'duties'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
1187
- 129: <span class="ruby-identifier">parent</span>[<span class="ruby-value str">'duties'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">task</span>
1188
- 130: <span class="ruby-keyword kw">end</span>
1189
- 131: <span class="ruby-keyword kw">end</span>
1210
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 128</span>
1211
+ 128: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishScheduling</span>
1212
+ 129: <span class="ruby-comment cmt"># Recursively descend into all child resources.</span>
1213
+ 130: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1214
+ 131: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-ivar">@scenarioIdx</span>)
1190
1215
  132: <span class="ruby-keyword kw">end</span>
1191
- 133: <span class="ruby-keyword kw">end</span></pre>
1216
+ 133:
1217
+ 134: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">parent</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>)
1218
+ 135: <span class="ruby-comment cmt"># Add the assigned task to the parent duties list.</span>
1219
+ 136: <span class="ruby-ivar">@duties</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span>
1220
+ 137: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">parent</span>[<span class="ruby-value str">'duties'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
1221
+ 138: <span class="ruby-identifier">parent</span>[<span class="ruby-value str">'duties'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">task</span>
1222
+ 139: <span class="ruby-keyword kw">end</span>
1223
+ 140: <span class="ruby-keyword kw">end</span>
1224
+ 141: <span class="ruby-keyword kw">end</span>
1225
+ 142: <span class="ruby-keyword kw">end</span></pre>
1192
1226
  </div>
1193
1227
 
1194
1228
  </div>
@@ -1222,23 +1256,23 @@ not nil count only those slots that are assigned to this particular task.
1222
1256
  <div class="method-source-code"
1223
1257
  id="get-llocated-lots-source">
1224
1258
  <pre>
1225
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 525</span>
1226
- 525: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getAllocatedSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1227
- 526: <span class="ruby-comment cmt"># If there is no scoreboard, we don't have any allocations.</span>
1228
- 527: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
1229
- 528:
1230
- 529: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1231
- 530: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
1232
- 531:
1233
- 532: <span class="ruby-identifier">bookedSlots</span> = <span class="ruby-value">0</span>
1234
- 533: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">each</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">slot</span><span class="ruby-operator">|</span>
1235
- 534: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">task</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>)) <span class="ruby-operator">||</span> (<span class="ruby-identifier">task</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">task</span>)
1236
- 535: <span class="ruby-identifier">bookedSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1237
- 536: <span class="ruby-keyword kw">end</span>
1238
- 537: <span class="ruby-keyword kw">end</span>
1239
- 538:
1240
- 539: <span class="ruby-identifier">bookedSlots</span>
1241
- 540: <span class="ruby-keyword kw">end</span></pre>
1259
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 544</span>
1260
+ 544: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getAllocatedSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1261
+ 545: <span class="ruby-comment cmt"># If there is no scoreboard, we don't have any allocations.</span>
1262
+ 546: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
1263
+ 547:
1264
+ 548: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1265
+ 549: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
1266
+ 550:
1267
+ 551: <span class="ruby-identifier">bookedSlots</span> = <span class="ruby-value">0</span>
1268
+ 552: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">each</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">slot</span><span class="ruby-operator">|</span>
1269
+ 553: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">task</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>)) <span class="ruby-operator">||</span> (<span class="ruby-identifier">task</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">task</span>)
1270
+ 554: <span class="ruby-identifier">bookedSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1271
+ 555: <span class="ruby-keyword kw">end</span>
1272
+ 556: <span class="ruby-keyword kw">end</span>
1273
+ 557:
1274
+ 558: <span class="ruby-identifier">bookedSlots</span>
1275
+ 559: <span class="ruby-keyword kw">end</span></pre>
1242
1276
  </div>
1243
1277
 
1244
1278
  </div>
@@ -1271,25 +1305,25 @@ Returns the allocated accumulated time of this resource and its children.
1271
1305
  <div class="method-source-code"
1272
1306
  id="get-llocated-ime-source">
1273
1307
  <pre>
1274
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 333</span>
1275
- 333: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
1276
- 334: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1277
- 335: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1278
- 336: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1279
- 337:
1280
- 338: <span class="ruby-identifier">time</span> = <span class="ruby-value">0</span>
1281
- 339: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1282
- 340: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1283
- 341: <span class="ruby-identifier">time</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1284
- 342: <span class="ruby-keyword kw">end</span>
1285
- 343: <span class="ruby-keyword kw">else</span>
1286
- 344: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1287
- 345:
1288
- 346: <span class="ruby-identifier">time</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>] *
1289
- 347: <span class="ruby-identifier">getAllocatedSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>))
1290
- 348: <span class="ruby-keyword kw">end</span>
1291
- 349: <span class="ruby-identifier">time</span>
1292
- 350: <span class="ruby-keyword kw">end</span></pre>
1308
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 342</span>
1309
+ 342: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
1310
+ 343: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1311
+ 344: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1312
+ 345: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1313
+ 346:
1314
+ 347: <span class="ruby-identifier">time</span> = <span class="ruby-value">0</span>
1315
+ 348: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1316
+ 349: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1317
+ 350: <span class="ruby-identifier">time</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1318
+ 351: <span class="ruby-keyword kw">end</span>
1319
+ 352: <span class="ruby-keyword kw">else</span>
1320
+ 353: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1321
+ 354:
1322
+ 355: <span class="ruby-identifier">time</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>] *
1323
+ 356: <span class="ruby-identifier">getAllocatedSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>))
1324
+ 357: <span class="ruby-keyword kw">end</span>
1325
+ 358: <span class="ruby-identifier">time</span>
1326
+ 359: <span class="ruby-keyword kw">end</span></pre>
1293
1327
  </div>
1294
1328
 
1295
1329
  </div>
@@ -1306,7 +1340,7 @@ Returns the allocated accumulated time of this resource and its children.
1306
1340
  <div class="method-heading">
1307
1341
 
1308
1342
  <span class="method-name">getBookings</span><span
1309
- class="method-args">(iv = nil)</span>
1343
+ class="method-args">(iv = nil, hashByTask = true)</span>
1310
1344
  <span class="method-click-advice">click to toggle source</span>
1311
1345
 
1312
1346
  </div>
@@ -1317,67 +1351,77 @@ Returns the allocated accumulated time of this resource and its children.
1317
1351
  Iterate over the scoreboard and turn its content into a set of Bookings.
1318
1352
  </p>
1319
1353
  <pre>
1320
- _iv_ can be an Interval to limit the bookings within the provided
1321
- period.</pre>
1354
+ _iv_ can be a TimeInterval to limit the bookings within the provided
1355
+ period. if _hashByTask_ is true, the result is a Hash of Arrays with
1356
+ bookings hashed by Task. Otherwise it's just a plain Array with
1357
+ Bookings.</pre>
1322
1358
 
1323
1359
 
1324
1360
 
1325
1361
  <div class="method-source-code"
1326
1362
  id="get-ookings-source">
1327
1363
  <pre>
1328
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 455</span>
1329
- 455: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getBookings</span>(<span class="ruby-identifier">iv</span> = <span class="ruby-keyword kw">nil</span>)
1330
- 456: <span class="ruby-keyword kw">return</span> {} <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
1331
- 457: <span class="ruby-ivar">@firstBookedSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@lastBookedSlot</span>.<span class="ruby-identifier">nil?</span>
1332
- 458:
1333
- 459: <span class="ruby-identifier">bookings</span> = {}
1334
- 460: <span class="ruby-identifier">lastTask</span> = <span class="ruby-keyword kw">nil</span>
1335
- 461: <span class="ruby-identifier">bookingStart</span> = <span class="ruby-keyword kw">nil</span>
1336
- 462:
1337
- 463: <span class="ruby-comment cmt"># To speedup the collection we start with the first booked slot and end</span>
1338
- 464: <span class="ruby-comment cmt"># with the last booked slot.</span>
1339
- 465: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@firstBookedSlot</span>
1340
- 466: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
1341
- 467:
1342
- 468: <span class="ruby-comment cmt"># In case the index markers are still uninitialized, we have no bookings.</span>
1343
- 469: <span class="ruby-keyword kw">return</span> {} <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">nil?</span>
1364
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 466</span>
1365
+ 466: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getBookings</span>(<span class="ruby-identifier">iv</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">hashByTask</span> = <span class="ruby-keyword kw">true</span>)
1366
+ 467: <span class="ruby-identifier">bookings</span> = <span class="ruby-identifier">hashByTask</span> <span class="ruby-operator">?</span> {} <span class="ruby-operator">:</span> []
1367
+ 468: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">bookings</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
1368
+ 469: <span class="ruby-ivar">@firstBookedSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@lastBookedSlot</span>.<span class="ruby-identifier">nil?</span>
1344
1369
  470:
1345
- 471: <span class="ruby-comment cmt"># If the user provided an Interval, we only return bookings within this</span>
1346
- 472: <span class="ruby-comment cmt"># Interval.</span>
1347
- 473: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>
1348
- 474: <span class="ruby-identifier">ivStartIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">start</span>)
1349
- 475: <span class="ruby-identifier">ivEndIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">end</span>)
1350
- 476: <span class="ruby-identifier">startIdx</span> = <span class="ruby-identifier">ivStartIdx</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ivStartIdx</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">startIdx</span>
1351
- 477: <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">ivEndIdx</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ivEndIdx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endIdx</span>
1352
- 478: <span class="ruby-keyword kw">end</span>
1353
- 479:
1354
- 480: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
1355
- 481: <span class="ruby-identifier">task</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>]
1356
- 482: <span class="ruby-comment cmt"># Now we watch for task changes.</span>
1357
- 483: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">lastTask</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">lastTask</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>)) <span class="ruby-operator">||</span>
1358
- 484: (<span class="ruby-identifier">task</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">endIdx</span>)
1359
- 485: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">lastTask</span>.<span class="ruby-identifier">nil?</span>
1360
- 486: <span class="ruby-comment cmt"># If we don't have a Booking for the task yet, we create one.</span>
1361
- 487: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">bookings</span>[<span class="ruby-identifier">lastTask</span>].<span class="ruby-identifier">nil?</span>
1362
- 488: <span class="ruby-identifier">bookings</span>[<span class="ruby-identifier">lastTask</span>] = <span class="ruby-constant">Booking</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@property</span>, <span class="ruby-identifier">lastTask</span>, [])
1363
- 489: <span class="ruby-keyword kw">end</span>
1364
- 490:
1365
- 491: <span class="ruby-comment cmt"># Append the new interval to the Booking.</span>
1366
- 492: <span class="ruby-identifier">bookings</span>[<span class="ruby-identifier">lastTask</span>].<span class="ruby-identifier">intervals</span> <span class="ruby-operator">&lt;&lt;</span>
1367
- 493: <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">bookingStart</span>),
1368
- 494: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>))
1369
- 495: <span class="ruby-keyword kw">end</span>
1370
- 496: <span class="ruby-comment cmt"># Get ready for the next task booking interval</span>
1371
- 497: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>)
1372
- 498: <span class="ruby-identifier">lastTask</span> = <span class="ruby-identifier">task</span>
1373
- 499: <span class="ruby-identifier">bookingStart</span> = <span class="ruby-identifier">idx</span>
1374
- 500: <span class="ruby-keyword kw">else</span>
1375
- 501: <span class="ruby-identifier">lastTask</span> = <span class="ruby-identifier">bookingStart</span> = <span class="ruby-keyword kw">nil</span>
1376
- 502: <span class="ruby-keyword kw">end</span>
1377
- 503: <span class="ruby-keyword kw">end</span>
1378
- 504: <span class="ruby-keyword kw">end</span>
1379
- 505: <span class="ruby-identifier">bookings</span>
1380
- 506: <span class="ruby-keyword kw">end</span></pre>
1370
+ 471: <span class="ruby-comment cmt"># To speedup the collection we start with the first booked slot and end</span>
1371
+ 472: <span class="ruby-comment cmt"># with the last booked slot.</span>
1372
+ 473: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@firstBookedSlot</span>
1373
+ 474: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
1374
+ 475:
1375
+ 476: <span class="ruby-comment cmt"># If the user provided a TimeInterval, we only return bookings within</span>
1376
+ 477: <span class="ruby-comment cmt"># this TimeInterval.</span>
1377
+ 478: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">iv</span>
1378
+ 479: <span class="ruby-identifier">ivStartIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">start</span>)
1379
+ 480: <span class="ruby-identifier">ivEndIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">iv</span>.<span class="ruby-identifier">end</span>)
1380
+ 481: <span class="ruby-identifier">startIdx</span> = <span class="ruby-identifier">ivStartIdx</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ivStartIdx</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">startIdx</span>
1381
+ 482: <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">ivEndIdx</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ivEndIdx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endIdx</span>
1382
+ 483: <span class="ruby-keyword kw">end</span>
1383
+ 484:
1384
+ 485: <span class="ruby-identifier">lastTask</span> = <span class="ruby-keyword kw">nil</span>
1385
+ 486: <span class="ruby-identifier">bookingStart</span> = <span class="ruby-keyword kw">nil</span>
1386
+ 487:
1387
+ 488: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
1388
+ 489: <span class="ruby-identifier">task</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>]
1389
+ 490: <span class="ruby-comment cmt"># Now we watch for task changes.</span>
1390
+ 491: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">lastTask</span> <span class="ruby-operator">||</span>
1391
+ 492: (<span class="ruby-identifier">task</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">lastTask</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">endIdx</span>))
1392
+ 493: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">lastTask</span>
1393
+ 494: <span class="ruby-comment cmt"># We've found the end of a task booking series.</span>
1394
+ 495: <span class="ruby-comment cmt"># If we don't have a Booking for the task yet, we create one.</span>
1395
+ 496: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hashByTask</span>
1396
+ 497: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">bookings</span>[<span class="ruby-identifier">lastTask</span>].<span class="ruby-identifier">nil?</span>
1397
+ 498: <span class="ruby-identifier">bookings</span>[<span class="ruby-identifier">lastTask</span>] = <span class="ruby-constant">Booking</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@property</span>, <span class="ruby-identifier">lastTask</span>, [])
1398
+ 499: <span class="ruby-keyword kw">end</span>
1399
+ 500: <span class="ruby-comment cmt"># Append the new interval to the Booking.</span>
1400
+ 501: <span class="ruby-identifier">bookings</span>[<span class="ruby-identifier">lastTask</span>].<span class="ruby-identifier">intervals</span> <span class="ruby-operator">&lt;&lt;</span>
1401
+ 502: <span class="ruby-constant">TimeInterval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">bookingStart</span>),
1402
+ 503: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>))
1403
+ 504: <span class="ruby-keyword kw">else</span>
1404
+ 505: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">bookings</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">bookings</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">task</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">lastTask</span>
1405
+ 506: <span class="ruby-identifier">bookings</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Booking</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@property</span>, <span class="ruby-identifier">lastTask</span>, [])
1406
+ 507: <span class="ruby-keyword kw">end</span>
1407
+ 508: <span class="ruby-comment cmt"># Append the new interval to the Booking.</span>
1408
+ 509: <span class="ruby-identifier">bookings</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">intervals</span> <span class="ruby-operator">&lt;&lt;</span>
1409
+ 510: <span class="ruby-constant">TimeInterval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">bookingStart</span>),
1410
+ 511: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>))
1411
+ 512: <span class="ruby-keyword kw">end</span>
1412
+ 513:
1413
+ 514: <span class="ruby-keyword kw">end</span>
1414
+ 515: <span class="ruby-comment cmt"># Get ready for the next task booking interval</span>
1415
+ 516: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Task</span>)
1416
+ 517: <span class="ruby-identifier">lastTask</span> = <span class="ruby-identifier">task</span>
1417
+ 518: <span class="ruby-identifier">bookingStart</span> = <span class="ruby-identifier">idx</span>
1418
+ 519: <span class="ruby-keyword kw">else</span>
1419
+ 520: <span class="ruby-identifier">lastTask</span> = <span class="ruby-identifier">bookingStart</span> = <span class="ruby-keyword kw">nil</span>
1420
+ 521: <span class="ruby-keyword kw">end</span>
1421
+ 522: <span class="ruby-keyword kw">end</span>
1422
+ 523: <span class="ruby-keyword kw">end</span>
1423
+ 524: <span class="ruby-identifier">bookings</span>
1424
+ 525: <span class="ruby-keyword kw">end</span></pre>
1381
1425
  </div>
1382
1426
 
1383
1427
  </div>
@@ -1411,24 +1455,24 @@ children.
1411
1455
  <div class="method-source-code"
1412
1456
  id="get-ffective-ree-ime-source">
1413
1457
  <pre>
1414
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 354</span>
1415
- 354: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getEffectiveFreeTime</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1416
- 355: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1417
- 356: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1418
- 357: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1419
- 358:
1420
- 359: <span class="ruby-identifier">freeTime</span> = <span class="ruby-value">0</span>
1421
- 360: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1422
- 361: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1423
- 362: <span class="ruby-identifier">freeTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getEffectiveFreeTime</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>,
1424
- 363: <span class="ruby-identifier">endIdx</span>)
1425
- 364: <span class="ruby-keyword kw">end</span>
1426
- 365: <span class="ruby-keyword kw">else</span>
1427
- 366: <span class="ruby-identifier">freeTime</span> = <span class="ruby-identifier">getFreeSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) *
1428
- 367: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
1429
- 368: <span class="ruby-keyword kw">end</span>
1430
- 369: <span class="ruby-identifier">freeTime</span>
1431
- 370: <span class="ruby-keyword kw">end</span></pre>
1458
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 363</span>
1459
+ 363: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getEffectiveFreeTime</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1460
+ 364: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1461
+ 365: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1462
+ 366: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1463
+ 367:
1464
+ 368: <span class="ruby-identifier">freeTime</span> = <span class="ruby-value">0</span>
1465
+ 369: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1466
+ 370: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1467
+ 371: <span class="ruby-identifier">freeTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getEffectiveFreeTime</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>,
1468
+ 372: <span class="ruby-identifier">endIdx</span>)
1469
+ 373: <span class="ruby-keyword kw">end</span>
1470
+ 374: <span class="ruby-keyword kw">else</span>
1471
+ 375: <span class="ruby-identifier">freeTime</span> = <span class="ruby-identifier">getFreeSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) *
1472
+ 376: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
1473
+ 377: <span class="ruby-keyword kw">end</span>
1474
+ 378: <span class="ruby-identifier">freeTime</span>
1475
+ 379: <span class="ruby-keyword kw">end</span></pre>
1432
1476
  </div>
1433
1477
 
1434
1478
  </div>
@@ -1462,24 +1506,24 @@ their efficiency.
1462
1506
  <div class="method-source-code"
1463
1507
  id="get-ffective-ree-ork-source">
1464
1508
  <pre>
1465
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 374</span>
1466
- 374: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getEffectiveFreeWork</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1467
- 375: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1468
- 376: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1469
- 377: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1470
- 378:
1471
- 379: <span class="ruby-identifier">work</span> = <span class="ruby-value">0.0</span>
1472
- 380: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1473
- 381: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1474
- 382: <span class="ruby-identifier">work</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getEffectiveFreeWork</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1475
- 383: <span class="ruby-keyword kw">end</span>
1476
- 384: <span class="ruby-keyword kw">else</span>
1477
- 385: <span class="ruby-identifier">work</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
1478
- 386: <span class="ruby-identifier">getFreeSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) *
1479
- 387: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]) * <span class="ruby-identifier">a</span>(<span class="ruby-value str">'efficiency'</span>)
1480
- 388: <span class="ruby-keyword kw">end</span>
1481
- 389: <span class="ruby-identifier">work</span>
1482
- 390: <span class="ruby-keyword kw">end</span></pre>
1509
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 383</span>
1510
+ 383: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getEffectiveFreeWork</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1511
+ 384: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1512
+ 385: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1513
+ 386: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1514
+ 387:
1515
+ 388: <span class="ruby-identifier">work</span> = <span class="ruby-value">0.0</span>
1516
+ 389: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1517
+ 390: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1518
+ 391: <span class="ruby-identifier">work</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getEffectiveFreeWork</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1519
+ 392: <span class="ruby-keyword kw">end</span>
1520
+ 393: <span class="ruby-keyword kw">else</span>
1521
+ 394: <span class="ruby-identifier">work</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
1522
+ 395: <span class="ruby-identifier">getFreeSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) *
1523
+ 396: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]) * <span class="ruby-ivar">@efficiency</span>
1524
+ 397: <span class="ruby-keyword kw">end</span>
1525
+ 398: <span class="ruby-identifier">work</span>
1526
+ 399: <span class="ruby-keyword kw">end</span></pre>
1483
1527
  </div>
1484
1528
 
1485
1529
  </div>
@@ -1513,36 +1557,36 @@ efficiency.
1513
1557
  <div class="method-source-code"
1514
1558
  id="get-ffective-ork-source">
1515
1559
  <pre>
1516
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 302</span>
1517
- 302: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
1518
- 303: <span class="ruby-comment cmt"># There can't be any effective work if the start is after the end or the</span>
1519
- 304: <span class="ruby-comment cmt"># todo list doesn't contain the specified task.</span>
1520
- 305: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">task</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'duties'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>))
1521
- 306:
1522
- 307: <span class="ruby-comment cmt"># The unique key we use to address the result in the cache.</span>
1523
- 308: <span class="ruby-identifier">key</span> = [ <span class="ruby-keyword kw">self</span>, <span class="ruby-value">:ResourceScenarioEffectiveWork</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
1524
- 309: <span class="ruby-identifier">task</span> ].<span class="ruby-identifier">hash</span>
1525
- 310: <span class="ruby-identifier">work</span> = <span class="ruby-ivar">@dCache</span>.<span class="ruby-identifier">load</span>(<span class="ruby-identifier">key</span>)
1526
- 311: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">work</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">work</span>
1527
- 312:
1528
- 313: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1529
- 314: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1530
- 315: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1531
- 316:
1532
- 317: <span class="ruby-identifier">work</span> = <span class="ruby-value">0.0</span>
1533
- 318: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1534
- 319: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1535
- 320: <span class="ruby-identifier">work</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1536
- 321: <span class="ruby-keyword kw">end</span>
1537
- 322: <span class="ruby-keyword kw">else</span>
1538
- 323: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1539
- 324:
1540
- 325: <span class="ruby-identifier">work</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
1541
- 326: <span class="ruby-identifier">getAllocatedSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>) *
1542
- 327: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]) * <span class="ruby-identifier">a</span>(<span class="ruby-value str">'efficiency'</span>)
1543
- 328: <span class="ruby-keyword kw">end</span>
1544
- 329: <span class="ruby-ivar">@dCache</span>.<span class="ruby-identifier">store</span>(<span class="ruby-identifier">work</span>, <span class="ruby-identifier">key</span>)
1545
- 330: <span class="ruby-keyword kw">end</span></pre>
1560
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 311</span>
1561
+ 311: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
1562
+ 312: <span class="ruby-comment cmt"># There can't be any effective work if the start is after the end or the</span>
1563
+ 313: <span class="ruby-comment cmt"># todo list doesn't contain the specified task.</span>
1564
+ 314: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">task</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@duties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>))
1565
+ 315:
1566
+ 316: <span class="ruby-comment cmt"># The unique key we use to address the result in the cache.</span>
1567
+ 317: <span class="ruby-identifier">key</span> = [ <span class="ruby-keyword kw">self</span>, <span class="ruby-value">:ResourceScenarioEffectiveWork</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
1568
+ 318: <span class="ruby-identifier">task</span> ].<span class="ruby-identifier">hash</span>
1569
+ 319: <span class="ruby-identifier">work</span> = <span class="ruby-ivar">@dCache</span>.<span class="ruby-identifier">load</span>(<span class="ruby-identifier">key</span>)
1570
+ 320: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">work</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">work</span>
1571
+ 321:
1572
+ 322: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1573
+ 323: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1574
+ 324: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1575
+ 325:
1576
+ 326: <span class="ruby-identifier">work</span> = <span class="ruby-value">0.0</span>
1577
+ 327: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1578
+ 328: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1579
+ 329: <span class="ruby-identifier">work</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
1580
+ 330: <span class="ruby-keyword kw">end</span>
1581
+ 331: <span class="ruby-keyword kw">else</span>
1582
+ 332: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1583
+ 333:
1584
+ 334: <span class="ruby-identifier">work</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
1585
+ 335: <span class="ruby-identifier">getAllocatedSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>) *
1586
+ 336: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]) * <span class="ruby-ivar">@efficiency</span>
1587
+ 337: <span class="ruby-keyword kw">end</span>
1588
+ 338: <span class="ruby-ivar">@dCache</span>.<span class="ruby-identifier">store</span>(<span class="ruby-identifier">work</span>, <span class="ruby-identifier">key</span>)
1589
+ 339: <span class="ruby-keyword kw">end</span></pre>
1546
1590
  </div>
1547
1591
 
1548
1592
  </div>
@@ -1575,19 +1619,19 @@ Count the free slots between the start and end index.
1575
1619
  <div class="method-source-code"
1576
1620
  id="get-ree-lots-source">
1577
1621
  <pre>
1578
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 543</span>
1579
- 543: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getFreeSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1580
- 544: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
1581
- 545:
1582
- 546: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
1583
- 547:
1584
- 548: <span class="ruby-identifier">freeSlots</span> = <span class="ruby-value">0</span>
1585
- 549: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
1586
- 550: <span class="ruby-identifier">freeSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>].<span class="ruby-identifier">nil?</span>
1587
- 551: <span class="ruby-keyword kw">end</span>
1588
- 552:
1589
- 553: <span class="ruby-identifier">freeSlots</span>
1590
- 554: <span class="ruby-keyword kw">end</span></pre>
1622
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 562</span>
1623
+ 562: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getFreeSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1624
+ 563: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
1625
+ 564:
1626
+ 565: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
1627
+ 566:
1628
+ 567: <span class="ruby-identifier">freeSlots</span> = <span class="ruby-value">0</span>
1629
+ 568: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
1630
+ 569: <span class="ruby-identifier">freeSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>].<span class="ruby-identifier">nil?</span>
1631
+ 570: <span class="ruby-keyword kw">end</span>
1632
+ 571:
1633
+ 572: <span class="ruby-identifier">freeSlots</span>
1634
+ 573: <span class="ruby-keyword kw">end</span></pre>
1591
1635
  </div>
1592
1636
 
1593
1637
  </div>
@@ -1620,27 +1664,27 @@ Return the number of working days that are blocked by vacations.
1620
1664
  <div class="method-source-code"
1621
1665
  id="get-acation-ays-source">
1622
1666
  <pre>
1623
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 393</span>
1624
- 393: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getVacationDays</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1625
- 394: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1626
- 395: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1627
- 396: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1628
- 397:
1629
- 398: <span class="ruby-identifier">vacationDays</span> = <span class="ruby-value">0.0</span>
1630
- 399: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1631
- 400: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1632
- 401: <span class="ruby-identifier">vacationDays</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getVacationDays</span>(<span class="ruby-ivar">@scenarioIdx</span>,
1633
- 402: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1634
- 403: <span class="ruby-keyword kw">end</span>
1635
- 404: <span class="ruby-keyword kw">else</span>
1636
- 405: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1667
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 402</span>
1668
+ 402: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getVacationDays</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1669
+ 403: <span class="ruby-comment cmt"># Convert the interval dates to indexes if needed.</span>
1670
+ 404: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">startIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1671
+ 405: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>)
1637
1672
  406:
1638
- 407: <span class="ruby-identifier">vacationDays</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
1639
- 408: <span class="ruby-identifier">getVacationSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) *
1640
- 409: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]) * <span class="ruby-identifier">a</span>(<span class="ruby-value str">'efficiency'</span>)
1641
- 410: <span class="ruby-keyword kw">end</span>
1642
- 411: <span class="ruby-identifier">vacationDays</span>
1643
- 412: <span class="ruby-keyword kw">end</span></pre>
1673
+ 407: <span class="ruby-identifier">vacationDays</span> = <span class="ruby-value">0.0</span>
1674
+ 408: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1675
+ 409: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1676
+ 410: <span class="ruby-identifier">vacationDays</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getVacationDays</span>(<span class="ruby-ivar">@scenarioIdx</span>,
1677
+ 411: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1678
+ 412: <span class="ruby-keyword kw">end</span>
1679
+ 413: <span class="ruby-keyword kw">else</span>
1680
+ 414: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">nil?</span>
1681
+ 415:
1682
+ 416: <span class="ruby-identifier">vacationDays</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
1683
+ 417: <span class="ruby-identifier">getVacationSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>) *
1684
+ 418: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]) * <span class="ruby-ivar">@efficiency</span>
1685
+ 419: <span class="ruby-keyword kw">end</span>
1686
+ 420: <span class="ruby-identifier">vacationDays</span>
1687
+ 421: <span class="ruby-keyword kw">end</span></pre>
1644
1688
  </div>
1645
1689
 
1646
1690
  </div>
@@ -1674,21 +1718,21 @@ been blocked by a vacation.
1674
1718
  <div class="method-source-code"
1675
1719
  id="get-acation-lots-source">
1676
1720
  <pre>
1677
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 558</span>
1678
- 558: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getVacationSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1679
- 559: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
1680
- 560:
1681
- 561: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
1682
- 562:
1683
- 563: <span class="ruby-identifier">vacationSlots</span> = <span class="ruby-value">0</span>
1684
- 564: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
1685
- 565: <span class="ruby-identifier">val</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>]
1686
- 566: <span class="ruby-comment cmt"># Bit 1 needs to be unset and the vacation bits must not be 0.</span>
1687
- 567: <span class="ruby-identifier">vacationSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x2</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span>
1688
- 568: (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1689
- 569: <span class="ruby-keyword kw">end</span>
1690
- 570: <span class="ruby-identifier">vacationSlots</span>
1691
- 571: <span class="ruby-keyword kw">end</span></pre>
1721
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 577</span>
1722
+ 577: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">getVacationSlots</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>)
1723
+ 578: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
1724
+ 579:
1725
+ 580: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span>
1726
+ 581:
1727
+ 582: <span class="ruby-identifier">vacationSlots</span> = <span class="ruby-value">0</span>
1728
+ 583: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
1729
+ 584: <span class="ruby-identifier">val</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>]
1730
+ 585: <span class="ruby-comment cmt"># Bit 1 needs to be unset and the vacation bits must not be 0.</span>
1731
+ 586: <span class="ruby-identifier">vacationSlots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x2</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span>
1732
+ 587: (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1733
+ 588: <span class="ruby-keyword kw">end</span>
1734
+ 589: <span class="ruby-identifier">vacationSlots</span>
1735
+ 590: <span class="ruby-keyword kw">end</span></pre>
1692
1736
  </div>
1693
1737
 
1694
1738
  </div>
@@ -1719,20 +1763,20 @@ been blocked by a vacation.
1719
1763
  <div class="method-source-code"
1720
1764
  id="pre-chedule-heck-source">
1721
1765
  <pre>
1722
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 102</span>
1723
- 102: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">preScheduleCheck</span>
1724
- 103: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'managers'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">manager</span><span class="ruby-operator">|</span>
1725
- 104: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">manager</span>.<span class="ruby-identifier">leaf?</span>
1726
- 105: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'manager_is_group'</span>,
1727
- 106: <span class="ruby-node">&quot;Resource #{@property.fullId} has group #{manager.fullId} &quot;</span> <span class="ruby-operator">+</span>
1728
- 107: <span class="ruby-value str">&quot;assigned as manager. Managers must be leaf resources.&quot;</span>)
1729
- 108: <span class="ruby-keyword kw">end</span>
1730
- 109: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">manager</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@property</span>
1731
- 110: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'manager_is_self'</span>,
1732
- 111: <span class="ruby-node">&quot;Resource #{@property.fullId} cannot manage itself.&quot;</span>)
1733
- 112: <span class="ruby-keyword kw">end</span>
1734
- 113: <span class="ruby-keyword kw">end</span>
1735
- 114: <span class="ruby-keyword kw">end</span></pre>
1766
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 111</span>
1767
+ 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">preScheduleCheck</span>
1768
+ 112: <span class="ruby-ivar">@managers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">manager</span><span class="ruby-operator">|</span>
1769
+ 113: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">manager</span>.<span class="ruby-identifier">leaf?</span>
1770
+ 114: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'manager_is_group'</span>,
1771
+ 115: <span class="ruby-node">&quot;Resource #{@property.fullId} has group #{manager.fullId} &quot;</span> <span class="ruby-operator">+</span>
1772
+ 116: <span class="ruby-value str">&quot;assigned as manager. Managers must be leaf resources.&quot;</span>)
1773
+ 117: <span class="ruby-keyword kw">end</span>
1774
+ 118: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">manager</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@property</span>
1775
+ 119: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'manager_is_self'</span>,
1776
+ 120: <span class="ruby-node">&quot;Resource #{@property.fullId} cannot manage itself.&quot;</span>)
1777
+ 121: <span class="ruby-keyword kw">end</span>
1778
+ 122: <span class="ruby-keyword kw">end</span>
1779
+ 123: <span class="ruby-keyword kw">end</span></pre>
1736
1780
  </div>
1737
1781
 
1738
1782
  </div>
@@ -1766,13 +1810,13 @@ initializes variables used during the scheduling process.
1766
1810
  <div class="method-source-code"
1767
1811
  id="prepare-cheduling-source">
1768
1812
  <pre>
1769
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 54</span>
1770
- 54: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prepareScheduling</span>
1771
- 55: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'effort'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-value">0</span>
1772
- 56: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
1773
- 57:
1774
- 58: <span class="ruby-identifier">setDirectReports</span>
1775
- 59: <span class="ruby-keyword kw">end</span></pre>
1813
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 63</span>
1814
+ 63: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prepareScheduling</span>
1815
+ 64: <span class="ruby-ivar">@effort</span> = <span class="ruby-value">0</span>
1816
+ 65: <span class="ruby-identifier">initScoreboard</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
1817
+ 66:
1818
+ 67: <span class="ruby-identifier">setDirectReports</span>
1819
+ 68: <span class="ruby-keyword kw">end</span></pre>
1776
1820
  </div>
1777
1821
 
1778
1822
  </div>
@@ -1809,17 +1853,17 @@ account.
1809
1853
  <div class="method-source-code"
1810
1854
  id="query-cost-source">
1811
1855
  <pre>
1812
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 238</span>
1813
- 238: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_cost</span>(<span class="ruby-identifier">query</span>)
1814
- 239: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">costAccount</span>
1815
- 240: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">cost</span> =
1816
- 241: <span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">costAccount</span>,
1817
- 242: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
1818
- 243: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">currencyFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">cost</span>)
1819
- 244: <span class="ruby-keyword kw">else</span>
1820
- 245: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No cost account'</span>
1821
- 246: <span class="ruby-keyword kw">end</span>
1822
- 247: <span class="ruby-keyword kw">end</span></pre>
1856
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 247</span>
1857
+ 247: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_cost</span>(<span class="ruby-identifier">query</span>)
1858
+ 248: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">costAccount</span>
1859
+ 249: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">cost</span> =
1860
+ 250: <span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">costAccount</span>,
1861
+ 251: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
1862
+ 252: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">currencyFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">cost</span>)
1863
+ 253: <span class="ruby-keyword kw">else</span>
1864
+ 254: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No \balance\ defined!'</span>
1865
+ 255: <span class="ruby-keyword kw">end</span>
1866
+ 256: <span class="ruby-keyword kw">end</span></pre>
1823
1867
  </div>
1824
1868
 
1825
1869
  </div>
@@ -1855,12 +1899,12 @@ href="Task.html">Task</a> is taken into account.
1855
1899
  <div class="method-source-code"
1856
1900
  id="query-effort-source">
1857
1901
  <pre>
1858
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 252</span>
1859
- 252: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effort</span>(<span class="ruby-identifier">query</span>)
1860
- 253: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">effort</span> =
1861
- 254: <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
1862
- 255: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">effort</span>)
1863
- 256: <span class="ruby-keyword kw">end</span></pre>
1902
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 261</span>
1903
+ 261: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effort</span>(<span class="ruby-identifier">query</span>)
1904
+ 262: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">effort</span> =
1905
+ 263: <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
1906
+ 264: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">effort</span>)
1907
+ 265: <span class="ruby-keyword kw">end</span></pre>
1864
1908
  </div>
1865
1909
 
1866
1910
  </div>
@@ -1894,12 +1938,12 @@ during the specified interval.
1894
1938
  <div class="method-source-code"
1895
1939
  id="query-freetime-source">
1896
1940
  <pre>
1897
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 259</span>
1898
- 259: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_freetime</span>(<span class="ruby-identifier">query</span>)
1899
- 260: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">time</span> =
1900
- 261: <span class="ruby-identifier">getEffectiveFreeTime</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>) <span class="ruby-operator">/</span> (<span class="ruby-value">60</span> * <span class="ruby-value">60</span> * <span class="ruby-value">24</span>)
1901
- 262: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleDuration</span>(<span class="ruby-identifier">time</span>)
1902
- 263: <span class="ruby-keyword kw">end</span></pre>
1941
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 268</span>
1942
+ 268: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_freetime</span>(<span class="ruby-identifier">query</span>)
1943
+ 269: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">time</span> =
1944
+ 270: <span class="ruby-identifier">getEffectiveFreeTime</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>) <span class="ruby-operator">/</span> (<span class="ruby-value">60</span> * <span class="ruby-value">60</span> * <span class="ruby-value">24</span>)
1945
+ 271: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleDuration</span>(<span class="ruby-identifier">time</span>)
1946
+ 272: <span class="ruby-keyword kw">end</span></pre>
1903
1947
  </div>
1904
1948
 
1905
1949
  </div>
@@ -1933,12 +1977,12 @@ the specified interval.
1933
1977
  <div class="method-source-code"
1934
1978
  id="query-freework-source">
1935
1979
  <pre>
1936
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 266</span>
1937
- 266: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_freework</span>(<span class="ruby-identifier">query</span>)
1938
- 267: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">work</span> =
1939
- 268: <span class="ruby-identifier">getEffectiveFreeWork</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>)
1940
- 269: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">work</span>)
1941
- 270: <span class="ruby-keyword kw">end</span></pre>
1980
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 275</span>
1981
+ 275: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_freework</span>(<span class="ruby-identifier">query</span>)
1982
+ 276: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">work</span> =
1983
+ 277: <span class="ruby-identifier">getEffectiveFreeWork</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>)
1984
+ 278: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">work</span>)
1985
+ 279: <span class="ruby-keyword kw">end</span></pre>
1942
1986
  </div>
1943
1987
 
1944
1988
  </div>
@@ -1971,11 +2015,11 @@ Get the rate of the resource.
1971
2015
  <div class="method-source-code"
1972
2016
  id="query-rate-source">
1973
2017
  <pre>
1974
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 273</span>
1975
- 273: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_rate</span>(<span class="ruby-identifier">query</span>)
1976
- 274: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">r</span> = <span class="ruby-identifier">rate</span>
1977
- 275: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">currencyFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">r</span>)
1978
- 276: <span class="ruby-keyword kw">end</span></pre>
2018
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 282</span>
2019
+ 282: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_rate</span>(<span class="ruby-identifier">query</span>)
2020
+ 283: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">r</span> = <span class="ruby-identifier">rate</span>
2021
+ 284: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">currencyFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">r</span>)
2022
+ 285: <span class="ruby-keyword kw">end</span></pre>
1979
2023
  </div>
1980
2024
 
1981
2025
  </div>
@@ -2012,17 +2056,17 @@ into account.
2012
2056
  <div class="method-source-code"
2013
2057
  id="query-revenue-source">
2014
2058
  <pre>
2015
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 281</span>
2016
- 281: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_revenue</span>(<span class="ruby-identifier">query</span>)
2017
- 282: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">revenueAccount</span>
2018
- 283: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">revenue</span> =
2019
- 284: <span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">revenueAccount</span>,
2020
- 285: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2021
- 286: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">currencyFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">revenue</span>)
2022
- 287: <span class="ruby-keyword kw">else</span>
2023
- 288: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No revenue account'</span>
2024
- 289: <span class="ruby-keyword kw">end</span>
2025
- 290: <span class="ruby-keyword kw">end</span></pre>
2059
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 290</span>
2060
+ 290: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_revenue</span>(<span class="ruby-identifier">query</span>)
2061
+ 291: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">revenueAccount</span>
2062
+ 292: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">revenue</span> =
2063
+ 293: <span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">revenueAccount</span>,
2064
+ 294: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2065
+ 295: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">currencyFormat</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">revenue</span>)
2066
+ 296: <span class="ruby-keyword kw">else</span>
2067
+ 297: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No \balance\ defined!'</span>
2068
+ 298: <span class="ruby-keyword kw">end</span>
2069
+ 299: <span class="ruby-keyword kw">end</span></pre>
2026
2070
  </div>
2027
2071
 
2028
2072
  </div>
@@ -2048,8 +2092,9 @@ into account.
2048
2092
 
2049
2093
  <p>
2050
2094
  The work time of the <a href="Resource.html">Resource</a> that was blocked
2051
- by a vacation during the specified <a href="Interval.html">Interval</a>.
2052
- The result is in working days (effort).
2095
+ by a vacation during the specified <a
2096
+ href="TimeInterval.html">TimeInterval</a>. The result is in working days
2097
+ (effort).
2053
2098
  </p>
2054
2099
 
2055
2100
 
@@ -2057,12 +2102,12 @@ The result is in working days (effort).
2057
2102
  <div class="method-source-code"
2058
2103
  id="query-vacationdays-source">
2059
2104
  <pre>
2060
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 294</span>
2061
- 294: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_vacationdays</span>(<span class="ruby-identifier">query</span>)
2062
- 295: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">time</span> =
2063
- 296: <span class="ruby-identifier">getVacationDays</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>)
2064
- 297: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">time</span>)
2065
- 298: <span class="ruby-keyword kw">end</span></pre>
2105
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 303</span>
2106
+ 303: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_vacationdays</span>(<span class="ruby-identifier">query</span>)
2107
+ 304: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">numerical</span> = <span class="ruby-identifier">time</span> =
2108
+ 305: <span class="ruby-identifier">getVacationDays</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">endIdx</span>)
2109
+ 306: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scaleLoad</span>(<span class="ruby-identifier">time</span>)
2110
+ 307: <span class="ruby-keyword kw">end</span></pre>
2066
2111
  </div>
2067
2112
 
2068
2113
  </div>
@@ -2093,20 +2138,20 @@ The result is in working days (effort).
2093
2138
  <div class="method-source-code"
2094
2139
  id="set-irect-eports-source">
2095
2140
  <pre>
2096
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 80</span>
2097
- 80: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setDirectReports</span>
2098
- 81: <span class="ruby-comment cmt"># Only leaf resources have reporting lines.</span>
2099
- 82: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
2100
- 83:
2101
- 84: <span class="ruby-comment cmt"># The 'directreports' attribute is the reverse link for the 'managers'</span>
2102
- 85: <span class="ruby-comment cmt"># attribute. In contrast to the 'managers' attribute, the</span>
2103
- 86: <span class="ruby-comment cmt"># 'directreports' list has no duplicate entries.</span>
2104
- 87: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'managers'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">manager</span><span class="ruby-operator">|</span>
2105
- 88: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">manager</span>[<span class="ruby-value str">'directreports'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@property</span>)
2106
- 89: <span class="ruby-identifier">manager</span>[<span class="ruby-value str">'directreports'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@property</span>
2107
- 90: <span class="ruby-keyword kw">end</span>
2108
- 91: <span class="ruby-keyword kw">end</span>
2109
- 92: <span class="ruby-keyword kw">end</span></pre>
2141
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 89</span>
2142
+ 89: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setDirectReports</span>
2143
+ 90: <span class="ruby-comment cmt"># Only leaf resources have reporting lines.</span>
2144
+ 91: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
2145
+ 92:
2146
+ 93: <span class="ruby-comment cmt"># The 'directreports' attribute is the reverse link for the 'managers'</span>
2147
+ 94: <span class="ruby-comment cmt"># attribute. In contrast to the 'managers' attribute, the</span>
2148
+ 95: <span class="ruby-comment cmt"># 'directreports' list has no duplicate entries.</span>
2149
+ 96: <span class="ruby-ivar">@managers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">manager</span><span class="ruby-operator">|</span>
2150
+ 97: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">manager</span>[<span class="ruby-value str">'directreports'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@property</span>)
2151
+ 98: <span class="ruby-identifier">manager</span>[<span class="ruby-value str">'directreports'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@property</span>
2152
+ 99: <span class="ruby-keyword kw">end</span>
2153
+ 100: <span class="ruby-keyword kw">end</span>
2154
+ 101: <span class="ruby-keyword kw">end</span></pre>
2110
2155
  </div>
2111
2156
 
2112
2157
  </div>
@@ -2137,14 +2182,14 @@ The result is in working days (effort).
2137
2182
  <div class="method-source-code"
2138
2183
  id="set-eports-source">
2139
2184
  <pre>
2140
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 94</span>
2141
- 94: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setReports</span>
2142
- 95: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'directreports'</span>).<span class="ruby-identifier">empty?</span>
2143
- 96:
2144
- 97: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'managers'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
2145
- 98: <span class="ruby-identifier">r</span>.<span class="ruby-identifier">setReports_i</span>(<span class="ruby-ivar">@scenarioIdx</span>, [ <span class="ruby-ivar">@property</span> ])
2146
- 99: <span class="ruby-keyword kw">end</span>
2147
- 100: <span class="ruby-keyword kw">end</span></pre>
2185
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 103</span>
2186
+ 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setReports</span>
2187
+ 104: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@directreports</span>.<span class="ruby-identifier">empty?</span>
2188
+ 105:
2189
+ 106: <span class="ruby-ivar">@managers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
2190
+ 107: <span class="ruby-identifier">r</span>.<span class="ruby-identifier">setReports_i</span>(<span class="ruby-ivar">@scenarioIdx</span>, [ <span class="ruby-ivar">@property</span> ])
2191
+ 108: <span class="ruby-keyword kw">end</span>
2192
+ 109: <span class="ruby-keyword kw">end</span></pre>
2148
2193
  </div>
2149
2194
 
2150
2195
  </div>
@@ -2175,22 +2220,22 @@ The result is in working days (effort).
2175
2220
  <div class="method-source-code"
2176
2221
  id="turnover-source">
2177
2222
  <pre>
2178
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 414</span>
2179
- 414: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">account</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
2180
- 415: <span class="ruby-identifier">amount</span> = <span class="ruby-value">0.0</span>
2181
- 416: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
2182
- 417: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span>
2183
- 418: <span class="ruby-identifier">amount</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">turnover</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">account</span>, <span class="ruby-identifier">task</span>)
2184
- 419: <span class="ruby-keyword kw">end</span>
2185
- 420: <span class="ruby-keyword kw">else</span>
2186
- 421: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duties'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">duty</span><span class="ruby-operator">|</span>
2187
- 422: <span class="ruby-identifier">amount</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">duty</span>.<span class="ruby-identifier">turnover</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">account</span>,
2188
- 423: <span class="ruby-ivar">@property</span>)
2189
- 424: <span class="ruby-keyword kw">end</span>
2190
- 425: <span class="ruby-keyword kw">end</span>
2191
- 426:
2192
- 427: <span class="ruby-identifier">amount</span>
2193
- 428: <span class="ruby-keyword kw">end</span></pre>
2223
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 423</span>
2224
+ 423: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">account</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
2225
+ 424: <span class="ruby-identifier">amount</span> = <span class="ruby-value">0.0</span>
2226
+ 425: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
2227
+ 426: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span>
2228
+ 427: <span class="ruby-identifier">amount</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">turnover</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">account</span>, <span class="ruby-identifier">task</span>)
2229
+ 428: <span class="ruby-keyword kw">end</span>
2230
+ 429: <span class="ruby-keyword kw">else</span>
2231
+ 430: <span class="ruby-ivar">@duties</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">duty</span><span class="ruby-operator">|</span>
2232
+ 431: <span class="ruby-identifier">amount</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">duty</span>.<span class="ruby-identifier">turnover</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">account</span>,
2233
+ 432: <span class="ruby-ivar">@property</span>)
2234
+ 433: <span class="ruby-keyword kw">end</span>
2235
+ 434: <span class="ruby-keyword kw">end</span>
2236
+ 435:
2237
+ 436: <span class="ruby-identifier">amount</span>
2238
+ 437: <span class="ruby-keyword kw">end</span></pre>
2194
2239
  </div>
2195
2240
 
2196
2241
  </div>
@@ -2231,25 +2276,25 @@ nil only allocations to this tasks are respected.
2231
2276
  <div class="method-source-code"
2232
2277
  id="allocated-ub-source">
2233
2278
  <pre>
2234
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 678</span>
2235
- 678: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">allocatedSub</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
2236
- 679: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
2237
- 680: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
2238
- 681: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">allocatedSub</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
2239
- 682: <span class="ruby-identifier">task</span>)
2240
- 683: <span class="ruby-keyword kw">end</span>
2241
- 684: <span class="ruby-keyword kw">else</span>
2242
- 685: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duties'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
2243
- 686:
2244
- 687: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
2245
- 688: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
2246
- 689:
2247
- 690: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
2248
- 691: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">task</span>
2249
- 692: <span class="ruby-keyword kw">end</span>
2250
- 693: <span class="ruby-keyword kw">end</span>
2251
- 694: <span class="ruby-keyword kw">false</span>
2252
- 695: <span class="ruby-keyword kw">end</span></pre>
2279
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 694</span>
2280
+ 694: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">allocatedSub</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
2281
+ 695: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
2282
+ 696: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
2283
+ 697: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">allocatedSub</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
2284
+ 698: <span class="ruby-identifier">task</span>)
2285
+ 699: <span class="ruby-keyword kw">end</span>
2286
+ 700: <span class="ruby-keyword kw">else</span>
2287
+ 701: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboard</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@duties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">task</span>)
2288
+ 702:
2289
+ 703: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span>)
2290
+ 704: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">endIdx</span>
2291
+ 705:
2292
+ 706: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
2293
+ 707: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">idx</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">task</span>
2294
+ 708: <span class="ruby-keyword kw">end</span>
2295
+ 709: <span class="ruby-keyword kw">end</span>
2296
+ 710: <span class="ruby-keyword kw">false</span>
2297
+ 711: <span class="ruby-keyword kw">end</span></pre>
2253
2298
  </div>
2254
2299
 
2255
2300
  </div>
@@ -2284,22 +2329,22 @@ particular task.
2284
2329
  <div class="method-source-code"
2285
2330
  id="fit-ndicies-source">
2286
2331
  <pre>
2287
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 634</span>
2288
- 634: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
2289
- 635: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>
2290
- 636: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&amp;&amp;</span>
2291
- 637: <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>]
2292
- 638: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&amp;&amp;</span>
2293
- 639: <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">&gt;</span>
2294
- 640: <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
2295
- 641: <span class="ruby-keyword kw">else</span>
2296
- 642: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@firstBookedSlot</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlot</span> <span class="ruby-operator">&amp;&amp;</span>
2297
- 643: <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@firstBookedSlot</span>
2298
- 644: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">&amp;&amp;</span>
2299
- 645: <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
2300
- 646: <span class="ruby-keyword kw">end</span>
2301
- 647: [ <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> ]
2302
- 648: <span class="ruby-keyword kw">end</span></pre>
2332
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 650</span>
2333
+ 650: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">fitIndicies</span>(<span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-identifier">task</span> = <span class="ruby-keyword kw">nil</span>)
2334
+ 651: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>
2335
+ 652: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&amp;&amp;</span>
2336
+ 653: <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@firstBookedSlots</span>[<span class="ruby-identifier">task</span>]
2337
+ 654: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">&amp;&amp;</span>
2338
+ 655: <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">&gt;</span>
2339
+ 656: <span class="ruby-ivar">@lastBookedSlots</span>[<span class="ruby-identifier">task</span>] <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
2340
+ 657: <span class="ruby-keyword kw">else</span>
2341
+ 658: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@firstBookedSlot</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@firstBookedSlot</span> <span class="ruby-operator">&amp;&amp;</span>
2342
+ 659: <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@firstBookedSlot</span>
2343
+ 660: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">&amp;&amp;</span>
2344
+ 661: <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@lastBookedSlot</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
2345
+ 662: <span class="ruby-keyword kw">end</span>
2346
+ 663: [ <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span> ]
2347
+ 664: <span class="ruby-keyword kw">end</span></pre>
2303
2348
  </div>
2304
2349
 
2305
2350
  </div>
@@ -2330,63 +2375,60 @@ particular task.
2330
2375
  <div class="method-source-code"
2331
2376
  id="init-coreboard-source">
2332
2377
  <pre>
2333
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 575</span>
2334
- 575: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initScoreboard</span>
2335
- 576: <span class="ruby-comment cmt"># Create scoreboard and mark all slots as unavailable</span>
2336
- 577: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-constant">Scoreboard</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'start'</span>], <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>],
2337
- 578: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>], <span class="ruby-value">2</span>)
2338
- 579:
2339
- 580: <span class="ruby-comment cmt"># We'll need this frequently and can savely cache it here.</span>
2340
- 581: <span class="ruby-ivar">@shifts</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'shifts'</span>)
2341
- 582: <span class="ruby-ivar">@workinghours</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'workinghours'</span>)
2342
- 583:
2343
- 584: <span class="ruby-comment cmt"># Change all work time slots to nil (available) again.</span>
2344
- 585: <span class="ruby-identifier">date</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-value">0</span>)
2345
- 586: <span class="ruby-identifier">delta</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
2346
- 587: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scoreboardSize</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2347
- 588: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
2348
- 589: <span class="ruby-identifier">date</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">delta</span>
2349
- 590: <span class="ruby-keyword kw">end</span>
2350
- 591:
2351
- 592: <span class="ruby-comment cmt"># Mark all resource specific vacation slots as such</span>
2352
- 593: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'vacations'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vacation</span><span class="ruby-operator">|</span>
2353
- 594: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">start</span>)
2354
- 595: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">end</span>)
2355
- 596: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2356
- 597: <span class="ruby-comment cmt"># If the slot is nil, we don't set the time-off bit.</span>
2357
- 598: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = (<span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">2</span>) <span class="ruby-operator">|</span> (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">2</span>)
2358
- 599: <span class="ruby-keyword kw">end</span>
2359
- 600: <span class="ruby-keyword kw">end</span>
2360
- 601:
2361
- 602: <span class="ruby-comment cmt"># Mark all global vacation slots as such</span>
2362
- 603: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'vacations'</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vacation</span><span class="ruby-operator">|</span>
2363
- 604: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">start</span>)
2364
- 605: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">end</span>)
2365
- 606: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2366
- 607: <span class="ruby-comment cmt"># If the slot is nil or set to 4 then don't set the time-off bit.</span>
2367
- 608: <span class="ruby-identifier">sb</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>]
2368
- 609: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = ((<span class="ruby-identifier">sb</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">sb</span> <span class="ruby-operator">==</span> <span class="ruby-value">4</span>) <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">2</span>) <span class="ruby-operator">|</span> (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">2</span>)
2369
- 610: <span class="ruby-keyword kw">end</span>
2370
- 611: <span class="ruby-keyword kw">end</span>
2371
- 612:
2372
- 613: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">nil?</span>
2373
- 614: <span class="ruby-comment cmt"># Mark the vacations from all the shifts the resource is assigned to.</span>
2374
- 615: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scoreboardSize</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2375
- 616: <span class="ruby-identifier">v</span> = <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">getSbSlot</span>(<span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">i</span>))
2376
- 617: <span class="ruby-comment cmt"># Check if the vacation replacement bit is set. In that case we copy</span>
2377
- 618: <span class="ruby-comment cmt"># the whole interval over to the resource scoreboard overriding any</span>
2378
- 619: <span class="ruby-comment cmt"># global vacations.</span>
2379
- 620: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">v</span> &amp; (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">8</span>)) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
2380
- 621: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = (<span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3E</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-operator">?</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">:</span> (<span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3D</span>)
2381
- 622: <span class="ruby-keyword kw">elsif</span> ((<span class="ruby-identifier">sbV</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>]).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">sbV</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-operator">&amp;&amp;</span>
2382
- 623: (<span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
2383
- 624: <span class="ruby-comment cmt"># We only add the shift vacations but don't turn global vacation</span>
2384
- 625: <span class="ruby-comment cmt"># slots into working slots again.</span>
2385
- 626: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3E</span>
2386
- 627: <span class="ruby-keyword kw">end</span>
2387
- 628: <span class="ruby-keyword kw">end</span>
2388
- 629: <span class="ruby-keyword kw">end</span>
2389
- 630: <span class="ruby-keyword kw">end</span></pre>
2378
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 594</span>
2379
+ 594: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initScoreboard</span>
2380
+ 595: <span class="ruby-comment cmt"># Create scoreboard and mark all slots as unavailable</span>
2381
+ 596: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-constant">Scoreboard</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'start'</span>], <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>],
2382
+ 597: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>], <span class="ruby-value">2</span>)
2383
+ 598:
2384
+ 599: <span class="ruby-comment cmt"># We'll need this frequently and can savely cache it here.</span>
2385
+ 600: <span class="ruby-ivar">@shifts</span> = <span class="ruby-ivar">@shifts</span>
2386
+ 601: <span class="ruby-ivar">@workinghours</span> = <span class="ruby-ivar">@workinghours</span>
2387
+ 602:
2388
+ 603: <span class="ruby-comment cmt"># Change all work time slots to nil (available) again.</span>
2389
+ 604: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scoreboardSize</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2390
+ 605: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">i</span>)
2391
+ 606: <span class="ruby-keyword kw">end</span>
2392
+ 607:
2393
+ 608: <span class="ruby-comment cmt"># Mark all resource specific vacation slots as such</span>
2394
+ 609: <span class="ruby-ivar">@vacations</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vacation</span><span class="ruby-operator">|</span>
2395
+ 610: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">start</span>)
2396
+ 611: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">end</span>)
2397
+ 612: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2398
+ 613: <span class="ruby-comment cmt"># If the slot is nil, we don't set the time-off bit.</span>
2399
+ 614: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = (<span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">2</span>) <span class="ruby-operator">|</span> (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">2</span>)
2400
+ 615: <span class="ruby-keyword kw">end</span>
2401
+ 616: <span class="ruby-keyword kw">end</span>
2402
+ 617:
2403
+ 618: <span class="ruby-comment cmt"># Mark all global vacation slots as such</span>
2404
+ 619: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'vacations'</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vacation</span><span class="ruby-operator">|</span>
2405
+ 620: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">start</span>)
2406
+ 621: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">end</span>)
2407
+ 622: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2408
+ 623: <span class="ruby-comment cmt"># If the slot is nil or set to 4 then don't set the time-off bit.</span>
2409
+ 624: <span class="ruby-identifier">sb</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>]
2410
+ 625: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = ((<span class="ruby-identifier">sb</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">sb</span> <span class="ruby-operator">==</span> <span class="ruby-value">4</span>) <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">2</span>) <span class="ruby-operator">|</span> (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">2</span>)
2411
+ 626: <span class="ruby-keyword kw">end</span>
2412
+ 627: <span class="ruby-keyword kw">end</span>
2413
+ 628:
2414
+ 629: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">nil?</span>
2415
+ 630: <span class="ruby-comment cmt"># Mark the vacations from all the shifts the resource is assigned to.</span>
2416
+ 631: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scoreboardSize</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
2417
+ 632: <span class="ruby-identifier">v</span> = <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">getSbSlot</span>(<span class="ruby-identifier">i</span>)
2418
+ 633: <span class="ruby-comment cmt"># Check if the vacation replacement bit is set. In that case we copy</span>
2419
+ 634: <span class="ruby-comment cmt"># the whole interval over to the resource scoreboard overriding any</span>
2420
+ 635: <span class="ruby-comment cmt"># global vacations.</span>
2421
+ 636: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">v</span> &amp; (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">8</span>)) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
2422
+ 637: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = (<span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3E</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-operator">?</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">:</span> (<span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3D</span>)
2423
+ 638: <span class="ruby-keyword kw">elsif</span> ((<span class="ruby-identifier">sbV</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>]).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> (<span class="ruby-identifier">sbV</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-operator">&amp;&amp;</span>
2424
+ 639: (<span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3C</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
2425
+ 640: <span class="ruby-comment cmt"># We only add the shift vacations but don't turn global vacation</span>
2426
+ 641: <span class="ruby-comment cmt"># slots into working slots again.</span>
2427
+ 642: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">v</span> &amp; <span class="ruby-value">0x3E</span>
2428
+ 643: <span class="ruby-keyword kw">end</span>
2429
+ 644: <span class="ruby-keyword kw">end</span>
2430
+ 645: <span class="ruby-keyword kw">end</span>
2431
+ 646: <span class="ruby-keyword kw">end</span></pre>
2390
2432
  </div>
2391
2433
 
2392
2434
  </div>
@@ -2403,7 +2445,7 @@ particular task.
2403
2445
  <div class="method-heading">
2404
2446
 
2405
2447
  <span class="method-name">onShift?</span><span
2406
- class="method-args">(date)</span>
2448
+ class="method-args">(sbIdx)</span>
2407
2449
  <span class="method-click-advice">click to toggle source</span>
2408
2450
 
2409
2451
  </div>
@@ -2417,14 +2459,14 @@ particular task.
2417
2459
  <div class="method-source-code"
2418
2460
  id="on-hift--source">
2419
2461
  <pre>
2420
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 667</span>
2421
- 667: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
2422
- 668: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@shifts</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">assigned?</span>(<span class="ruby-identifier">date</span>)
2423
- 669: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
2424
- 670: <span class="ruby-keyword kw">else</span>
2425
- 671: <span class="ruby-ivar">@workinghours</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
2426
- 672: <span class="ruby-keyword kw">end</span>
2427
- 673: <span class="ruby-keyword kw">end</span></pre>
2462
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 683</span>
2463
+ 683: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">sbIdx</span>)
2464
+ 684: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@shifts</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">assigned?</span>(<span class="ruby-identifier">sbIdx</span>)
2465
+ 685: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">sbIdx</span>)
2466
+ 686: <span class="ruby-keyword kw">else</span>
2467
+ 687: <span class="ruby-ivar">@workinghours</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">sbIdx</span>)
2468
+ 688: <span class="ruby-keyword kw">end</span>
2469
+ 689: <span class="ruby-keyword kw">end</span></pre>
2428
2470
  </div>
2429
2471
 
2430
2472
  </div>
@@ -2457,18 +2499,18 @@ Return the daily cost of a resource or resource group.
2457
2499
  <div class="method-source-code"
2458
2500
  id="rate-source">
2459
2501
  <pre>
2460
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 698</span>
2461
- 698: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rate</span>
2462
- 699: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
2463
- 700: <span class="ruby-identifier">dailyRate</span> = <span class="ruby-value">0.0</span>
2464
- 701: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
2465
- 702: <span class="ruby-identifier">dailyRate</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">rate</span>(<span class="ruby-ivar">@scenarioIdx</span>)
2466
- 703: <span class="ruby-keyword kw">end</span>
2467
- 704: <span class="ruby-identifier">dailyRate</span>
2468
- 705: <span class="ruby-keyword kw">else</span>
2469
- 706: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'rate'</span>)
2470
- 707: <span class="ruby-keyword kw">end</span>
2471
- 708: <span class="ruby-keyword kw">end</span></pre>
2502
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 714</span>
2503
+ 714: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rate</span>
2504
+ 715: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
2505
+ 716: <span class="ruby-identifier">dailyRate</span> = <span class="ruby-value">0.0</span>
2506
+ 717: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">kids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
2507
+ 718: <span class="ruby-identifier">dailyRate</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">rate</span>(<span class="ruby-ivar">@scenarioIdx</span>)
2508
+ 719: <span class="ruby-keyword kw">end</span>
2509
+ 720: <span class="ruby-identifier">dailyRate</span>
2510
+ 721: <span class="ruby-keyword kw">else</span>
2511
+ 722: <span class="ruby-ivar">@rate</span>
2512
+ 723: <span class="ruby-keyword kw">end</span>
2513
+ 724: <span class="ruby-keyword kw">end</span></pre>
2472
2514
  </div>
2473
2515
 
2474
2516
  </div>
@@ -2499,23 +2541,23 @@ Return the daily cost of a resource or resource group.
2499
2541
  <div class="method-source-code"
2500
2542
  id="set-eports-i-source">
2501
2543
  <pre>
2502
- <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 650</span>
2503
- 650: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setReports_i</span>(<span class="ruby-identifier">reports</span>)
2504
- 651: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reports</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@property</span>)
2505
- 652: <span class="ruby-comment cmt"># A manager must never show up in the list of his/her own reports.</span>
2506
- 653: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'manager_loop'</span>,
2507
- 654: <span class="ruby-node">&quot;Management loop detected. #{@property.fullId} has self &quot;</span> <span class="ruby-operator">+</span>
2508
- 655: <span class="ruby-value str">&quot;in list of reports&quot;</span>)
2509
- 656: <span class="ruby-keyword kw">end</span>
2510
- 657: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'reports'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">reports</span>
2511
- 658: <span class="ruby-comment cmt"># Resources can end up multiple times in the list if they have multiple</span>
2512
- 659: <span class="ruby-comment cmt"># reporting chains. We only need them once in the list.</span>
2513
- 660: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'reports'</span>).<span class="ruby-identifier">uniq!</span>
2514
- 661:
2515
- 662: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'managers'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
2516
- 663: <span class="ruby-identifier">r</span>.<span class="ruby-identifier">setReports_i</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">a</span>(<span class="ruby-value str">'reports'</span>))
2517
- 664: <span class="ruby-keyword kw">end</span>
2518
- 665: <span class="ruby-keyword kw">end</span></pre>
2544
+ <span class="ruby-comment cmt"># File lib/taskjuggler/ResourceScenario.rb, line 666</span>
2545
+ 666: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setReports_i</span>(<span class="ruby-identifier">reports</span>)
2546
+ 667: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reports</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@property</span>)
2547
+ 668: <span class="ruby-comment cmt"># A manager must never show up in the list of his/her own reports.</span>
2548
+ 669: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'manager_loop'</span>,
2549
+ 670: <span class="ruby-node">&quot;Management loop detected. #{@property.fullId} has self &quot;</span> <span class="ruby-operator">+</span>
2550
+ 671: <span class="ruby-value str">&quot;in list of reports&quot;</span>)
2551
+ 672: <span class="ruby-keyword kw">end</span>
2552
+ 673: <span class="ruby-ivar">@reports</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">reports</span>
2553
+ 674: <span class="ruby-comment cmt"># Resources can end up multiple times in the list if they have multiple</span>
2554
+ 675: <span class="ruby-comment cmt"># reporting chains. We only need them once in the list.</span>
2555
+ 676: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">uniq!</span>
2556
+ 677:
2557
+ 678: <span class="ruby-ivar">@managers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
2558
+ 679: <span class="ruby-identifier">r</span>.<span class="ruby-identifier">setReports_i</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-ivar">@reports</span>)
2559
+ 680: <span class="ruby-keyword kw">end</span>
2560
+ 681: <span class="ruby-keyword kw">end</span></pre>
2519
2561
  </div>
2520
2562
 
2521
2563
  </div>