taskjuggler 0.0.5 → 0.0.6

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 (544) hide show
  1. data/CHANGELOG +2086 -0
  2. data/benchmarks/666tasks.tjp +3183 -0
  3. data/benchmarks/booking.tjp +14 -10
  4. data/doc/AppConfig.html +95 -73
  5. data/doc/Arguments.html +22 -2
  6. data/doc/CHANGELOG.html +2587 -0
  7. data/doc/COPYING.html +21 -1
  8. data/doc/Object.html +161 -122
  9. data/doc/README.html +21 -1
  10. data/doc/RuntimeConfig.html +26 -6
  11. data/doc/String.html +38 -18
  12. data/doc/StringIO.html +579 -0
  13. data/doc/TaskJuggler.html +251 -143
  14. data/doc/TaskJuggler/Account.html +26 -6
  15. data/doc/TaskJuggler/AccountAttribute.html +28 -8
  16. data/doc/TaskJuggler/AccountScenario.html +24 -4
  17. data/doc/TaskJuggler/Allocation.html +30 -10
  18. data/doc/TaskJuggler/AllocationAttribute.html +28 -8
  19. data/doc/TaskJuggler/AttributeBase.html +46 -26
  20. data/doc/TaskJuggler/AttributeDefinition.html +22 -2
  21. data/doc/TaskJuggler/BatchProcessor.html +40 -20
  22. data/doc/TaskJuggler/Booking.html +26 -6
  23. data/doc/TaskJuggler/BookingListAttribute.html +28 -8
  24. data/doc/TaskJuggler/BooleanAttribute.html +28 -8
  25. data/doc/TaskJuggler/CSVFile.html +308 -146
  26. data/doc/TaskJuggler/CellSettingPattern.html +22 -2
  27. data/doc/TaskJuggler/CellSettingPatternList.html +26 -6
  28. data/doc/TaskJuggler/Charge.html +26 -6
  29. data/doc/TaskJuggler/ChargeListAttribute.html +26 -6
  30. data/doc/TaskJuggler/ChargeSet.html +33 -13
  31. data/doc/TaskJuggler/ChargeSetListAttribute.html +28 -8
  32. data/doc/TaskJuggler/ColumnListAttribute.html +26 -6
  33. data/doc/TaskJuggler/ColumnTable.html +24 -4
  34. data/doc/TaskJuggler/Daemon.html +26 -6
  35. data/doc/TaskJuggler/DateAttribute.html +26 -6
  36. data/doc/TaskJuggler/DefinitionListAttribute.html +22 -2
  37. data/doc/TaskJuggler/DependencyListAttribute.html +28 -8
  38. data/doc/TaskJuggler/DurationAttribute.html +28 -8
  39. data/doc/TaskJuggler/FixnumAttribute.html +24 -4
  40. data/doc/TaskJuggler/FlagListAttribute.html +28 -8
  41. data/doc/TaskJuggler/FloatAttribute.html +26 -6
  42. data/doc/TaskJuggler/FormatListAttribute.html +24 -4
  43. data/doc/TaskJuggler/GanttChart.html +147 -126
  44. data/doc/TaskJuggler/GanttContainer.html +34 -14
  45. data/doc/TaskJuggler/GanttHeader.html +28 -8
  46. data/doc/TaskJuggler/GanttHeaderScaleItem.html +24 -4
  47. data/doc/TaskJuggler/GanttLine.html +38 -18
  48. data/doc/TaskJuggler/GanttLoadStack.html +26 -6
  49. data/doc/TaskJuggler/GanttMilestone.html +34 -14
  50. data/doc/TaskJuggler/GanttRouter.html +50 -30
  51. data/doc/TaskJuggler/GanttTaskBar.html +34 -14
  52. data/doc/TaskJuggler/HTMLDocument.html +26 -6
  53. data/doc/TaskJuggler/HTMLGraphics.html +30 -10
  54. data/doc/TaskJuggler/Interval.html +40 -22
  55. data/doc/TaskJuggler/IntervalListAttribute.html +28 -8
  56. data/doc/TaskJuggler/JobInfo.html +24 -4
  57. data/doc/TaskJuggler/Journal.html +226 -147
  58. data/doc/TaskJuggler/JournalEntry.html +22 -2
  59. data/doc/TaskJuggler/JournalEntryList.html +129 -112
  60. data/doc/TaskJuggler/KeywordArray.html +26 -6
  61. data/doc/TaskJuggler/KeywordDocumentation.html +46 -26
  62. data/doc/TaskJuggler/Limits.html +152 -123
  63. data/doc/TaskJuggler/Limits/Limit.html +149 -70
  64. data/doc/TaskJuggler/LimitsAttribute.html +36 -51
  65. data/doc/TaskJuggler/ListAttributeBase.html +24 -4
  66. data/doc/TaskJuggler/Log.html +50 -32
  67. data/doc/TaskJuggler/LogFile.html +37 -17
  68. data/doc/TaskJuggler/LogicalAttribute.html +53 -33
  69. data/doc/TaskJuggler/LogicalExpression.html +26 -6
  70. data/doc/TaskJuggler/LogicalExpressionAttribute.html +32 -12
  71. data/doc/TaskJuggler/LogicalFlag.html +42 -22
  72. data/doc/TaskJuggler/LogicalFunction.html +204 -140
  73. data/doc/TaskJuggler/LogicalOperation.html +135 -111
  74. data/doc/TaskJuggler/Macro.html +22 -2
  75. data/doc/TaskJuggler/MacroParser.html +32 -12
  76. data/doc/TaskJuggler/MacroTable.html +32 -12
  77. data/doc/TaskJuggler/ManagerResponsibilities.html +24 -4
  78. data/doc/TaskJuggler/ManagerStatusRecord.html +24 -4
  79. data/doc/TaskJuggler/Message.html +24 -4
  80. data/doc/TaskJuggler/MessageHandler.html +24 -4
  81. data/doc/TaskJuggler/Navigator.html +104 -71
  82. data/doc/TaskJuggler/NavigatorElement.html +32 -12
  83. data/doc/TaskJuggler/NikuProject.html +22 -2
  84. data/doc/TaskJuggler/NikuReport.html +310 -228
  85. data/doc/TaskJuggler/NikuResource.html +22 -2
  86. data/doc/TaskJuggler/NodeListAttribute.html +615 -0
  87. data/doc/TaskJuggler/OnShiftCache.html +32 -12
  88. data/doc/TaskJuggler/ProcessIntercom.html +205 -78
  89. data/doc/TaskJuggler/ProcessIntercomIface.html +26 -6
  90. data/doc/TaskJuggler/Project.html +708 -660
  91. data/doc/TaskJuggler/ProjectBroker.html +506 -304
  92. data/doc/TaskJuggler/ProjectBrokerIface.html +61 -41
  93. data/doc/TaskJuggler/ProjectFileParser.html +429 -373
  94. data/doc/TaskJuggler/ProjectFileScanner.html +1790 -0
  95. data/doc/TaskJuggler/ProjectRecord.html +80 -60
  96. data/doc/TaskJuggler/ProjectServer.html +312 -237
  97. data/doc/TaskJuggler/ProjectServerIface.html +101 -43
  98. data/doc/TaskJuggler/PropertyAttribute.html +32 -12
  99. data/doc/TaskJuggler/PropertyList.html +166 -145
  100. data/doc/TaskJuggler/PropertySet.html +254 -224
  101. data/doc/TaskJuggler/PropertyTreeNode.html +670 -536
  102. data/doc/TaskJuggler/Query.html +169 -148
  103. data/doc/TaskJuggler/RTFHandlers.html +622 -0
  104. data/doc/TaskJuggler/RTFNavigator.html +28 -8
  105. data/doc/TaskJuggler/RTFQuery.html +40 -20
  106. data/doc/TaskJuggler/RTFReport.html +62 -25
  107. data/doc/TaskJuggler/RTFReportLink.html +765 -0
  108. data/doc/TaskJuggler/RealFormat.html +26 -6
  109. data/doc/TaskJuggler/RealFormatAttribute.html +26 -6
  110. data/doc/TaskJuggler/ReferenceAttribute.html +59 -39
  111. data/doc/TaskJuggler/Report.html +402 -251
  112. data/doc/TaskJuggler/ReportBase.html +162 -137
  113. data/doc/TaskJuggler/ReportContext.html +112 -29
  114. data/doc/TaskJuggler/ReportServer.html +89 -64
  115. data/doc/TaskJuggler/ReportServerIface.html +75 -55
  116. data/doc/TaskJuggler/ReportServerRecord.html +54 -31
  117. data/doc/TaskJuggler/ReportServlet.html +980 -0
  118. data/doc/TaskJuggler/ReportTable.html +41 -21
  119. data/doc/TaskJuggler/ReportTableCell.html +214 -170
  120. data/doc/TaskJuggler/ReportTableColumn.html +30 -10
  121. data/doc/TaskJuggler/ReportTableLegend.html +36 -16
  122. data/doc/TaskJuggler/ReportTableLine.html +32 -12
  123. data/doc/TaskJuggler/Resource.html +99 -87
  124. data/doc/TaskJuggler/ResourceListAttribute.html +59 -39
  125. data/doc/TaskJuggler/ResourceListRE.html +47 -26
  126. data/doc/TaskJuggler/ResourceScenario.html +403 -437
  127. data/doc/TaskJuggler/RichText.html +26 -6
  128. data/doc/TaskJuggler/RichTextAttribute.html +50 -30
  129. data/doc/TaskJuggler/RichTextDocument.html +37 -17
  130. data/doc/TaskJuggler/RichTextElement.html +475 -413
  131. data/doc/TaskJuggler/RichTextException.html +22 -2
  132. data/doc/TaskJuggler/RichTextFunctionExample.html +28 -8
  133. data/doc/TaskJuggler/RichTextFunctionHandler.html +24 -4
  134. data/doc/TaskJuggler/RichTextImage.html +22 -2
  135. data/doc/TaskJuggler/RichTextIntermediate.html +38 -18
  136. data/doc/TaskJuggler/RichTextParser.html +56 -34
  137. data/doc/TaskJuggler/RichTextScanner.html +82 -61
  138. data/doc/TaskJuggler/RichTextSnip.html +34 -14
  139. data/doc/TaskJuggler/RichTextSyntaxRules.html +507 -353
  140. data/doc/TaskJuggler/Scenario.html +22 -2
  141. data/doc/TaskJuggler/ScenarioData.html +30 -46
  142. data/doc/TaskJuggler/ScenarioListAttribute.html +38 -18
  143. data/doc/TaskJuggler/Scoreboard.html +42 -22
  144. data/doc/TaskJuggler/SheetHandlerBase.html +40 -20
  145. data/doc/TaskJuggler/SheetReceiver.html +333 -295
  146. data/doc/TaskJuggler/SheetSender.html +253 -230
  147. data/doc/TaskJuggler/Shift.html +26 -6
  148. data/doc/TaskJuggler/ShiftAssignment.html +89 -73
  149. data/doc/TaskJuggler/ShiftAssignments.html +226 -234
  150. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +39 -54
  151. data/doc/TaskJuggler/ShiftScenario.html +28 -8
  152. data/doc/TaskJuggler/SortListAttribute.html +34 -14
  153. data/doc/TaskJuggler/SourceFileInfo.html +24 -4
  154. data/doc/TaskJuggler/StatusSheetReceiver.html +24 -3
  155. data/doc/TaskJuggler/StatusSheetReport.html +168 -153
  156. data/doc/TaskJuggler/StatusSheetSender.html +24 -3
  157. data/doc/TaskJuggler/StringAttribute.html +38 -18
  158. data/doc/TaskJuggler/SymbolAttribute.html +32 -12
  159. data/doc/TaskJuggler/SyntaxReference.html +40 -20
  160. data/doc/TaskJuggler/TOCEntry.html +26 -6
  161. data/doc/TaskJuggler/TSResourceRecord.html +22 -2
  162. data/doc/TaskJuggler/TSTaskRecord.html +22 -2
  163. data/doc/TaskJuggler/TableColumnDefinition.html +59 -22
  164. data/doc/TaskJuggler/TableOfContents.html +26 -6
  165. data/doc/TaskJuggler/TableReport.html +937 -904
  166. data/doc/TaskJuggler/Task.html +55 -36
  167. data/doc/TaskJuggler/TaskDependency.html +24 -4
  168. data/doc/TaskJuggler/TaskListAttribute.html +50 -30
  169. data/doc/TaskJuggler/TaskListRE.html +27 -7
  170. data/doc/TaskJuggler/TaskScenario.html +1273 -1153
  171. data/doc/TaskJuggler/TextFormatter.html +28 -8
  172. data/doc/TaskJuggler/TextParser.html +585 -338
  173. data/doc/TaskJuggler/TextParser/Pattern.html +54 -34
  174. data/doc/TaskJuggler/TextParser/Rule.html +95 -73
  175. data/doc/TaskJuggler/TextParser/StackElement.html +39 -17
  176. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +24 -4
  177. data/doc/TaskJuggler/TextParser/TokenDoc.html +22 -2
  178. data/doc/TaskJuggler/TextReport.html +28 -8
  179. data/doc/TaskJuggler/TextScanner.html +400 -1404
  180. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +28 -240
  181. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +37 -184
  182. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +682 -0
  183. data/doc/TaskJuggler/TextScanner/StreamHandle.html +342 -67
  184. data/doc/TaskJuggler/TimeSheet.html +48 -28
  185. data/doc/TaskJuggler/TimeSheetReceiver.html +24 -3
  186. data/doc/TaskJuggler/TimeSheetRecord.html +47 -27
  187. data/doc/TaskJuggler/TimeSheetReport.html +154 -133
  188. data/doc/TaskJuggler/TimeSheetSender.html +24 -3
  189. data/doc/TaskJuggler/TimeSheetSummary.html +137 -91
  190. data/doc/TaskJuggler/TimeSheets.html +26 -6
  191. data/doc/TaskJuggler/Tj3AppBase.html +85 -58
  192. data/doc/TaskJuggler/Tj3Client.html +292 -238
  193. data/doc/TaskJuggler/Tj3Daemon.html +159 -74
  194. data/doc/TaskJuggler/Tj3SheetAppBase.html +26 -6
  195. data/doc/TaskJuggler/Tj3SsReceiver.html +26 -6
  196. data/doc/TaskJuggler/Tj3SsSender.html +53 -26
  197. data/doc/TaskJuggler/Tj3TsReceiver.html +28 -7
  198. data/doc/TaskJuggler/Tj3TsSender.html +26 -6
  199. data/doc/TaskJuggler/Tj3TsSummary.html +26 -6
  200. data/doc/TaskJuggler/TjException.html +22 -2
  201. data/doc/TaskJuggler/TjTime.html +216 -160
  202. data/doc/TaskJuggler/TjpExample.html +34 -14
  203. data/doc/TaskJuggler/TjpExportRE.html +403 -407
  204. data/doc/TaskJuggler/TjpSyntaxRules.html +4805 -4408
  205. data/doc/TaskJuggler/URLParameter.html +649 -0
  206. data/doc/TaskJuggler/UserManual.html +42 -22
  207. data/doc/TaskJuggler/WebServer.html +702 -0
  208. data/doc/TaskJuggler/WorkingHours.html +38 -18
  209. data/doc/TaskJuggler/WorkingHoursAttribute.html +61 -41
  210. data/doc/TaskJuggler/XMLBlob.html +24 -4
  211. data/doc/TaskJuggler/XMLComment.html +24 -4
  212. data/doc/TaskJuggler/XMLDocument.html +30 -10
  213. data/doc/TaskJuggler/XMLElement.html +34 -14
  214. data/doc/TaskJuggler/XMLNamedText.html +22 -2
  215. data/doc/TaskJuggler/XMLText.html +24 -4
  216. data/doc/index.html +1841 -1666
  217. data/doc/lib/AccountScenario_rb.html +1 -1
  218. data/doc/lib/Account_rb.html +1 -1
  219. data/doc/lib/Allocation_rb.html +1 -1
  220. data/doc/lib/AppConfig_rb.html +2 -2
  221. data/doc/lib/AttributeBase_rb.html +1 -1
  222. data/doc/lib/AttributeDefinition_rb.html +1 -1
  223. data/doc/lib/Attributes_rb.html +2 -2
  224. data/doc/lib/BatchProcessor_rb.html +1 -1
  225. data/doc/lib/Booking_rb.html +1 -1
  226. data/doc/lib/ChargeSet_rb.html +1 -1
  227. data/doc/lib/Charge_rb.html +1 -1
  228. data/doc/lib/HTMLDocument_rb.html +1 -1
  229. data/doc/lib/Interval_rb.html +1 -1
  230. data/doc/lib/Journal_rb.html +2 -2
  231. data/doc/lib/KeywordArray_rb.html +1 -1
  232. data/doc/lib/KeywordDocumentation_rb.html +1 -1
  233. data/doc/lib/Limits_rb.html +2 -2
  234. data/doc/lib/LogFile_rb.html +2 -2
  235. data/doc/lib/Log_rb.html +1 -1
  236. data/doc/lib/LogicalExpression_rb.html +1 -1
  237. data/doc/lib/LogicalFunction_rb.html +2 -2
  238. data/doc/lib/LogicalOperation_rb.html +2 -2
  239. data/doc/lib/MacroParser_rb.html +1 -1
  240. data/doc/lib/MacroTable_rb.html +1 -1
  241. data/doc/lib/MessageHandler_rb.html +1 -1
  242. data/doc/lib/Message_rb.html +1 -1
  243. data/doc/lib/ProjectFileParser_rb.html +4 -8
  244. data/doc/lib/ProjectFileScanner_rb.html +67 -0
  245. data/doc/lib/Project_rb.html +2 -2
  246. data/doc/lib/PropertyList_rb.html +2 -2
  247. data/doc/lib/PropertySet_rb.html +2 -2
  248. data/doc/lib/PropertyTreeNode_rb.html +2 -2
  249. data/doc/lib/Query_rb.html +2 -2
  250. data/doc/lib/RTFHandlers_rb.html +73 -0
  251. data/doc/lib/RTFNavigator_rb.html +1 -1
  252. data/doc/lib/RTFQuery_rb.html +1 -1
  253. data/doc/lib/RTFReportLink_rb.html +71 -0
  254. data/doc/lib/RTFReport_rb.html +2 -2
  255. data/doc/lib/RealFormat_rb.html +1 -1
  256. data/doc/lib/ResourceScenario_rb.html +2 -2
  257. data/doc/lib/Resource_rb.html +2 -2
  258. data/doc/lib/RichTextDocument_rb.html +1 -1
  259. data/doc/lib/RichTextElement_rb.html +2 -2
  260. data/doc/lib/RichTextFunctionExample_rb.html +1 -1
  261. data/doc/lib/RichTextFunctionHandler_rb.html +1 -1
  262. data/doc/lib/RichTextParser_rb.html +2 -2
  263. data/doc/lib/RichTextScanner_rb.html +2 -2
  264. data/doc/lib/RichTextSnip_rb.html +1 -1
  265. data/doc/lib/RichTextSyntaxRules_rb.html +2 -2
  266. data/doc/lib/RichText_rb.html +1 -1
  267. data/doc/lib/RuntimeConfig_rb.html +1 -1
  268. data/doc/lib/ScenarioData_rb.html +2 -2
  269. data/doc/lib/Scenario_rb.html +1 -1
  270. data/doc/lib/Scoreboard_rb.html +1 -1
  271. data/doc/lib/SheetHandlerBase_rb.html +1 -1
  272. data/doc/lib/SheetReceiver_rb.html +2 -2
  273. data/doc/lib/SheetSender_rb.html +4 -2
  274. data/doc/lib/ShiftAssignments_rb.html +4 -2
  275. data/doc/lib/ShiftScenario_rb.html +1 -1
  276. data/doc/lib/Shift_rb.html +1 -1
  277. data/doc/lib/SourceFileInfo_rb.html +1 -1
  278. data/doc/lib/StatusSheetReceiver_rb.html +2 -2
  279. data/doc/lib/StatusSheetSender_rb.html +2 -2
  280. data/doc/lib/SyntaxReference_rb.html +1 -1
  281. data/doc/lib/TOCEntry_rb.html +1 -1
  282. data/doc/lib/TableColumnDefinition_rb.html +2 -2
  283. data/doc/lib/TableOfContents_rb.html +1 -1
  284. data/doc/lib/TaskDependency_rb.html +1 -1
  285. data/doc/lib/TaskJuggler_rb.html +2 -2
  286. data/doc/lib/TaskScenario_rb.html +2 -2
  287. data/doc/lib/Task_rb.html +2 -2
  288. data/doc/lib/TextFormatter_rb.html +1 -1
  289. data/doc/lib/TextParser/Pattern_rb.html +1 -1
  290. data/doc/lib/TextParser/Rule_rb.html +2 -2
  291. data/doc/lib/TextParser/StackElement_rb.html +2 -2
  292. data/doc/lib/TextParser/TokenDoc_rb.html +1 -1
  293. data/doc/lib/TextParser_rb.html +2 -2
  294. data/doc/lib/TextScanner_rb.html +6 -2
  295. data/doc/lib/TimeSheetReceiver_rb.html +2 -2
  296. data/doc/lib/TimeSheetSender_rb.html +2 -2
  297. data/doc/lib/TimeSheetSummary_rb.html +2 -2
  298. data/doc/lib/TimeSheets_rb.html +2 -2
  299. data/doc/lib/Tj3AppBase_rb.html +2 -2
  300. data/doc/lib/Tj3Config_rb.html +2 -2
  301. data/doc/lib/Tj3SheetAppBase_rb.html +2 -2
  302. data/doc/lib/TjException_rb.html +1 -1
  303. data/doc/lib/TjTime_rb.html +2 -2
  304. data/doc/lib/TjpExample_rb.html +1 -1
  305. data/doc/lib/TjpSyntaxRules_rb.html +2 -2
  306. data/doc/lib/URLParameter_rb.html +67 -0
  307. data/doc/lib/UTF8String_rb.html +1 -1
  308. data/doc/lib/UserManual_rb.html +1 -1
  309. data/doc/lib/WorkingHours_rb.html +1 -1
  310. data/doc/lib/XMLDocument_rb.html +2 -2
  311. data/doc/lib/XMLElement_rb.html +1 -1
  312. data/doc/lib/daemon/Daemon_rb.html +1 -1
  313. data/doc/lib/daemon/ProcessIntercom_rb.html +2 -2
  314. data/doc/lib/daemon/ProjectBroker_rb.html +4 -2
  315. data/doc/lib/daemon/ProjectServer_rb.html +2 -2
  316. data/doc/lib/daemon/ReportServer_rb.html +2 -2
  317. data/doc/lib/daemon/WebServer_rb.html +75 -0
  318. data/doc/lib/deep_copy_rb.html +2 -2
  319. data/doc/lib/reports/CSVFile_rb.html +2 -2
  320. data/doc/lib/reports/ColumnTable_rb.html +1 -1
  321. data/doc/lib/reports/GanttChart_rb.html +2 -2
  322. data/doc/lib/reports/GanttContainer_rb.html +1 -1
  323. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  324. data/doc/lib/reports/GanttHeader_rb.html +1 -1
  325. data/doc/lib/reports/GanttLine_rb.html +1 -1
  326. data/doc/lib/reports/GanttLoadStack_rb.html +1 -1
  327. data/doc/lib/reports/GanttMilestone_rb.html +1 -1
  328. data/doc/lib/reports/GanttRouter_rb.html +1 -1
  329. data/doc/lib/reports/GanttTaskBar_rb.html +1 -1
  330. data/doc/lib/reports/HTMLGraphics_rb.html +1 -1
  331. data/doc/lib/reports/Navigator_rb.html +2 -2
  332. data/doc/lib/reports/NikuReport_rb.html +2 -2
  333. data/doc/lib/reports/ReportBase_rb.html +2 -2
  334. data/doc/lib/reports/ReportContext_rb.html +2 -2
  335. data/doc/lib/reports/ReportTableCell_rb.html +2 -2
  336. data/doc/lib/reports/ReportTableColumn_rb.html +1 -1
  337. data/doc/lib/reports/ReportTableLegend_rb.html +1 -1
  338. data/doc/lib/reports/ReportTableLine_rb.html +1 -1
  339. data/doc/lib/reports/ReportTable_rb.html +2 -2
  340. data/doc/lib/reports/Report_rb.html +2 -2
  341. data/doc/lib/reports/ResourceListRE_rb.html +2 -2
  342. data/doc/lib/reports/StatusSheetReport_rb.html +2 -2
  343. data/doc/lib/reports/TableReport_rb.html +2 -2
  344. data/doc/lib/reports/TaskListRE_rb.html +2 -2
  345. data/doc/lib/reports/TextReport_rb.html +1 -1
  346. data/doc/lib/reports/TimeSheetReport_rb.html +2 -2
  347. data/doc/lib/reports/TjpExportRE_rb.html +2 -2
  348. data/doc/lib/ruby-signal-bug_rb.html +1 -1
  349. data/doc/lib/taskjuggler3_rb.html +2 -2
  350. data/doc/lib/tj3client_rb.html +2 -2
  351. data/doc/lib/tj3d_rb.html +2 -2
  352. data/doc/lib/tj3man_rb.html +1 -1
  353. data/doc/lib/tj3ss_receiver_rb.html +1 -1
  354. data/doc/lib/tj3ss_sender_rb.html +2 -2
  355. data/doc/lib/tj3ts_receiver_rb.html +2 -2
  356. data/doc/lib/tj3ts_sender_rb.html +1 -1
  357. data/doc/lib/tj3ts_summary_rb.html +1 -1
  358. data/doc/rdoc.css +9 -4
  359. data/examples/tutorial.tjp +17 -15
  360. data/gem_spec.rb +3 -0
  361. data/lib/AppConfig.rb +3 -1
  362. data/lib/Attributes.rb +10 -8
  363. data/lib/Journal.rb +55 -20
  364. data/lib/Limits.rb +72 -46
  365. data/lib/LogFile.rb +3 -3
  366. data/lib/LogicalFunction.rb +19 -6
  367. data/lib/LogicalOperation.rb +5 -1
  368. data/lib/Project.rb +37 -9
  369. data/lib/ProjectFileParser.rb +25 -22
  370. data/lib/ProjectFileScanner.rb +365 -0
  371. data/lib/PropertyList.rb +2 -1
  372. data/lib/PropertySet.rb +14 -4
  373. data/lib/PropertyTreeNode.rb +42 -29
  374. data/lib/Query.rb +3 -1
  375. data/lib/RTFHandlers.rb +35 -0
  376. data/lib/RTFReport.rb +23 -6
  377. data/lib/RTFReportLink.rb +72 -0
  378. data/lib/Resource.rb +8 -16
  379. data/lib/ResourceScenario.rb +1 -22
  380. data/lib/RichTextElement.rb +42 -0
  381. data/lib/RichTextParser.rb +6 -4
  382. data/lib/RichTextScanner.rb +5 -5
  383. data/lib/RichTextSyntaxRules.rb +48 -10
  384. data/lib/ScenarioData.rb +5 -3
  385. data/lib/SheetReceiver.rb +24 -6
  386. data/lib/SheetSender.rb +17 -13
  387. data/lib/ShiftAssignments.rb +56 -52
  388. data/lib/StatusSheetReceiver.rb +1 -0
  389. data/lib/StatusSheetSender.rb +1 -0
  390. data/lib/TableColumnDefinition.rb +4 -2
  391. data/lib/Task.rb +8 -9
  392. data/lib/TaskJuggler.rb +21 -11
  393. data/lib/TaskScenario.rb +61 -26
  394. data/lib/TextParser.rb +268 -106
  395. data/lib/TextParser/Rule.rb +4 -2
  396. data/lib/TextParser/StackElement.rb +6 -4
  397. data/lib/TextScanner.rb +283 -700
  398. data/lib/TimeSheetReceiver.rb +1 -0
  399. data/lib/TimeSheetSender.rb +1 -0
  400. data/lib/TimeSheetSummary.rb +51 -26
  401. data/lib/TimeSheets.rb +1 -1
  402. data/lib/Tj3AppBase.rb +8 -1
  403. data/lib/Tj3Config.rb +1 -1
  404. data/lib/TjTime.rb +5 -0
  405. data/lib/TjpSyntaxRules.rb +360 -144
  406. data/lib/URLParameter.rb +30 -0
  407. data/lib/XMLDocument.rb +2 -2
  408. data/lib/daemon/ProcessIntercom.rb +50 -9
  409. data/lib/daemon/ProjectBroker.rb +63 -10
  410. data/lib/daemon/ProjectServer.rb +47 -16
  411. data/lib/daemon/ReportServer.rb +9 -4
  412. data/lib/daemon/WebServer.rb +204 -0
  413. data/lib/deep_copy.rb +4 -1
  414. data/lib/reports/CSVFile.rb +150 -66
  415. data/lib/reports/GanttChart.rb +2 -1
  416. data/lib/reports/Navigator.rb +18 -5
  417. data/lib/reports/NikuReport.rb +32 -2
  418. data/lib/reports/Report.rb +65 -37
  419. data/lib/reports/ReportBase.rb +14 -9
  420. data/lib/reports/ReportContext.rb +19 -4
  421. data/lib/reports/ReportTable.rb +2 -2
  422. data/lib/reports/ReportTableCell.rb +54 -30
  423. data/lib/reports/ResourceListRE.rb +4 -3
  424. data/lib/reports/StatusSheetReport.rb +8 -13
  425. data/lib/reports/TableReport.rb +47 -32
  426. data/lib/reports/TaskListRE.rb +3 -3
  427. data/lib/reports/TimeSheetReport.rb +14 -5
  428. data/lib/reports/TjpExportRE.rb +14 -19
  429. data/lib/taskjuggler3.rb +15 -0
  430. data/lib/tj3client.rb +9 -7
  431. data/lib/tj3d.rb +38 -10
  432. data/lib/tj3ss_sender.rb +7 -0
  433. data/lib/tj3ts_receiver.rb +1 -0
  434. data/manual/Day_To_Day_Juggling +1 -1
  435. data/manual/Rich_Text_Attributes +8 -0
  436. data/manual/TaskJuggler_2x_Migration +7 -0
  437. data/manual/The_TaskJuggler_Syntax +20 -6
  438. data/prj_cfg.rb +3 -2
  439. data/tasks/changelog.rake +36 -0
  440. data/tasks/csts.rake +2 -3
  441. data/tasks/gem.rake +10 -0
  442. data/tasks/missing.rake +0 -17
  443. data/test/TestSuite/ReportGenerator/Correct/Journal.html +63 -0
  444. data/test/TestSuite/ReportGenerator/Correct/Journal.tjp +14 -0
  445. data/test/TestSuite/{HTML-Reports/LogicalFunctions.tjp → ReportGenerator/Correct/LogicalFunctions1.tjp} +2 -2
  446. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.csv +3 -0
  447. data/test/TestSuite/ReportGenerator/Correct/LogicalFunctions2.tjp +19 -0
  448. data/test/TestSuite/ReportGenerator/Correct/css/tjmanual.css +66 -0
  449. data/test/TestSuite/ReportGenerator/Correct/css/tjreport.css +407 -0
  450. data/test/TestSuite/ReportGenerator/Correct/icons/details.png +0 -0
  451. data/test/TestSuite/ReportGenerator/Correct/icons/flag-green.png +0 -0
  452. data/test/TestSuite/ReportGenerator/Correct/icons/flag-red.png +0 -0
  453. data/test/TestSuite/ReportGenerator/Correct/icons/flag-yellow.png +0 -0
  454. data/test/TestSuite/ReportGenerator/Correct/icons/resource.png +0 -0
  455. data/test/TestSuite/ReportGenerator/Correct/icons/resourcegroup.png +0 -0
  456. data/test/TestSuite/ReportGenerator/Correct/icons/task.png +0 -0
  457. data/test/TestSuite/ReportGenerator/Correct/icons/taskgroup.png +0 -0
  458. data/test/TestSuite/ReportGenerator/Correct/icons/trend-down.png +0 -0
  459. data/test/TestSuite/ReportGenerator/Correct/icons/trend-flat.png +0 -0
  460. data/test/TestSuite/ReportGenerator/Correct/icons/trend-up.png +0 -0
  461. data/test/TestSuite/ReportGenerator/Correct/opennodes.csv +2 -0
  462. data/test/TestSuite/ReportGenerator/Correct/opennodes.tjp +26 -0
  463. data/test/TestSuite/ReportGenerator/Correct/refs/Journal-1.csv +6 -0
  464. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions1-1.csv +7 -0
  465. data/test/TestSuite/ReportGenerator/Correct/refs/LogicalFunctions2-1.csv +2 -0
  466. data/test/TestSuite/ReportGenerator/Correct/refs/opennodes-1.csv +2 -0
  467. data/test/TestSuite/ReportGenerator/Correct/scripts/wz_tooltip.js +1301 -0
  468. data/test/TestSuite/ReportGenerator/Errors/rtp_report_recursion.tjp +20 -0
  469. data/test/TestSuite/Scheduler/Correct/Container.html +349 -0
  470. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -4
  471. data/test/TestSuite/Scheduler/Correct/Shift2.html +464 -150
  472. data/test/TestSuite/Scheduler/Correct/TimeSheet2.html +108 -0
  473. data/test/TestSuite/Scheduler/Correct/TimeSheet2.tjp +7 -0
  474. data/test/TestSuite/Scheduler/Correct/css/tjmanual.css +14 -0
  475. data/test/TestSuite/Scheduler/Correct/css/tjreport.css +233 -21
  476. data/test/TestSuite/Scheduler/Correct/scripts/wz_tooltip.js +20 -20
  477. data/test/TestSuite/StatusSheetTemplates/project.tji +35 -0
  478. data/test/TestSuite/StatusSheetTemplates/project.tjp +56 -0
  479. data/test/TestSuite/StatusSheets/run +3 -2
  480. data/test/TestSuite/Syntax/Correct/Include.tjp +1 -1
  481. data/test/TestSuite/Syntax/Correct/Macro-1.tjp +1 -1
  482. data/test/TestSuite/Syntax/Correct/Macro-2.tjp +6 -0
  483. data/test/TestSuite/Syntax/Correct/Macro-3.tjp +14 -0
  484. data/test/TestSuite/Syntax/Correct/ResourcePrefix.html +32 -0
  485. data/test/TestSuite/Syntax/Correct/css/tjmanual.css +66 -0
  486. data/test/TestSuite/Syntax/Correct/css/tjreport.css +407 -0
  487. data/test/TestSuite/Syntax/Correct/icons/details.png +0 -0
  488. data/test/TestSuite/Syntax/Correct/icons/flag-green.png +0 -0
  489. data/test/TestSuite/Syntax/Correct/icons/flag-red.png +0 -0
  490. data/test/TestSuite/Syntax/Correct/icons/flag-yellow.png +0 -0
  491. data/test/TestSuite/Syntax/Correct/icons/resource.png +0 -0
  492. data/test/TestSuite/Syntax/Correct/icons/resourcegroup.png +0 -0
  493. data/test/TestSuite/Syntax/Correct/icons/task.png +0 -0
  494. data/test/TestSuite/Syntax/Correct/icons/taskgroup.png +0 -0
  495. data/test/TestSuite/Syntax/Correct/icons/trend-down.png +0 -0
  496. data/test/TestSuite/Syntax/Correct/icons/trend-flat.png +0 -0
  497. data/test/TestSuite/Syntax/Correct/icons/trend-up.png +0 -0
  498. data/test/TestSuite/Syntax/Correct/include/dir1/file2.tji +3 -0
  499. data/test/TestSuite/Syntax/Correct/include/dir1/file5.tji +2 -0
  500. data/test/TestSuite/Syntax/Correct/include/dir3/all.tji +3 -0
  501. data/test/TestSuite/Syntax/Correct/include/dir3/file1.tji +2 -0
  502. data/test/TestSuite/Syntax/Correct/include/dir3/file2.tji +1 -0
  503. data/test/TestSuite/Syntax/Correct/scripts/wz_tooltip.js +1301 -0
  504. data/test/TestSuite/Syntax/Correct/tutorial.tjp +13 -13
  505. data/test/TestSuite/Syntax/Errors/empty.tjp +1 -1
  506. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +1 -0
  507. data/test/TestSuite/Syntax/Errors/macro_stack_overflow.tjp +2 -1
  508. data/test/TestSuite/Syntax/Errors/{eof_in_istring1.tjp → no_token_match1.tjp} +2 -2
  509. data/test/TestSuite/Syntax/Errors/{eof_in_istring2.tjp → no_token_match2.tjp} +2 -2
  510. data/test/TestSuite/Syntax/Errors/{eof_in_istring3.tjp → no_token_match3.tjp} +1 -1
  511. data/test/TestSuite/Syntax/Errors/{eof_in_istring4.tjp → no_token_match4.tjp} +1 -1
  512. data/test/TestSuite/Syntax/Errors/{eof_in_istring5.tjp → no_token_match5.tjp} +1 -1
  513. data/test/TestSuite/Syntax/Errors/not_scheduled.tjp +13 -0
  514. data/test/TestSuite/Syntax/Errors/unsupported_token.tjp +1 -1
  515. data/test/TestSuite/TimeSheets/run +5 -5
  516. data/test/test_CSVFile.rb +75 -0
  517. data/test/test_Limits.rb +63 -5
  518. data/test/test_ProjectFileScanner.rb +163 -0
  519. data/test/test_ReportGenerator.rb +81 -0
  520. data/test/test_RichText.rb +21 -3
  521. data/test/test_Scheduler.rb +1 -1
  522. data/test/test_ShiftAssignments.rb +4 -4
  523. data/test/test_Syntax.rb +1 -1
  524. data/test/test_URLParameter.rb +30 -0
  525. metadata +126 -32
  526. data/test/TestSuite/Scheduler/Errors/not_scheduled.tjp +0 -8
  527. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +0 -7
  528. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/boss_2002-03-01.tji +0 -36
  529. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev1_2002-03-01.tji +0 -48
  530. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev2_2002-03-01.tji +0 -67
  531. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/dev3_2002-03-01.tji +0 -67
  532. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/doc_2002-03-01.tji +0 -48
  533. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/resources.yml +0 -31
  534. data/test/TestSuite/TimeSheets/TimeSheetTemplates/2002-03-01/test_2002-03-01.tji +0 -36
  535. data/test/TestSuite/TimeSheets/TimeSheetTemplates/acceptable_intervals +0 -1
  536. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/all.tji +0 -1
  537. data/test/TestSuite/TimeSheets/TimeSheets/2002-03-01/dev2_2002-03-01.tji +0 -54
  538. data/test/TestSuite/TimeSheets/TimeSheets/all.tji +0 -2
  539. data/test/TestSuite/TimeSheets/receiver.log +0 -102
  540. data/test/TestSuite/TimeSheets/sender.log +0 -794
  541. data/test/TestSuite/TimeSheets/summary.log +0 -884
  542. data/test/TestSuite/TimeSheets/timesheets.log +0 -45
  543. data/test/TestSuite/TimeSheets/tj3d.log +0 -292
  544. data/test/test_TextScanner.rb +0 -95
@@ -69,9 +69,9 @@
69
69
  <h3 class="section-header">Methods</h3>
70
70
  <ul class="link-list">
71
71
 
72
- <li><a href="#M000837">::new</a></li>
72
+ <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#M000838">#generateIntermediateFormat</a></li>
74
+ <li><a href="#method-i-generateIntermediateFormat">#generateIntermediateFormat</a></li>
75
75
 
76
76
  </ul>
77
77
  </div>
@@ -88,6 +88,8 @@
88
88
  <h3 class="section-header">Files</h3>
89
89
  <ul>
90
90
 
91
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
92
+
91
93
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
92
94
 
93
95
  <li class="file"><a href="../README.html">README</a></li>
@@ -257,6 +259,8 @@
257
259
 
258
260
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
259
261
 
262
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
263
+
260
264
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
261
265
 
262
266
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -271,6 +275,8 @@
271
275
 
272
276
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
273
277
 
278
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
279
+
274
280
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
275
281
 
276
282
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -287,12 +293,16 @@
287
293
 
288
294
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
289
295
 
296
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
297
+
290
298
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
291
299
 
292
300
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
293
301
 
294
302
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
295
303
 
304
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
305
+
296
306
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
297
307
 
298
308
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -311,6 +321,8 @@
311
321
 
312
322
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
313
323
 
324
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
325
+
314
326
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
315
327
 
316
328
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -439,6 +451,8 @@
439
451
 
440
452
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
441
453
 
454
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
455
+
442
456
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
443
457
 
444
458
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -483,8 +497,12 @@
483
497
 
484
498
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
485
499
 
500
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
501
+
486
502
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
487
503
 
504
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
505
+
488
506
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
489
507
 
490
508
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -511,6 +529,8 @@
511
529
 
512
530
  <li><a href="../String.html">String</a></li>
513
531
 
532
+ <li><a href="../StringIO.html">StringIO</a></li>
533
+
514
534
  </ul>
515
535
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
516
536
  </div>
@@ -544,7 +564,7 @@ have the allocated resources nested underneath each task line.
544
564
 
545
565
 
546
566
  <div id="new-method" class="method-detail ">
547
- <a name="M000837"></a>
567
+ <a name="method-c-new"></a>
548
568
 
549
569
  <div class="method-heading">
550
570
 
@@ -587,7 +607,7 @@ Create a new object and set some default values.
587
607
 
588
608
 
589
609
  <div id="generate-ntermediate-ormat-method" class="method-detail ">
590
- <a name="M000838"></a>
610
+ <a name="method-i-generateIntermediateFormat"></a>
591
611
 
592
612
  <div class="method-heading">
593
613
 
@@ -618,15 +638,15 @@ Generate the table in the intermediate format.
618
638
  38: <span class="ruby-identifier">taskList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">tasks</span>)
619
639
  39: <span class="ruby-identifier">taskList</span>.<span class="ruby-identifier">setSorting</span>(<span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'sortTasks'</span>))
620
640
  40: <span class="ruby-identifier">taskList</span> = <span class="ruby-identifier">filterTaskList</span>(<span class="ruby-identifier">taskList</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'hideTask'</span>),
621
- 41: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'rollupTask'</span>))
622
- 42: <span class="ruby-identifier">taskList</span>.<span class="ruby-identifier">query</span> = <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reportContext</span>.<span class="ruby-identifier">query</span>
641
+ 41: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'rollupTask'</span>), <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'openNodes'</span>))
642
+ 42: <span class="ruby-identifier">taskList</span>.<span class="ruby-identifier">query</span> = <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">query</span>
623
643
  43: <span class="ruby-identifier">taskList</span>.<span class="ruby-identifier">sort!</span>
624
644
  44:
625
645
  45: <span class="ruby-comment cmt"># Prepare the resource list. Don't filter it yet! It would break the</span>
626
646
  46: <span class="ruby-comment cmt"># *_() LogicalFunctions.</span>
627
647
  47: <span class="ruby-identifier">resourceList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">resources</span>)
628
648
  48: <span class="ruby-identifier">resourceList</span>.<span class="ruby-identifier">setSorting</span>(<span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'sortResources'</span>))
629
- 49: <span class="ruby-identifier">resourceList</span>.<span class="ruby-identifier">query</span> = <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reportContext</span>.<span class="ruby-identifier">query</span>
649
+ 49: <span class="ruby-identifier">resourceList</span>.<span class="ruby-identifier">query</span> = <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">reportContexts</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">query</span>
630
650
  50: <span class="ruby-identifier">resourceList</span>.<span class="ruby-identifier">sort!</span>
631
651
  51:
632
652
  52: <span class="ruby-identifier">adjustReportPeriod</span>(<span class="ruby-identifier">taskList</span>, <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'scenarios'</span>),
@@ -69,117 +69,121 @@
69
69
  <h3 class="section-header">Methods</h3>
70
70
  <ul class="link-list">
71
71
 
72
- <li><a href="#M001346">::new</a></li>
72
+ <li><a href="#method-c-new">::new</a></li>
73
73
 
74
- <li><a href="#M001348">#Xref</a></li>
74
+ <li><a href="#method-i-Xref">#Xref</a></li>
75
75
 
76
- <li><a href="#M001368">#addBooking</a></li>
76
+ <li><a href="#method-i-addBooking">#addBooking</a></li>
77
77
 
78
- <li><a href="#M001389">#bookBookings</a></li>
78
+ <li><a href="#method-i-bookBookings">#bookBookings</a></li>
79
79
 
80
- <li><a href="#M001388">#bookResource</a></li>
80
+ <li><a href="#method-i-bookResource">#bookResource</a></li>
81
81
 
82
- <li><a href="#M001387">#bookResources</a></li>
82
+ <li><a href="#method-i-bookResources">#bookResources</a></li>
83
83
 
84
- <li><a href="#M001398">#calcCompletion</a></li>
84
+ <li><a href="#method-i-calcCompletion">#calcCompletion</a></li>
85
85
 
86
- <li><a href="#M001358">#calcCriticalness</a></li>
86
+ <li><a href="#method-i-calcCriticalness">#calcCriticalness</a></li>
87
87
 
88
- <li><a href="#M001359">#calcPathCriticalness</a></li>
88
+ <li><a href="#method-i-calcPathCriticalness">#calcPathCriticalness</a></li>
89
89
 
90
- <li><a href="#M001397">#calcPathCriticalnessEndSuccs</a></li>
90
+ <li><a href="#method-i-calcPathCriticalnessEndSuccs">#calcPathCriticalnessEndSuccs</a></li>
91
91
 
92
- <li><a href="#M001399">#calcStatus</a></li>
92
+ <li><a href="#method-i-calcStatus">#calcStatus</a></li>
93
93
 
94
- <li><a href="#M001363">#canInheritDate?</a></li>
94
+ <li><a href="#method-i-canInheritDate%3F">#canInheritDate?</a></li>
95
95
 
96
- <li><a href="#M001356">#candidates</a></li>
96
+ <li><a href="#method-i-candidates">#candidates</a></li>
97
97
 
98
- <li><a href="#M001394">#checkDependency</a></li>
98
+ <li><a href="#method-i-checkDependency">#checkDependency</a></li>
99
99
 
100
- <li><a href="#M001355">#checkForLoops</a></li>
100
+ <li><a href="#method-i-checkForLoops">#checkForLoops</a></li>
101
101
 
102
- <li><a href="#M001382">#collectTimeOffIntervals</a></li>
102
+ <li><a href="#method-i-collectTimeOffIntervals">#collectTimeOffIntervals</a></li>
103
103
 
104
- <li><a href="#M001357">#countResourceAllocations</a></li>
104
+ <li><a href="#method-i-countResourceAllocations">#countResourceAllocations</a></li>
105
105
 
106
- <li><a href="#M001366">#earliestStart</a></li>
106
+ <li><a href="#method-i-earliestStart">#earliestStart</a></li>
107
107
 
108
- <li><a href="#M001352">#finishScheduling</a></li>
108
+ <li><a href="#method-i-finishScheduling">#finishScheduling</a></li>
109
109
 
110
- <li><a href="#M001380">#getAllocatedTime</a></li>
110
+ <li><a href="#method-i-getAllocatedTime">#getAllocatedTime</a></li>
111
111
 
112
- <li><a href="#M001381">#getEffectiveWork</a></li>
112
+ <li><a href="#method-i-getEffectiveWork">#getEffectiveWork</a></li>
113
113
 
114
- <li><a href="#M001390">#hasDependencies</a></li>
114
+ <li><a href="#method-i-hasDependencies">#hasDependencies</a></li>
115
115
 
116
- <li><a href="#M001349">#hasDependency?</a></li>
116
+ <li><a href="#method-i-hasDependency%3F">#hasDependency?</a></li>
117
117
 
118
- <li><a href="#M001365">#hasDurationSpec?</a></li>
118
+ <li><a href="#method-i-hasDurationSpec%3F">#hasDurationSpec?</a></li>
119
119
 
120
- <li><a href="#M001384">#hasResourceAllocated?</a></li>
120
+ <li><a href="#method-i-hasResourceAllocated%3F">#hasResourceAllocated?</a></li>
121
121
 
122
- <li><a href="#M001391">#hasSuccessors</a></li>
122
+ <li><a href="#method-i-hasSuccessors">#hasSuccessors</a></li>
123
123
 
124
- <li><a href="#M001383">#isDependencyOf</a></li>
124
+ <li><a href="#method-i-isDependencyOf">#isDependencyOf</a></li>
125
125
 
126
- <li><a href="#M001367">#latestEnd</a></li>
126
+ <li><a href="#method-i-isFeatureOf">#isFeatureOf</a></li>
127
127
 
128
- <li><a href="#M001392">#markAsRunaway</a></li>
128
+ <li><a href="#method-i-latestEnd">#latestEnd</a></li>
129
129
 
130
- <li><a href="#M001393">#markMilestone</a></li>
130
+ <li><a href="#method-i-limitsOk%3F">#limitsOk?</a></li>
131
131
 
132
- <li><a href="#M001386">#nextSlot</a></li>
132
+ <li><a href="#method-i-markAsRunaway">#markAsRunaway</a></li>
133
133
 
134
- <li><a href="#M001353">#postScheduleCheck</a></li>
134
+ <li><a href="#method-i-markMilestone">#markMilestone</a></li>
135
135
 
136
- <li><a href="#M001351">#preScheduleCheck</a></li>
136
+ <li><a href="#method-i-nextSlot">#nextSlot</a></li>
137
137
 
138
- <li><a href="#M001347">#prepareScheduling</a></li>
138
+ <li><a href="#method-i-postScheduleCheck">#postScheduleCheck</a></li>
139
139
 
140
- <li><a href="#M001362">#propagateDate</a></li>
140
+ <li><a href="#method-i-preScheduleCheck">#preScheduleCheck</a></li>
141
141
 
142
- <li><a href="#M001396">#propagateDateToDep</a></li>
142
+ <li><a href="#method-i-prepareScheduling">#prepareScheduling</a></li>
143
143
 
144
- <li><a href="#M001350">#propagateInitialValues</a></li>
144
+ <li><a href="#method-i-propagateDate">#propagateDate</a></li>
145
145
 
146
- <li><a href="#M001369">#query_complete</a></li>
146
+ <li><a href="#method-i-propagateDateToDep">#propagateDateToDep</a></li>
147
147
 
148
- <li><a href="#M001370">#query_cost</a></li>
148
+ <li><a href="#method-i-propagateInitialValues">#propagateInitialValues</a></li>
149
149
 
150
- <li><a href="#M001371">#query_duration</a></li>
150
+ <li><a href="#method-i-query_complete">#query_complete</a></li>
151
151
 
152
- <li><a href="#M001374">#query_effort</a></li>
152
+ <li><a href="#method-i-query_cost">#query_cost</a></li>
153
153
 
154
- <li><a href="#M001372">#query_effortdone</a></li>
154
+ <li><a href="#method-i-query_duration">#query_duration</a></li>
155
155
 
156
- <li><a href="#M001373">#query_effortleft</a></li>
156
+ <li><a href="#method-i-query_effort">#query_effort</a></li>
157
157
 
158
- <li><a href="#M001375">#query_followers</a></li>
158
+ <li><a href="#method-i-query_effortdone">#query_effortdone</a></li>
159
159
 
160
- <li><a href="#M001376">#query_precursors</a></li>
160
+ <li><a href="#method-i-query_effortleft">#query_effortleft</a></li>
161
161
 
162
- <li><a href="#M001377">#query_resources</a></li>
162
+ <li><a href="#method-i-query_followers">#query_followers</a></li>
163
163
 
164
- <li><a href="#M001378">#query_revenue</a></li>
164
+ <li><a href="#method-i-query_precursors">#query_precursors</a></li>
165
165
 
166
- <li><a href="#M001379">#query_targets</a></li>
166
+ <li><a href="#method-i-query_resources">#query_resources</a></li>
167
167
 
168
- <li><a href="#M001360">#readyForScheduling?</a></li>
168
+ <li><a href="#method-i-query_revenue">#query_revenue</a></li>
169
169
 
170
- <li><a href="#M001354">#resetLoopFlags</a></li>
170
+ <li><a href="#method-i-query_targets">#query_targets</a></li>
171
171
 
172
- <li><a href="#M001361">#schedule</a></li>
172
+ <li><a href="#method-i-readyForScheduling%3F">#readyForScheduling?</a></li>
173
173
 
174
- <li><a href="#M001364">#scheduleContainer</a></li>
174
+ <li><a href="#method-i-resetLoopFlags">#resetLoopFlags</a></li>
175
175
 
176
- <li><a href="#M001385">#scheduleSlot</a></li>
176
+ <li><a href="#method-i-schedule">#schedule</a></li>
177
177
 
178
- <li><a href="#M001395">#setDetermination</a></li>
178
+ <li><a href="#method-i-scheduleContainer">#scheduleContainer</a></li>
179
179
 
180
- <li><a href="#M001400">#targets</a></li>
180
+ <li><a href="#method-i-scheduleSlot">#scheduleSlot</a></li>
181
181
 
182
- <li><a href="#M001401">#turnover</a></li>
182
+ <li><a href="#method-i-setDetermination">#setDetermination</a></li>
183
+
184
+ <li><a href="#method-i-targets">#targets</a></li>
185
+
186
+ <li><a href="#method-i-turnover">#turnover</a></li>
183
187
 
184
188
  </ul>
185
189
  </div>
@@ -196,6 +200,8 @@
196
200
  <h3 class="section-header">Files</h3>
197
201
  <ul>
198
202
 
203
+ <li class="file"><a href="../CHANGELOG.html">CHANGELOG</a></li>
204
+
199
205
  <li class="file"><a href="../COPYING.html">COPYING</a></li>
200
206
 
201
207
  <li class="file"><a href="../README.html">README</a></li>
@@ -365,6 +371,8 @@
365
371
 
366
372
  <li><a href="../TaskJuggler/NikuResource.html">TaskJuggler::NikuResource</a></li>
367
373
 
374
+ <li><a href="../TaskJuggler/NodeListAttribute.html">TaskJuggler::NodeListAttribute</a></li>
375
+
368
376
  <li><a href="../TaskJuggler/OnShiftCache.html">TaskJuggler::OnShiftCache</a></li>
369
377
 
370
378
  <li><a href="../TaskJuggler/ProcessIntercom.html">TaskJuggler::ProcessIntercom</a></li>
@@ -379,6 +387,8 @@
379
387
 
380
388
  <li><a href="../TaskJuggler/ProjectFileParser.html">TaskJuggler::ProjectFileParser</a></li>
381
389
 
390
+ <li><a href="../TaskJuggler/ProjectFileScanner.html">TaskJuggler::ProjectFileScanner</a></li>
391
+
382
392
  <li><a href="../TaskJuggler/ProjectRecord.html">TaskJuggler::ProjectRecord</a></li>
383
393
 
384
394
  <li><a href="../TaskJuggler/ProjectServer.html">TaskJuggler::ProjectServer</a></li>
@@ -395,12 +405,16 @@
395
405
 
396
406
  <li><a href="../TaskJuggler/Query.html">TaskJuggler::Query</a></li>
397
407
 
408
+ <li><a href="../TaskJuggler/RTFHandlers.html">TaskJuggler::RTFHandlers</a></li>
409
+
398
410
  <li><a href="../TaskJuggler/RTFNavigator.html">TaskJuggler::RTFNavigator</a></li>
399
411
 
400
412
  <li><a href="../TaskJuggler/RTFQuery.html">TaskJuggler::RTFQuery</a></li>
401
413
 
402
414
  <li><a href="../TaskJuggler/RTFReport.html">TaskJuggler::RTFReport</a></li>
403
415
 
416
+ <li><a href="../TaskJuggler/RTFReportLink.html">TaskJuggler::RTFReportLink</a></li>
417
+
404
418
  <li><a href="../TaskJuggler/RealFormat.html">TaskJuggler::RealFormat</a></li>
405
419
 
406
420
  <li><a href="../TaskJuggler/RealFormatAttribute.html">TaskJuggler::RealFormatAttribute</a></li>
@@ -419,6 +433,8 @@
419
433
 
420
434
  <li><a href="../TaskJuggler/ReportServerRecord.html">TaskJuggler::ReportServerRecord</a></li>
421
435
 
436
+ <li><a href="../TaskJuggler/ReportServlet.html">TaskJuggler::ReportServlet</a></li>
437
+
422
438
  <li><a href="../TaskJuggler/ReportTable.html">TaskJuggler::ReportTable</a></li>
423
439
 
424
440
  <li><a href="../TaskJuggler/ReportTableCell.html">TaskJuggler::ReportTableCell</a></li>
@@ -547,6 +563,8 @@
547
563
 
548
564
  <li><a href="../TaskJuggler/TextScanner/FileStreamHandle.html">TaskJuggler::TextScanner::FileStreamHandle</a></li>
549
565
 
566
+ <li><a href="../TaskJuggler/TextScanner/MacroStackEntry.html">TaskJuggler::TextScanner::MacroStackEntry</a></li>
567
+
550
568
  <li><a href="../TaskJuggler/TextScanner/StreamHandle.html">TaskJuggler::TextScanner::StreamHandle</a></li>
551
569
 
552
570
  <li><a href="../TaskJuggler/TimeSheet.html">TaskJuggler::TimeSheet</a></li>
@@ -591,8 +609,12 @@
591
609
 
592
610
  <li><a href="../TaskJuggler/TjpSyntaxRules.html">TaskJuggler::TjpSyntaxRules</a></li>
593
611
 
612
+ <li><a href="../TaskJuggler/URLParameter.html">TaskJuggler::URLParameter</a></li>
613
+
594
614
  <li><a href="../TaskJuggler/UserManual.html">TaskJuggler::UserManual</a></li>
595
615
 
616
+ <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
617
+
596
618
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
597
619
 
598
620
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -619,6 +641,8 @@
619
641
 
620
642
  <li><a href="../String.html">String</a></li>
621
643
 
644
+ <li><a href="../StringIO.html">StringIO</a></li>
645
+
622
646
  </ul>
623
647
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
624
648
  </div>
@@ -668,7 +692,7 @@
668
692
 
669
693
 
670
694
  <div id="new-method" class="method-detail ">
671
- <a name="M001346"></a>
695
+ <a name="method-c-new"></a>
672
696
 
673
697
  <div class="method-heading">
674
698
 
@@ -713,7 +737,7 @@ Create a new <a href="TaskScenario.html">TaskScenario</a> object.
713
737
 
714
738
 
715
739
  <div id="-ref-method" class="method-detail ">
716
- <a name="M001348"></a>
740
+ <a name="method-i-Xref"></a>
717
741
 
718
742
  <div class="method-heading">
719
743
 
@@ -769,7 +793,7 @@ the dependency originates from the end of the task or not.
769
793
 
770
794
 
771
795
  <div id="add-ooking-method" class="method-detail ">
772
- <a name="M001368"></a>
796
+ <a name="method-i-addBooking"></a>
773
797
 
774
798
  <div class="method-heading">
775
799
 
@@ -788,16 +812,16 @@ the dependency originates from the end of the task or not.
788
812
  <div class="method-source-code"
789
813
  id="add-ooking-source">
790
814
  <pre>
791
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1084</span>
792
- 1084: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addBooking</span>(<span class="ruby-identifier">booking</span>)
793
- 1085: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span>
794
- 1086: <span class="ruby-comment cmt"># For the first item use the assignment form so that the 'provided'</span>
795
- 1087: <span class="ruby-comment cmt"># attribute is set properly.</span>
796
- 1088: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'booking'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = [ <span class="ruby-identifier">booking</span> ]
797
- 1089: <span class="ruby-keyword kw">else</span>
798
- 1090: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'booking'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">booking</span>
799
- 1091: <span class="ruby-keyword kw">end</span>
800
- 1092: <span class="ruby-keyword kw">end</span></pre>
815
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1090</span>
816
+ 1090: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addBooking</span>(<span class="ruby-identifier">booking</span>)
817
+ 1091: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span>
818
+ 1092: <span class="ruby-comment cmt"># For the first item use the assignment form so that the 'provided'</span>
819
+ 1093: <span class="ruby-comment cmt"># attribute is set properly.</span>
820
+ 1094: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'booking'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = [ <span class="ruby-identifier">booking</span> ]
821
+ 1095: <span class="ruby-keyword kw">else</span>
822
+ 1096: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'booking'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">booking</span>
823
+ 1097: <span class="ruby-keyword kw">end</span>
824
+ 1098: <span class="ruby-keyword kw">end</span></pre>
801
825
  </div>
802
826
 
803
827
  </div>
@@ -809,7 +833,7 @@ the dependency originates from the end of the task or not.
809
833
 
810
834
 
811
835
  <div id="calc-riticalness-method" class="method-detail ">
812
- <a name="M001358"></a>
836
+ <a name="method-i-calcCriticalness"></a>
813
837
 
814
838
  <div class="method-heading">
815
839
 
@@ -873,7 +897,7 @@ on their priority.
873
897
 
874
898
 
875
899
  <div id="calc-ath-riticalness-method" class="method-detail ">
876
- <a name="M001359"></a>
900
+ <a name="method-i-calcPathCriticalness"></a>
877
901
 
878
902
  <div class="method-heading">
879
903
 
@@ -959,7 +983,7 @@ criticalnesses of the tasks.
959
983
 
960
984
 
961
985
  <div id="can-nherit-ate--method" class="method-detail ">
962
- <a name="M001363"></a>
986
+ <a name="method-i-canInheritDate%3F"></a>
963
987
 
964
988
  <div class="method-heading">
965
989
 
@@ -982,59 +1006,59 @@ check should be done for the task end (true) or task start (false).
982
1006
  <div class="method-source-code"
983
1007
  id="can-nherit-ate--source">
984
1008
  <pre>
985
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 872</span>
986
- 872: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">canInheritDate?</span>(<span class="ruby-identifier">atEnd</span>)
987
- 873: <span class="ruby-comment cmt"># Inheriting a start or end date from the enclosing task or the project</span>
988
- 874: <span class="ruby-comment cmt"># is allowed for the following scenarios:</span>
989
- 875: <span class="ruby-comment cmt"># - --&gt; - inherit start and end when no bookings but allocations</span>
990
- 876: <span class="ruby-comment cmt"># present</span>
991
- 877: <span class="ruby-comment cmt"># - &lt;-- - dito</span>
992
- 878: <span class="ruby-comment cmt">#</span>
993
- 879: <span class="ruby-comment cmt"># - x-&gt; - inhS</span>
994
- 880: <span class="ruby-comment cmt"># - x-&gt; | inhS</span>
995
- 881: <span class="ruby-comment cmt"># - x-&gt; -D inhS</span>
996
- 882: <span class="ruby-comment cmt"># - x-&gt; |D inhS</span>
997
- 883: <span class="ruby-comment cmt"># - --&gt; | inhS</span>
998
- 884: <span class="ruby-comment cmt"># - --&gt; -D inhS</span>
999
- 885: <span class="ruby-comment cmt"># - --&gt; |D inhS</span>
1000
- 886: <span class="ruby-comment cmt"># - &lt;-- | inhS</span>
1001
- 887: <span class="ruby-comment cmt"># | --&gt; - inhE</span>
1002
- 888: <span class="ruby-comment cmt"># | &lt;-x - inhE</span>
1003
- 889: <span class="ruby-comment cmt"># |D &lt;-x - inhE</span>
1004
- 890: <span class="ruby-comment cmt"># - &lt;-x - inhE</span>
1005
- 891: <span class="ruby-comment cmt"># -D &lt;-x - inhE</span>
1006
- 892: <span class="ruby-comment cmt"># | &lt;-- - inhE</span>
1007
- 893: <span class="ruby-comment cmt"># |D &lt;-- - inhE</span>
1008
- 894: <span class="ruby-comment cmt"># -D &lt;-- - inhE</span>
1009
- 895: <span class="ruby-comment cmt"># Return false if we already have a date or if we have a dependency for</span>
1010
- 896: <span class="ruby-comment cmt"># this end.</span>
1011
- 897: <span class="ruby-identifier">thisEnd</span> = <span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>
1012
- 898: <span class="ruby-identifier">hasThisDeps</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</span>).<span class="ruby-identifier">empty?</span>
1013
- 899: <span class="ruby-identifier">hasThisSpec</span> = <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">hasThisDeps</span>
1014
- 900: <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">hasThisSpec</span>
1015
- 901:
1016
- 902: <span class="ruby-comment cmt"># Containter task can inherit the date if they have no dependencies.</span>
1017
- 903: <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">@property</span>.<span class="ruby-identifier">container?</span>
1018
- 904:
1019
- 905: <span class="ruby-identifier">thatEnd</span> = <span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'start'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'end'</span>
1020
- 906: <span class="ruby-identifier">hasThatDeps</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</span>).<span class="ruby-identifier">empty?</span>
1021
- 907: <span class="ruby-identifier">hasThatSpec</span> = <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">hasThatDeps</span>
1009
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 876</span>
1010
+ 876: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">canInheritDate?</span>(<span class="ruby-identifier">atEnd</span>)
1011
+ 877: <span class="ruby-comment cmt"># Inheriting a start or end date from the enclosing task or the project</span>
1012
+ 878: <span class="ruby-comment cmt"># is allowed for the following scenarios:</span>
1013
+ 879: <span class="ruby-comment cmt"># - --&gt; - inherit start and end when no bookings but allocations</span>
1014
+ 880: <span class="ruby-comment cmt"># present</span>
1015
+ 881: <span class="ruby-comment cmt"># - &lt;-- - dito</span>
1016
+ 882: <span class="ruby-comment cmt">#</span>
1017
+ 883: <span class="ruby-comment cmt"># - x-&gt; - inhS</span>
1018
+ 884: <span class="ruby-comment cmt"># - x-&gt; | inhS</span>
1019
+ 885: <span class="ruby-comment cmt"># - x-&gt; -D inhS</span>
1020
+ 886: <span class="ruby-comment cmt"># - x-&gt; |D inhS</span>
1021
+ 887: <span class="ruby-comment cmt"># - --&gt; | inhS</span>
1022
+ 888: <span class="ruby-comment cmt"># - --&gt; -D inhS</span>
1023
+ 889: <span class="ruby-comment cmt"># - --&gt; |D inhS</span>
1024
+ 890: <span class="ruby-comment cmt"># - &lt;-- | inhS</span>
1025
+ 891: <span class="ruby-comment cmt"># | --&gt; - inhE</span>
1026
+ 892: <span class="ruby-comment cmt"># | &lt;-x - inhE</span>
1027
+ 893: <span class="ruby-comment cmt"># |D &lt;-x - inhE</span>
1028
+ 894: <span class="ruby-comment cmt"># - &lt;-x - inhE</span>
1029
+ 895: <span class="ruby-comment cmt"># -D &lt;-x - inhE</span>
1030
+ 896: <span class="ruby-comment cmt"># | &lt;-- - inhE</span>
1031
+ 897: <span class="ruby-comment cmt"># |D &lt;-- - inhE</span>
1032
+ 898: <span class="ruby-comment cmt"># -D &lt;-- - inhE</span>
1033
+ 899: <span class="ruby-comment cmt"># Return false if we already have a date or if we have a dependency for</span>
1034
+ 900: <span class="ruby-comment cmt"># this end.</span>
1035
+ 901: <span class="ruby-identifier">thisEnd</span> = <span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>
1036
+ 902: <span class="ruby-identifier">hasThisDeps</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</span>).<span class="ruby-identifier">empty?</span>
1037
+ 903: <span class="ruby-identifier">hasThisSpec</span> = <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">hasThisDeps</span>
1038
+ 904: <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">hasThisSpec</span>
1039
+ 905:
1040
+ 906: <span class="ruby-comment cmt"># Containter task can inherit the date if they have no dependencies.</span>
1041
+ 907: <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">@property</span>.<span class="ruby-identifier">container?</span>
1022
1042
  908:
1023
- 909: <span class="ruby-comment cmt"># Check for tasks that have no start and end spec, no duration spec but</span>
1024
- 910: <span class="ruby-comment cmt"># allocates. They can inherit the start and end date.</span>
1025
- 911: <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">hasThatSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasDurationSpec?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span>
1043
+ 909: <span class="ruby-identifier">thatEnd</span> = <span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'start'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'end'</span>
1044
+ 910: <span class="ruby-identifier">hasThatDeps</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</span>).<span class="ruby-identifier">empty?</span>
1045
+ 911: <span class="ruby-identifier">hasThatSpec</span> = <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">hasThatDeps</span>
1026
1046
  912:
1027
- 913: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">^</span> <span class="ruby-identifier">atEnd</span>
1028
- 914: <span class="ruby-comment cmt"># the scheduling direction is pointing away from this end</span>
1029
- 915: <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">hasDurationSpec?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span>
1047
+ 913: <span class="ruby-comment cmt"># Check for tasks that have no start and end spec, no duration spec but</span>
1048
+ 914: <span class="ruby-comment cmt"># allocates. They can inherit the start and end date.</span>
1049
+ 915: <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">hasThatSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasDurationSpec?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span>
1030
1050
  916:
1031
- 917: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">hasThatSpec</span>
1032
- 918: <span class="ruby-keyword kw">else</span>
1033
- 919: <span class="ruby-comment cmt"># the scheduling direction is pointing towards this end</span>
1034
- 920: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasDurationSpec?</span> <span class="ruby-operator">&amp;&amp;</span>
1035
- 921: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-comment cmt">#&amp;&amp; a('allocate').empty?</span>
1036
- 922: <span class="ruby-keyword kw">end</span>
1037
- 923: <span class="ruby-keyword kw">end</span></pre>
1051
+ 917: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">^</span> <span class="ruby-identifier">atEnd</span>
1052
+ 918: <span class="ruby-comment cmt"># the scheduling direction is pointing away from this end</span>
1053
+ 919: <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">hasDurationSpec?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span>
1054
+ 920:
1055
+ 921: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">hasThatSpec</span>
1056
+ 922: <span class="ruby-keyword kw">else</span>
1057
+ 923: <span class="ruby-comment cmt"># the scheduling direction is pointing towards this end</span>
1058
+ 924: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thatEnd</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasDurationSpec?</span> <span class="ruby-operator">&amp;&amp;</span>
1059
+ 925: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-comment cmt">#&amp;&amp; a('allocate').empty?</span>
1060
+ 926: <span class="ruby-keyword kw">end</span>
1061
+ 927: <span class="ruby-keyword kw">end</span></pre>
1038
1062
  </div>
1039
1063
 
1040
1064
  </div>
@@ -1046,7 +1070,7 @@ check should be done for the task end (true) or task start (false).
1046
1070
 
1047
1071
 
1048
1072
  <div id="candidates-method" class="method-detail ">
1049
- <a name="M001356"></a>
1073
+ <a name="method-i-candidates"></a>
1050
1074
 
1051
1075
  <div class="method-heading">
1052
1076
 
@@ -1091,7 +1115,7 @@ list of leaf resources that are allocated to this task.
1091
1115
 
1092
1116
 
1093
1117
  <div id="check-or-oops-method" class="method-detail ">
1094
- <a name="M001355"></a>
1118
+ <a name="method-i-checkForLoops"></a>
1095
1119
 
1096
1120
  <div class="method-heading">
1097
1121
 
@@ -1278,7 +1302,7 @@ list of leaf resources that are allocated to this task.
1278
1302
 
1279
1303
 
1280
1304
  <div id="collect-ime-ff-ntervals-method" class="method-detail ">
1281
- <a name="M001382"></a>
1305
+ <a name="method-i-collectTimeOffIntervals"></a>
1282
1306
 
1283
1307
  <div class="method-heading">
1284
1308
 
@@ -1300,14 +1324,14 @@ minDuration long and contain no working time.
1300
1324
  <div class="method-source-code"
1301
1325
  id="collect-ime-ff-ntervals-source">
1302
1326
  <pre>
1303
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1326</span>
1304
- 1326: <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>)
1305
- 1327: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'shifts'</span>)
1306
- 1328: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'shifts'</span>).<span class="ruby-identifier">collectTimeOffIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>)
1307
- 1329: <span class="ruby-keyword kw">else</span>
1308
- 1330: []
1309
- 1331: <span class="ruby-keyword kw">end</span>
1310
- 1332: <span class="ruby-keyword kw">end</span></pre>
1327
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1332</span>
1328
+ 1332: <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>)
1329
+ 1333: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'shifts'</span>)
1330
+ 1334: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'shifts'</span>).<span class="ruby-identifier">collectTimeOffIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>)
1331
+ 1335: <span class="ruby-keyword kw">else</span>
1332
+ 1336: []
1333
+ 1337: <span class="ruby-keyword kw">end</span>
1334
+ 1338: <span class="ruby-keyword kw">end</span></pre>
1311
1335
  </div>
1312
1336
 
1313
1337
  </div>
@@ -1319,7 +1343,7 @@ minDuration long and contain no working time.
1319
1343
 
1320
1344
 
1321
1345
  <div id="count-esource-llocations-method" class="method-detail ">
1322
- <a name="M001357"></a>
1346
+ <a name="method-i-countResourceAllocations"></a>
1323
1347
 
1324
1348
  <div class="method-heading">
1325
1349
 
@@ -1363,7 +1387,7 @@ stores it in @candidates. It also adds the allocated effort to the
1363
1387
 
1364
1388
 
1365
1389
  <div id="earliest-tart-method" class="method-detail ">
1366
- <a name="M001366"></a>
1390
+ <a name="method-i-earliestStart"></a>
1367
1391
 
1368
1392
  <div class="method-heading">
1369
1393
 
@@ -1386,60 +1410,60 @@ also require a minimum gap between the tasks.
1386
1410
  <div class="method-source-code"
1387
1411
  id="earliest-tart-source">
1388
1412
  <pre>
1389
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 973</span>
1390
- 973: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">earliestStart</span>
1391
- 974: <span class="ruby-comment cmt"># This is the date that we will return.</span>
1392
- 975: <span class="ruby-identifier">startDate</span> = <span class="ruby-keyword kw">nil</span>
1393
- 976: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'depends'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dependency</span><span class="ruby-operator">|</span>
1394
- 977: <span class="ruby-identifier">potentialStartDate</span> =
1395
- 978: <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">task</span>[<span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">onEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1396
- 979: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">potentialStartDate</span>.<span class="ruby-identifier">nil?</span>
1397
- 980:
1398
- 981: <span class="ruby-comment cmt"># Determine the end date of a 'length' gap.</span>
1399
- 982: <span class="ruby-identifier">dateAfterLengthGap</span> = <span class="ruby-identifier">potentialStartDate</span>
1400
- 983: <span class="ruby-identifier">gapLength</span> = <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapLength</span>
1401
- 984: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dateAfterLengthGap</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>] <span class="ruby-keyword kw">do</span>
1402
- 985: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">dateAfterLengthGap</span>)
1403
- 986: <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
1404
- 987: <span class="ruby-keyword kw">end</span>
1405
- 988: <span class="ruby-identifier">dateAfterLengthGap</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
1406
- 989: <span class="ruby-keyword kw">end</span>
1407
- 990:
1408
- 991: <span class="ruby-comment cmt"># Determine the end date of a 'duration' gap.</span>
1409
- 992: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dateAfterLengthGap</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">potentialStartDate</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1410
- 993: <span class="ruby-identifier">potentialStartDate</span> = <span class="ruby-identifier">dateAfterLengthGap</span>
1411
- 994: <span class="ruby-keyword kw">else</span>
1412
- 995: <span class="ruby-identifier">potentialStartDate</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1413
- 996: <span class="ruby-keyword kw">end</span>
1414
- 997:
1415
- 998: <span class="ruby-identifier">startDate</span> = <span class="ruby-identifier">potentialStartDate</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
1416
- 999: <span class="ruby-identifier">startDate</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">potentialStartDate</span>
1417
- 1000: <span class="ruby-keyword kw">end</span>
1418
- 1001:
1419
- 1002: <span class="ruby-comment cmt"># If any of the parent tasks has an explicit start date, the task must</span>
1420
- 1003: <span class="ruby-comment cmt"># start at or after this date.</span>
1421
- 1004: <span class="ruby-identifier">task</span> = <span class="ruby-ivar">@property</span>
1422
- 1005: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">task</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>) <span class="ruby-keyword kw">do</span>
1423
- 1006: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&amp;&amp;</span>
1424
- 1007: (<span class="ruby-identifier">startDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">startDate</span>)
1425
- 1008: <span class="ruby-identifier">startDate</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1426
- 1009: <span class="ruby-keyword kw">break</span>
1427
- 1010: <span class="ruby-keyword kw">end</span>
1428
- 1011: <span class="ruby-keyword kw">end</span>
1429
- 1012:
1430
- 1013: <span class="ruby-comment cmt"># When the computed start date is after the already determined end date</span>
1431
- 1014: <span class="ruby-comment cmt"># of the task, the start dependencies were too weak. This happens when</span>
1432
- 1015: <span class="ruby-comment cmt"># task B depends on A and they are specified this way:</span>
1433
- 1016: <span class="ruby-comment cmt"># task A: | --&gt; D-</span>
1434
- 1017: <span class="ruby-comment cmt"># task B: -D &lt;-- |</span>
1435
- 1018: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">startDate</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)
1436
- 1019: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'weak_start_dep'</span>,
1437
- 1020: <span class="ruby-node">&quot;Task #{@property.fullId} has a too weak start dependencies &quot;</span> <span class="ruby-operator">+</span>
1438
- 1021: <span class="ruby-value str">&quot;to be scheduled properly.&quot;</span>)
1439
- 1022: <span class="ruby-keyword kw">end</span>
1440
- 1023:
1441
- 1024: <span class="ruby-identifier">startDate</span>
1442
- 1025: <span class="ruby-keyword kw">end</span></pre>
1413
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 979</span>
1414
+ 979: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">earliestStart</span>
1415
+ 980: <span class="ruby-comment cmt"># This is the date that we will return.</span>
1416
+ 981: <span class="ruby-identifier">startDate</span> = <span class="ruby-keyword kw">nil</span>
1417
+ 982: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'depends'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dependency</span><span class="ruby-operator">|</span>
1418
+ 983: <span class="ruby-identifier">potentialStartDate</span> =
1419
+ 984: <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">task</span>[<span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">onEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1420
+ 985: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">potentialStartDate</span>.<span class="ruby-identifier">nil?</span>
1421
+ 986:
1422
+ 987: <span class="ruby-comment cmt"># Determine the end date of a 'length' gap.</span>
1423
+ 988: <span class="ruby-identifier">dateAfterLengthGap</span> = <span class="ruby-identifier">potentialStartDate</span>
1424
+ 989: <span class="ruby-identifier">gapLength</span> = <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapLength</span>
1425
+ 990: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dateAfterLengthGap</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>] <span class="ruby-keyword kw">do</span>
1426
+ 991: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">dateAfterLengthGap</span>)
1427
+ 992: <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
1428
+ 993: <span class="ruby-keyword kw">end</span>
1429
+ 994: <span class="ruby-identifier">dateAfterLengthGap</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
1430
+ 995: <span class="ruby-keyword kw">end</span>
1431
+ 996:
1432
+ 997: <span class="ruby-comment cmt"># Determine the end date of a 'duration' gap.</span>
1433
+ 998: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dateAfterLengthGap</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">potentialStartDate</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1434
+ 999: <span class="ruby-identifier">potentialStartDate</span> = <span class="ruby-identifier">dateAfterLengthGap</span>
1435
+ 1000: <span class="ruby-keyword kw">else</span>
1436
+ 1001: <span class="ruby-identifier">potentialStartDate</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1437
+ 1002: <span class="ruby-keyword kw">end</span>
1438
+ 1003:
1439
+ 1004: <span class="ruby-identifier">startDate</span> = <span class="ruby-identifier">potentialStartDate</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
1440
+ 1005: <span class="ruby-identifier">startDate</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">potentialStartDate</span>
1441
+ 1006: <span class="ruby-keyword kw">end</span>
1442
+ 1007:
1443
+ 1008: <span class="ruby-comment cmt"># If any of the parent tasks has an explicit start date, the task must</span>
1444
+ 1009: <span class="ruby-comment cmt"># start at or after this date.</span>
1445
+ 1010: <span class="ruby-identifier">task</span> = <span class="ruby-ivar">@property</span>
1446
+ 1011: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">task</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>) <span class="ruby-keyword kw">do</span>
1447
+ 1012: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&amp;&amp;</span>
1448
+ 1013: (<span class="ruby-identifier">startDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">startDate</span>)
1449
+ 1014: <span class="ruby-identifier">startDate</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1450
+ 1015: <span class="ruby-keyword kw">break</span>
1451
+ 1016: <span class="ruby-keyword kw">end</span>
1452
+ 1017: <span class="ruby-keyword kw">end</span>
1453
+ 1018:
1454
+ 1019: <span class="ruby-comment cmt"># When the computed start date is after the already determined end date</span>
1455
+ 1020: <span class="ruby-comment cmt"># of the task, the start dependencies were too weak. This happens when</span>
1456
+ 1021: <span class="ruby-comment cmt"># task B depends on A and they are specified this way:</span>
1457
+ 1022: <span class="ruby-comment cmt"># task A: | --&gt; D-</span>
1458
+ 1023: <span class="ruby-comment cmt"># task B: -D &lt;-- |</span>
1459
+ 1024: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">startDate</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)
1460
+ 1025: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'weak_start_dep'</span>,
1461
+ 1026: <span class="ruby-node">&quot;Task #{@property.fullId} has a too weak start dependencies &quot;</span> <span class="ruby-operator">+</span>
1462
+ 1027: <span class="ruby-value str">&quot;to be scheduled properly.&quot;</span>)
1463
+ 1028: <span class="ruby-keyword kw">end</span>
1464
+ 1029:
1465
+ 1030: <span class="ruby-identifier">startDate</span>
1466
+ 1031: <span class="ruby-keyword kw">end</span></pre>
1443
1467
  </div>
1444
1468
 
1445
1469
  </div>
@@ -1451,7 +1475,7 @@ also require a minimum gap between the tasks.
1451
1475
 
1452
1476
 
1453
1477
  <div id="finish-cheduling-method" class="method-detail ">
1454
- <a name="M001352"></a>
1478
+ <a name="method-i-finishScheduling"></a>
1455
1479
 
1456
1480
  <div class="method-heading">
1457
1481
 
@@ -1492,7 +1516,7 @@ on the just scheduled values.
1492
1516
 
1493
1517
 
1494
1518
  <div id="get-llocated-ime-method" class="method-detail ">
1495
- <a name="M001380"></a>
1519
+ <a name="method-i-getAllocatedTime"></a>
1496
1520
 
1497
1521
  <div class="method-heading">
1498
1522
 
@@ -1514,30 +1538,30 @@ during interval specified by <em>startIdx</em> and <em>endIdx</em>.
1514
1538
  <div class="method-source-code"
1515
1539
  id="get-llocated-ime-source">
1516
1540
  <pre>
1517
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1274</span>
1518
- 1274: <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">resource</span> = <span class="ruby-keyword kw">nil</span>)
1519
- 1275: <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">a</span>(<span class="ruby-value str">'milestone'</span>)
1520
- 1276:
1521
- 1277: <span class="ruby-identifier">allocatedTime</span> = <span class="ruby-value">0.0</span>
1522
- 1278: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1523
- 1279: <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">task</span><span class="ruby-operator">|</span>
1524
- 1280: <span class="ruby-identifier">allocatedTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">task</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>,
1525
- 1281: <span class="ruby-identifier">resource</span>)
1526
- 1282: <span class="ruby-keyword kw">end</span>
1527
- 1283: <span class="ruby-keyword kw">else</span>
1528
- 1284: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>
1529
- 1285: <span class="ruby-identifier">allocatedTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-ivar">@scenarioIdx</span>,
1530
- 1286: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
1531
- 1287: <span class="ruby-ivar">@property</span>)
1532
- 1288: <span class="ruby-keyword kw">else</span>
1533
- 1289: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
1534
- 1290: <span class="ruby-identifier">allocatedTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</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>,
1535
- 1291: <span class="ruby-ivar">@property</span>)
1536
- 1292: <span class="ruby-keyword kw">end</span>
1537
- 1293: <span class="ruby-keyword kw">end</span>
1538
- 1294: <span class="ruby-keyword kw">end</span>
1539
- 1295: <span class="ruby-identifier">allocatedTime</span>
1540
- 1296: <span class="ruby-keyword kw">end</span></pre>
1541
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1280</span>
1542
+ 1280: <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">resource</span> = <span class="ruby-keyword kw">nil</span>)
1543
+ 1281: <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">a</span>(<span class="ruby-value str">'milestone'</span>)
1544
+ 1282:
1545
+ 1283: <span class="ruby-identifier">allocatedTime</span> = <span class="ruby-value">0.0</span>
1546
+ 1284: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1547
+ 1285: <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">task</span><span class="ruby-operator">|</span>
1548
+ 1286: <span class="ruby-identifier">allocatedTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">task</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>,
1549
+ 1287: <span class="ruby-identifier">resource</span>)
1550
+ 1288: <span class="ruby-keyword kw">end</span>
1551
+ 1289: <span class="ruby-keyword kw">else</span>
1552
+ 1290: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>
1553
+ 1291: <span class="ruby-identifier">allocatedTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">getAllocatedTime</span>(<span class="ruby-ivar">@scenarioIdx</span>,
1554
+ 1292: <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
1555
+ 1293: <span class="ruby-ivar">@property</span>)
1556
+ 1294: <span class="ruby-keyword kw">else</span>
1557
+ 1295: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
1558
+ 1296: <span class="ruby-identifier">allocatedTime</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</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>,
1559
+ 1297: <span class="ruby-ivar">@property</span>)
1560
+ 1298: <span class="ruby-keyword kw">end</span>
1561
+ 1299: <span class="ruby-keyword kw">end</span>
1562
+ 1300: <span class="ruby-keyword kw">end</span>
1563
+ 1301: <span class="ruby-identifier">allocatedTime</span>
1564
+ 1302: <span class="ruby-keyword kw">end</span></pre>
1541
1565
  </div>
1542
1566
 
1543
1567
  </div>
@@ -1549,7 +1573,7 @@ during interval specified by <em>startIdx</em> and <em>endIdx</em>.
1549
1573
 
1550
1574
 
1551
1575
  <div id="get-ffective-ork-method" class="method-detail ">
1552
- <a name="M001381"></a>
1576
+ <a name="method-i-getEffectiveWork"></a>
1553
1577
 
1554
1578
  <div class="method-heading">
1555
1579
 
@@ -1573,29 +1597,29 @@ resource.
1573
1597
  <div class="method-source-code"
1574
1598
  id="get-ffective-ork-source">
1575
1599
  <pre>
1576
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1301</span>
1577
- 1301: <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">resource</span> = <span class="ruby-keyword kw">nil</span>)
1578
- 1302: <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">a</span>(<span class="ruby-value str">'milestone'</span>)
1579
- 1303:
1580
- 1304: <span class="ruby-identifier">workLoad</span> = <span class="ruby-value">0.0</span>
1581
- 1305: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1582
- 1306: <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">task</span><span class="ruby-operator">|</span>
1583
- 1307: <span class="ruby-identifier">workLoad</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">task</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>,
1584
- 1308: <span class="ruby-identifier">resource</span>)
1585
- 1309: <span class="ruby-keyword kw">end</span>
1586
- 1310: <span class="ruby-keyword kw">else</span>
1587
- 1311: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>
1588
- 1312: <span class="ruby-identifier">workLoad</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>,
1589
- 1313: <span class="ruby-ivar">@property</span>)
1590
- 1314: <span class="ruby-keyword kw">else</span>
1591
- 1315: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
1592
- 1316: <span class="ruby-identifier">workLoad</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</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>,
1593
- 1317: <span class="ruby-ivar">@property</span>)
1594
- 1318: <span class="ruby-keyword kw">end</span>
1595
- 1319: <span class="ruby-keyword kw">end</span>
1596
- 1320: <span class="ruby-keyword kw">end</span>
1597
- 1321: <span class="ruby-identifier">workLoad</span>
1598
- 1322: <span class="ruby-keyword kw">end</span></pre>
1600
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1307</span>
1601
+ 1307: <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">resource</span> = <span class="ruby-keyword kw">nil</span>)
1602
+ 1308: <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">a</span>(<span class="ruby-value str">'milestone'</span>)
1603
+ 1309:
1604
+ 1310: <span class="ruby-identifier">workLoad</span> = <span class="ruby-value">0.0</span>
1605
+ 1311: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
1606
+ 1312: <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">task</span><span class="ruby-operator">|</span>
1607
+ 1313: <span class="ruby-identifier">workLoad</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">task</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>,
1608
+ 1314: <span class="ruby-identifier">resource</span>)
1609
+ 1315: <span class="ruby-keyword kw">end</span>
1610
+ 1316: <span class="ruby-keyword kw">else</span>
1611
+ 1317: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>
1612
+ 1318: <span class="ruby-identifier">workLoad</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>,
1613
+ 1319: <span class="ruby-ivar">@property</span>)
1614
+ 1320: <span class="ruby-keyword kw">else</span>
1615
+ 1321: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
1616
+ 1322: <span class="ruby-identifier">workLoad</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</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>,
1617
+ 1323: <span class="ruby-ivar">@property</span>)
1618
+ 1324: <span class="ruby-keyword kw">end</span>
1619
+ 1325: <span class="ruby-keyword kw">end</span>
1620
+ 1326: <span class="ruby-keyword kw">end</span>
1621
+ 1327: <span class="ruby-identifier">workLoad</span>
1622
+ 1328: <span class="ruby-keyword kw">end</span></pre>
1599
1623
  </div>
1600
1624
 
1601
1625
  </div>
@@ -1607,7 +1631,7 @@ resource.
1607
1631
 
1608
1632
 
1609
1633
  <div id="has-ependency--method" class="method-detail ">
1610
- <a name="M001349"></a>
1634
+ <a name="method-i-hasDependency%3F"></a>
1611
1635
 
1612
1636
  <div class="method-heading">
1613
1637
 
@@ -1645,7 +1669,7 @@ Return true of this <a href="Task.html">Task</a> has a dependency [
1645
1669
 
1646
1670
 
1647
1671
  <div id="has-uration-pec--method" class="method-detail ">
1648
- <a name="M001365"></a>
1672
+ <a name="method-i-hasDurationSpec%3F"></a>
1649
1673
 
1650
1674
  <div class="method-heading">
1651
1675
 
@@ -1666,10 +1690,10 @@ Return true if the task has a effort, length or duration setting.
1666
1690
  <div class="method-source-code"
1667
1691
  id="has-uration-pec--source">
1668
1692
  <pre>
1669
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 966</span>
1670
- 966: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasDurationSpec?</span>
1671
- 967: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'milestone'</span>)
1672
- 968: <span class="ruby-keyword kw">end</span></pre>
1693
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 972</span>
1694
+ 972: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasDurationSpec?</span>
1695
+ 973: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'milestone'</span>)
1696
+ 974: <span class="ruby-keyword kw">end</span></pre>
1673
1697
  </div>
1674
1698
 
1675
1699
  </div>
@@ -1681,7 +1705,7 @@ Return true if the task has a effort, length or duration setting.
1681
1705
 
1682
1706
 
1683
1707
  <div id="has-esource-llocated--method" class="method-detail ">
1684
- <a name="M001384"></a>
1708
+ <a name="method-i-hasResourceAllocated%3F"></a>
1685
1709
 
1686
1710
  <div class="method-heading">
1687
1711
 
@@ -1703,18 +1727,18 @@ its children.
1703
1727
  <div class="method-source-code"
1704
1728
  id="has-esource-llocated--source">
1705
1729
  <pre>
1706
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1369</span>
1707
- 1369: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasResourceAllocated?</span>(<span class="ruby-identifier">interval</span>, <span class="ruby-identifier">resource</span>)
1708
- 1370: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
1709
- 1371: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">allocated?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">interval</span>, <span class="ruby-ivar">@property</span>)
1710
- 1372: <span class="ruby-keyword kw">else</span>
1711
- 1373: <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">t</span><span class="ruby-operator">|</span>
1712
- 1374: <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">t</span>.<span class="ruby-identifier">hasResourceAllocated?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">interval</span>,
1713
- 1375: <span class="ruby-identifier">resource</span>)
1714
- 1376: <span class="ruby-keyword kw">end</span>
1715
- 1377: <span class="ruby-keyword kw">end</span>
1716
- 1378: <span class="ruby-keyword kw">false</span>
1717
- 1379: <span class="ruby-keyword kw">end</span></pre>
1730
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1391</span>
1731
+ 1391: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasResourceAllocated?</span>(<span class="ruby-identifier">interval</span>, <span class="ruby-identifier">resource</span>)
1732
+ 1392: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
1733
+ 1393: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">allocated?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">interval</span>, <span class="ruby-ivar">@property</span>)
1734
+ 1394: <span class="ruby-keyword kw">else</span>
1735
+ 1395: <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">t</span><span class="ruby-operator">|</span>
1736
+ 1396: <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">t</span>.<span class="ruby-identifier">hasResourceAllocated?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">interval</span>,
1737
+ 1397: <span class="ruby-identifier">resource</span>)
1738
+ 1398: <span class="ruby-keyword kw">end</span>
1739
+ 1399: <span class="ruby-keyword kw">end</span>
1740
+ 1400: <span class="ruby-keyword kw">false</span>
1741
+ 1401: <span class="ruby-keyword kw">end</span></pre>
1718
1742
  </div>
1719
1743
 
1720
1744
  </div>
@@ -1726,7 +1750,7 @@ its children.
1726
1750
 
1727
1751
 
1728
1752
  <div id="is-ependency-f-method" class="method-detail ">
1729
- <a name="M001383"></a>
1753
+ <a name="method-i-isDependencyOf"></a>
1730
1754
 
1731
1755
  <div class="method-heading">
1732
1756
 
@@ -1741,7 +1765,8 @@ its children.
1741
1765
  <p>
1742
1766
  Check if the <a href="Task.html">Task</a> <em>task</em> depends on this
1743
1767
  task. <em>depth</em> specifies how many dependent task are traversed at
1744
- max. A value of 0 means no limit.
1768
+ max. A value of 0 means no limit. TODO: Change this to a non-recursive
1769
+ implementation.
1745
1770
  </p>
1746
1771
 
1747
1772
 
@@ -1749,37 +1774,83 @@ max. A value of 0 means no limit.
1749
1774
  <div class="method-source-code"
1750
1775
  id="is-ependency-f-source">
1751
1776
  <pre>
1752
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1336</span>
1753
- 1336: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span>)
1754
- 1337: <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">task</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@property</span>
1755
- 1338:
1756
- 1339: <span class="ruby-comment cmt"># Check if any of the parent tasks is a dependency of _task_.</span>
1757
- 1340: <span class="ruby-identifier">t</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
1758
- 1341: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">t</span>
1759
- 1342: <span class="ruby-comment cmt"># If the parent is a dependency, than all childs are as well.</span>
1760
- 1343: <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">t</span>.<span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span>)
1761
- 1344: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">parent</span>
1762
- 1345: <span class="ruby-keyword kw">end</span>
1763
- 1346:
1764
- 1347:
1765
- 1348: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'startsuccs'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
1766
- 1349: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">dep</span>[<span class="ruby-value">1</span>]
1767
- 1350: <span class="ruby-comment cmt"># must be a start-&gt;start dependency</span>
1768
- 1351: <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">dep</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span>)
1769
- 1352: <span class="ruby-keyword kw">end</span>
1770
- 1353: <span class="ruby-keyword kw">end</span>
1777
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1343</span>
1778
+ 1343: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span>)
1779
+ 1344: <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">task</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@property</span>
1780
+ 1345:
1781
+ 1346: <span class="ruby-comment cmt"># Check if any of the parent tasks is a dependency of _task_.</span>
1782
+ 1347: <span class="ruby-identifier">t</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
1783
+ 1348: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">t</span>
1784
+ 1349: <span class="ruby-comment cmt"># If the parent is a dependency, than all childs are as well.</span>
1785
+ 1350: <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">t</span>.<span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span>)
1786
+ 1351: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">parent</span>
1787
+ 1352: <span class="ruby-keyword kw">end</span>
1788
+ 1353:
1771
1789
  1354:
1772
- 1355: <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">depth</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
1773
- 1356:
1774
- 1357: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endsuccs'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
1775
- 1358: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">dep</span>[<span class="ruby-value">1</span>]
1776
- 1359: <span class="ruby-comment cmt"># must be an end-&gt;start dependency</span>
1777
- 1360: <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">dep</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
1778
- 1361: <span class="ruby-keyword kw">end</span>
1779
- 1362: <span class="ruby-keyword kw">end</span>
1790
+ 1355: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'startsuccs'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
1791
+ 1356: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">dep</span>[<span class="ruby-value">1</span>]
1792
+ 1357: <span class="ruby-comment cmt"># must be a start-&gt;start dependency</span>
1793
+ 1358: <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">dep</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span>)
1794
+ 1359: <span class="ruby-keyword kw">end</span>
1795
+ 1360: <span class="ruby-keyword kw">end</span>
1796
+ 1361:
1797
+ 1362: <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">depth</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
1780
1798
  1363:
1781
- 1364: <span class="ruby-keyword kw">false</span>
1782
- 1365: <span class="ruby-keyword kw">end</span></pre>
1799
+ 1364: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endsuccs'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
1800
+ 1365: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">dep</span>[<span class="ruby-value">1</span>]
1801
+ 1366: <span class="ruby-comment cmt"># must be an end-&gt;start dependency</span>
1802
+ 1367: <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">dep</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">task</span>, <span class="ruby-identifier">depth</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
1803
+ 1368: <span class="ruby-keyword kw">end</span>
1804
+ 1369: <span class="ruby-keyword kw">end</span>
1805
+ 1370:
1806
+ 1371: <span class="ruby-keyword kw">false</span>
1807
+ 1372: <span class="ruby-keyword kw">end</span></pre>
1808
+ </div>
1809
+
1810
+ </div>
1811
+
1812
+
1813
+
1814
+
1815
+ </div>
1816
+
1817
+
1818
+ <div id="is-eature-f-method" class="method-detail ">
1819
+ <a name="method-i-isFeatureOf"></a>
1820
+
1821
+ <div class="method-heading">
1822
+
1823
+ <span class="method-name">isFeatureOf</span><span
1824
+ class="method-args">(task)</span>
1825
+ <span class="method-click-advice">click to toggle source</span>
1826
+
1827
+ </div>
1828
+
1829
+ <div class="method-description">
1830
+
1831
+ <p>
1832
+ If <em>task</em> or any of its sub-tasks depend on this task or any of its
1833
+ sub-tasks, we call this task a feature of <em>task</em>.
1834
+ </p>
1835
+
1836
+
1837
+
1838
+ <div class="method-source-code"
1839
+ id="is-eature-f-source">
1840
+ <pre>
1841
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1376</span>
1842
+ 1376: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isFeatureOf</span>(<span class="ruby-identifier">task</span>)
1843
+ 1377: <span class="ruby-identifier">sources</span> = <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">all</span>
1844
+ 1378: <span class="ruby-identifier">destinations</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">all</span>
1845
+ 1379:
1846
+ 1380: <span class="ruby-identifier">sources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1847
+ 1381: <span class="ruby-identifier">destinations</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
1848
+ 1382: <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">s</span>.<span class="ruby-identifier">isDependencyOf</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">d</span>, <span class="ruby-value">0</span>)
1849
+ 1383: <span class="ruby-keyword kw">end</span>
1850
+ 1384: <span class="ruby-keyword kw">end</span>
1851
+ 1385:
1852
+ 1386: <span class="ruby-keyword kw">false</span>
1853
+ 1387: <span class="ruby-keyword kw">end</span></pre>
1783
1854
  </div>
1784
1855
 
1785
1856
  </div>
@@ -1791,7 +1862,7 @@ max. A value of 0 means no limit.
1791
1862
 
1792
1863
 
1793
1864
  <div id="latest-nd-method" class="method-detail ">
1794
- <a name="M001367"></a>
1865
+ <a name="method-i-latestEnd"></a>
1795
1866
 
1796
1867
  <div class="method-heading">
1797
1868
 
@@ -1814,60 +1885,60 @@ also require a minimum gap between the tasks.
1814
1885
  <div class="method-source-code"
1815
1886
  id="latest-nd-source">
1816
1887
  <pre>
1817
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1030</span>
1818
- 1030: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">latestEnd</span>
1819
- 1031: <span class="ruby-comment cmt"># This is the date that we will return.</span>
1820
- 1032: <span class="ruby-identifier">endDate</span> = <span class="ruby-keyword kw">nil</span>
1821
- 1033: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'precedes'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dependency</span><span class="ruby-operator">|</span>
1822
- 1034: <span class="ruby-identifier">potentialEndDate</span> =
1823
- 1035: <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">task</span>[<span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">onEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1824
- 1036: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">potentialEndDate</span>.<span class="ruby-identifier">nil?</span>
1825
- 1037:
1826
- 1038: <span class="ruby-comment cmt"># Determine the end date of a 'length' gap.</span>
1827
- 1039: <span class="ruby-identifier">dateBeforeLengthGap</span> = <span class="ruby-identifier">potentialEndDate</span>
1828
- 1040: <span class="ruby-identifier">gapLength</span> = <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapLength</span>
1829
- 1041: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-keyword kw">do</span>
1830
- 1042: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">-</span>
1831
- 1043: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
1832
- 1044: <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
1833
- 1045: <span class="ruby-keyword kw">end</span>
1834
- 1046: <span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">-=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
1835
- 1047: <span class="ruby-keyword kw">end</span>
1836
- 1048:
1837
- 1049: <span class="ruby-comment cmt"># Determine the end date of a 'duration' gap.</span>
1838
- 1050: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">potentialEndDate</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1839
- 1051: <span class="ruby-identifier">potentialEndDate</span> = <span class="ruby-identifier">dateBeforeLengthGap</span>
1840
- 1052: <span class="ruby-keyword kw">else</span>
1841
- 1053: <span class="ruby-identifier">potentialEndDate</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1842
- 1054: <span class="ruby-keyword kw">end</span>
1843
- 1055:
1844
- 1056: <span class="ruby-identifier">endDate</span> = <span class="ruby-identifier">potentialEndDate</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">endDate</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">potentialEndDate</span>
1845
- 1057: <span class="ruby-keyword kw">end</span>
1846
- 1058:
1847
- 1059: <span class="ruby-comment cmt"># If any of the parent tasks has an explicit end date, the task must end</span>
1848
- 1060: <span class="ruby-comment cmt"># at or before this date.</span>
1849
- 1061: <span class="ruby-identifier">task</span> = <span class="ruby-ivar">@property</span>
1850
- 1062: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">task</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>) <span class="ruby-keyword kw">do</span>
1851
- 1063: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&amp;&amp;</span>
1852
- 1064: (<span class="ruby-identifier">endDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endDate</span>)
1853
- 1065: <span class="ruby-identifier">endDate</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1854
- 1066: <span class="ruby-keyword kw">break</span>
1855
- 1067: <span class="ruby-keyword kw">end</span>
1856
- 1068: <span class="ruby-keyword kw">end</span>
1857
- 1069:
1858
- 1070: <span class="ruby-comment cmt"># When the computed end date is before the already determined start date</span>
1859
- 1071: <span class="ruby-comment cmt"># of the task, the end dependencies were too weak. This happens when</span>
1860
- 1072: <span class="ruby-comment cmt"># task A precedes B and they are specified this way:</span>
1861
- 1073: <span class="ruby-comment cmt"># task A: | --&gt; D-</span>
1862
- 1074: <span class="ruby-comment cmt"># task B: -D &lt;-- |</span>
1863
- 1075: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">endDate</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)
1864
- 1076: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'weak_end_dep'</span>,
1865
- 1077: <span class="ruby-node">&quot;Task #{@property.fullId} has a too weak end dependencies &quot;</span> <span class="ruby-operator">+</span>
1866
- 1078: <span class="ruby-value str">&quot;to be scheduled properly.&quot;</span>)
1867
- 1079: <span class="ruby-keyword kw">end</span>
1868
- 1080:
1869
- 1081: <span class="ruby-identifier">endDate</span>
1870
- 1082: <span class="ruby-keyword kw">end</span></pre>
1888
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1036</span>
1889
+ 1036: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">latestEnd</span>
1890
+ 1037: <span class="ruby-comment cmt"># This is the date that we will return.</span>
1891
+ 1038: <span class="ruby-identifier">endDate</span> = <span class="ruby-keyword kw">nil</span>
1892
+ 1039: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'precedes'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dependency</span><span class="ruby-operator">|</span>
1893
+ 1040: <span class="ruby-identifier">potentialEndDate</span> =
1894
+ 1041: <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">task</span>[<span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">onEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1895
+ 1042: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">potentialEndDate</span>.<span class="ruby-identifier">nil?</span>
1896
+ 1043:
1897
+ 1044: <span class="ruby-comment cmt"># Determine the end date of a 'length' gap.</span>
1898
+ 1045: <span class="ruby-identifier">dateBeforeLengthGap</span> = <span class="ruby-identifier">potentialEndDate</span>
1899
+ 1046: <span class="ruby-identifier">gapLength</span> = <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapLength</span>
1900
+ 1047: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-keyword kw">do</span>
1901
+ 1048: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">-</span>
1902
+ 1049: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
1903
+ 1050: <span class="ruby-identifier">gapLength</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
1904
+ 1051: <span class="ruby-keyword kw">end</span>
1905
+ 1052: <span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">-=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
1906
+ 1053: <span class="ruby-keyword kw">end</span>
1907
+ 1054:
1908
+ 1055: <span class="ruby-comment cmt"># Determine the end date of a 'duration' gap.</span>
1909
+ 1056: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dateBeforeLengthGap</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">potentialEndDate</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1910
+ 1057: <span class="ruby-identifier">potentialEndDate</span> = <span class="ruby-identifier">dateBeforeLengthGap</span>
1911
+ 1058: <span class="ruby-keyword kw">else</span>
1912
+ 1059: <span class="ruby-identifier">potentialEndDate</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">gapDuration</span>
1913
+ 1060: <span class="ruby-keyword kw">end</span>
1914
+ 1061:
1915
+ 1062: <span class="ruby-identifier">endDate</span> = <span class="ruby-identifier">potentialEndDate</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">endDate</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">potentialEndDate</span>
1916
+ 1063: <span class="ruby-keyword kw">end</span>
1917
+ 1064:
1918
+ 1065: <span class="ruby-comment cmt"># If any of the parent tasks has an explicit end date, the task must end</span>
1919
+ 1066: <span class="ruby-comment cmt"># at or before this date.</span>
1920
+ 1067: <span class="ruby-identifier">task</span> = <span class="ruby-ivar">@property</span>
1921
+ 1068: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">task</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>) <span class="ruby-keyword kw">do</span>
1922
+ 1069: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&amp;&amp;</span>
1923
+ 1070: (<span class="ruby-identifier">endDate</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">endDate</span>)
1924
+ 1071: <span class="ruby-identifier">endDate</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
1925
+ 1072: <span class="ruby-keyword kw">break</span>
1926
+ 1073: <span class="ruby-keyword kw">end</span>
1927
+ 1074: <span class="ruby-keyword kw">end</span>
1928
+ 1075:
1929
+ 1076: <span class="ruby-comment cmt"># When the computed end date is before the already determined start date</span>
1930
+ 1077: <span class="ruby-comment cmt"># of the task, the end dependencies were too weak. This happens when</span>
1931
+ 1078: <span class="ruby-comment cmt"># task A precedes B and they are specified this way:</span>
1932
+ 1079: <span class="ruby-comment cmt"># task A: | --&gt; D-</span>
1933
+ 1080: <span class="ruby-comment cmt"># task B: -D &lt;-- |</span>
1934
+ 1081: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">endDate</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)
1935
+ 1082: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'weak_end_dep'</span>,
1936
+ 1083: <span class="ruby-node">&quot;Task #{@property.fullId} has a too weak end dependencies &quot;</span> <span class="ruby-operator">+</span>
1937
+ 1084: <span class="ruby-value str">&quot;to be scheduled properly.&quot;</span>)
1938
+ 1085: <span class="ruby-keyword kw">end</span>
1939
+ 1086:
1940
+ 1087: <span class="ruby-identifier">endDate</span>
1941
+ 1088: <span class="ruby-keyword kw">end</span></pre>
1871
1942
  </div>
1872
1943
 
1873
1944
  </div>
@@ -1879,7 +1950,7 @@ also require a minimum gap between the tasks.
1879
1950
 
1880
1951
 
1881
1952
  <div id="post-chedule-heck-method" class="method-detail ">
1882
- <a name="M001353"></a>
1953
+ <a name="method-i-postScheduleCheck"></a>
1883
1954
 
1884
1955
  <div class="method-heading">
1885
1956
 
@@ -2070,7 +2141,7 @@ finished.
2070
2141
 
2071
2142
 
2072
2143
  <div id="pre-chedule-heck-method" class="method-detail ">
2073
- <a name="M001351"></a>
2144
+ <a name="method-i-preScheduleCheck"></a>
2074
2145
 
2075
2146
  <div class="method-heading">
2076
2147
 
@@ -2247,7 +2318,7 @@ consistency checks on the task.
2247
2318
  304: <span class="ruby-keyword kw">if</span> ((<span class="ruby-identifier">startSpeced</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">endSpeced</span>) <span class="ruby-operator">||</span>
2248
2319
  305: (<span class="ruby-identifier">hasDependencies</span>(<span class="ruby-keyword kw">false</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">endSpeced</span>) <span class="ruby-operator">||</span>
2249
2320
  306: (<span class="ruby-identifier">hasDependencies</span>(<span class="ruby-keyword kw">true</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">startSpeced</span>)) <span class="ruby-operator">&amp;&amp;</span>
2250
- 307: <span class="ruby-identifier">durationSpecs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>)
2321
+ 307: <span class="ruby-identifier">durationSpecs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@property</span>.<span class="ruby-identifier">provided</span>(<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>)
2251
2322
  308: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_overspecified'</span>,
2252
2323
  309: <span class="ruby-node">&quot;Task #{@property.fullId} has a start, an end and a &quot;</span> <span class="ruby-operator">+</span>
2253
2324
  310: <span class="ruby-value str">'duration specification.'</span>)
@@ -2273,7 +2344,7 @@ consistency checks on the task.
2273
2344
 
2274
2345
 
2275
2346
  <div id="prepare-cheduling-method" class="method-detail ">
2276
- <a name="M001347"></a>
2347
+ <a name="method-i-prepareScheduling"></a>
2277
2348
 
2278
2349
  <div class="method-heading">
2279
2350
 
@@ -2373,7 +2444,7 @@ scheduling.
2373
2444
 
2374
2445
 
2375
2446
  <div id="propagate-ate-method" class="method-detail ">
2376
- <a name="M001362"></a>
2447
+ <a name="method-i-propagateDate"></a>
2377
2448
 
2378
2449
  <div class="method-heading">
2379
2450
 
@@ -2419,29 +2490,33 @@ that have a direct dependency to this end of the task.
2419
2490
  842: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span>), <span class="ruby-operator">!</span><span class="ruby-identifier">atEnd</span>)
2420
2491
  843: <span class="ruby-keyword kw">end</span>
2421
2492
  844: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Milestone #{@property.fullId}: #{a('start')} -&gt; #{a('end')}&quot;</span>
2422
- 845: <span class="ruby-keyword kw">end</span>
2423
- 846:
2424
- 847: <span class="ruby-comment cmt"># Propagate date to all dependent tasks.</span>
2425
- 848: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2426
- 849: <span class="ruby-identifier">propagateDateToDep</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span>)
2427
- 850: <span class="ruby-keyword kw">end</span>
2428
- 851: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2429
- 852: <span class="ruby-identifier">propagateDateToDep</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span>)
2430
- 853: <span class="ruby-keyword kw">end</span>
2431
- 854:
2432
- 855: <span class="ruby-comment cmt"># Propagate date to sub tasks which have only an implicit</span>
2433
- 856: <span class="ruby-comment cmt"># dependency on the parent task and no other criteria for this end of</span>
2434
- 857: <span class="ruby-comment cmt"># the task.</span>
2435
- 858: <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">task</span><span class="ruby-operator">|</span>
2436
- 859: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">canInheritDate?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">atEnd</span>)
2437
- 860: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">date</span>, <span class="ruby-identifier">atEnd</span>)
2438
- 861: <span class="ruby-keyword kw">end</span>
2439
- 862: <span class="ruby-keyword kw">end</span>
2440
- 863:
2441
- 864: <span class="ruby-comment cmt"># The date propagation might have completed the date set of the enclosing</span>
2442
- 865: <span class="ruby-comment cmt"># containter task. If so, we can schedule it as well.</span>
2443
- 866: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">scheduleContainer</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
2444
- 867: <span class="ruby-keyword kw">end</span></pre>
2493
+ 845: <span class="ruby-keyword kw">elsif</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&amp;&amp;</span>
2494
+ 846: <span class="ruby-operator">!</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span>
2495
+ 847: <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span>)
2496
+ 848: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
2497
+ 849: <span class="ruby-keyword kw">end</span>
2498
+ 850:
2499
+ 851: <span class="ruby-comment cmt"># Propagate date to all dependent tasks.</span>
2500
+ 852: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2501
+ 853: <span class="ruby-identifier">propagateDateToDep</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span>)
2502
+ 854: <span class="ruby-keyword kw">end</span>
2503
+ 855: <span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2504
+ 856: <span class="ruby-identifier">propagateDateToDep</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span>)
2505
+ 857: <span class="ruby-keyword kw">end</span>
2506
+ 858:
2507
+ 859: <span class="ruby-comment cmt"># Propagate date to sub tasks which have only an implicit</span>
2508
+ 860: <span class="ruby-comment cmt"># dependency on the parent task and no other criteria for this end of</span>
2509
+ 861: <span class="ruby-comment cmt"># the task.</span>
2510
+ 862: <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">task</span><span class="ruby-operator">|</span>
2511
+ 863: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">canInheritDate?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">atEnd</span>)
2512
+ 864: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">date</span>, <span class="ruby-identifier">atEnd</span>)
2513
+ 865: <span class="ruby-keyword kw">end</span>
2514
+ 866: <span class="ruby-keyword kw">end</span>
2515
+ 867:
2516
+ 868: <span class="ruby-comment cmt"># The date propagation might have completed the date set of the enclosing</span>
2517
+ 869: <span class="ruby-comment cmt"># containter task. If so, we can schedule it as well.</span>
2518
+ 870: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">scheduleContainer</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
2519
+ 871: <span class="ruby-keyword kw">end</span></pre>
2445
2520
  </div>
2446
2521
 
2447
2522
  </div>
@@ -2453,7 +2528,7 @@ that have a direct dependency to this end of the task.
2453
2528
 
2454
2529
 
2455
2530
  <div id="propagate-nitial-alues-method" class="method-detail ">
2456
- <a name="M001350"></a>
2531
+ <a name="method-i-propagateInitialValues"></a>
2457
2532
 
2458
2533
  <div class="method-heading">
2459
2534
 
@@ -2503,7 +2578,7 @@ that have a direct dependency to this end of the task.
2503
2578
 
2504
2579
 
2505
2580
  <div id="query-complete-method" class="method-detail ">
2506
- <a name="M001369"></a>
2581
+ <a name="method-i-query_complete"></a>
2507
2582
 
2508
2583
  <div class="method-heading">
2509
2584
 
@@ -2522,15 +2597,15 @@ that have a direct dependency to this end of the task.
2522
2597
  <div class="method-source-code"
2523
2598
  id="query-complete-source">
2524
2599
  <pre>
2525
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1094</span>
2526
- 1094: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_complete</span>(<span class="ruby-identifier">query</span>)
2527
- 1095: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
2528
- 1096: <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">complete</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'complete'</span>).<span class="ruby-identifier">to_i</span>
2529
- 1097: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-node">&quot;#{complete}%&quot;</span>
2530
- 1098: <span class="ruby-keyword kw">else</span>
2531
- 1099: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">''</span>
2532
- 1100: <span class="ruby-keyword kw">end</span>
2533
- 1101: <span class="ruby-keyword kw">end</span></pre>
2600
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1100</span>
2601
+ 1100: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_complete</span>(<span class="ruby-identifier">query</span>)
2602
+ 1101: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span>
2603
+ 1102: <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">complete</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'complete'</span>).<span class="ruby-identifier">to_i</span>
2604
+ 1103: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-node">&quot;#{complete}%&quot;</span>
2605
+ 1104: <span class="ruby-keyword kw">else</span>
2606
+ 1105: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">''</span>
2607
+ 1106: <span class="ruby-keyword kw">end</span>
2608
+ 1107: <span class="ruby-keyword kw">end</span></pre>
2534
2609
  </div>
2535
2610
 
2536
2611
  </div>
@@ -2542,7 +2617,7 @@ that have a direct dependency to this end of the task.
2542
2617
 
2543
2618
 
2544
2619
  <div id="query-cost-method" class="method-detail ">
2545
- <a name="M001370"></a>
2620
+ <a name="method-i-query_cost"></a>
2546
2621
 
2547
2622
  <div class="method-heading">
2548
2623
 
@@ -2566,17 +2641,17 @@ cost directly generated by the resource is taken into account.
2566
2641
  <div class="method-source-code"
2567
2642
  id="query-cost-source">
2568
2643
  <pre>
2569
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1106</span>
2570
- 1106: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_cost</span>(<span class="ruby-identifier">query</span>)
2571
- 1107: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">costAccount</span>
2572
- 1108: <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> =
2573
- 1109: <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>,
2574
- 1110: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2575
- 1111: <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>)
2576
- 1112: <span class="ruby-keyword kw">else</span>
2577
- 1113: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No cost account'</span>
2578
- 1114: <span class="ruby-keyword kw">end</span>
2579
- 1115: <span class="ruby-keyword kw">end</span></pre>
2644
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1112</span>
2645
+ 1112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_cost</span>(<span class="ruby-identifier">query</span>)
2646
+ 1113: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">costAccount</span>
2647
+ 1114: <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> =
2648
+ 1115: <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>,
2649
+ 1116: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2650
+ 1117: <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>)
2651
+ 1118: <span class="ruby-keyword kw">else</span>
2652
+ 1119: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No cost account'</span>
2653
+ 1120: <span class="ruby-keyword kw">end</span>
2654
+ 1121: <span class="ruby-keyword kw">end</span></pre>
2580
2655
  </div>
2581
2656
 
2582
2657
  </div>
@@ -2588,7 +2663,7 @@ cost directly generated by the resource is taken into account.
2588
2663
 
2589
2664
 
2590
2665
  <div id="query-duration-method" class="method-detail ">
2591
- <a name="M001371"></a>
2666
+ <a name="method-i-query_duration"></a>
2592
2667
 
2593
2668
  <div class="method-heading">
2594
2669
 
@@ -2610,12 +2685,12 @@ tasks. Also for those who did not have a &#8216;duration&#8217; attribute.
2610
2685
  <div class="method-source-code"
2611
2686
  id="query-duration-source">
2612
2687
  <pre>
2613
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1119</span>
2614
- 1119: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_duration</span>(<span class="ruby-identifier">query</span>)
2615
- 1120: <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">duration</span> =
2616
- 1121: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)) <span class="ruby-operator">/</span> (<span class="ruby-value">60</span> * <span class="ruby-value">60</span> * <span class="ruby-value">24</span>)
2617
- 1122: <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">duration</span>)
2618
- 1123: <span class="ruby-keyword kw">end</span></pre>
2688
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1125</span>
2689
+ 1125: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_duration</span>(<span class="ruby-identifier">query</span>)
2690
+ 1126: <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">duration</span> =
2691
+ 1127: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)) <span class="ruby-operator">/</span> (<span class="ruby-value">60</span> * <span class="ruby-value">60</span> * <span class="ruby-value">24</span>)
2692
+ 1128: <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">duration</span>)
2693
+ 1129: <span class="ruby-keyword kw">end</span></pre>
2619
2694
  </div>
2620
2695
 
2621
2696
  </div>
@@ -2627,7 +2702,7 @@ tasks. Also for those who did not have a &#8216;duration&#8217; attribute.
2627
2702
 
2628
2703
 
2629
2704
  <div id="query-effort-method" class="method-detail ">
2630
- <a name="M001374"></a>
2705
+ <a name="method-i-query_effort"></a>
2631
2706
 
2632
2707
  <div class="method-heading">
2633
2708
 
@@ -2650,12 +2725,12 @@ effort allocated for this resource is taken into account.
2650
2725
  <div class="method-source-code"
2651
2726
  id="query-effort-source">
2652
2727
  <pre>
2653
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1155</span>
2654
- 1155: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effort</span>(<span class="ruby-identifier">query</span>)
2655
- 1156: <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> =
2656
- 1157: <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>)
2657
- 1158: <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>)
2658
- 1159: <span class="ruby-keyword kw">end</span></pre>
2728
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1161</span>
2729
+ 1161: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effort</span>(<span class="ruby-identifier">query</span>)
2730
+ 1162: <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> =
2731
+ 1163: <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>)
2732
+ 1164: <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>)
2733
+ 1165: <span class="ruby-keyword kw">end</span></pre>
2659
2734
  </div>
2660
2735
 
2661
2736
  </div>
@@ -2667,7 +2742,7 @@ effort allocated for this resource is taken into account.
2667
2742
 
2668
2743
 
2669
2744
  <div id="query-effortdone-method" class="method-detail ">
2670
- <a name="M001372"></a>
2745
+ <a name="method-i-query_effortdone"></a>
2671
2746
 
2672
2747
  <div class="method-heading">
2673
2748
 
@@ -2691,15 +2766,15 @@ taken into account.
2691
2766
  <div class="method-source-code"
2692
2767
  id="query-effortdone-source">
2693
2768
  <pre>
2694
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1128</span>
2695
- 1128: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effortdone</span>(<span class="ruby-identifier">query</span>)
2696
- 1129: <span class="ruby-comment cmt"># For this query, we always override the query period.</span>
2697
- 1130: <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> =
2698
- 1131: <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'start'</span>]),
2699
- 1132: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]),
2700
- 1133: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2701
- 1134: <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>)
2702
- 1135: <span class="ruby-keyword kw">end</span></pre>
2769
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1134</span>
2770
+ 1134: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effortdone</span>(<span class="ruby-identifier">query</span>)
2771
+ 1135: <span class="ruby-comment cmt"># For this query, we always override the query period.</span>
2772
+ 1136: <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> =
2773
+ 1137: <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'start'</span>]),
2774
+ 1138: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]),
2775
+ 1139: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2776
+ 1140: <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>)
2777
+ 1141: <span class="ruby-keyword kw">end</span></pre>
2703
2778
  </div>
2704
2779
 
2705
2780
  </div>
@@ -2711,7 +2786,7 @@ taken into account.
2711
2786
 
2712
2787
 
2713
2788
  <div id="query-effortleft-method" class="method-detail ">
2714
- <a name="M001373"></a>
2789
+ <a name="method-i-query_effortleft"></a>
2715
2790
 
2716
2791
  <div class="method-heading">
2717
2792
 
@@ -2735,17 +2810,17 @@ taken into account.
2735
2810
  <div class="method-source-code"
2736
2811
  id="query-effortleft-source">
2737
2812
  <pre>
2738
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1141</span>
2739
- 1141: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effortleft</span>(<span class="ruby-identifier">query</span>)
2740
- 1142: <span class="ruby-comment cmt"># For this query, we always override the query period.</span>
2741
- 1143: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">start</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]
2742
- 1144: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">end</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>]
2743
- 1145: <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> =
2744
- 1146: <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]),
2745
- 1147: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>]),
2746
- 1148: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2747
- 1149: <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>)
2748
- 1150: <span class="ruby-keyword kw">end</span></pre>
2813
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1147</span>
2814
+ 1147: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_effortleft</span>(<span class="ruby-identifier">query</span>)
2815
+ 1148: <span class="ruby-comment cmt"># For this query, we always override the query period.</span>
2816
+ 1149: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">start</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]
2817
+ 1150: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">end</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>]
2818
+ 1151: <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> =
2819
+ 1152: <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]),
2820
+ 1153: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'end'</span>]),
2821
+ 1154: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2822
+ 1155: <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>)
2823
+ 1156: <span class="ruby-keyword kw">end</span></pre>
2749
2824
  </div>
2750
2825
 
2751
2826
  </div>
@@ -2757,7 +2832,7 @@ taken into account.
2757
2832
 
2758
2833
 
2759
2834
  <div id="query-followers-method" class="method-detail ">
2760
- <a name="M001375"></a>
2835
+ <a name="method-i-query_followers"></a>
2761
2836
 
2762
2837
  <div class="method-heading">
2763
2838
 
@@ -2776,38 +2851,38 @@ taken into account.
2776
2851
  <div class="method-source-code"
2777
2852
  id="query-followers-source">
2778
2853
  <pre>
2779
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1161</span>
2780
- 1161: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_followers</span>(<span class="ruby-identifier">query</span>)
2781
- 1162: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
2782
- 1163:
2783
- 1164: <span class="ruby-comment cmt"># First gather the task that depend on the start of this task.</span>
2784
- 1165: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'startsuccs'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2785
- 1166: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2786
- 1167: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2787
- 1168: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2788
- 1169: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;[ #{taskEnd}&quot;</span>
2789
- 1170: <span class="ruby-keyword kw">else</span>
2790
- 1171: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2791
- 1172: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;] #{taskStart}&quot;</span>
2792
- 1173: <span class="ruby-keyword kw">end</span>
2793
- 1174: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2794
- 1175: <span class="ruby-keyword kw">end</span>
2795
- 1176: <span class="ruby-comment cmt"># Than add the tasks that depend on the end of this task.</span>
2796
- 1177: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endsuccs'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2797
- 1178: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2798
- 1179: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2799
- 1180: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2800
- 1181: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;[ #{taskEnd}&quot;</span>
2801
- 1182: <span class="ruby-keyword kw">else</span>
2802
- 1183: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2803
- 1184: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;] #{taskStart}&quot;</span>
2804
- 1185: <span class="ruby-keyword kw">end</span>
2805
- 1186: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2806
- 1187: <span class="ruby-keyword kw">end</span>
2807
- 1188:
2808
- 1189: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">str</span>)
2809
- 1190: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
2810
- 1191: <span class="ruby-keyword kw">end</span></pre>
2854
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1167</span>
2855
+ 1167: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_followers</span>(<span class="ruby-identifier">query</span>)
2856
+ 1168: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
2857
+ 1169:
2858
+ 1170: <span class="ruby-comment cmt"># First gather the task that depend on the start of this task.</span>
2859
+ 1171: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'startsuccs'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2860
+ 1172: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2861
+ 1173: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2862
+ 1174: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2863
+ 1175: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;] #{taskEnd}&quot;</span>
2864
+ 1176: <span class="ruby-keyword kw">else</span>
2865
+ 1177: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2866
+ 1178: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;[ #{taskStart}&quot;</span>
2867
+ 1179: <span class="ruby-keyword kw">end</span>
2868
+ 1180: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2869
+ 1181: <span class="ruby-keyword kw">end</span>
2870
+ 1182: <span class="ruby-comment cmt"># Than add the tasks that depend on the end of this task.</span>
2871
+ 1183: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endsuccs'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2872
+ 1184: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2873
+ 1185: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2874
+ 1186: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2875
+ 1187: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;] #{taskEnd}&quot;</span>
2876
+ 1188: <span class="ruby-keyword kw">else</span>
2877
+ 1189: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2878
+ 1190: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;[ #{taskStart}&quot;</span>
2879
+ 1191: <span class="ruby-keyword kw">end</span>
2880
+ 1192: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2881
+ 1193: <span class="ruby-keyword kw">end</span>
2882
+ 1194:
2883
+ 1195: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">str</span>)
2884
+ 1196: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
2885
+ 1197: <span class="ruby-keyword kw">end</span></pre>
2811
2886
  </div>
2812
2887
 
2813
2888
  </div>
@@ -2819,7 +2894,7 @@ taken into account.
2819
2894
 
2820
2895
 
2821
2896
  <div id="query-precursors-method" class="method-detail ">
2822
- <a name="M001376"></a>
2897
+ <a name="method-i-query_precursors"></a>
2823
2898
 
2824
2899
  <div class="method-heading">
2825
2900
 
@@ -2838,38 +2913,38 @@ taken into account.
2838
2913
  <div class="method-source-code"
2839
2914
  id="query-precursors-source">
2840
2915
  <pre>
2841
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1193</span>
2842
- 1193: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_precursors</span>(<span class="ruby-identifier">query</span>)
2843
- 1194: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
2844
- 1195:
2845
- 1196: <span class="ruby-comment cmt"># First gather the task that depend on the start of this task.</span>
2846
- 1197: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'startpreds'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2847
- 1198: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2848
- 1199: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2849
- 1200: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2850
- 1201: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;[ #{taskEnd}&quot;</span>
2851
- 1202: <span class="ruby-keyword kw">else</span>
2852
- 1203: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2853
- 1204: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;[ #{taskStart}&quot;</span>
2854
- 1205: <span class="ruby-keyword kw">end</span>
2855
- 1206: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2856
- 1207: <span class="ruby-keyword kw">end</span>
2857
- 1208: <span class="ruby-comment cmt"># Than add the tasks that depend on the end of this task.</span>
2858
- 1209: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endpreds'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2859
- 1210: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2860
- 1211: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2861
- 1212: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2862
- 1213: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;] #{taskEnd}&quot;</span>
2863
- 1214: <span class="ruby-keyword kw">else</span>
2864
- 1215: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2865
- 1216: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;] #{taskStart}&quot;</span>
2866
- 1217: <span class="ruby-keyword kw">end</span>
2867
- 1218: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2868
- 1219: <span class="ruby-keyword kw">end</span>
2869
- 1220:
2870
- 1221: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">str</span>)
2871
- 1222: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
2872
- 1223: <span class="ruby-keyword kw">end</span></pre>
2916
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1199</span>
2917
+ 1199: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_precursors</span>(<span class="ruby-identifier">query</span>)
2918
+ 1200: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
2919
+ 1201:
2920
+ 1202: <span class="ruby-comment cmt"># First gather the task that depend on the start of this task.</span>
2921
+ 1203: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'startpreds'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2922
+ 1204: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2923
+ 1205: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2924
+ 1206: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2925
+ 1207: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;] #{taskEnd}&quot;</span>
2926
+ 1208: <span class="ruby-keyword kw">else</span>
2927
+ 1209: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2928
+ 1210: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;[ #{taskStart}&quot;</span>
2929
+ 1211: <span class="ruby-keyword kw">end</span>
2930
+ 1212: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2931
+ 1213: <span class="ruby-keyword kw">end</span>
2932
+ 1214: <span class="ruby-comment cmt"># Than add the tasks that depend on the end of this task.</span>
2933
+ 1215: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endpreds'</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-identifier">onEnd</span><span class="ruby-operator">|</span>
2934
+ 1216: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;* &lt;nowiki&gt;#{task.name}&lt;/nowiki&gt; (#{task.fullId}) &quot;</span>
2935
+ 1217: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">onEnd</span>
2936
+ 1218: <span class="ruby-identifier">taskEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2937
+ 1219: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;[-&gt;] #{taskEnd}&quot;</span>
2938
+ 1220: <span class="ruby-keyword kw">else</span>
2939
+ 1221: <span class="ruby-identifier">taskStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">query</span>.<span class="ruby-identifier">timeFormat</span>)
2940
+ 1222: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;]-&gt;[ #{taskStart}&quot;</span>
2941
+ 1223: <span class="ruby-keyword kw">end</span>
2942
+ 1224: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;\n&quot;</span>
2943
+ 1225: <span class="ruby-keyword kw">end</span>
2944
+ 1226:
2945
+ 1227: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">str</span>)
2946
+ 1228: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
2947
+ 1229: <span class="ruby-keyword kw">end</span></pre>
2873
2948
  </div>
2874
2949
 
2875
2950
  </div>
@@ -2881,7 +2956,7 @@ taken into account.
2881
2956
 
2882
2957
 
2883
2958
  <div id="query-resources-method" class="method-detail ">
2884
- <a name="M001377"></a>
2959
+ <a name="method-i-query_resources"></a>
2885
2960
 
2886
2961
  <div class="method-heading">
2887
2962
 
@@ -2903,19 +2978,19 @@ report time frame.
2903
2978
  <div class="method-source-code"
2904
2979
  id="query-resources-source">
2905
2980
  <pre>
2906
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1227</span>
2907
- 1227: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_resources</span>(<span class="ruby-identifier">query</span>)
2908
- 1228: <span class="ruby-identifier">list</span> = <span class="ruby-value str">''</span>
2909
- 1229: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
2910
- 1230: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">getAllocatedTime</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">resource</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0.0</span>
2911
- 1231: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">', '</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">empty?</span>
2912
- 1232: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{resource.name} (#{resource.fullId})&quot;</span>
2913
- 1233: <span class="ruby-keyword kw">end</span>
2914
- 1234: <span class="ruby-keyword kw">end</span>
2915
- 1235: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">list</span>
2916
- 1236: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">list</span>)
2917
- 1237: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
2918
- 1238: <span class="ruby-keyword kw">end</span></pre>
2981
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1233</span>
2982
+ 1233: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_resources</span>(<span class="ruby-identifier">query</span>)
2983
+ 1234: <span class="ruby-identifier">list</span> = <span class="ruby-value str">''</span>
2984
+ 1235: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
2985
+ 1236: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">getAllocatedTime</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">resource</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0.0</span>
2986
+ 1237: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">', '</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">list</span>.<span class="ruby-identifier">empty?</span>
2987
+ 1238: <span class="ruby-identifier">list</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{resource.name} (#{resource.fullId})&quot;</span>
2988
+ 1239: <span class="ruby-keyword kw">end</span>
2989
+ 1240: <span class="ruby-keyword kw">end</span>
2990
+ 1241: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">sortable</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-identifier">list</span>
2991
+ 1242: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">list</span>)
2992
+ 1243: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
2993
+ 1244: <span class="ruby-keyword kw">end</span></pre>
2919
2994
  </div>
2920
2995
 
2921
2996
  </div>
@@ -2927,7 +3002,7 @@ report time frame.
2927
3002
 
2928
3003
 
2929
3004
  <div id="query-revenue-method" class="method-detail ">
2930
- <a name="M001378"></a>
3005
+ <a name="method-i-query_revenue"></a>
2931
3006
 
2932
3007
  <div class="method-heading">
2933
3008
 
@@ -2951,17 +3026,17 @@ revenue directly generated by the resource is taken into account.
2951
3026
  <div class="method-source-code"
2952
3027
  id="query-revenue-source">
2953
3028
  <pre>
2954
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1243</span>
2955
- 1243: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_revenue</span>(<span class="ruby-identifier">query</span>)
2956
- 1244: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">revenueAccount</span>
2957
- 1245: <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> =
2958
- 1246: <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>,
2959
- 1247: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
2960
- 1248: <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>)
2961
- 1249: <span class="ruby-keyword kw">else</span>
2962
- 1250: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No revenue account'</span>
2963
- 1251: <span class="ruby-keyword kw">end</span>
2964
- 1252: <span class="ruby-keyword kw">end</span></pre>
3029
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1249</span>
3030
+ 1249: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_revenue</span>(<span class="ruby-identifier">query</span>)
3031
+ 1250: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">revenueAccount</span>
3032
+ 1251: <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> =
3033
+ 1252: <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>,
3034
+ 1253: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span>)
3035
+ 1254: <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>)
3036
+ 1255: <span class="ruby-keyword kw">else</span>
3037
+ 1256: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">string</span> = <span class="ruby-value str">'No revenue account'</span>
3038
+ 1257: <span class="ruby-keyword kw">end</span>
3039
+ 1258: <span class="ruby-keyword kw">end</span></pre>
2965
3040
  </div>
2966
3041
 
2967
3042
  </div>
@@ -2973,7 +3048,7 @@ revenue directly generated by the resource is taken into account.
2973
3048
 
2974
3049
 
2975
3050
  <div id="query-targets-method" class="method-detail ">
2976
- <a name="M001379"></a>
3051
+ <a name="method-i-query_targets"></a>
2977
3052
 
2978
3053
  <div class="method-heading">
2979
3054
 
@@ -2992,23 +3067,23 @@ revenue directly generated by the resource is taken into account.
2992
3067
  <div class="method-source-code"
2993
3068
  id="query-targets-source">
2994
3069
  <pre>
2995
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1254</span>
2996
- 1254: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_targets</span>(<span class="ruby-identifier">query</span>)
2997
- 1255: <span class="ruby-identifier">targetList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">tasks</span>, <span class="ruby-keyword kw">false</span>)
2998
- 1256: <span class="ruby-identifier">targets</span>(<span class="ruby-identifier">targetList</span>)
2999
- 1257: <span class="ruby-identifier">targetList</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-ivar">@property</span>)
3000
- 1258: <span class="ruby-identifier">targetList</span>.<span class="ruby-identifier">setSorting</span>([[<span class="ruby-value str">'start'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-ivar">@scenarioIdx</span>],
3001
- 1259: [<span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1</span> ]])
3002
- 1260: <span class="ruby-identifier">targetList</span>.<span class="ruby-identifier">sort!</span>
3003
- 1261:
3004
- 1262: <span class="ruby-identifier">res</span> = <span class="ruby-value str">''</span>
3005
- 1263: <span class="ruby-identifier">targetList</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>
3006
- 1264: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-ivar">@property</span>.<span class="ruby-identifier">project</span>[<span class="ruby-value str">'timeFormat'</span>])
3007
- 1265: <span class="ruby-identifier">res</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;# #{task.name} (#{task.fullId}) #{date}\n&quot;</span>
3008
- 1266: <span class="ruby-keyword kw">end</span>
3009
- 1267: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">res</span>)
3010
- 1268: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
3011
- 1269: <span class="ruby-keyword kw">end</span></pre>
3070
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1260</span>
3071
+ 1260: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">query_targets</span>(<span class="ruby-identifier">query</span>)
3072
+ 1261: <span class="ruby-identifier">targetList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">tasks</span>, <span class="ruby-keyword kw">false</span>)
3073
+ 1262: <span class="ruby-identifier">targets</span>(<span class="ruby-identifier">targetList</span>)
3074
+ 1263: <span class="ruby-identifier">targetList</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-ivar">@property</span>)
3075
+ 1264: <span class="ruby-identifier">targetList</span>.<span class="ruby-identifier">setSorting</span>([[<span class="ruby-value str">'start'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-ivar">@scenarioIdx</span>],
3076
+ 1265: [<span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1</span> ]])
3077
+ 1266: <span class="ruby-identifier">targetList</span>.<span class="ruby-identifier">sort!</span>
3078
+ 1267:
3079
+ 1268: <span class="ruby-identifier">res</span> = <span class="ruby-value str">''</span>
3080
+ 1269: <span class="ruby-identifier">targetList</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>
3081
+ 1270: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">to_s</span>(<span class="ruby-ivar">@property</span>.<span class="ruby-identifier">project</span>[<span class="ruby-value str">'timeFormat'</span>])
3082
+ 1271: <span class="ruby-identifier">res</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;# #{task.name} (#{task.fullId}) #{date}\n&quot;</span>
3083
+ 1272: <span class="ruby-keyword kw">end</span>
3084
+ 1273: <span class="ruby-identifier">rText</span> = <span class="ruby-constant">RichText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">res</span>)
3085
+ 1274: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">rti</span> = <span class="ruby-identifier">rText</span>.<span class="ruby-identifier">generateIntermediateFormat</span>
3086
+ 1275: <span class="ruby-keyword kw">end</span></pre>
3012
3087
  </div>
3013
3088
 
3014
3089
  </div>
@@ -3020,7 +3095,7 @@ revenue directly generated by the resource is taken into account.
3020
3095
 
3021
3096
 
3022
3097
  <div id="ready-or-cheduling--method" class="method-detail ">
3023
- <a name="M001360"></a>
3098
+ <a name="method-i-readyForScheduling%3F"></a>
3024
3099
 
3025
3100
  <div class="method-heading">
3026
3101
 
@@ -3065,7 +3140,7 @@ least one specified end date and a duration criteria or the other end date.
3065
3140
 
3066
3141
 
3067
3142
  <div id="reset-oop-lags-method" class="method-detail ">
3068
- <a name="M001354"></a>
3143
+ <a name="method-i-resetLoopFlags"></a>
3069
3144
 
3070
3145
  <div class="method-heading">
3071
3146
 
@@ -3099,7 +3174,7 @@ least one specified end date and a duration criteria or the other end date.
3099
3174
 
3100
3175
 
3101
3176
  <div id="schedule-method" class="method-detail ">
3102
- <a name="M001361"></a>
3177
+ <a name="method-i-schedule"></a>
3103
3178
 
3104
3179
  <div class="method-heading">
3105
3180
 
@@ -3166,7 +3241,7 @@ now.
3166
3241
 
3167
3242
 
3168
3243
  <div id="schedule-ontainer-method" class="method-detail ">
3169
- <a name="M001364"></a>
3244
+ <a name="method-i-scheduleContainer"></a>
3170
3245
 
3171
3246
  <div class="method-heading">
3172
3247
 
@@ -3188,44 +3263,46 @@ the operation if any of the child tasks are not yet scheduled.
3188
3263
  <div class="method-source-code"
3189
3264
  id="schedule-ontainer-source">
3190
3265
  <pre>
3191
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 927</span>
3192
- 927: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleContainer</span>
3193
- 928: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>) <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
3194
- 929:
3195
- 930: <span class="ruby-identifier">nStart</span> = <span class="ruby-keyword kw">nil</span>
3196
- 931: <span class="ruby-identifier">nEnd</span> = <span class="ruby-keyword kw">nil</span>
3197
- 932:
3198
- 933: <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">task</span><span class="ruby-operator">|</span>
3199
- 934: <span class="ruby-comment cmt"># Abort if a child has not yet been scheduled.</span>
3200
- 935: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3266
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 931</span>
3267
+ 931: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleContainer</span>
3268
+ 932: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>) <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
3269
+ 933:
3270
+ 934: <span class="ruby-identifier">nStart</span> = <span class="ruby-keyword kw">nil</span>
3271
+ 935: <span class="ruby-identifier">nEnd</span> = <span class="ruby-keyword kw">nil</span>
3201
3272
  936:
3202
- 937: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nStart</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">nStart</span>
3203
- 938: <span class="ruby-identifier">nStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3204
- 939: <span class="ruby-keyword kw">end</span>
3205
- 940: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nEnd</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">nEnd</span>
3206
- 941: <span class="ruby-identifier">nEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3207
- 942: <span class="ruby-keyword kw">end</span>
3208
- 943: <span class="ruby-keyword kw">end</span>
3209
- 944:
3210
- 945: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
3211
- 946:
3212
- 947: <span class="ruby-identifier">startSet</span> = <span class="ruby-identifier">endSet</span> = <span class="ruby-keyword kw">false</span>
3213
- 948: <span class="ruby-comment cmt"># Propagate the dates to other dependent tasks.</span>
3214
- 949: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">nStart</span>
3215
- 950: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">nStart</span>
3216
- 951: <span class="ruby-identifier">startSet</span> = <span class="ruby-keyword kw">true</span>
3217
- 952: <span class="ruby-keyword kw">end</span>
3218
- 953: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">nEnd</span>
3219
- 954: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">nEnd</span>
3220
- 955: <span class="ruby-identifier">endSet</span> = <span class="ruby-keyword kw">true</span>
3221
- 956: <span class="ruby-keyword kw">end</span>
3222
- 957: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Container task #{@property.fullId}: #{a('start')} -&gt; #{a('end')}&quot;</span>
3223
- 958:
3224
- 959: <span class="ruby-comment cmt"># If we have modified the start or end date, we need to communicate this</span>
3225
- 960: <span class="ruby-comment cmt"># new date to surrounding tasks.</span>
3226
- 961: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">nStart</span>, <span class="ruby-keyword kw">false</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startSet</span>
3227
- 962: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">nEnd</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endSet</span>
3228
- 963: <span class="ruby-keyword kw">end</span></pre>
3273
+ 937: <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">task</span><span class="ruby-operator">|</span>
3274
+ 938: <span class="ruby-comment cmt"># Abort if a child has not yet been scheduled.</span>
3275
+ 939: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3276
+ 940:
3277
+ 941: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nStart</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">nStart</span>
3278
+ 942: <span class="ruby-identifier">nStart</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3279
+ 943: <span class="ruby-keyword kw">end</span>
3280
+ 944: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nEnd</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">nEnd</span>
3281
+ 945: <span class="ruby-identifier">nEnd</span> = <span class="ruby-identifier">task</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3282
+ 946: <span class="ruby-keyword kw">end</span>
3283
+ 947: <span class="ruby-keyword kw">end</span>
3284
+ 948:
3285
+ 949: <span class="ruby-identifier">startSet</span> = <span class="ruby-identifier">endSet</span> = <span class="ruby-keyword kw">false</span>
3286
+ 950: <span class="ruby-comment cmt"># Propagate the dates to other dependent tasks.</span>
3287
+ 951: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">nStart</span>
3288
+ 952: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">nStart</span>
3289
+ 953: <span class="ruby-identifier">startSet</span> = <span class="ruby-keyword kw">true</span>
3290
+ 954: <span class="ruby-keyword kw">end</span>
3291
+ 955: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">nEnd</span>
3292
+ 956: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">nEnd</span>
3293
+ 957: <span class="ruby-identifier">endSet</span> = <span class="ruby-keyword kw">true</span>
3294
+ 958: <span class="ruby-keyword kw">end</span>
3295
+ 959: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)
3296
+ 960: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Start (#{a('start')}) and end (#{a('end')}) must be set&quot;</span>
3297
+ 961: <span class="ruby-keyword kw">end</span>
3298
+ 962: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
3299
+ 963: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Container task #{@property.fullId}: #{a('start')} -&gt; #{a('end')}&quot;</span>
3300
+ 964:
3301
+ 965: <span class="ruby-comment cmt"># If we have modified the start or end date, we need to communicate this</span>
3302
+ 966: <span class="ruby-comment cmt"># new date to surrounding tasks.</span>
3303
+ 967: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">nStart</span>, <span class="ruby-keyword kw">false</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">startSet</span>
3304
+ 968: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">nEnd</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">endSet</span>
3305
+ 969: <span class="ruby-keyword kw">end</span></pre>
3229
3306
  </div>
3230
3307
 
3231
3308
  </div>
@@ -3243,7 +3320,7 @@ the operation if any of the child tasks are not yet scheduled.
3243
3320
 
3244
3321
 
3245
3322
  <div id="book-ookings-method" class="method-detail ">
3246
- <a name="M001389"></a>
3323
+ <a name="method-i-bookBookings"></a>
3247
3324
 
3248
3325
  <div class="method-heading">
3249
3326
 
@@ -3268,67 +3345,67 @@ href="Interval.html">Interval</a>.
3268
3345
  <div class="method-source-code"
3269
3346
  id="book-ookings-source">
3270
3347
  <pre>
3271
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1612</span>
3272
- 1612: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookBookings</span>
3273
- 1613: <span class="ruby-identifier">scheduled</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>)
3274
- 1614: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">booking</span><span class="ruby-operator">|</span>
3275
- 1615: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>.<span class="ruby-identifier">leaf?</span>
3276
- 1616: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_resource_not_leaf'</span>,
3277
- 1617: <span class="ruby-value str">&quot;Booked resources may not be group resources&quot;</span>, <span class="ruby-keyword kw">true</span>,
3278
- 1618: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
3279
- 1619: <span class="ruby-keyword kw">end</span>
3280
- 1620: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>)
3281
- 1621: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_forward_only'</span>,
3282
- 1622: <span class="ruby-value str">&quot;Only forward scheduled tasks may have booking statements.&quot;</span>)
3283
- 1623: <span class="ruby-keyword kw">end</span>
3284
- 1624: <span class="ruby-identifier">slotDuration</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
3285
- 1625: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">interval</span><span class="ruby-operator">|</span>
3286
- 1626: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>)
3287
- 1627: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>
3288
- 1628: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">end</span>)
3289
- 1629: <span class="ruby-identifier">tEnd</span> = <span class="ruby-keyword kw">nil</span>
3290
- 1630: <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>
3291
- 1631: <span class="ruby-identifier">tEnd</span> = <span class="ruby-identifier">date</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
3292
- 1632: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>.<span class="ruby-identifier">bookBooking</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">idx</span>, <span class="ruby-identifier">booking</span>)
3293
- 1633: <span class="ruby-comment cmt"># Booking was successful for this time slot.</span>
3294
- 1634: <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>[<span class="ruby-value str">'efficiency'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3295
- 1635:
3296
- 1636: <span class="ruby-comment cmt"># Set start and lastSlot if appropriate. The task start will be</span>
3297
- 1637: <span class="ruby-comment cmt"># set to the begining of the first booked slot. The lastSlot</span>
3298
- 1638: <span class="ruby-comment cmt"># will be set to the last booked slot</span>
3299
- 1639: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">date</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@lastSlot</span>
3300
- 1640: <span class="ruby-ivar">@tentativeEnd</span> = <span class="ruby-identifier">tEnd</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tentativeEnd</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
3301
- 1641: <span class="ruby-ivar">@tentativeEnd</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">tEnd</span>
3302
- 1642: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>))
3303
- 1643: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">date</span>
3304
- 1644: <span class="ruby-keyword kw">end</span>
3305
- 1645:
3306
- 1646: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>)
3307
- 1647: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>
3308
- 1648: <span class="ruby-keyword kw">end</span>
3309
- 1649: <span class="ruby-keyword kw">end</span>
3310
- 1650: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">tEnd</span>)
3311
- 1651: <span class="ruby-comment cmt"># For tasks with a 'length' we track the covered work time and</span>
3312
- 1652: <span class="ruby-comment cmt"># set the task to 'scheduled' when we have enough length.</span>
3313
- 1653: <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
3314
- 1654: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">scheduled</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>)
3315
- 1655: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">tEnd</span>
3316
- 1656: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
3317
- 1657: <span class="ruby-keyword kw">end</span>
3318
- 1658: <span class="ruby-keyword kw">end</span>
3319
- 1659: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">tEnd</span>
3320
- 1660: <span class="ruby-keyword kw">end</span>
3321
- 1661: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@tentativeEnd</span>
3322
- 1662: <span class="ruby-ivar">@doneDuration</span> = ((<span class="ruby-ivar">@tentativeEnd</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)) <span class="ruby-operator">/</span>
3323
- 1663: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
3324
- 1664: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">scheduled</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneDuration</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>)
3325
- 1665: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-ivar">@tentativeEnd</span>
3326
- 1666: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
3327
- 1667: <span class="ruby-keyword kw">end</span>
3328
- 1668: <span class="ruby-keyword kw">end</span>
3329
- 1669: <span class="ruby-keyword kw">end</span>
3330
- 1670: <span class="ruby-keyword kw">end</span>
3331
- 1671: <span class="ruby-keyword kw">end</span></pre>
3348
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1647</span>
3349
+ 1647: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookBookings</span>
3350
+ 1648: <span class="ruby-identifier">scheduled</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>)
3351
+ 1649: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">booking</span><span class="ruby-operator">|</span>
3352
+ 1650: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>.<span class="ruby-identifier">leaf?</span>
3353
+ 1651: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_resource_not_leaf'</span>,
3354
+ 1652: <span class="ruby-value str">&quot;Booked resources may not be group resources&quot;</span>, <span class="ruby-keyword kw">true</span>,
3355
+ 1653: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">sourceFileInfo</span>)
3356
+ 1654: <span class="ruby-keyword kw">end</span>
3357
+ 1655: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">scheduled</span>
3358
+ 1656: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'booking_forward_only'</span>,
3359
+ 1657: <span class="ruby-value str">&quot;Only forward scheduled tasks may have booking statements.&quot;</span>)
3360
+ 1658: <span class="ruby-keyword kw">end</span>
3361
+ 1659: <span class="ruby-identifier">slotDuration</span> = <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
3362
+ 1660: <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">intervals</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">interval</span><span class="ruby-operator">|</span>
3363
+ 1661: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>)
3364
+ 1662: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>
3365
+ 1663: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">end</span>)
3366
+ 1664: <span class="ruby-identifier">tEnd</span> = <span class="ruby-keyword kw">nil</span>
3367
+ 1665: <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>
3368
+ 1666: <span class="ruby-identifier">tEnd</span> = <span class="ruby-identifier">date</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
3369
+ 1667: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>.<span class="ruby-identifier">bookBooking</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">idx</span>, <span class="ruby-identifier">booking</span>)
3370
+ 1668: <span class="ruby-comment cmt"># Booking was successful for this time slot.</span>
3371
+ 1669: <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>[<span class="ruby-value str">'efficiency'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3372
+ 1670:
3373
+ 1671: <span class="ruby-comment cmt"># Set start and lastSlot if appropriate. The task start will be</span>
3374
+ 1672: <span class="ruby-comment cmt"># set to the begining of the first booked slot. The lastSlot</span>
3375
+ 1673: <span class="ruby-comment cmt"># will be set to the last booked slot</span>
3376
+ 1674: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">date</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@lastSlot</span>
3377
+ 1675: <span class="ruby-ivar">@tentativeEnd</span> = <span class="ruby-identifier">tEnd</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tentativeEnd</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
3378
+ 1676: <span class="ruby-ivar">@tentativeEnd</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">tEnd</span>
3379
+ 1677: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">scheduled</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>))
3380
+ 1678: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">date</span>
3381
+ 1679: <span class="ruby-keyword kw">end</span>
3382
+ 1680:
3383
+ 1681: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>)
3384
+ 1682: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">booking</span>.<span class="ruby-identifier">resource</span>
3385
+ 1683: <span class="ruby-keyword kw">end</span>
3386
+ 1684: <span class="ruby-keyword kw">end</span>
3387
+ 1685: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">tEnd</span>)
3388
+ 1686: <span class="ruby-comment cmt"># For tasks with a 'length' we track the covered work time and</span>
3389
+ 1687: <span class="ruby-comment cmt"># set the task to 'scheduled' when we have enough length.</span>
3390
+ 1688: <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
3391
+ 1689: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">scheduled</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>)
3392
+ 1690: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">tEnd</span>
3393
+ 1691: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
3394
+ 1692: <span class="ruby-keyword kw">end</span>
3395
+ 1693: <span class="ruby-keyword kw">end</span>
3396
+ 1694: <span class="ruby-identifier">date</span> = <span class="ruby-identifier">tEnd</span>
3397
+ 1695: <span class="ruby-keyword kw">end</span>
3398
+ 1696: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@tentativeEnd</span>
3399
+ 1697: <span class="ruby-ivar">@doneDuration</span> = ((<span class="ruby-ivar">@tentativeEnd</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)) <span class="ruby-operator">/</span>
3400
+ 1698: <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
3401
+ 1699: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">scheduled</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneDuration</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>)
3402
+ 1700: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-ivar">@tentativeEnd</span>
3403
+ 1701: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
3404
+ 1702: <span class="ruby-keyword kw">end</span>
3405
+ 1703: <span class="ruby-keyword kw">end</span>
3406
+ 1704: <span class="ruby-keyword kw">end</span>
3407
+ 1705: <span class="ruby-keyword kw">end</span>
3408
+ 1706: <span class="ruby-keyword kw">end</span></pre>
3332
3409
  </div>
3333
3410
 
3334
3411
  </div>
@@ -3340,7 +3417,7 @@ href="Interval.html">Interval</a>.
3340
3417
 
3341
3418
 
3342
3419
  <div id="book-esource-method" class="method-detail ">
3343
- <a name="M001388"></a>
3420
+ <a name="method-i-bookResource"></a>
3344
3421
 
3345
3422
  <div class="method-heading">
3346
3423
 
@@ -3359,43 +3436,45 @@ href="Interval.html">Interval</a>.
3359
3436
  <div class="method-source-code"
3360
3437
  id="book-esource-source">
3361
3438
  <pre>
3362
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1572</span>
3363
- 1572: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookResource</span>(<span class="ruby-identifier">resource</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">date</span>)
3364
- 1573: <span class="ruby-identifier">booked</span> = <span class="ruby-keyword kw">false</span>
3365
- 1574: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">allLeaves</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>
3366
- 1575: <span class="ruby-comment cmt"># Prevent overbooking when multiple resources are allocated and</span>
3367
- 1576: <span class="ruby-comment cmt"># available.</span>
3368
- 1577: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>)
3369
- 1578:
3370
- 1579: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">book</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-ivar">@property</span>)
3371
- 1580:
3372
- 1581: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">empty?</span>
3373
- 1582: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
3374
- 1583: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span>)
3375
- 1584: <span class="ruby-keyword kw">else</span>
3376
- 1585: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
3377
- 1586: <span class="ruby-keyword kw">end</span>
3378
- 1587: <span class="ruby-keyword kw">end</span>
3379
- 1588:
3380
- 1589: <span class="ruby-ivar">@tentativeStart</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span>)
3381
- 1590: <span class="ruby-ivar">@tentativeEnd</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
3382
- 1591:
3383
- 1592: <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</span>[<span class="ruby-value str">'efficiency'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3384
- 1593: <span class="ruby-comment cmt"># Limits do not take efficiency into account. Limits are usage limits,</span>
3385
- 1594: <span class="ruby-comment cmt"># not effort limits.</span>
3386
- 1595: <span class="ruby-ivar">@limits</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">limit</span><span class="ruby-operator">|</span>
3387
- 1596: <span class="ruby-identifier">limit</span>.<span class="ruby-identifier">inc</span>(<span class="ruby-identifier">date</span>)
3388
- 1597: <span class="ruby-keyword kw">end</span>
3389
- 1598:
3390
- 1599: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">r</span>)
3391
- 1600: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">r</span>
3392
- 1601: <span class="ruby-keyword kw">end</span>
3393
- 1602: <span class="ruby-identifier">booked</span> = <span class="ruby-keyword kw">true</span>
3394
- 1603: <span class="ruby-keyword kw">end</span>
3395
- 1604: <span class="ruby-keyword kw">end</span>
3396
- 1605:
3397
- 1606: <span class="ruby-identifier">booked</span>
3398
- 1607: <span class="ruby-keyword kw">end</span></pre>
3439
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1593</span>
3440
+ 1593: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookResource</span>(<span class="ruby-identifier">resource</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">date</span>)
3441
+ 1594: <span class="ruby-identifier">booked</span> = <span class="ruby-keyword kw">false</span>
3442
+ 1595: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">allLeaves</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>
3443
+ 1596: <span class="ruby-comment cmt"># Prevent overbooking when multiple resources are allocated and</span>
3444
+ 1597: <span class="ruby-comment cmt"># available. If the task has allocation limits we need to make sure</span>
3445
+ 1598: <span class="ruby-comment cmt"># that none of them is already exceeded.</span>
3446
+ 1599: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">||</span>
3447
+ 1600: <span class="ruby-operator">!</span><span class="ruby-identifier">limitsOk?</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">resource</span>)
3448
+ 1601:
3449
+ 1602: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">book</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-ivar">@property</span>)
3450
+ 1603:
3451
+ 1604: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">empty?</span>
3452
+ 1605: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
3453
+ 1606: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span>)
3454
+ 1607: <span class="ruby-keyword kw">else</span>
3455
+ 1608: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
3456
+ 1609: <span class="ruby-keyword kw">end</span>
3457
+ 1610: <span class="ruby-keyword kw">end</span>
3458
+ 1611:
3459
+ 1612: <span class="ruby-ivar">@tentativeStart</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span>)
3460
+ 1613: <span class="ruby-ivar">@tentativeEnd</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">sbIdx</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)
3461
+ 1614:
3462
+ 1615: <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</span>[<span class="ruby-value str">'efficiency'</span>, <span class="ruby-ivar">@scenarioIdx</span>]
3463
+ 1616: <span class="ruby-comment cmt"># Limits do not take efficiency into account. Limits are usage limits,</span>
3464
+ 1617: <span class="ruby-comment cmt"># not effort limits.</span>
3465
+ 1618: <span class="ruby-ivar">@limits</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">limit</span><span class="ruby-operator">|</span>
3466
+ 1619: <span class="ruby-identifier">limit</span>.<span class="ruby-identifier">inc</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">resource</span>)
3467
+ 1620: <span class="ruby-keyword kw">end</span>
3468
+ 1621:
3469
+ 1622: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">r</span>)
3470
+ 1623: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">r</span>
3471
+ 1624: <span class="ruby-keyword kw">end</span>
3472
+ 1625: <span class="ruby-identifier">booked</span> = <span class="ruby-keyword kw">true</span>
3473
+ 1626: <span class="ruby-keyword kw">end</span>
3474
+ 1627: <span class="ruby-keyword kw">end</span>
3475
+ 1628:
3476
+ 1629: <span class="ruby-identifier">booked</span>
3477
+ 1630: <span class="ruby-keyword kw">end</span></pre>
3399
3478
  </div>
3400
3479
 
3401
3480
  </div>
@@ -3407,7 +3486,7 @@ href="Interval.html">Interval</a>.
3407
3486
 
3408
3487
 
3409
3488
  <div id="book-esources-method" class="method-detail ">
3410
- <a name="M001387"></a>
3489
+ <a name="method-i-bookResources"></a>
3411
3490
 
3412
3491
  <div class="method-heading">
3413
3492
 
@@ -3426,87 +3505,88 @@ href="Interval.html">Interval</a>.
3426
3505
  <div class="method-source-code"
3427
3506
  id="book-esources-source">
3428
3507
  <pre>
3429
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1491</span>
3430
- 1491: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">slotDuration</span>)
3431
- 1492: <span class="ruby-comment cmt"># If there are no allocations defined, we can't do any bookings.</span>
3432
- 1493: <span class="ruby-comment cmt"># In projection mode we do not allow bookings prior to the current date</span>
3433
- 1494: <span class="ruby-comment cmt"># for any task (in strict mode) or tasks which have user specified</span>
3434
- 1495: <span class="ruby-comment cmt"># bookings (sloppy mode).</span>
3435
- 1496: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span>
3436
- 1497: (<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenario</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">get</span>(<span class="ruby-value str">'projection'</span>) <span class="ruby-operator">&amp;&amp;</span>
3437
- 1498: <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">&amp;&amp;</span>
3438
- 1499: (<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenario</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">get</span>(<span class="ruby-value str">'strict'</span>) <span class="ruby-operator">||</span>
3439
- 1500: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">empty?</span>))
3440
- 1501: <span class="ruby-keyword kw">return</span>
3441
- 1502: <span class="ruby-keyword kw">end</span>
3442
- 1503:
3443
- 1504: <span class="ruby-comment cmt"># If the task has shifts to limit the allocations, we check that we are</span>
3444
- 1505: <span class="ruby-comment cmt"># within a defined shift interval. If yes, we need to be on shift to</span>
3445
- 1506: <span class="ruby-comment cmt"># continue.</span>
3446
- 1507: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">shifts</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'shifts'</span>)) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">shifts</span>.<span class="ruby-identifier">assigned?</span>(<span class="ruby-identifier">date</span>)
3447
- 1508: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">shifts</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
3448
- 1509: <span class="ruby-keyword kw">end</span>
3449
- 1510:
3450
- 1511: <span class="ruby-comment cmt"># If the task has allocation limits we need to make sure that none of them</span>
3451
- 1512: <span class="ruby-comment cmt"># is already exceeded.</span>
3452
- 1513: <span class="ruby-ivar">@limits</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">limit</span><span class="ruby-operator">|</span>
3453
- 1514: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">limit</span>.<span class="ruby-identifier">ok?</span>(<span class="ruby-identifier">date</span>)
3454
- 1515: <span class="ruby-keyword kw">end</span>
3455
- 1516:
3456
- 1517: <span class="ruby-identifier">sbIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>)
3457
- 1518:
3458
- 1519: <span class="ruby-comment cmt"># We first have to make sure that if there are mandatory resources</span>
3459
- 1520: <span class="ruby-comment cmt"># that these are all available for the time slot.</span>
3460
- 1521: <span class="ruby-identifier">takenMandatories</span> = []
3461
- 1522: <span class="ruby-ivar">@mandatories</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">allocation</span><span class="ruby-operator">|</span>
3462
- 1523: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
3463
- 1524:
3464
- 1525: <span class="ruby-comment cmt"># For mandatory allocations with alternatives at least one of the</span>
3465
- 1526: <span class="ruby-comment cmt"># alternatives must be available.</span>
3466
- 1527: <span class="ruby-identifier">found</span> = <span class="ruby-keyword kw">false</span>
3467
- 1528: <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">candidates</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">candidate</span><span class="ruby-operator">|</span>
3468
- 1529: <span class="ruby-comment cmt"># When a resource group is marked mandatory, all members of the</span>
3469
- 1530: <span class="ruby-comment cmt"># group must be available.</span>
3470
- 1531: <span class="ruby-identifier">allAvailable</span> = <span class="ruby-keyword kw">true</span>
3471
- 1532: <span class="ruby-identifier">candidate</span>.<span class="ruby-identifier">allLeaves</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>
3472
- 1533: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">resource</span>.<span class="ruby-identifier">available?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">sbIdx</span>) <span class="ruby-operator">||</span>
3473
- 1534: <span class="ruby-identifier">takenMandatories</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">resource</span>)
3474
- 1535: <span class="ruby-identifier">allAvailable</span> = <span class="ruby-keyword kw">false</span>
3475
- 1536: <span class="ruby-keyword kw">break</span>
3476
- 1537: <span class="ruby-keyword kw">else</span>
3477
- 1538: <span class="ruby-identifier">takenMandatories</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">resource</span>
3478
- 1539: <span class="ruby-keyword kw">end</span>
3479
- 1540: <span class="ruby-keyword kw">end</span>
3480
- 1541: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">allAvailable</span>
3481
- 1542: <span class="ruby-identifier">found</span> = <span class="ruby-keyword kw">true</span>
3482
- 1543: <span class="ruby-keyword kw">break</span>
3483
- 1544: <span class="ruby-keyword kw">end</span>
3484
- 1545: <span class="ruby-keyword kw">end</span>
3485
- 1546:
3486
- 1547: <span class="ruby-comment cmt"># At least one mandatory resource is not available. We cannot continue.</span>
3487
- 1548: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">found</span>
3488
- 1549: <span class="ruby-keyword kw">end</span>
3489
- 1550:
3490
- 1551: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">date</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>)
3491
- 1552: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">allocation</span><span class="ruby-operator">|</span>
3492
- 1553: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
3493
- 1554:
3494
- 1555: <span class="ruby-comment cmt"># In case we have a persistent allocation we need to check if there is</span>
3495
- 1556: <span class="ruby-comment cmt"># already a locked resource and use it.</span>
3496
- 1557: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">persistent</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">lockedResource</span>.<span class="ruby-identifier">nil?</span>
3497
- 1558: <span class="ruby-identifier">bookResource</span>(<span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">lockedResource</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">date</span>)
3498
- 1559: <span class="ruby-keyword kw">else</span>
3499
- 1560: <span class="ruby-comment cmt"># If not, we create a list of candidates in the proper order and</span>
3500
- 1561: <span class="ruby-comment cmt"># assign the first one available.</span>
3501
- 1562: <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">candidates</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">candidate</span><span class="ruby-operator">|</span>
3502
- 1563: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">bookResource</span>(<span class="ruby-identifier">candidate</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">date</span>)
3503
- 1564: <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">lockedResource</span> = <span class="ruby-identifier">candidate</span>
3504
- 1565: <span class="ruby-keyword kw">break</span>
3505
- 1566: <span class="ruby-keyword kw">end</span>
3506
- 1567: <span class="ruby-keyword kw">end</span>
3507
- 1568: <span class="ruby-keyword kw">end</span>
3508
- 1569: <span class="ruby-keyword kw">end</span>
3509
- 1570: <span class="ruby-keyword kw">end</span></pre>
3508
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1511</span>
3509
+ 1511: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">slotDuration</span>)
3510
+ 1512: <span class="ruby-comment cmt"># If there are no allocations defined, we can't do any bookings.</span>
3511
+ 1513: <span class="ruby-comment cmt"># In projection mode we do not allow bookings prior to the current date</span>
3512
+ 1514: <span class="ruby-comment cmt"># for any task (in strict mode) or tasks which have user specified</span>
3513
+ 1515: <span class="ruby-comment cmt"># bookings (sloppy mode).</span>
3514
+ 1516: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span>
3515
+ 1517: (<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenario</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">get</span>(<span class="ruby-value str">'projection'</span>) <span class="ruby-operator">&amp;&amp;</span>
3516
+ 1518: <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">&amp;&amp;</span>
3517
+ 1519: (<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">scenario</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">get</span>(<span class="ruby-value str">'strict'</span>) <span class="ruby-operator">||</span>
3518
+ 1520: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</span>).<span class="ruby-identifier">empty?</span>))
3519
+ 1521: <span class="ruby-keyword kw">return</span>
3520
+ 1522: <span class="ruby-keyword kw">end</span>
3521
+ 1523:
3522
+ 1524: <span class="ruby-comment cmt"># If the task has shifts to limit the allocations, we check that we are</span>
3523
+ 1525: <span class="ruby-comment cmt"># within a defined shift interval. If yes, we need to be on shift to</span>
3524
+ 1526: <span class="ruby-comment cmt"># continue.</span>
3525
+ 1527: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">shifts</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'shifts'</span>)) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">shifts</span>.<span class="ruby-identifier">assigned?</span>(<span class="ruby-identifier">date</span>)
3526
+ 1528: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">shifts</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
3527
+ 1529: <span class="ruby-keyword kw">end</span>
3528
+ 1530:
3529
+ 1531: <span class="ruby-comment cmt"># If the task has resource independent allocation limits we need to make</span>
3530
+ 1532: <span class="ruby-comment cmt"># sure that none of them is already exceeded.</span>
3531
+ 1533: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">limitsOk?</span>(<span class="ruby-identifier">date</span>)
3532
+ 1534:
3533
+ 1535: <span class="ruby-identifier">sbIdx</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>)
3534
+ 1536:
3535
+ 1537: <span class="ruby-comment cmt"># We first have to make sure that if there are mandatory resources</span>
3536
+ 1538: <span class="ruby-comment cmt"># that these are all available for the time slot.</span>
3537
+ 1539: <span class="ruby-identifier">takenMandatories</span> = []
3538
+ 1540: <span class="ruby-ivar">@mandatories</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">allocation</span><span class="ruby-operator">|</span>
3539
+ 1541: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
3540
+ 1542:
3541
+ 1543: <span class="ruby-comment cmt"># For mandatory allocations with alternatives at least one of the</span>
3542
+ 1544: <span class="ruby-comment cmt"># alternatives must be available.</span>
3543
+ 1545: <span class="ruby-identifier">found</span> = <span class="ruby-keyword kw">false</span>
3544
+ 1546: <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">candidates</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">candidate</span><span class="ruby-operator">|</span>
3545
+ 1547: <span class="ruby-comment cmt"># When a resource group is marked mandatory, all members of the</span>
3546
+ 1548: <span class="ruby-comment cmt"># group must be available.</span>
3547
+ 1549: <span class="ruby-identifier">allAvailable</span> = <span class="ruby-keyword kw">true</span>
3548
+ 1550: <span class="ruby-identifier">candidate</span>.<span class="ruby-identifier">allLeaves</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>
3549
+ 1551: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">limitsOk?</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">resource</span>) <span class="ruby-operator">||</span>
3550
+ 1552: <span class="ruby-operator">!</span><span class="ruby-identifier">resource</span>.<span class="ruby-identifier">available?</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">sbIdx</span>) <span class="ruby-operator">||</span>
3551
+ 1553: <span class="ruby-identifier">takenMandatories</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">resource</span>)
3552
+ 1554: <span class="ruby-comment cmt"># We've found a mandatory resource that is not available for</span>
3553
+ 1555: <span class="ruby-comment cmt"># the slot.</span>
3554
+ 1556: <span class="ruby-identifier">allAvailable</span> = <span class="ruby-keyword kw">false</span>
3555
+ 1557: <span class="ruby-keyword kw">break</span>
3556
+ 1558: <span class="ruby-keyword kw">else</span>
3557
+ 1559: <span class="ruby-identifier">takenMandatories</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">resource</span>
3558
+ 1560: <span class="ruby-keyword kw">end</span>
3559
+ 1561: <span class="ruby-keyword kw">end</span>
3560
+ 1562: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">allAvailable</span>
3561
+ 1563: <span class="ruby-identifier">found</span> = <span class="ruby-keyword kw">true</span>
3562
+ 1564: <span class="ruby-keyword kw">break</span>
3563
+ 1565: <span class="ruby-keyword kw">end</span>
3564
+ 1566: <span class="ruby-keyword kw">end</span>
3565
+ 1567:
3566
+ 1568: <span class="ruby-comment cmt"># At least one mandatory resource is not available. We cannot continue.</span>
3567
+ 1569: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">found</span>
3568
+ 1570: <span class="ruby-keyword kw">end</span>
3569
+ 1571:
3570
+ 1572: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">date</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>)
3571
+ 1573: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">allocation</span><span class="ruby-operator">|</span>
3572
+ 1574: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
3573
+ 1575:
3574
+ 1576: <span class="ruby-comment cmt"># In case we have a persistent allocation we need to check if there is</span>
3575
+ 1577: <span class="ruby-comment cmt"># already a locked resource and use it.</span>
3576
+ 1578: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">persistent</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">lockedResource</span>.<span class="ruby-identifier">nil?</span>
3577
+ 1579: <span class="ruby-identifier">bookResource</span>(<span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">lockedResource</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">date</span>)
3578
+ 1580: <span class="ruby-keyword kw">else</span>
3579
+ 1581: <span class="ruby-comment cmt"># If not, we create a list of candidates in the proper order and</span>
3580
+ 1582: <span class="ruby-comment cmt"># assign the first one available.</span>
3581
+ 1583: <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">candidates</span>(<span class="ruby-ivar">@scenarioIdx</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">candidate</span><span class="ruby-operator">|</span>
3582
+ 1584: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">bookResource</span>(<span class="ruby-identifier">candidate</span>, <span class="ruby-identifier">sbIdx</span>, <span class="ruby-identifier">date</span>)
3583
+ 1585: <span class="ruby-identifier">allocation</span>.<span class="ruby-identifier">lockedResource</span> = <span class="ruby-identifier">candidate</span>
3584
+ 1586: <span class="ruby-keyword kw">break</span>
3585
+ 1587: <span class="ruby-keyword kw">end</span>
3586
+ 1588: <span class="ruby-keyword kw">end</span>
3587
+ 1589: <span class="ruby-keyword kw">end</span>
3588
+ 1590: <span class="ruby-keyword kw">end</span>
3589
+ 1591: <span class="ruby-keyword kw">end</span></pre>
3510
3590
  </div>
3511
3591
 
3512
3592
  </div>
@@ -3518,7 +3598,7 @@ href="Interval.html">Interval</a>.
3518
3598
 
3519
3599
 
3520
3600
  <div id="calc-ompletion-method" class="method-detail ">
3521
- <a name="M001398"></a>
3601
+ <a name="method-i-calcCompletion"></a>
3522
3602
 
3523
3603
  <div class="method-heading">
3524
3604
 
@@ -3540,57 +3620,57 @@ specified completion value.
3540
3620
  <div class="method-source-code"
3541
3621
  id="calc-ompletion-source">
3542
3622
  <pre>
3543
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1830</span>
3544
- 1830: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcCompletion</span>
3545
- 1831: <span class="ruby-comment cmt"># If the user provided a completion degree we are not touching it.</span>
3546
- 1832: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">provided</span>(<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>)
3547
- 1833: <span class="ruby-identifier">calcStatus</span>
3548
- 1834: <span class="ruby-keyword kw">return</span>
3549
- 1835: <span class="ruby-keyword kw">end</span>
3550
- 1836:
3551
- 1837: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>).<span class="ruby-identifier">nil?</span>
3552
- 1838: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-value">0.0</span>
3553
- 1839: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'status'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-value str">'unknown'</span>
3554
- 1840: <span class="ruby-keyword kw">return</span>
3555
- 1841: <span class="ruby-keyword kw">end</span>
3556
- 1842:
3557
- 1843: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'milestone'</span>)
3558
- 1844: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
3559
- 1845: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">?</span> <span class="ruby-value">100.0</span> <span class="ruby-operator">:</span> <span class="ruby-value">0.0</span>
3560
- 1846: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'status'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
3561
- 1847: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&lt;=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">?</span> <span class="ruby-value str">'done'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'not reached'</span>
3562
- 1848: <span class="ruby-keyword kw">else</span>
3563
- 1849: <span class="ruby-identifier">completion</span> = <span class="ruby-value">0.0</span>
3564
- 1850: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&lt;=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]
3565
- 1851: <span class="ruby-comment cmt"># The task has ended already. It's 100% complete.</span>
3566
- 1852: <span class="ruby-identifier">completion</span> = <span class="ruby-value">100.0</span>
3567
- 1853: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)
3568
- 1854: <span class="ruby-comment cmt"># The task has not started yet. Its' 0% complete.</span>
3569
- 1855: <span class="ruby-identifier">completion</span> = <span class="ruby-value">0.0</span>
3570
- 1856: <span class="ruby-keyword kw">else</span>
3571
- 1857: <span class="ruby-comment cmt"># The task is in progress. Calculate the current completion</span>
3572
- 1858: <span class="ruby-comment cmt"># degree.</span>
3573
- 1859: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
3574
- 1860: <span class="ruby-comment cmt"># Effort based leaf tasks. The completion degree is the percantage</span>
3575
- 1861: <span class="ruby-comment cmt"># of effort that has been done already.</span>
3576
- 1862: <span class="ruby-identifier">done</span> = <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)),
3577
- 1863: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]))
3578
- 1864: <span class="ruby-identifier">total</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
3579
- 1865: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) * <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
3580
- 1866: <span class="ruby-identifier">completion</span> = <span class="ruby-identifier">done</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span> * <span class="ruby-value">100.0</span>
3581
- 1867: <span class="ruby-keyword kw">else</span>
3582
- 1868: <span class="ruby-comment cmt"># Container tasks and length/duration leaf tasks. There is no way</span>
3583
- 1869: <span class="ruby-comment cmt"># we can compute the completion degree of a container task with a</span>
3584
- 1870: <span class="ruby-comment cmt"># mix of effort and duration task in a meaningful way. So, we</span>
3585
- 1871: <span class="ruby-comment cmt"># just go by duration.</span>
3586
- 1872: <span class="ruby-identifier">completion</span> = ((<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)) <span class="ruby-operator">/</span>
3587
- 1873: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>))) * <span class="ruby-value">100.0</span>
3588
- 1874: <span class="ruby-keyword kw">end</span>
3589
- 1875: <span class="ruby-keyword kw">end</span>
3590
- 1876: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">completion</span>
3591
- 1877: <span class="ruby-identifier">calcStatus</span>
3592
- 1878: <span class="ruby-keyword kw">end</span>
3593
- 1879: <span class="ruby-keyword kw">end</span></pre>
3623
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1865</span>
3624
+ 1865: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcCompletion</span>
3625
+ 1866: <span class="ruby-comment cmt"># If the user provided a completion degree we are not touching it.</span>
3626
+ 1867: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">provided</span>(<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>)
3627
+ 1868: <span class="ruby-identifier">calcStatus</span>
3628
+ 1869: <span class="ruby-keyword kw">return</span>
3629
+ 1870: <span class="ruby-keyword kw">end</span>
3630
+ 1871:
3631
+ 1872: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>).<span class="ruby-identifier">nil?</span>
3632
+ 1873: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-value">0.0</span>
3633
+ 1874: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'status'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-value str">'unknown'</span>
3634
+ 1875: <span class="ruby-keyword kw">return</span>
3635
+ 1876: <span class="ruby-keyword kw">end</span>
3636
+ 1877:
3637
+ 1878: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'milestone'</span>)
3638
+ 1879: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
3639
+ 1880: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'end'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">?</span> <span class="ruby-value">100.0</span> <span class="ruby-operator">:</span> <span class="ruby-value">0.0</span>
3640
+ 1881: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'status'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
3641
+ 1882: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&lt;=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">?</span> <span class="ruby-value str">'done'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'not reached'</span>
3642
+ 1883: <span class="ruby-keyword kw">else</span>
3643
+ 1884: <span class="ruby-identifier">completion</span> = <span class="ruby-value">0.0</span>
3644
+ 1885: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">&lt;=</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]
3645
+ 1886: <span class="ruby-comment cmt"># The task has ended already. It's 100% complete.</span>
3646
+ 1887: <span class="ruby-identifier">completion</span> = <span class="ruby-value">100.0</span>
3647
+ 1888: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)
3648
+ 1889: <span class="ruby-comment cmt"># The task has not started yet. Its' 0% complete.</span>
3649
+ 1890: <span class="ruby-identifier">completion</span> = <span class="ruby-value">0.0</span>
3650
+ 1891: <span class="ruby-keyword kw">else</span>
3651
+ 1892: <span class="ruby-comment cmt"># The task is in progress. Calculate the current completion</span>
3652
+ 1893: <span class="ruby-comment cmt"># degree.</span>
3653
+ 1894: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
3654
+ 1895: <span class="ruby-comment cmt"># Effort based leaf tasks. The completion degree is the percantage</span>
3655
+ 1896: <span class="ruby-comment cmt"># of effort that has been done already.</span>
3656
+ 1897: <span class="ruby-identifier">done</span> = <span class="ruby-identifier">getEffectiveWork</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)),
3657
+ 1898: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>]))
3658
+ 1899: <span class="ruby-identifier">total</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">convertToDailyLoad</span>(
3659
+ 1900: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) * <span class="ruby-ivar">@project</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
3660
+ 1901: <span class="ruby-identifier">completion</span> = <span class="ruby-identifier">done</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span> * <span class="ruby-value">100.0</span>
3661
+ 1902: <span class="ruby-keyword kw">else</span>
3662
+ 1903: <span class="ruby-comment cmt"># Container tasks and length/duration leaf tasks. There is no way</span>
3663
+ 1904: <span class="ruby-comment cmt"># we can compute the completion degree of a container task with a</span>
3664
+ 1905: <span class="ruby-comment cmt"># mix of effort and duration task in a meaningful way. So, we</span>
3665
+ 1906: <span class="ruby-comment cmt"># just go by duration.</span>
3666
+ 1907: <span class="ruby-identifier">completion</span> = ((<span class="ruby-ivar">@project</span>[<span class="ruby-value str">'now'</span>] <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>)) <span class="ruby-operator">/</span>
3667
+ 1908: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>))) * <span class="ruby-value">100.0</span>
3668
+ 1909: <span class="ruby-keyword kw">end</span>
3669
+ 1910: <span class="ruby-keyword kw">end</span>
3670
+ 1911: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'complete'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-identifier">completion</span>
3671
+ 1912: <span class="ruby-identifier">calcStatus</span>
3672
+ 1913: <span class="ruby-keyword kw">end</span>
3673
+ 1914: <span class="ruby-keyword kw">end</span></pre>
3594
3674
  </div>
3595
3675
 
3596
3676
  </div>
@@ -3602,7 +3682,7 @@ specified completion value.
3602
3682
 
3603
3683
 
3604
3684
  <div id="calc-ath-riticalness-nd-uccs-method" class="method-detail ">
3605
- <a name="M001397"></a>
3685
+ <a name="method-i-calcPathCriticalnessEndSuccs"></a>
3606
3686
 
3607
3687
  <div class="method-heading">
3608
3688
 
@@ -3625,28 +3705,28 @@ and all its parent tasks.
3625
3705
  <div class="method-source-code"
3626
3706
  id="calc-ath-riticalness-nd-uccs-source">
3627
3707
  <pre>
3628
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1806</span>
3629
- 1806: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcPathCriticalnessEndSuccs</span>
3630
- 1807: <span class="ruby-identifier">maxCriticalness</span> = <span class="ruby-value">0.0</span>
3631
- 1808: <span class="ruby-comment cmt"># Gather a list of all end-successors of this task and its parent task.</span>
3632
- 1809: <span class="ruby-identifier">tList</span> = []
3633
- 1810: <span class="ruby-identifier">p</span> = <span class="ruby-ivar">@property</span>
3634
- 1811: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">p</span>)
3635
- 1812: <span class="ruby-identifier">p</span>[<span class="ruby-value str">'endsuccs'</span>, <span class="ruby-ivar">@scenarioIdx</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-identifier">onEnd</span><span class="ruby-operator">|</span>
3636
- 1813: <span class="ruby-identifier">tList</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span> ] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tList</span>.<span class="ruby-identifier">include?</span>([ <span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span> ])
3637
- 1814: <span class="ruby-keyword kw">end</span>
3638
- 1815: <span class="ruby-identifier">p</span> = <span class="ruby-identifier">p</span>.<span class="ruby-identifier">parent</span>
3639
- 1816: <span class="ruby-keyword kw">end</span>
3640
- 1817:
3641
- 1818: <span class="ruby-identifier">tList</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-identifier">onEnd</span><span class="ruby-operator">|</span>
3642
- 1819: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">criticalness</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcPathCriticalness</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">onEnd</span>)) <span class="ruby-operator">&gt;</span>
3643
- 1820: <span class="ruby-identifier">maxCriticalness</span>
3644
- 1821: <span class="ruby-identifier">maxCriticalness</span> = <span class="ruby-identifier">criticalness</span>
3645
- 1822: <span class="ruby-keyword kw">end</span>
3646
- 1823: <span class="ruby-keyword kw">end</span>
3647
- 1824:
3648
- 1825: <span class="ruby-identifier">maxCriticalness</span>
3649
- 1826: <span class="ruby-keyword kw">end</span></pre>
3708
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1841</span>
3709
+ 1841: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcPathCriticalnessEndSuccs</span>
3710
+ 1842: <span class="ruby-identifier">maxCriticalness</span> = <span class="ruby-value">0.0</span>
3711
+ 1843: <span class="ruby-comment cmt"># Gather a list of all end-successors of this task and its parent task.</span>
3712
+ 1844: <span class="ruby-identifier">tList</span> = []
3713
+ 1845: <span class="ruby-identifier">p</span> = <span class="ruby-ivar">@property</span>
3714
+ 1846: <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">p</span>)
3715
+ 1847: <span class="ruby-identifier">p</span>[<span class="ruby-value str">'endsuccs'</span>, <span class="ruby-ivar">@scenarioIdx</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-identifier">onEnd</span><span class="ruby-operator">|</span>
3716
+ 1848: <span class="ruby-identifier">tList</span> <span class="ruby-operator">&lt;&lt;</span> [ <span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span> ] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tList</span>.<span class="ruby-identifier">include?</span>([ <span class="ruby-identifier">task</span>, <span class="ruby-identifier">onEnd</span> ])
3717
+ 1849: <span class="ruby-keyword kw">end</span>
3718
+ 1850: <span class="ruby-identifier">p</span> = <span class="ruby-identifier">p</span>.<span class="ruby-identifier">parent</span>
3719
+ 1851: <span class="ruby-keyword kw">end</span>
3720
+ 1852:
3721
+ 1853: <span class="ruby-identifier">tList</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-identifier">onEnd</span><span class="ruby-operator">|</span>
3722
+ 1854: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">criticalness</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcPathCriticalness</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">onEnd</span>)) <span class="ruby-operator">&gt;</span>
3723
+ 1855: <span class="ruby-identifier">maxCriticalness</span>
3724
+ 1856: <span class="ruby-identifier">maxCriticalness</span> = <span class="ruby-identifier">criticalness</span>
3725
+ 1857: <span class="ruby-keyword kw">end</span>
3726
+ 1858: <span class="ruby-keyword kw">end</span>
3727
+ 1859:
3728
+ 1860: <span class="ruby-identifier">maxCriticalness</span>
3729
+ 1861: <span class="ruby-keyword kw">end</span></pre>
3650
3730
  </div>
3651
3731
 
3652
3732
  </div>
@@ -3658,7 +3738,7 @@ and all its parent tasks.
3658
3738
 
3659
3739
 
3660
3740
  <div id="calc-tatus-method" class="method-detail ">
3661
- <a name="M001399"></a>
3741
+ <a name="method-i-calcStatus"></a>
3662
3742
 
3663
3743
  <div class="method-heading">
3664
3744
 
@@ -3680,17 +3760,17 @@ attribute.
3680
3760
  <div class="method-source-code"
3681
3761
  id="calc-tatus-source">
3682
3762
  <pre>
3683
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1882</span>
3684
- 1882: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcStatus</span>
3685
- 1883: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'status'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
3686
- 1884: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'complete'</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0.0</span>
3687
- 1885: <span class="ruby-value str">'not started'</span>
3688
- 1886: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'complete'</span>) <span class="ruby-operator">&gt;=</span> <span class="ruby-value">100.0</span>
3689
- 1887: <span class="ruby-value str">'done'</span>
3690
- 1888: <span class="ruby-keyword kw">else</span>
3691
- 1889: <span class="ruby-value str">'in progress'</span>
3692
- 1890: <span class="ruby-keyword kw">end</span>
3693
- 1891: <span class="ruby-keyword kw">end</span></pre>
3763
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1917</span>
3764
+ 1917: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">calcStatus</span>
3765
+ 1918: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'status'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
3766
+ 1919: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'complete'</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0.0</span>
3767
+ 1920: <span class="ruby-value str">'not started'</span>
3768
+ 1921: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'complete'</span>) <span class="ruby-operator">&gt;=</span> <span class="ruby-value">100.0</span>
3769
+ 1922: <span class="ruby-value str">'done'</span>
3770
+ 1923: <span class="ruby-keyword kw">else</span>
3771
+ 1924: <span class="ruby-value str">'in progress'</span>
3772
+ 1925: <span class="ruby-keyword kw">end</span>
3773
+ 1926: <span class="ruby-keyword kw">end</span></pre>
3694
3774
  </div>
3695
3775
 
3696
3776
  </div>
@@ -3702,7 +3782,7 @@ attribute.
3702
3782
 
3703
3783
 
3704
3784
  <div id="check-ependency-method" class="method-detail ">
3705
- <a name="M001394"></a>
3785
+ <a name="method-i-checkDependency"></a>
3706
3786
 
3707
3787
  <div class="method-heading">
3708
3788
 
@@ -3721,51 +3801,51 @@ attribute.
3721
3801
  <div class="method-source-code"
3722
3802
  id="check-ependency-source">
3723
3803
  <pre>
3724
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1724</span>
3725
- 1724: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkDependency</span>(<span class="ruby-identifier">dependency</span>, <span class="ruby-identifier">depType</span>)
3726
- 1725: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">depTask</span> = <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-ivar">@project</span>)).<span class="ruby-identifier">nil?</span>
3727
- 1726: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3728
- 1727: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3729
- 1728: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_unknown'</span>,
3730
- 1729: <span class="ruby-node">&quot;Task #{@property.fullId} has unknown #{depType} &quot;</span> <span class="ruby-operator">+</span>
3731
- 1730: <span class="ruby-node">&quot;#{dependency.taskId}&quot;</span>)
3732
- 1731: <span class="ruby-keyword kw">end</span>
3733
- 1732:
3734
- 1733: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">depTask</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@property</span>
3735
- 1734: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3736
- 1735: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3737
- 1736: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_self'</span>, <span class="ruby-node">&quot;Task #{@property.fullId} cannot &quot;</span> <span class="ruby-operator">+</span>
3738
- 1737: <span class="ruby-value str">&quot;depend on self&quot;</span>)
3739
- 1738: <span class="ruby-keyword kw">end</span>
3740
- 1739:
3741
- 1740: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">depTask</span>.<span class="ruby-identifier">isChildOf?</span>(<span class="ruby-ivar">@property</span>)
3742
- 1741: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3743
- 1742: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3744
- 1743: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_child'</span>,
3745
- 1744: <span class="ruby-node">&quot;Task #{@property.fullId} cannot depend on child &quot;</span> <span class="ruby-operator">+</span>
3746
- 1745: <span class="ruby-node">&quot;#{depTask.fullId}&quot;</span>)
3747
- 1746: <span class="ruby-keyword kw">end</span>
3748
- 1747:
3749
- 1748: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">isChildOf?</span>(<span class="ruby-identifier">depTask</span>)
3750
- 1749: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3751
- 1750: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3752
- 1751: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_parent'</span>,
3753
- 1752: <span class="ruby-node">&quot;Task #{@property.fullId} cannot depend on parent &quot;</span> <span class="ruby-operator">+</span>
3754
- 1753: <span class="ruby-node">&quot;#{depTask.fullId}&quot;</span>)
3755
- 1754: <span class="ruby-keyword kw">end</span>
3756
- 1755:
3757
- 1756: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
3758
- 1757: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">task</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">depTask</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dep</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">dependency</span>
3759
- 1758: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3760
- 1759: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3761
- 1760: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_multi'</span>,
3762
- 1761: <span class="ruby-node">&quot;No need to specify dependency #{depTask.fullId} multiple &quot;</span> <span class="ruby-operator">+</span>
3763
- 1762: <span class="ruby-node">&quot;times for task #{@property.fullId}.&quot;</span>)
3764
- 1763: <span class="ruby-keyword kw">end</span>
3765
- 1764: <span class="ruby-keyword kw">end</span>
3766
- 1765:
3767
- 1766: <span class="ruby-identifier">depTask</span>
3768
- 1767: <span class="ruby-keyword kw">end</span></pre>
3804
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1759</span>
3805
+ 1759: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkDependency</span>(<span class="ruby-identifier">dependency</span>, <span class="ruby-identifier">depType</span>)
3806
+ 1760: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">depTask</span> = <span class="ruby-identifier">dependency</span>.<span class="ruby-identifier">resolve</span>(<span class="ruby-ivar">@project</span>)).<span class="ruby-identifier">nil?</span>
3807
+ 1761: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3808
+ 1762: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3809
+ 1763: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_unknown'</span>,
3810
+ 1764: <span class="ruby-node">&quot;Task #{@property.fullId} has unknown #{depType} &quot;</span> <span class="ruby-operator">+</span>
3811
+ 1765: <span class="ruby-node">&quot;#{dependency.taskId}&quot;</span>)
3812
+ 1766: <span class="ruby-keyword kw">end</span>
3813
+ 1767:
3814
+ 1768: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">depTask</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@property</span>
3815
+ 1769: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3816
+ 1770: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3817
+ 1771: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_self'</span>, <span class="ruby-node">&quot;Task #{@property.fullId} cannot &quot;</span> <span class="ruby-operator">+</span>
3818
+ 1772: <span class="ruby-value str">&quot;depend on self&quot;</span>)
3819
+ 1773: <span class="ruby-keyword kw">end</span>
3820
+ 1774:
3821
+ 1775: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">depTask</span>.<span class="ruby-identifier">isChildOf?</span>(<span class="ruby-ivar">@property</span>)
3822
+ 1776: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3823
+ 1777: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3824
+ 1778: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_child'</span>,
3825
+ 1779: <span class="ruby-node">&quot;Task #{@property.fullId} cannot depend on child &quot;</span> <span class="ruby-operator">+</span>
3826
+ 1780: <span class="ruby-node">&quot;#{depTask.fullId}&quot;</span>)
3827
+ 1781: <span class="ruby-keyword kw">end</span>
3828
+ 1782:
3829
+ 1783: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">isChildOf?</span>(<span class="ruby-identifier">depTask</span>)
3830
+ 1784: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3831
+ 1785: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3832
+ 1786: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_parent'</span>,
3833
+ 1787: <span class="ruby-node">&quot;Task #{@property.fullId} cannot depend on parent &quot;</span> <span class="ruby-operator">+</span>
3834
+ 1788: <span class="ruby-node">&quot;#{depTask.fullId}&quot;</span>)
3835
+ 1789: <span class="ruby-keyword kw">end</span>
3836
+ 1790:
3837
+ 1791: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
3838
+ 1792: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">task</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">depTask</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">dep</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">dependency</span>
3839
+ 1793: <span class="ruby-comment cmt"># Remove the broken dependency. It could cause trouble later on.</span>
3840
+ 1794: <span class="ruby-ivar">@property</span>[<span class="ruby-identifier">depType</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">dependency</span>)
3841
+ 1795: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'task_depend_multi'</span>,
3842
+ 1796: <span class="ruby-node">&quot;No need to specify dependency #{depTask.fullId} multiple &quot;</span> <span class="ruby-operator">+</span>
3843
+ 1797: <span class="ruby-node">&quot;times for task #{@property.fullId}.&quot;</span>)
3844
+ 1798: <span class="ruby-keyword kw">end</span>
3845
+ 1799: <span class="ruby-keyword kw">end</span>
3846
+ 1800:
3847
+ 1801: <span class="ruby-identifier">depTask</span>
3848
+ 1802: <span class="ruby-keyword kw">end</span></pre>
3769
3849
  </div>
3770
3850
 
3771
3851
  </div>
@@ -3777,7 +3857,7 @@ attribute.
3777
3857
 
3778
3858
 
3779
3859
  <div id="has-ependencies-method" class="method-detail ">
3780
- <a name="M001390"></a>
3860
+ <a name="method-i-hasDependencies"></a>
3781
3861
 
3782
3862
  <div class="method-heading">
3783
3863
 
@@ -3800,11 +3880,11 @@ checked. Otherwise the start.
3800
3880
  <div class="method-source-code"
3801
3881
  id="has-ependencies-source">
3802
3882
  <pre>
3803
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1676</span>
3804
- 1676: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasDependencies</span>(<span class="ruby-identifier">atEnd</span>)
3805
- 1677: <span class="ruby-identifier">thisEnd</span> = <span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>
3806
- 1678: <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</span>).<span class="ruby-identifier">empty?</span>
3807
- 1679: <span class="ruby-keyword kw">end</span></pre>
3883
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1711</span>
3884
+ 1711: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasDependencies</span>(<span class="ruby-identifier">atEnd</span>)
3885
+ 1712: <span class="ruby-identifier">thisEnd</span> = <span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>
3886
+ 1713: <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'succs'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-identifier">thisEnd</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'preds'</span>).<span class="ruby-identifier">empty?</span>
3887
+ 1714: <span class="ruby-keyword kw">end</span></pre>
3808
3888
  </div>
3809
3889
 
3810
3890
  </div>
@@ -3816,7 +3896,7 @@ checked. Otherwise the start.
3816
3896
 
3817
3897
 
3818
3898
  <div id="has-uccessors-method" class="method-detail ">
3819
- <a name="M001391"></a>
3899
+ <a name="method-i-hasSuccessors"></a>
3820
3900
 
3821
3901
  <div class="method-heading">
3822
3902
 
@@ -3838,16 +3918,58 @@ sucessor task.
3838
3918
  <div class="method-source-code"
3839
3919
  id="has-uccessors-source">
3840
3920
  <pre>
3841
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1683</span>
3842
- 1683: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasSuccessors</span>
3843
- 1684: <span class="ruby-identifier">t</span> = <span class="ruby-ivar">@property</span>
3844
- 1685: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">t</span>
3845
- 1686: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">t</span>[<span class="ruby-value str">'endsuccs'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">empty?</span>
3846
- 1687: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">parent</span>
3847
- 1688: <span class="ruby-keyword kw">end</span>
3848
- 1689:
3849
- 1690: <span class="ruby-keyword kw">false</span>
3850
- 1691: <span class="ruby-keyword kw">end</span></pre>
3921
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1718</span>
3922
+ 1718: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hasSuccessors</span>
3923
+ 1719: <span class="ruby-identifier">t</span> = <span class="ruby-ivar">@property</span>
3924
+ 1720: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">t</span>
3925
+ 1721: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">t</span>[<span class="ruby-value str">'endsuccs'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">empty?</span>
3926
+ 1722: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">parent</span>
3927
+ 1723: <span class="ruby-keyword kw">end</span>
3928
+ 1724:
3929
+ 1725: <span class="ruby-keyword kw">false</span>
3930
+ 1726: <span class="ruby-keyword kw">end</span></pre>
3931
+ </div>
3932
+
3933
+ </div>
3934
+
3935
+
3936
+
3937
+
3938
+ </div>
3939
+
3940
+
3941
+ <div id="limits-k--method" class="method-detail ">
3942
+ <a name="method-i-limitsOk%3F"></a>
3943
+
3944
+ <div class="method-heading">
3945
+
3946
+ <span class="method-name">limitsOk?</span><span
3947
+ class="method-args">(date, resource = nil)</span>
3948
+ <span class="method-click-advice">click to toggle source</span>
3949
+
3950
+ </div>
3951
+
3952
+ <div class="method-description">
3953
+
3954
+ <p>
3955
+ Check if all of the task limits are not exceded at the given <em>date</em>.
3956
+ If a <em>resource</em> is provided, the limit for that particular resource
3957
+ is checked. If no resource is provided, only non-resource-specific limits
3958
+ are checked.
3959
+ </p>
3960
+
3961
+
3962
+
3963
+ <div class="method-source-code"
3964
+ id="limits-k--source">
3965
+ <pre>
3966
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1636</span>
3967
+ 1636: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">limitsOk?</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">resource</span> = <span class="ruby-keyword kw">nil</span>)
3968
+ 1637: <span class="ruby-ivar">@limits</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">limit</span><span class="ruby-operator">|</span>
3969
+ 1638: <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">limit</span>.<span class="ruby-identifier">ok?</span>(<span class="ruby-identifier">date</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">resource</span>)
3970
+ 1639: <span class="ruby-keyword kw">end</span>
3971
+ 1640: <span class="ruby-keyword kw">true</span>
3972
+ 1641: <span class="ruby-keyword kw">end</span></pre>
3851
3973
  </div>
3852
3974
 
3853
3975
  </div>
@@ -3859,7 +3981,7 @@ sucessor task.
3859
3981
 
3860
3982
 
3861
3983
  <div id="mark-s-unaway-method" class="method-detail ">
3862
- <a name="M001392"></a>
3984
+ <a name="method-i-markAsRunaway"></a>
3863
3985
 
3864
3986
  <div class="method-heading">
3865
3987
 
@@ -3878,13 +4000,13 @@ sucessor task.
3878
4000
  <div class="method-source-code"
3879
4001
  id="mark-s-unaway-source">
3880
4002
  <pre>
3881
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1693</span>
3882
- 1693: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">markAsRunaway</span>
3883
- 1694: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'runaway'</span>, <span class="ruby-node">&quot;Task #{@property.fullId} does not fit into &quot;</span> <span class="ruby-operator">+</span>
3884
- 1695: <span class="ruby-value str">&quot;project time frame&quot;</span>)
3885
- 1696:
3886
- 1697: <span class="ruby-ivar">@isRunAway</span> = <span class="ruby-keyword kw">true</span>
3887
- 1698: <span class="ruby-keyword kw">end</span></pre>
4003
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1728</span>
4004
+ 1728: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">markAsRunaway</span>
4005
+ 1729: <span class="ruby-identifier">warning</span>(<span class="ruby-value str">'runaway'</span>, <span class="ruby-node">&quot;Task #{@property.fullId} does not fit into &quot;</span> <span class="ruby-operator">+</span>
4006
+ 1730: <span class="ruby-value str">&quot;project time frame&quot;</span>)
4007
+ 1731:
4008
+ 1732: <span class="ruby-ivar">@isRunAway</span> = <span class="ruby-keyword kw">true</span>
4009
+ 1733: <span class="ruby-keyword kw">end</span></pre>
3888
4010
  </div>
3889
4011
 
3890
4012
  </div>
@@ -3896,7 +4018,7 @@ sucessor task.
3896
4018
 
3897
4019
 
3898
4020
  <div id="mark-ilestone-method" class="method-detail ">
3899
- <a name="M001393"></a>
4021
+ <a name="method-i-markMilestone"></a>
3900
4022
 
3901
4023
  <div class="method-heading">
3902
4024
 
@@ -3918,28 +4040,28 @@ accordingly.
3918
4040
  <div class="method-source-code"
3919
4041
  id="mark-ilestone-source">
3920
4042
  <pre>
3921
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1702</span>
3922
- 1702: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">markMilestone</span>
3923
- 1703: <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-identifier">hasDurationSpec?</span> <span class="ruby-operator">||</span>
3924
- 1704: <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span>
3925
- 1705:
3926
- 1706: <span class="ruby-comment cmt"># The following cases qualify for an automatic milestone promotion.</span>
3927
- 1707: <span class="ruby-comment cmt"># - --&gt; -</span>
3928
- 1708: <span class="ruby-comment cmt"># | --&gt; -</span>
3929
- 1709: <span class="ruby-comment cmt"># |D --&gt; -</span>
3930
- 1710: <span class="ruby-comment cmt"># -D --&gt; -</span>
3931
- 1711: <span class="ruby-comment cmt"># - &lt;-- -</span>
3932
- 1712: <span class="ruby-comment cmt"># - &lt;-- |</span>
3933
- 1713: <span class="ruby-comment cmt"># - &lt;-- -D</span>
3934
- 1714: <span class="ruby-comment cmt"># - &lt;-- |D</span>
3935
- 1715: <span class="ruby-identifier">hasStartSpec</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'depends'</span>).<span class="ruby-identifier">empty?</span>
3936
- 1716: <span class="ruby-identifier">hasEndSpec</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'precedes'</span>).<span class="ruby-identifier">empty?</span>
3937
- 1717:
3938
- 1718: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'milestone'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
3939
- 1719: (<span class="ruby-identifier">hasStartSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasEndSpec</span>) <span class="ruby-operator">||</span>
3940
- 1720: (<span class="ruby-operator">!</span><span class="ruby-identifier">hasStartSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">hasEndSpec</span>) <span class="ruby-operator">||</span>
3941
- 1721: (<span class="ruby-operator">!</span><span class="ruby-identifier">hasStartSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasEndSpec</span>)
3942
- 1722: <span class="ruby-keyword kw">end</span></pre>
4043
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1737</span>
4044
+ 1737: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">markMilestone</span>
4045
+ 1738: <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-identifier">hasDurationSpec?</span> <span class="ruby-operator">||</span>
4046
+ 1739: <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'booking'</span>).<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span>
4047
+ 1740:
4048
+ 1741: <span class="ruby-comment cmt"># The following cases qualify for an automatic milestone promotion.</span>
4049
+ 1742: <span class="ruby-comment cmt"># - --&gt; -</span>
4050
+ 1743: <span class="ruby-comment cmt"># | --&gt; -</span>
4051
+ 1744: <span class="ruby-comment cmt"># |D --&gt; -</span>
4052
+ 1745: <span class="ruby-comment cmt"># -D --&gt; -</span>
4053
+ 1746: <span class="ruby-comment cmt"># - &lt;-- -</span>
4054
+ 1747: <span class="ruby-comment cmt"># - &lt;-- |</span>
4055
+ 1748: <span class="ruby-comment cmt"># - &lt;-- -D</span>
4056
+ 1749: <span class="ruby-comment cmt"># - &lt;-- |D</span>
4057
+ 1750: <span class="ruby-identifier">hasStartSpec</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'depends'</span>).<span class="ruby-identifier">empty?</span>
4058
+ 1751: <span class="ruby-identifier">hasEndSpec</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'precedes'</span>).<span class="ruby-identifier">empty?</span>
4059
+ 1752:
4060
+ 1753: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'milestone'</span>, <span class="ruby-ivar">@scenarioIdx</span>] =
4061
+ 1754: (<span class="ruby-identifier">hasStartSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasEndSpec</span>) <span class="ruby-operator">||</span>
4062
+ 1755: (<span class="ruby-operator">!</span><span class="ruby-identifier">hasStartSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">hasEndSpec</span>) <span class="ruby-operator">||</span>
4063
+ 1756: (<span class="ruby-operator">!</span><span class="ruby-identifier">hasStartSpec</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasEndSpec</span>)
4064
+ 1757: <span class="ruby-keyword kw">end</span></pre>
3943
4065
  </div>
3944
4066
 
3945
4067
  </div>
@@ -3951,7 +4073,7 @@ accordingly.
3951
4073
 
3952
4074
 
3953
4075
  <div id="next-lot-method" class="method-detail ">
3954
- <a name="M001386"></a>
4076
+ <a name="method-i-nextSlot"></a>
3955
4077
 
3956
4078
  <div class="method-heading">
3957
4079
 
@@ -3975,16 +4097,16 @@ still nil. Otherwise it contains the date of the last scheduled slot.
3975
4097
  <div class="method-source-code"
3976
4098
  id="next-lot-source">
3977
4099
  <pre>
3978
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1481</span>
3979
- 1481: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextSlot</span>(<span class="ruby-identifier">slotDuration</span>)
3980
- 1482: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@isRunAway</span>
3981
- 1483:
3982
- 1484: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
3983
- 1485: <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">:</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
3984
- 1486: <span class="ruby-keyword kw">else</span>
3985
- 1487: <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span>
3986
- 1488: <span class="ruby-keyword kw">end</span>
3987
- 1489: <span class="ruby-keyword kw">end</span></pre>
4100
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1501</span>
4101
+ 1501: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nextSlot</span>(<span class="ruby-identifier">slotDuration</span>)
4102
+ 1502: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scheduled'</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@isRunAway</span>
4103
+ 1503:
4104
+ 1504: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4105
+ 1505: <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">:</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
4106
+ 1506: <span class="ruby-keyword kw">else</span>
4107
+ 1507: <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span>
4108
+ 1508: <span class="ruby-keyword kw">end</span>
4109
+ 1509: <span class="ruby-keyword kw">end</span></pre>
3988
4110
  </div>
3989
4111
 
3990
4112
  </div>
@@ -3996,7 +4118,7 @@ still nil. Otherwise it contains the date of the last scheduled slot.
3996
4118
 
3997
4119
 
3998
4120
  <div id="propagate-ate-o-ep-method" class="method-detail ">
3999
- <a name="M001396"></a>
4121
+ <a name="method-i-propagateDateToDep"></a>
4000
4122
 
4001
4123
  <div class="method-heading">
4002
4124
 
@@ -4020,31 +4142,31 @@ task to a dependend <a href="Task.html">Task</a> <tt>task</tt>. If
4020
4142
  <div class="method-source-code"
4021
4143
  id="propagate-ate-o-ep-source">
4022
4144
  <pre>
4023
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1778</span>
4024
- 1778: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">propagateDateToDep</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">atEnd</span>)
4025
- 1779: <span class="ruby-comment cmt">#puts &quot;Propagate #{atEnd ? 'end' : 'start'} to dep. #{task.fullId}&quot;</span>
4026
- 1780: <span class="ruby-comment cmt"># Don't propagate if the task is already completely scheduled or is a</span>
4027
- 1781: <span class="ruby-comment cmt"># container.</span>
4028
- 1782: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">container?</span>
4029
- 1783:
4030
- 1784: <span class="ruby-comment cmt"># Don't propagate if the task already has a date for that end.</span>
4031
- 1785: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>[<span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">nil?</span>
4032
- 1786:
4033
- 1787: <span class="ruby-comment cmt"># Don't propagate if the task has a duration or is a milestone and the</span>
4034
- 1788: <span class="ruby-comment cmt"># task end to set is in the scheduling direction.</span>
4035
- 1789: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">hasDurationSpec?</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-operator">&amp;&amp;</span>
4036
- 1790: <span class="ruby-operator">!</span>(<span class="ruby-identifier">atEnd</span> <span class="ruby-operator">^</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'forward'</span>, <span class="ruby-ivar">@scenarioIdx</span>])
4037
- 1791:
4038
- 1792: <span class="ruby-comment cmt"># Check if all other dependencies for that task end have been determined</span>
4039
- 1793: <span class="ruby-comment cmt"># already and use the latest or earliest possible date. Don't propagate</span>
4040
- 1794: <span class="ruby-comment cmt"># if we don't have all dates yet.</span>
4041
- 1795: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">nDate</span> = (<span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">latestEnd</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-operator">:</span>
4042
- 1796: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">earliestStart</span>(<span class="ruby-ivar">@scenarioIdx</span>))).<span class="ruby-identifier">nil?</span>
4043
- 1797:
4044
- 1798: <span class="ruby-comment cmt"># Looks like it is ok to propagate the date.</span>
4045
- 1799: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">nDate</span>, <span class="ruby-identifier">atEnd</span>)
4046
- 1800: <span class="ruby-comment cmt"># puts &quot;Propagate #{atEnd ? 'end' : 'start'} to dep. #{task.fullId} done&quot;</span>
4047
- 1801: <span class="ruby-keyword kw">end</span></pre>
4145
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1813</span>
4146
+ 1813: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">propagateDateToDep</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">atEnd</span>)
4147
+ 1814: <span class="ruby-comment cmt">#puts &quot;Propagate #{atEnd ? 'end' : 'start'} to dep. #{task.fullId}&quot;</span>
4148
+ 1815: <span class="ruby-comment cmt"># Don't propagate if the task is already completely scheduled or is a</span>
4149
+ 1816: <span class="ruby-comment cmt"># container.</span>
4150
+ 1817: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">container?</span>
4151
+ 1818:
4152
+ 1819: <span class="ruby-comment cmt"># Don't propagate if the task already has a date for that end.</span>
4153
+ 1820: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>[<span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'end'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'start'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">nil?</span>
4154
+ 1821:
4155
+ 1822: <span class="ruby-comment cmt"># Don't propagate if the task has a duration or is a milestone and the</span>
4156
+ 1823: <span class="ruby-comment cmt"># task end to set is in the scheduling direction.</span>
4157
+ 1824: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">hasDurationSpec?</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-operator">&amp;&amp;</span>
4158
+ 1825: <span class="ruby-operator">!</span>(<span class="ruby-identifier">atEnd</span> <span class="ruby-operator">^</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'forward'</span>, <span class="ruby-ivar">@scenarioIdx</span>])
4159
+ 1826:
4160
+ 1827: <span class="ruby-comment cmt"># Check if all other dependencies for that task end have been determined</span>
4161
+ 1828: <span class="ruby-comment cmt"># already and use the latest or earliest possible date. Don't propagate</span>
4162
+ 1829: <span class="ruby-comment cmt"># if we don't have all dates yet.</span>
4163
+ 1830: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">nDate</span> = (<span class="ruby-identifier">atEnd</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">latestEnd</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-operator">:</span>
4164
+ 1831: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">earliestStart</span>(<span class="ruby-ivar">@scenarioIdx</span>))).<span class="ruby-identifier">nil?</span>
4165
+ 1832:
4166
+ 1833: <span class="ruby-comment cmt"># Looks like it is ok to propagate the date.</span>
4167
+ 1834: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">nDate</span>, <span class="ruby-identifier">atEnd</span>)
4168
+ 1835: <span class="ruby-comment cmt"># puts &quot;Propagate #{atEnd ? 'end' : 'start'} to dep. #{task.fullId} done&quot;</span>
4169
+ 1836: <span class="ruby-keyword kw">end</span></pre>
4048
4170
  </div>
4049
4171
 
4050
4172
  </div>
@@ -4056,7 +4178,7 @@ task to a dependend <a href="Task.html">Task</a> <tt>task</tt>. If
4056
4178
 
4057
4179
 
4058
4180
  <div id="schedule-lot-method" class="method-detail ">
4059
- <a name="M001385"></a>
4181
+ <a name="method-i-scheduleSlot"></a>
4060
4182
 
4061
4183
  <div class="method-heading">
4062
4184
 
@@ -4075,101 +4197,99 @@ task to a dependend <a href="Task.html">Task</a> <tt>task</tt>. If
4075
4197
  <div class="method-source-code"
4076
4198
  id="schedule-lot-source">
4077
4199
  <pre>
4078
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1382</span>
4079
- 1382: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleSlot</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>)
4080
- 1383: <span class="ruby-comment cmt"># Tasks must always be scheduled in a single contigous fashion. @lastSlot</span>
4081
- 1384: <span class="ruby-comment cmt"># indicates the slot that was used for the previous call. Depending on the</span>
4082
- 1385: <span class="ruby-comment cmt"># scheduling direction the next slot must be scheduled either right before</span>
4083
- 1386: <span class="ruby-comment cmt"># or after this slot. If the current slot is not directly aligned, we'll</span>
4084
- 1387: <span class="ruby-comment cmt"># wait for another call with a proper slot. The function returns true</span>
4085
- 1388: <span class="ruby-comment cmt"># only if a slot could be scheduled.</span>
4086
- 1389: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4087
- 1390: <span class="ruby-comment cmt"># On first call, the @lastSlot is not set yet. We set it to the slot</span>
4088
- 1391: <span class="ruby-comment cmt"># before the start slot.</span>
4089
- 1392: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span>
4090
- 1393: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span>
4091
- 1394: <span class="ruby-ivar">@tentativeEnd</span> = <span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
4092
- 1395: <span class="ruby-keyword kw">end</span>
4093
- 1396:
4094
- 1397: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
4095
- 1398: <span class="ruby-keyword kw">else</span>
4096
- 1399: <span class="ruby-comment cmt"># On first call, the @lastSlot is not set yet. We set it to the slot</span>
4097
- 1400: <span class="ruby-comment cmt"># to the end slot.</span>
4098
- 1401: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span>
4099
- 1402: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)
4100
- 1403: <span class="ruby-ivar">@tentativeStart</span> = <span class="ruby-identifier">slot</span>
4101
- 1404: <span class="ruby-keyword kw">end</span>
4102
- 1405:
4103
- 1406: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span>
4104
- 1407: <span class="ruby-keyword kw">end</span>
4105
- 1408: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">slot</span>
4106
- 1409:
4107
- 1410: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
4108
- 1411: <span class="ruby-comment cmt"># The doneDuration counts the number of scheduled slots. It is increased</span>
4109
- 1412: <span class="ruby-comment cmt"># by one with every scheduled slot. The doneLength is only increased for</span>
4110
- 1413: <span class="ruby-comment cmt"># global working time slots.</span>
4111
- 1414: <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>)
4112
- 1415: <span class="ruby-ivar">@doneDuration</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
4113
- 1416: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>)
4114
- 1417: <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
4115
- 1418: <span class="ruby-keyword kw">end</span>
4116
- 1419:
4117
- 1420: <span class="ruby-comment cmt"># If we have reached the specified duration or lengths, we set the end</span>
4118
- 1421: <span class="ruby-comment cmt"># or start date and propagate the value to neighbouring tasks.</span>
4119
- 1422: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>)) <span class="ruby-operator">||</span>
4120
- 1423: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneDuration</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>))
4121
- 1424: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
4122
- 1425: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4123
- 1426: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>, <span class="ruby-keyword kw">true</span>)
4124
- 1427: <span class="ruby-keyword kw">else</span>
4125
- 1428: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-keyword kw">false</span>)
4126
- 1429: <span class="ruby-keyword kw">end</span>
4127
- 1430: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4128
- 1431: <span class="ruby-keyword kw">end</span>
4129
- 1432: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
4130
- 1433: <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>)
4131
- 1434: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>)
4132
- 1435: <span class="ruby-comment cmt"># The specified effort has been reached. The has been fully scheduled</span>
4133
- 1436: <span class="ruby-comment cmt"># now.</span>
4134
- 1437: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
4135
- 1438: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4136
- 1439: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@tentativeEnd</span>, <span class="ruby-keyword kw">true</span>)
4137
- 1440: <span class="ruby-keyword kw">else</span>
4138
- 1441: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@tentativeStart</span>, <span class="ruby-keyword kw">false</span>)
4139
- 1442: <span class="ruby-keyword kw">end</span>
4140
- 1443: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4141
- 1444: <span class="ruby-keyword kw">end</span>
4142
- 1445: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'milestone'</span>)
4143
- 1446: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4144
- 1447: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>), <span class="ruby-keyword kw">true</span>)
4145
- 1448: <span class="ruby-keyword kw">else</span>
4146
- 1449: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>), <span class="ruby-keyword kw">false</span>)
4147
- 1450: <span class="ruby-keyword kw">end</span>
4148
- 1451: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4149
- 1452: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)
4150
- 1453: <span class="ruby-comment cmt"># Task with start and end date but no duration criteria</span>
4151
- 1454: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span>
4152
- 1455: <span class="ruby-comment cmt"># For start-end-tasks without allocation, we don't have to do</span>
4153
- 1456: <span class="ruby-comment cmt"># anything but to set the 'scheduled' flag.</span>
4154
- 1457: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
4155
- 1458: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">scheduleContainer</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
4156
- 1459: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4157
- 1460: <span class="ruby-keyword kw">end</span>
4158
- 1461:
4159
- 1462: <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>)
4160
- 1463:
4161
- 1464: <span class="ruby-comment cmt"># Depending on the scheduling direction we can mark the task as</span>
4162
- 1465: <span class="ruby-comment cmt"># scheduled once we have reached the other end.</span>
4163
- 1466: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)) <span class="ruby-operator">||</span>
4164
- 1467: (<span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>))
4165
- 1468: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
4166
- 1469: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">scheduleContainer</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
4167
- 1470: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4168
- 1471: <span class="ruby-keyword kw">end</span>
4169
- 1472: <span class="ruby-keyword kw">end</span>
4170
- 1473:
4171
- 1474: <span class="ruby-keyword kw">false</span>
4172
- 1475: <span class="ruby-keyword kw">end</span></pre>
4200
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1404</span>
4201
+ 1404: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleSlot</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>)
4202
+ 1405: <span class="ruby-comment cmt"># Tasks must always be scheduled in a single contigous fashion. @lastSlot</span>
4203
+ 1406: <span class="ruby-comment cmt"># indicates the slot that was used for the previous call. Depending on the</span>
4204
+ 1407: <span class="ruby-comment cmt"># scheduling direction the next slot must be scheduled either right before</span>
4205
+ 1408: <span class="ruby-comment cmt"># or after this slot. If the current slot is not directly aligned, we'll</span>
4206
+ 1409: <span class="ruby-comment cmt"># wait for another call with a proper slot. The function returns true</span>
4207
+ 1410: <span class="ruby-comment cmt"># only if a slot could be scheduled.</span>
4208
+ 1411: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4209
+ 1412: <span class="ruby-comment cmt"># On first call, the @lastSlot is not set yet. We set it to the slot</span>
4210
+ 1413: <span class="ruby-comment cmt"># before the start slot.</span>
4211
+ 1414: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span>
4212
+ 1415: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span>
4213
+ 1416: <span class="ruby-ivar">@tentativeEnd</span> = <span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
4214
+ 1417: <span class="ruby-keyword kw">end</span>
4215
+ 1418:
4216
+ 1419: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>
4217
+ 1420: <span class="ruby-keyword kw">else</span>
4218
+ 1421: <span class="ruby-comment cmt"># On first call, the @lastSlot is not set yet. We set it to the slot</span>
4219
+ 1422: <span class="ruby-comment cmt"># to the end slot.</span>
4220
+ 1423: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@lastSlot</span>.<span class="ruby-identifier">nil?</span>
4221
+ 1424: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)
4222
+ 1425: <span class="ruby-ivar">@tentativeStart</span> = <span class="ruby-identifier">slot</span>
4223
+ 1426: <span class="ruby-keyword kw">end</span>
4224
+ 1427:
4225
+ 1428: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@lastSlot</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">slotDuration</span>
4226
+ 1429: <span class="ruby-keyword kw">end</span>
4227
+ 1430: <span class="ruby-ivar">@lastSlot</span> = <span class="ruby-identifier">slot</span>
4228
+ 1431:
4229
+ 1432: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
4230
+ 1433: <span class="ruby-comment cmt"># The doneDuration counts the number of scheduled slots. It is increased</span>
4231
+ 1434: <span class="ruby-comment cmt"># by one with every scheduled slot. The doneLength is only increased for</span>
4232
+ 1435: <span class="ruby-comment cmt"># global working time slots.</span>
4233
+ 1436: <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>)
4234
+ 1437: <span class="ruby-ivar">@doneDuration</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
4235
+ 1438: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>)
4236
+ 1439: <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
4237
+ 1440: <span class="ruby-keyword kw">end</span>
4238
+ 1441:
4239
+ 1442: <span class="ruby-comment cmt"># If we have reached the specified duration or lengths, we set the end</span>
4240
+ 1443: <span class="ruby-comment cmt"># or start date and propagate the value to neighbouring tasks.</span>
4241
+ 1444: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneLength</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'length'</span>)) <span class="ruby-operator">||</span>
4242
+ 1445: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@doneDuration</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'duration'</span>))
4243
+ 1446: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4244
+ 1447: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span>, <span class="ruby-keyword kw">true</span>)
4245
+ 1448: <span class="ruby-keyword kw">else</span>
4246
+ 1449: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-keyword kw">false</span>)
4247
+ 1450: <span class="ruby-keyword kw">end</span>
4248
+ 1451: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4249
+ 1452: <span class="ruby-keyword kw">end</span>
4250
+ 1453: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
4251
+ 1454: <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>)
4252
+ 1455: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@doneEffort</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'effort'</span>)
4253
+ 1456: <span class="ruby-comment cmt"># The specified effort has been reached. The has been fully scheduled</span>
4254
+ 1457: <span class="ruby-comment cmt"># now.</span>
4255
+ 1458: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4256
+ 1459: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@tentativeEnd</span>, <span class="ruby-keyword kw">true</span>)
4257
+ 1460: <span class="ruby-keyword kw">else</span>
4258
+ 1461: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-ivar">@tentativeStart</span>, <span class="ruby-keyword kw">false</span>)
4259
+ 1462: <span class="ruby-keyword kw">end</span>
4260
+ 1463: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4261
+ 1464: <span class="ruby-keyword kw">end</span>
4262
+ 1465: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'milestone'</span>)
4263
+ 1466: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>)
4264
+ 1467: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>), <span class="ruby-keyword kw">true</span>)
4265
+ 1468: <span class="ruby-keyword kw">else</span>
4266
+ 1469: <span class="ruby-identifier">propagateDate</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>), <span class="ruby-keyword kw">false</span>)
4267
+ 1470: <span class="ruby-keyword kw">end</span>
4268
+ 1471: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4269
+ 1472: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)
4270
+ 1473: <span class="ruby-comment cmt"># Task with start and end date but no duration criteria</span>
4271
+ 1474: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'allocate'</span>).<span class="ruby-identifier">empty?</span>
4272
+ 1475: <span class="ruby-comment cmt"># For start-end-tasks without allocation, we don't have to do</span>
4273
+ 1476: <span class="ruby-comment cmt"># anything but to set the 'scheduled' flag.</span>
4274
+ 1477: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
4275
+ 1478: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">scheduleContainer</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
4276
+ 1479: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4277
+ 1480: <span class="ruby-keyword kw">end</span>
4278
+ 1481:
4279
+ 1482: <span class="ruby-identifier">bookResources</span>(<span class="ruby-identifier">slot</span>, <span class="ruby-identifier">slotDuration</span>)
4280
+ 1483:
4281
+ 1484: <span class="ruby-comment cmt"># Depending on the scheduling direction we can mark the task as</span>
4282
+ 1485: <span class="ruby-comment cmt"># scheduled once we have reached the other end.</span>
4283
+ 1486: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">slotDuration</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)) <span class="ruby-operator">||</span>
4284
+ 1487: (<span class="ruby-operator">!</span><span class="ruby-identifier">a</span>(<span class="ruby-value str">'forward'</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">slot</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>))
4285
+ 1488: <span class="ruby-ivar">@property</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-ivar">@scenarioIdx</span>] = <span class="ruby-keyword kw">true</span>
4286
+ 1489: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">scheduleContainer</span>(<span class="ruby-ivar">@scenarioIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
4287
+ 1490: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
4288
+ 1491: <span class="ruby-keyword kw">end</span>
4289
+ 1492: <span class="ruby-keyword kw">end</span>
4290
+ 1493:
4291
+ 1494: <span class="ruby-keyword kw">false</span>
4292
+ 1495: <span class="ruby-keyword kw">end</span></pre>
4173
4293
  </div>
4174
4294
 
4175
4295
  </div>
@@ -4181,7 +4301,7 @@ task to a dependend <a href="Task.html">Task</a> <tt>task</tt>. If
4181
4301
 
4182
4302
 
4183
4303
  <div id="set-etermination-method" class="method-detail ">
4184
- <a name="M001395"></a>
4304
+ <a name="method-i-setDetermination"></a>
4185
4305
 
4186
4306
  <div class="method-heading">
4187
4307
 
@@ -4203,10 +4323,10 @@ Set @startIsDetermed or @endIsDetermed (depending on _setStart) to
4203
4323
  <div class="method-source-code"
4204
4324
  id="set-etermination-source">
4205
4325
  <pre>
4206
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1771</span>
4207
- 1771: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setDetermination</span>(<span class="ruby-identifier">setStart</span>, <span class="ruby-identifier">value</span>)
4208
- 1772: <span class="ruby-identifier">setStart</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@startIsDetermed</span> = <span class="ruby-identifier">value</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@endIsDetermed</span> = <span class="ruby-identifier">value</span>
4209
- 1773: <span class="ruby-keyword kw">end</span></pre>
4326
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1806</span>
4327
+ 1806: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setDetermination</span>(<span class="ruby-identifier">setStart</span>, <span class="ruby-identifier">value</span>)
4328
+ 1807: <span class="ruby-identifier">setStart</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@startIsDetermed</span> = <span class="ruby-identifier">value</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@endIsDetermed</span> = <span class="ruby-identifier">value</span>
4329
+ 1808: <span class="ruby-keyword kw">end</span></pre>
4210
4330
  </div>
4211
4331
 
4212
4332
  </div>
@@ -4218,7 +4338,7 @@ Set @startIsDetermed or @endIsDetermed (depending on _setStart) to
4218
4338
 
4219
4339
 
4220
4340
  <div id="targets-method" class="method-detail ">
4221
- <a name="M001400"></a>
4341
+ <a name="method-i-targets"></a>
4222
4342
 
4223
4343
  <div class="method-heading">
4224
4344
 
@@ -4240,22 +4360,22 @@ depend on the current task.
4240
4360
  <div class="method-source-code"
4241
4361
  id="targets-source">
4242
4362
  <pre>
4243
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1895</span>
4244
- 1895: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">targets</span>(<span class="ruby-identifier">list</span>)
4245
- 1896: <span class="ruby-comment cmt"># A target must be a leaf function that has no direct or indirect</span>
4246
- 1897: <span class="ruby-comment cmt"># (through parent) following tasks.</span>
4247
- 1898: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasSuccessors</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">list</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@property</span>)
4248
- 1899: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@property</span>
4249
- 1900: <span class="ruby-keyword kw">return</span>
4250
- 1901: <span class="ruby-keyword kw">end</span>
4251
- 1902:
4252
- 1903: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endsuccs'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">t</span>, <span class="ruby-identifier">onEnd</span><span class="ruby-operator">|</span>
4253
- 1904: <span class="ruby-identifier">t</span>.<span class="ruby-identifier">targets</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">list</span>)
4254
- 1905: <span class="ruby-keyword kw">end</span>
4255
- 1906:
4256
- 1907: <span class="ruby-comment cmt"># Check of indirect followers.</span>
4257
- 1908: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">targets</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">list</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
4258
- 1909: <span class="ruby-keyword kw">end</span></pre>
4363
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1930</span>
4364
+ 1930: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">targets</span>(<span class="ruby-identifier">list</span>)
4365
+ 1931: <span class="ruby-comment cmt"># A target must be a leaf function that has no direct or indirect</span>
4366
+ 1932: <span class="ruby-comment cmt"># (through parent) following tasks.</span>
4367
+ 1933: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hasSuccessors</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">list</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-ivar">@property</span>)
4368
+ 1934: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@property</span>
4369
+ 1935: <span class="ruby-keyword kw">return</span>
4370
+ 1936: <span class="ruby-keyword kw">end</span>
4371
+ 1937:
4372
+ 1938: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'endsuccs'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">t</span>, <span class="ruby-identifier">onEnd</span><span class="ruby-operator">|</span>
4373
+ 1939: <span class="ruby-identifier">t</span>.<span class="ruby-identifier">targets</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">list</span>)
4374
+ 1940: <span class="ruby-keyword kw">end</span>
4375
+ 1941:
4376
+ 1942: <span class="ruby-comment cmt"># Check of indirect followers.</span>
4377
+ 1943: <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">targets</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">list</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">parent</span>
4378
+ 1944: <span class="ruby-keyword kw">end</span></pre>
4259
4379
  </div>
4260
4380
 
4261
4381
  </div>
@@ -4267,7 +4387,7 @@ depend on the current task.
4267
4387
 
4268
4388
 
4269
4389
  <div id="turnover-method" class="method-detail ">
4270
- <a name="M001401"></a>
4390
+ <a name="method-i-turnover"></a>
4271
4391
 
4272
4392
  <div class="method-heading">
4273
4393
 
@@ -4294,59 +4414,59 @@ turnover directly generated by the resource is taken into account.
4294
4414
  <div class="method-source-code"
4295
4415
  id="turnover-source">
4296
4416
  <pre>
4297
- <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1916</span>
4298
- 1916: <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">resource</span> = <span class="ruby-keyword kw">nil</span>)
4299
- 1917: <span class="ruby-identifier">amount</span> = <span class="ruby-value">0.0</span>
4300
- 1918: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
4301
- 1919: <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">child</span><span class="ruby-operator">|</span>
4302
- 1920: <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>,
4303
- 1921: <span class="ruby-identifier">resource</span>)
4304
- 1922: <span class="ruby-keyword kw">end</span>
4305
- 1923: <span class="ruby-keyword kw">end</span>
4306
- 1924:
4307
- 1925: <span class="ruby-comment cmt"># If there are no chargeset defined for this task, we don't need to</span>
4308
- 1926: <span class="ruby-comment cmt"># compute the resource related or other cost.</span>
4309
- 1927: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'chargeset'</span>).<span class="ruby-identifier">empty?</span>
4310
- 1928: <span class="ruby-identifier">resourceCost</span> = <span class="ruby-value">0.0</span>
4311
- 1929: <span class="ruby-identifier">otherCost</span> = <span class="ruby-value">0.0</span>
4312
- 1930:
4313
- 1931: <span class="ruby-comment cmt"># Container tasks don't have resource cost.</span>
4314
- 1932: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
4315
- 1933: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>
4316
- 1934: <span class="ruby-identifier">resourceCost</span> = <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">cost</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
4317
- 1935: <span class="ruby-ivar">@property</span>)
4318
- 1936: <span class="ruby-keyword kw">else</span>
4319
- 1937: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
4320
- 1938: <span class="ruby-identifier">resourceCost</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">cost</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-ivar">@property</span>)
4321
- 1939: <span class="ruby-keyword kw">end</span>
4322
- 1940: <span class="ruby-keyword kw">end</span>
4323
- 1941: <span class="ruby-keyword kw">end</span>
4324
- 1942:
4325
- 1943: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'charge'</span>).<span class="ruby-identifier">empty?</span>
4326
- 1944: <span class="ruby-comment cmt"># Add one-time and periodic charges to the amount.</span>
4327
- 1945: <span class="ruby-identifier">startDate</span> = <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">:</span>
4328
- 1946: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">startIdx</span>)
4329
- 1947: <span class="ruby-identifier">endDate</span> = <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">:</span>
4330
- 1948: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">endIdx</span>)
4331
- 1949: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">startDate</span>, <span class="ruby-identifier">endDate</span>)
4332
- 1950: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'charge'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">charge</span><span class="ruby-operator">|</span>
4333
- 1951: <span class="ruby-identifier">otherCost</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">charge</span>.<span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">iv</span>)
4334
- 1952: <span class="ruby-keyword kw">end</span>
4335
- 1953: <span class="ruby-keyword kw">end</span>
4336
- 1954:
4337
- 1955: <span class="ruby-identifier">totalCost</span> = <span class="ruby-identifier">resourceCost</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">otherCost</span>
4338
- 1956: <span class="ruby-comment cmt"># Now weight the total cost by the share of the account</span>
4339
- 1957: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'chargeset'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">set</span><span class="ruby-operator">|</span>
4340
- 1958: <span class="ruby-identifier">set</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">accnt</span>, <span class="ruby-identifier">share</span><span class="ruby-operator">|</span>
4341
- 1959: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">share</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0.0</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">accnt</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">account</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">accnt</span>.<span class="ruby-identifier">isChildOf?</span>(<span class="ruby-identifier">account</span>))
4342
- 1960: <span class="ruby-identifier">amount</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">totalCost</span> * <span class="ruby-identifier">share</span>
4343
- 1961: <span class="ruby-keyword kw">end</span>
4344
- 1962: <span class="ruby-keyword kw">end</span>
4345
- 1963: <span class="ruby-keyword kw">end</span>
4346
- 1964: <span class="ruby-keyword kw">end</span>
4417
+ <span class="ruby-comment cmt"># File lib/TaskScenario.rb, line 1951</span>
4418
+ 1951: <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">resource</span> = <span class="ruby-keyword kw">nil</span>)
4419
+ 1952: <span class="ruby-identifier">amount</span> = <span class="ruby-value">0.0</span>
4420
+ 1953: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
4421
+ 1954: <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">child</span><span class="ruby-operator">|</span>
4422
+ 1955: <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>,
4423
+ 1956: <span class="ruby-identifier">resource</span>)
4424
+ 1957: <span class="ruby-keyword kw">end</span>
4425
+ 1958: <span class="ruby-keyword kw">end</span>
4426
+ 1959:
4427
+ 1960: <span class="ruby-comment cmt"># If there are no chargeset defined for this task, we don't need to</span>
4428
+ 1961: <span class="ruby-comment cmt"># compute the resource related or other cost.</span>
4429
+ 1962: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'chargeset'</span>).<span class="ruby-identifier">empty?</span>
4430
+ 1963: <span class="ruby-identifier">resourceCost</span> = <span class="ruby-value">0.0</span>
4431
+ 1964: <span class="ruby-identifier">otherCost</span> = <span class="ruby-value">0.0</span>
4347
4432
  1965:
4348
- 1966: <span class="ruby-identifier">amount</span>
4349
- 1967: <span class="ruby-keyword kw">end</span></pre>
4433
+ 1966: <span class="ruby-comment cmt"># Container tasks don't have resource cost.</span>
4434
+ 1967: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@property</span>.<span class="ruby-identifier">container?</span>
4435
+ 1968: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">resource</span>
4436
+ 1969: <span class="ruby-identifier">resourceCost</span> = <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">cost</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>,
4437
+ 1970: <span class="ruby-ivar">@property</span>)
4438
+ 1971: <span class="ruby-keyword kw">else</span>
4439
+ 1972: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'assignedresources'</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>
4440
+ 1973: <span class="ruby-identifier">resourceCost</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">cost</span>(<span class="ruby-ivar">@scenarioIdx</span>, <span class="ruby-identifier">startIdx</span>, <span class="ruby-identifier">endIdx</span>, <span class="ruby-ivar">@property</span>)
4441
+ 1974: <span class="ruby-keyword kw">end</span>
4442
+ 1975: <span class="ruby-keyword kw">end</span>
4443
+ 1976: <span class="ruby-keyword kw">end</span>
4444
+ 1977:
4445
+ 1978: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'charge'</span>).<span class="ruby-identifier">empty?</span>
4446
+ 1979: <span class="ruby-comment cmt"># Add one-time and periodic charges to the amount.</span>
4447
+ 1980: <span class="ruby-identifier">startDate</span> = <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">startIdx</span> <span class="ruby-operator">:</span>
4448
+ 1981: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">startIdx</span>)
4449
+ 1982: <span class="ruby-identifier">endDate</span> = <span class="ruby-identifier">endIdx</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">TjTime</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">endIdx</span> <span class="ruby-operator">:</span>
4450
+ 1983: <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">endIdx</span>)
4451
+ 1984: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">startDate</span>, <span class="ruby-identifier">endDate</span>)
4452
+ 1985: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'charge'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">charge</span><span class="ruby-operator">|</span>
4453
+ 1986: <span class="ruby-identifier">otherCost</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">charge</span>.<span class="ruby-identifier">turnover</span>(<span class="ruby-identifier">iv</span>)
4454
+ 1987: <span class="ruby-keyword kw">end</span>
4455
+ 1988: <span class="ruby-keyword kw">end</span>
4456
+ 1989:
4457
+ 1990: <span class="ruby-identifier">totalCost</span> = <span class="ruby-identifier">resourceCost</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">otherCost</span>
4458
+ 1991: <span class="ruby-comment cmt"># Now weight the total cost by the share of the account</span>
4459
+ 1992: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'chargeset'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">set</span><span class="ruby-operator">|</span>
4460
+ 1993: <span class="ruby-identifier">set</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">accnt</span>, <span class="ruby-identifier">share</span><span class="ruby-operator">|</span>
4461
+ 1994: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">share</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0.0</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">accnt</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">account</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">accnt</span>.<span class="ruby-identifier">isChildOf?</span>(<span class="ruby-identifier">account</span>))
4462
+ 1995: <span class="ruby-identifier">amount</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">totalCost</span> * <span class="ruby-identifier">share</span>
4463
+ 1996: <span class="ruby-keyword kw">end</span>
4464
+ 1997: <span class="ruby-keyword kw">end</span>
4465
+ 1998: <span class="ruby-keyword kw">end</span>
4466
+ 1999: <span class="ruby-keyword kw">end</span>
4467
+ 2000:
4468
+ 2001: <span class="ruby-identifier">amount</span>
4469
+ 2002: <span class="ruby-keyword kw">end</span></pre>
4350
4470
  </div>
4351
4471
 
4352
4472
  </div>