taskjuggler 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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>