taskjuggler 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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>