taskjuggler 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. data/Rakefile +1 -0
  2. data/benchmarks/depends.tjp +2 -1
  3. data/benchmarks/htmltaskreport.tjp +2 -1
  4. data/doc/classes/AppConfig.html +124 -120
  5. data/doc/classes/Arguments.html +10 -6
  6. data/doc/classes/Object.html +229 -0
  7. data/doc/classes/String.html +35 -31
  8. data/doc/classes/TaskJuggler/Account.html +18 -18
  9. data/doc/classes/TaskJuggler/AccountAttribute.html +261 -0
  10. data/doc/classes/TaskJuggler/AccountScenario.html +12 -12
  11. data/doc/classes/TaskJuggler/Allocation.html +34 -30
  12. data/doc/classes/TaskJuggler/AllocationAttribute.html +70 -70
  13. data/doc/classes/TaskJuggler/AttributeBase.html +131 -147
  14. data/doc/classes/TaskJuggler/AttributeDefinition.html +38 -21
  15. data/doc/classes/TaskJuggler/BatchProcessor.html +313 -0
  16. data/doc/classes/TaskJuggler/Booking.html +22 -18
  17. data/doc/classes/TaskJuggler/BookingListAttribute.html +42 -42
  18. data/doc/classes/TaskJuggler/BooleanAttribute.html +40 -40
  19. data/doc/classes/TaskJuggler/CSVFile.html +28 -24
  20. data/doc/classes/TaskJuggler/Charge.html +22 -18
  21. data/doc/classes/TaskJuggler/ChargeListAttribute.html +30 -30
  22. data/doc/classes/TaskJuggler/ChargeSet.html +41 -37
  23. data/doc/classes/TaskJuggler/ChargeSetListAttribute.html +46 -46
  24. data/doc/classes/TaskJuggler/ColumnListAttribute.html +231 -0
  25. data/doc/classes/TaskJuggler/ColumnTable.html +23 -21
  26. data/doc/classes/TaskJuggler/DateAttribute.html +20 -20
  27. data/doc/classes/TaskJuggler/DefinitionListAttribute.html +162 -0
  28. data/doc/classes/TaskJuggler/DependencyListAttribute.html +46 -46
  29. data/doc/classes/TaskJuggler/DurationAttribute.html +30 -30
  30. data/doc/classes/TaskJuggler/FixnumAttribute.html +20 -20
  31. data/doc/classes/TaskJuggler/FlagListAttribute.html +42 -42
  32. data/doc/classes/TaskJuggler/FloatAttribute.html +30 -30
  33. data/doc/classes/TaskJuggler/FormatListAttribute.html +197 -0
  34. data/doc/classes/TaskJuggler/GanttChart.html +236 -207
  35. data/doc/classes/TaskJuggler/GanttContainer.html +46 -42
  36. data/doc/classes/TaskJuggler/GanttHeader.html +16 -12
  37. data/doc/classes/TaskJuggler/GanttHeaderScaleItem.html +16 -12
  38. data/doc/classes/TaskJuggler/GanttLine.html +28 -24
  39. data/doc/classes/TaskJuggler/GanttLoadStack.html +22 -18
  40. data/doc/classes/TaskJuggler/GanttMilestone.html +46 -42
  41. data/doc/classes/TaskJuggler/GanttRouter.html +104 -98
  42. data/doc/classes/TaskJuggler/GanttTaskBar.html +46 -42
  43. data/doc/classes/TaskJuggler/HTMLDocument.html +12 -12
  44. data/doc/classes/TaskJuggler/HTMLGraphics.html +12 -12
  45. data/doc/classes/TaskJuggler/Interval.html +126 -120
  46. data/doc/classes/TaskJuggler/IntervalListAttribute.html +46 -46
  47. data/doc/classes/TaskJuggler/JobInfo.html +284 -0
  48. data/doc/classes/TaskJuggler/Journal.html +197 -0
  49. data/doc/classes/TaskJuggler/JournalEntry.html +218 -0
  50. data/doc/classes/TaskJuggler/KeywordArray.html +179 -0
  51. data/doc/classes/TaskJuggler/KeywordDocumentation.html +445 -396
  52. data/doc/classes/TaskJuggler/Limits/Limit.html +34 -30
  53. data/doc/classes/TaskJuggler/Limits.html +68 -62
  54. data/doc/classes/TaskJuggler/LimitsAttribute.html +40 -40
  55. data/doc/classes/TaskJuggler/ListAttributeBase.html +207 -0
  56. data/doc/classes/TaskJuggler/Log.html +72 -68
  57. data/doc/classes/TaskJuggler/LogicalAttribute.html +38 -34
  58. data/doc/classes/TaskJuggler/LogicalExpression.html +16 -12
  59. data/doc/classes/TaskJuggler/LogicalExpressionAttribute.html +194 -0
  60. data/doc/classes/TaskJuggler/LogicalFlag.html +32 -32
  61. data/doc/classes/TaskJuggler/LogicalFunction.html +28 -24
  62. data/doc/classes/TaskJuggler/LogicalOperation.html +17 -13
  63. data/doc/classes/TaskJuggler/Macro.html +10 -6
  64. data/doc/classes/TaskJuggler/MacroParser.html +36 -36
  65. data/doc/classes/TaskJuggler/MacroTable.html +40 -36
  66. data/doc/classes/TaskJuggler/Message.html +16 -12
  67. data/doc/classes/TaskJuggler/MessageHandler.html +16 -12
  68. data/doc/classes/TaskJuggler/Navigator.html +249 -0
  69. data/doc/classes/TaskJuggler/OnShiftCache.html +316 -0
  70. data/doc/classes/TaskJuggler/Project.html +1064 -678
  71. data/doc/classes/TaskJuggler/ProjectFileParser.html +90 -85
  72. data/doc/classes/TaskJuggler/PropertyAttribute.html +194 -0
  73. data/doc/classes/TaskJuggler/PropertyList.html +114 -113
  74. data/doc/classes/TaskJuggler/PropertySet.html +355 -312
  75. data/doc/classes/TaskJuggler/PropertyTreeNode.html +527 -474
  76. data/doc/classes/TaskJuggler/Query.html +90 -85
  77. data/doc/classes/TaskJuggler/RTPNavigator.html +292 -0
  78. data/doc/classes/TaskJuggler/RTPReport.html +301 -0
  79. data/doc/classes/TaskJuggler/RealFormat.html +114 -57
  80. data/doc/classes/TaskJuggler/RealFormatAttribute.html +162 -0
  81. data/doc/classes/TaskJuggler/ReferenceAttribute.html +87 -20
  82. data/doc/classes/TaskJuggler/Report.html +82 -291
  83. data/doc/classes/TaskJuggler/ReportBase.html +448 -0
  84. data/doc/classes/TaskJuggler/ReportContext.html +243 -0
  85. data/doc/classes/TaskJuggler/ReportTable.html +158 -129
  86. data/doc/classes/TaskJuggler/ReportTableCell.html +30 -26
  87. data/doc/classes/TaskJuggler/ReportTableColumn.html +29 -25
  88. data/doc/classes/TaskJuggler/ReportTableLegend.html +28 -24
  89. data/doc/classes/TaskJuggler/ReportTableLine.html +34 -30
  90. data/doc/classes/TaskJuggler/Resource.html +12 -12
  91. data/doc/classes/TaskJuggler/ResourceListAttribute.html +46 -46
  92. data/doc/classes/TaskJuggler/ResourceListRE.html +49 -57
  93. data/doc/classes/TaskJuggler/ResourceScenario.html +126 -126
  94. data/doc/classes/TaskJuggler/RichText.html +52 -48
  95. data/doc/classes/TaskJuggler/RichTextAttribute.html +30 -30
  96. data/doc/classes/TaskJuggler/RichTextDocument.html +41 -37
  97. data/doc/classes/TaskJuggler/RichTextElement.html +274 -264
  98. data/doc/classes/TaskJuggler/RichTextException.html +13 -13
  99. data/doc/classes/TaskJuggler/RichTextParser.html +48 -47
  100. data/doc/classes/TaskJuggler/RichTextProtocolExample.html +52 -55
  101. data/doc/classes/TaskJuggler/RichTextProtocolHandler.html +55 -10
  102. data/doc/classes/TaskJuggler/RichTextScanner.html +106 -245
  103. data/doc/classes/TaskJuggler/RichTextSnip.html +28 -24
  104. data/doc/classes/TaskJuggler/RichTextSyntaxRules.html +381 -301
  105. data/doc/classes/TaskJuggler/Scenario.html +6 -6
  106. data/doc/classes/TaskJuggler/ScenarioData.html +40 -36
  107. data/doc/classes/TaskJuggler/ScenarioListAttribute.html +229 -0
  108. data/doc/classes/TaskJuggler/Scoreboard.html +70 -66
  109. data/doc/classes/TaskJuggler/Shift.html +18 -18
  110. data/doc/classes/TaskJuggler/ShiftAssignment.html +58 -54
  111. data/doc/classes/TaskJuggler/ShiftAssignments.html +82 -78
  112. data/doc/classes/TaskJuggler/ShiftAssignmentsAttribute.html +40 -40
  113. data/doc/classes/TaskJuggler/ShiftScenario.html +24 -24
  114. data/doc/classes/TaskJuggler/SortListAttribute.html +196 -0
  115. data/doc/classes/TaskJuggler/SourceFileInfo.html +16 -12
  116. data/doc/classes/TaskJuggler/StringAttribute.html +30 -30
  117. data/doc/classes/TaskJuggler/SymbolAttribute.html +20 -20
  118. data/doc/classes/TaskJuggler/SyntaxReference.html +46 -42
  119. data/doc/classes/TaskJuggler/TOCEntry.html +16 -12
  120. data/doc/classes/TaskJuggler/TableColumnDefinition.html +48 -33
  121. data/doc/classes/TaskJuggler/TableOfContents.html +22 -18
  122. data/doc/classes/TaskJuggler/TableReport.html +1036 -0
  123. data/doc/classes/TaskJuggler/Task.html +12 -12
  124. data/doc/classes/TaskJuggler/TaskDependency.html +16 -12
  125. data/doc/classes/TaskJuggler/TaskListAttribute.html +46 -46
  126. data/doc/classes/TaskJuggler/TaskListRE.html +49 -58
  127. data/doc/classes/TaskJuggler/TaskScenario.html +1270 -1180
  128. data/doc/classes/TaskJuggler/TextParser/Pattern.html +100 -96
  129. data/doc/classes/TaskJuggler/TextParser/Rule.html +88 -84
  130. data/doc/classes/TaskJuggler/TextParser/StackElement.html +16 -12
  131. data/doc/classes/TaskJuggler/TextParser/TextParserResultArray.html +12 -12
  132. data/doc/classes/TaskJuggler/TextParser/TokenDoc.html +10 -6
  133. data/doc/classes/TaskJuggler/TextParser.html +203 -140
  134. data/doc/classes/TaskJuggler/TextReport.html +364 -0
  135. data/doc/classes/TaskJuggler/TextScanner/BufferStreamHandle.html +70 -70
  136. data/doc/classes/TaskJuggler/TextScanner/FileStreamHandle.html +50 -42
  137. data/doc/classes/TaskJuggler/TextScanner/StreamHandle.html +16 -12
  138. data/doc/classes/TaskJuggler/TextScanner.html +334 -240
  139. data/doc/classes/TaskJuggler/TjException.html +6 -6
  140. data/doc/classes/TaskJuggler/TjTime.html +547 -497
  141. data/doc/classes/TaskJuggler/TjpExample.html +29 -25
  142. data/doc/classes/TaskJuggler/TjpExportRE.html +77 -97
  143. data/doc/classes/TaskJuggler/TjpSyntaxRules.html +3911 -3886
  144. data/doc/classes/TaskJuggler/UserManual.html +54 -54
  145. data/doc/classes/TaskJuggler/WorkingHours.html +53 -49
  146. data/doc/classes/TaskJuggler/WorkingHoursAttribute.html +53 -85
  147. data/doc/classes/TaskJuggler/XMLBlob.html +21 -21
  148. data/doc/classes/TaskJuggler/XMLComment.html +21 -21
  149. data/doc/classes/TaskJuggler/XMLDocument.html +28 -24
  150. data/doc/classes/TaskJuggler/XMLElement.html +70 -58
  151. data/doc/classes/TaskJuggler/XMLNamedText.html +11 -11
  152. data/doc/classes/TaskJuggler/XMLText.html +36 -36
  153. data/doc/classes/TaskJuggler.html +266 -183
  154. data/doc/files/COPYING.html +1 -1
  155. data/doc/files/README.html +1 -1
  156. data/doc/files/lib/AccountScenario_rb.html +1 -1
  157. data/doc/files/lib/Account_rb.html +1 -1
  158. data/doc/files/lib/Allocation_rb.html +1 -1
  159. data/doc/files/lib/AppConfig_rb.html +1 -1
  160. data/doc/files/lib/AttributeBase_rb.html +11 -1
  161. data/doc/files/lib/AttributeDefinition_rb.html +1 -1
  162. data/doc/files/lib/Attributes_rb.html +1 -1
  163. data/doc/files/lib/{LogicalFlag_rb.html → BatchProcessor_rb.html} +8 -6
  164. data/doc/files/lib/Booking_rb.html +1 -1
  165. data/doc/files/lib/ChargeSet_rb.html +1 -1
  166. data/doc/files/lib/Charge_rb.html +1 -1
  167. data/doc/files/lib/HTMLDocument_rb.html +1 -1
  168. data/doc/files/lib/Interval_rb.html +1 -1
  169. data/doc/files/lib/Journal_rb.html +106 -0
  170. data/doc/files/lib/KeywordArray_rb.html +106 -0
  171. data/doc/files/lib/KeywordDocumentation_rb.html +1 -1
  172. data/doc/files/lib/Limits_rb.html +1 -1
  173. data/doc/files/lib/Log_rb.html +1 -1
  174. data/doc/files/lib/LogicalExpression_rb.html +1 -3
  175. data/doc/files/lib/LogicalFunction_rb.html +1 -1
  176. data/doc/files/lib/LogicalOperation_rb.html +1 -1
  177. data/doc/files/lib/MacroParser_rb.html +1 -1
  178. data/doc/files/lib/MacroTable_rb.html +1 -1
  179. data/doc/files/lib/MessageHandler_rb.html +1 -1
  180. data/doc/files/lib/Message_rb.html +1 -1
  181. data/doc/files/lib/ProjectFileParser_rb.html +5 -1
  182. data/doc/files/lib/Project_rb.html +5 -1
  183. data/doc/files/lib/PropertyList_rb.html +1 -1
  184. data/doc/files/lib/PropertySet_rb.html +1 -1
  185. data/doc/files/lib/PropertyTreeNode_rb.html +1 -1
  186. data/doc/files/lib/Query_rb.html +1 -1
  187. data/doc/files/lib/RTPNavigator_rb.html +120 -0
  188. data/doc/files/lib/RTPReport_rb.html +118 -0
  189. data/doc/files/lib/RealFormat_rb.html +1 -1
  190. data/doc/files/lib/ResourceScenario_rb.html +1 -1
  191. data/doc/files/lib/Resource_rb.html +1 -1
  192. data/doc/files/lib/RichTextDocument_rb.html +1 -1
  193. data/doc/files/lib/RichTextElement_rb.html +1 -1
  194. data/doc/files/lib/RichTextParser_rb.html +1 -1
  195. data/doc/files/lib/RichTextProtocolExample_rb.html +1 -1
  196. data/doc/files/lib/RichTextProtocolHandler_rb.html +1 -1
  197. data/doc/files/lib/RichTextScanner_rb.html +1 -1
  198. data/doc/files/lib/RichTextSnip_rb.html +1 -1
  199. data/doc/files/lib/RichTextSyntaxRules_rb.html +1 -1
  200. data/doc/files/lib/RichText_rb.html +1 -1
  201. data/doc/files/lib/ScenarioData_rb.html +1 -1
  202. data/doc/files/lib/Scenario_rb.html +1 -1
  203. data/doc/files/lib/Scoreboard_rb.html +1 -1
  204. data/doc/files/lib/ShiftAssignments_rb.html +1 -1
  205. data/doc/files/lib/ShiftScenario_rb.html +1 -1
  206. data/doc/files/lib/Shift_rb.html +1 -1
  207. data/doc/files/lib/SourceFileInfo_rb.html +1 -1
  208. data/doc/files/lib/SyntaxReference_rb.html +1 -1
  209. data/doc/files/lib/TOCEntry_rb.html +1 -1
  210. data/doc/files/lib/TableColumnDefinition_rb.html +1 -1
  211. data/doc/files/lib/TableOfContents_rb.html +1 -1
  212. data/doc/files/lib/TaskDependency_rb.html +1 -1
  213. data/doc/files/lib/TaskJuggler_rb.html +1 -1
  214. data/doc/files/lib/TaskScenario_rb.html +1 -1
  215. data/doc/files/lib/Task_rb.html +1 -1
  216. data/doc/files/lib/TextParser/Pattern_rb.html +1 -1
  217. data/doc/files/lib/TextParser/Rule_rb.html +1 -1
  218. data/doc/files/lib/TextParser/StackElement_rb.html +1 -1
  219. data/doc/files/lib/TextParser/TokenDoc_rb.html +1 -1
  220. data/doc/files/lib/TextParser_rb.html +1 -1
  221. data/doc/files/lib/TextScanner_rb.html +1 -1
  222. data/doc/files/lib/Tj3Config_rb.html +1 -1
  223. data/doc/files/lib/TjException_rb.html +1 -1
  224. data/doc/files/lib/TjTime_rb.html +1 -1
  225. data/doc/files/lib/TjpExample_rb.html +1 -1
  226. data/doc/files/lib/TjpSyntaxRules_rb.html +1 -1
  227. data/doc/files/lib/UTF8String_rb.html +1 -1
  228. data/doc/files/lib/UserManual_rb.html +1 -1
  229. data/doc/files/lib/WorkingHours_rb.html +1 -1
  230. data/doc/files/lib/XMLDocument_rb.html +1 -1
  231. data/doc/files/lib/XMLElement_rb.html +1 -1
  232. data/doc/files/lib/deep_copy_rb.html +106 -0
  233. data/doc/files/lib/ms_test_rb.html +90 -0
  234. data/doc/files/lib/reports/CSVFile_rb.html +1 -1
  235. data/doc/files/lib/reports/ColumnTable_rb.html +1 -1
  236. data/doc/files/lib/reports/GanttChart_rb.html +1 -1
  237. data/doc/files/lib/reports/GanttContainer_rb.html +1 -1
  238. data/doc/files/lib/reports/GanttHeaderScaleItem_rb.html +1 -1
  239. data/doc/files/lib/reports/GanttHeader_rb.html +1 -1
  240. data/doc/files/lib/reports/GanttLine_rb.html +1 -1
  241. data/doc/files/lib/reports/GanttLoadStack_rb.html +1 -1
  242. data/doc/files/lib/reports/GanttMilestone_rb.html +1 -1
  243. data/doc/files/lib/reports/GanttRouter_rb.html +1 -1
  244. data/doc/files/lib/reports/GanttTaskBar_rb.html +1 -1
  245. data/doc/files/lib/reports/HTMLGraphics_rb.html +1 -1
  246. data/doc/files/lib/reports/{ReportElement_rb.html → Navigator_rb.html} +6 -8
  247. data/doc/files/lib/reports/ReportBase_rb.html +106 -0
  248. data/doc/files/lib/reports/ReportContext_rb.html +106 -0
  249. data/doc/files/lib/reports/ReportTableCell_rb.html +1 -1
  250. data/doc/files/lib/reports/ReportTableColumn_rb.html +1 -1
  251. data/doc/files/lib/reports/ReportTableLegend_rb.html +1 -1
  252. data/doc/files/lib/reports/ReportTableLine_rb.html +1 -1
  253. data/doc/files/lib/reports/ReportTable_rb.html +1 -1
  254. data/doc/files/lib/reports/Report_rb.html +8 -2
  255. data/doc/files/lib/reports/ResourceListRE_rb.html +2 -2
  256. data/doc/files/lib/reports/{ReportTableElement_rb.html → TableReport_rb.html} +7 -5
  257. data/doc/files/lib/reports/TaskListRE_rb.html +2 -2
  258. data/doc/files/lib/reports/TextReport_rb.html +116 -0
  259. data/doc/files/lib/reports/TjpExportRE_rb.html +2 -2
  260. data/doc/files/lib/taskjuggler3_rb.html +61 -56
  261. data/doc/files/lib/tj3man_rb.html +1 -1
  262. data/doc/fr_class_index.html +41 -3
  263. data/doc/fr_file_index.html +21 -5
  264. data/doc/fr_method_index.html +1069 -959
  265. data/examples/ContactList.html +1467 -0
  266. data/examples/Deliveries.html +485 -0
  267. data/examples/Development.html +2525 -0
  268. data/examples/Overview.html +747 -0
  269. data/examples/Resource Graph.html +616 -0
  270. data/examples/tutorial.tjp +63 -67
  271. data/lib/AttributeBase.rb +27 -31
  272. data/lib/AttributeDefinition.rb +12 -7
  273. data/lib/Attributes.rb +134 -34
  274. data/lib/Interval.rb +2 -0
  275. data/lib/Journal.rb +44 -0
  276. data/lib/{LogicalFlag.rb → KeywordArray.rb} +5 -13
  277. data/lib/KeywordDocumentation.rb +84 -47
  278. data/lib/Limits.rb +7 -5
  279. data/lib/LogicalExpression.rb +1 -1
  280. data/lib/LogicalOperation.rb +33 -0
  281. data/lib/Project.rb +313 -99
  282. data/lib/ProjectFileParser.rb +88 -11
  283. data/lib/PropertyList.rb +2 -1
  284. data/lib/PropertySet.rb +13 -4
  285. data/lib/PropertyTreeNode.rb +34 -15
  286. data/lib/Query.rb +2 -1
  287. data/lib/RTPNavigator.rb +53 -0
  288. data/lib/RTPReport.rb +62 -0
  289. data/lib/RealFormat.rb +28 -10
  290. data/lib/RichTextElement.rb +18 -12
  291. data/lib/RichTextParser.rb +1 -0
  292. data/lib/RichTextProtocolExample.rb +8 -11
  293. data/lib/RichTextProtocolHandler.rb +11 -1
  294. data/lib/RichTextScanner.rb +308 -164
  295. data/lib/RichTextSyntaxRules.rb +24 -0
  296. data/lib/TableColumnDefinition.rb +5 -1
  297. data/lib/TaskJuggler.rb +3 -2
  298. data/lib/TaskScenario.rb +123 -31
  299. data/lib/TextParser.rb +14 -3
  300. data/lib/TextScanner.rb +210 -34
  301. data/lib/Tj3Config.rb +1 -1
  302. data/lib/TjTime.rb +15 -0
  303. data/lib/TjpExample.rb +1 -1
  304. data/lib/TjpSyntaxRules.rb +674 -473
  305. data/lib/WorkingHours.rb +1 -1
  306. data/lib/XMLElement.rb +11 -3
  307. data/lib/deep_copy.rb +72 -0
  308. data/lib/ms_test.rb +27 -0
  309. data/lib/reports/ColumnTable.rb +7 -5
  310. data/lib/reports/GanttChart.rb +60 -34
  311. data/lib/reports/GanttHeader.rb +1 -1
  312. data/lib/reports/GanttRouter.rb +7 -5
  313. data/lib/reports/Navigator.rb +72 -0
  314. data/lib/reports/Report.rb +58 -73
  315. data/lib/reports/ReportBase.rb +241 -0
  316. data/lib/reports/ReportContext.rb +41 -0
  317. data/lib/reports/ReportTable.rb +7 -2
  318. data/lib/reports/ReportTableCell.rb +3 -3
  319. data/lib/reports/ResourceListRE.rb +19 -26
  320. data/lib/reports/{ReportTableElement.rb → TableReport.rb} +297 -97
  321. data/lib/reports/TaskListRE.rb +16 -24
  322. data/lib/reports/TextReport.rb +87 -0
  323. data/lib/reports/TjpExportRE.rb +55 -50
  324. data/lib/taskjuggler3.rb +6 -1
  325. data/manual/Getting_Started +57 -6
  326. data/manual/How_To_Contribute +2 -4
  327. data/manual/Intro +2 -2
  328. data/manual/Reporting_Bugs +9 -2
  329. data/manual/Rich_Text_Attributes +41 -0
  330. data/manual/Tutorial +219 -173
  331. data/tasks/test.rake +3 -0
  332. data/test/TestSuite/CSV-Reports/celltext.tjp +2 -1
  333. data/test/TestSuite/CSV-Reports/resourcereport.tjp +2 -1
  334. data/test/TestSuite/CSV-Reports/resourcereport_with_tasks.tjp +2 -1
  335. data/test/TestSuite/CSV-Reports/sortByTree.tjp +2 -1
  336. data/test/TestSuite/CSV-Reports/sortBy_duration.down.tjp +2 -1
  337. data/test/TestSuite/CSV-Reports/sortBy_effort.up.tjp +2 -1
  338. data/test/TestSuite/CSV-Reports/sortBy_plan.start.down.tjp +2 -1
  339. data/test/TestSuite/CSV-Reports/taskreport.tjp +2 -1
  340. data/test/TestSuite/CSV-Reports/taskreport_with_resources.tjp +2 -1
  341. data/test/TestSuite/HTML-Reports/depArrows.tjp +72 -0
  342. data/test/TestSuite/HTML-Reports/reference-export.html +187 -0
  343. data/test/TestSuite/HTML-Reports/reference.tjp +21 -0
  344. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -1
  345. data/test/TestSuite/Scheduler/Correct/AutomaticMilestones.tjp +3 -3
  346. data/test/TestSuite/Scheduler/Correct/Booking.tjp +3 -3
  347. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +37 -0
  348. data/test/TestSuite/Scheduler/Correct/Container.tjp +40 -0
  349. data/test/TestSuite/Scheduler/Correct/Depends.tjp +9 -14
  350. data/test/TestSuite/Scheduler/Correct/Duration.tjp +2 -1
  351. data/test/TestSuite/Scheduler/Correct/InheritStartEnd.tjp +20 -29
  352. data/test/TestSuite/Scheduler/Correct/Limits.tjp +11 -13
  353. data/test/TestSuite/Scheduler/Correct/Optimize-1.tjp +6 -5
  354. data/test/TestSuite/Scheduler/Correct/Optimize-2.tjp +10 -6
  355. data/test/TestSuite/Scheduler/Correct/Optimize-3.tjp +9 -6
  356. data/test/TestSuite/Scheduler/Correct/Optimize-4.tjp +9 -6
  357. data/test/TestSuite/Scheduler/Correct/Optimize-5.tjp +13 -10
  358. data/test/TestSuite/Scheduler/Correct/Precedes.tjp +9 -14
  359. data/test/TestSuite/Scheduler/Correct/Shift.tjp +9 -8
  360. data/test/TestSuite/Scheduler/Correct/checks.tji +4 -0
  361. data/test/TestSuite/Scheduler/Errors/weak_end_dep.tjp +16 -0
  362. data/test/TestSuite/Scheduler/Errors/weak_start_dep.tjp +16 -0
  363. data/test/TestSuite/Syntax/Correct/Account.tjp +1 -1
  364. data/test/TestSuite/Syntax/Correct/AutoID.tjp +21 -0
  365. data/test/TestSuite/Syntax/Correct/AutoMacros.tjp +2 -1
  366. data/test/TestSuite/Syntax/Correct/Caption.tjp +7 -6
  367. data/test/TestSuite/Syntax/Correct/Celltext.tjp +7 -4
  368. data/test/TestSuite/Syntax/Correct/Comments.tjp +1 -1
  369. data/test/TestSuite/Syntax/Correct/CompletedWork.tji +11 -19
  370. data/test/TestSuite/Syntax/Correct/CriticalPath.tjp +4 -3
  371. data/test/TestSuite/Syntax/Correct/Export.tjp +3 -1
  372. data/test/TestSuite/Syntax/Correct/Flags.tjp +2 -1
  373. data/test/TestSuite/Syntax/Correct/HtmlTaskReport.tjp +2 -1
  374. data/test/TestSuite/Syntax/Correct/Journal.tjp +18 -0
  375. data/test/TestSuite/Syntax/Correct/LoadUnits.tjp +2 -1
  376. data/test/TestSuite/Syntax/Correct/LogicalExpression.tjp +16 -0
  377. data/test/TestSuite/Syntax/Correct/Period.tjp +2 -1
  378. data/test/TestSuite/Syntax/Correct/RawHTML.tjp +4 -2
  379. data/test/TestSuite/Syntax/Correct/Reports.tjp +4 -2
  380. data/test/TestSuite/Syntax/Correct/ResourcePrefix.tji +2 -0
  381. data/test/TestSuite/Syntax/Correct/ResourcePrefix.tjp +23 -0
  382. data/test/TestSuite/Syntax/Correct/Responsible.tjp +1 -1
  383. data/test/TestSuite/Syntax/Correct/Simple.tjp +1 -1
  384. data/test/TestSuite/Syntax/Correct/String.tjp +1 -1
  385. data/test/TestSuite/Syntax/Correct/TaskRoot.tjp +2 -1
  386. data/test/TestSuite/Syntax/Correct/tutorial.tjp +92 -70
  387. data/test/TestSuite/Syntax/Errors/bad_comment.tjp +7 -0
  388. data/test/TestSuite/Syntax/Errors/bad_include.tjp +1 -1
  389. data/test/TestSuite/Syntax/Errors/bad_time_zone.tjp +6 -0
  390. data/test/TestSuite/Syntax/Errors/bad_timing_res.tjp +5 -0
  391. data/test/TestSuite/Syntax/Errors/chargeset_master.tjp +1 -1
  392. data/test/TestSuite/Syntax/Errors/container_attribute.tjp +1 -1
  393. data/test/TestSuite/Syntax/Errors/cost_acct_no_top.tjp +3 -2
  394. data/test/TestSuite/Syntax/Errors/cost_rev_same.tjp +1 -1
  395. data/test/TestSuite/Syntax/Errors/eof_in_istring1.tjp +5 -0
  396. data/test/TestSuite/Syntax/Errors/eof_in_istring2.tjp +5 -0
  397. data/test/TestSuite/Syntax/Errors/eof_in_istring3.tjp +6 -0
  398. data/test/TestSuite/Syntax/Errors/eof_in_istring4.tjp +6 -0
  399. data/test/TestSuite/Syntax/Errors/eof_in_istring5.tjp +6 -0
  400. data/test/TestSuite/Syntax/Errors/include_recursion.tji +1 -0
  401. data/test/TestSuite/Syntax/Errors/include_recursion.tjp +7 -0
  402. data/test/TestSuite/Syntax/Errors/junk_after_cut.tjp +6 -0
  403. data/test/TestSuite/Syntax/Errors/navigator_exists.tjp +10 -0
  404. data/test/TestSuite/Syntax/Errors/operand_unkn_flag.tjp +1 -1
  405. data/test/TestSuite/Syntax/Errors/report_end.tjp +1 -1
  406. data/test/TestSuite/Syntax/Errors/report_exists.tjp +10 -0
  407. data/test/TestSuite/Syntax/Errors/report_start.tjp +1 -1
  408. data/test/TestSuite/Syntax/Errors/rev_acct_no_top.tjp +1 -1
  409. data/test/TestSuite/Syntax/Errors/sort_direction.tjp +1 -1
  410. data/test/TestSuite/Syntax/Errors/sort_unknown_scen.tjp +1 -1
  411. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd1.tjp +1 -1
  412. data/test/TestSuite/Syntax/Errors/sorting_crit_exptd2.tjp +1 -1
  413. data/test/TestSuite/Syntax/Errors/sorting_wbs.tjp +1 -1
  414. data/test/TestSuite/Syntax/Errors/too_large_timing_res.tjp +7 -0
  415. data/test/TestSuite/Syntax/Errors/unknown_scenario_idx.tjp +1 -1
  416. data/test/TestSuite/Syntax/Errors/unknown_task.tjp +1 -1
  417. data/test/all.rb +1 -16
  418. data/test/test_CSV-Reports.rb +8 -5
  419. data/test/test_Query.rb +2 -2
  420. data/test/test_RichText.rb +95 -0
  421. data/test/test_Scheduler.rb +8 -4
  422. data/test/test_Syntax.rb +8 -4
  423. data/test/test_deep_copy.rb +83 -0
  424. metadata +549 -487
  425. data/benchmarks/UTF-8-Strings.rb +0 -58
  426. data/doc/classes/TaskJuggler/ReportElement.html +0 -1070
  427. data/doc/classes/TaskJuggler/ReportTableElement.html +0 -644
  428. data/lib/reports/ReportElement.rb +0 -427
  429. data/test/TestSuite/Syntax/Correct/csvtest +0 -16
  430. data/test/TestSuite/Syntax/Errors/no_csv_suffix.tjp +0 -10
  431. data/test/TestSuite/Syntax/Errors/no_html_suffix.tjp +0 -10
  432. data/test/TestSuite/Syntax/Errors/report_redifinition.tjp +0 -10
@@ -70,8 +70,12 @@
70
70
  <td><strong>Parent:</strong></td>
71
71
  <td>
72
72
 
73
+ <a href="../Object.html">
74
+
73
75
  Object
74
76
 
77
+ </a>
78
+
75
79
  </td>
76
80
  </tr>
77
81
 
@@ -113,57 +117,67 @@ list of known Attributes.
113
117
 
114
118
  <div class="name-list">
115
119
 
116
- <a href="#M000633">[]</a>&nbsp;&nbsp;
120
+ <a href="#M000794">[]</a>&nbsp;&nbsp;
121
+
122
+ <a href="#M000795">[]=</a>&nbsp;&nbsp;
123
+
124
+ <a href="#M000804">account</a>&nbsp;&nbsp;
125
+
126
+ <a href="#M000817">attributeName</a>&nbsp;&nbsp;
117
127
 
118
- <a href="#M000634">[]=</a>&nbsp;&nbsp;
128
+ <a href="#M000812">convertToDailyLoad</a>&nbsp;&nbsp;
119
129
 
120
- <a href="#M000643">account</a>&nbsp;&nbsp;
130
+ <a href="#M000797">dailyWorkingHours</a>&nbsp;&nbsp;
121
131
 
122
- <a href="#M000649">convertToDailyLoad</a>&nbsp;&nbsp;
132
+ <a href="#M000815">dateToIdx</a>&nbsp;&nbsp;
123
133
 
124
- <a href="#M000636">dailyWorkingHours</a>&nbsp;&nbsp;
134
+ <a href="#M000792">deep_clone</a>&nbsp;&nbsp;
125
135
 
126
- <a href="#M000652">dateToIdx</a>&nbsp;&nbsp;
136
+ <a href="#M000820">finishScenario</a>&nbsp;&nbsp;
127
137
 
128
- <a href="#M000655">finishScenario</a>&nbsp;&nbsp;
138
+ <a href="#M000810">generateReports</a>&nbsp;&nbsp;
129
139
 
130
- <a href="#M000647">generateReports</a>&nbsp;&nbsp;
140
+ <a href="#M000814">idxToDate</a>&nbsp;&nbsp;
131
141
 
132
- <a href="#M000651">idxToDate</a>&nbsp;&nbsp;
142
+ <a href="#M000811">isWorkingTime</a>&nbsp;&nbsp;
133
143
 
134
- <a href="#M000648">isWorkingTime</a>&nbsp;&nbsp;
144
+ <a href="#M000816">maxScheduleGranularity</a>&nbsp;&nbsp;
135
145
 
136
- <a href="#M000638">monthlyWorkingDays</a>&nbsp;&nbsp;
146
+ <a href="#M000799">monthlyWorkingDays</a>&nbsp;&nbsp;
137
147
 
138
- <a href="#M000631">new</a>&nbsp;&nbsp;
148
+ <a href="#M000791">new</a>&nbsp;&nbsp;
139
149
 
140
- <a href="#M000654">prepareScenario</a>&nbsp;&nbsp;
150
+ <a href="#M000819">prepareScenario</a>&nbsp;&nbsp;
141
151
 
142
- <a href="#M000645">resource</a>&nbsp;&nbsp;
152
+ <a href="#M000807">report</a>&nbsp;&nbsp;
143
153
 
144
- <a href="#M000640">scenario</a>&nbsp;&nbsp;
154
+ <a href="#M000808">reportByName</a>&nbsp;&nbsp;
145
155
 
146
- <a href="#M000635">scenarioCount</a>&nbsp;&nbsp;
156
+ <a href="#M000806">resource</a>&nbsp;&nbsp;
147
157
 
148
- <a href="#M000641">scenarioIdx</a>&nbsp;&nbsp;
158
+ <a href="#M000801">scenario</a>&nbsp;&nbsp;
149
159
 
150
- <a href="#M000646">schedule</a>&nbsp;&nbsp;
160
+ <a href="#M000796">scenarioCount</a>&nbsp;&nbsp;
151
161
 
152
- <a href="#M000656">scheduleScenario</a>&nbsp;&nbsp;
162
+ <a href="#M000802">scenarioIdx</a>&nbsp;&nbsp;
153
163
 
154
- <a href="#M000650">scoreboardSize</a>&nbsp;&nbsp;
164
+ <a href="#M000809">schedule</a>&nbsp;&nbsp;
155
165
 
156
- <a href="#M000632">sendMessage</a>&nbsp;&nbsp;
166
+ <a href="#M000821">scheduleScenario</a>&nbsp;&nbsp;
157
167
 
158
- <a href="#M000642">shift</a>&nbsp;&nbsp;
168
+ <a href="#M000813">scoreboardSize</a>&nbsp;&nbsp;
159
169
 
160
- <a href="#M000644">task</a>&nbsp;&nbsp;
170
+ <a href="#M000793">sendMessage</a>&nbsp;&nbsp;
161
171
 
162
- <a href="#M000653">to_s</a>&nbsp;&nbsp;
172
+ <a href="#M000803">shift</a>&nbsp;&nbsp;
163
173
 
164
- <a href="#M000637">weeklyWorkingDays</a>&nbsp;&nbsp;
174
+ <a href="#M000805">task</a>&nbsp;&nbsp;
165
175
 
166
- <a href="#M000639">yearlyWorkingDays</a>&nbsp;&nbsp;
176
+ <a href="#M000818">to_s</a>&nbsp;&nbsp;
177
+
178
+ <a href="#M000798">weeklyWorkingDays</a>&nbsp;&nbsp;
179
+
180
+ <a href="#M000800">yearlyWorkingDays</a>&nbsp;&nbsp;
167
181
 
168
182
  </div>
169
183
  </div>
@@ -198,6 +212,22 @@ list of known Attributes.
198
212
  <td class="context-item-desc"></td>
199
213
  </tr>
200
214
 
215
+ <tr class="top-aligned-row context-row">
216
+ <td class="context-item-name">outputDir</td>
217
+
218
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
219
+
220
+ <td class="context-item-desc"></td>
221
+ </tr>
222
+
223
+ <tr class="top-aligned-row context-row">
224
+ <td class="context-item-name">reportContext</td>
225
+
226
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
227
+
228
+ <td class="context-item-desc"></td>
229
+ </tr>
230
+
201
231
  <tr class="top-aligned-row context-row">
202
232
  <td class="context-item-name">reports</td>
203
233
 
@@ -250,12 +280,63 @@ list of known Attributes.
250
280
  <h3 class="section-bar">Public Class methods</h3>
251
281
 
252
282
 
253
- <div id="method-M000631" class="method-detail">
254
- <a name="M000631"></a>
283
+ <div id="method-M000816" class="method-detail">
284
+ <a name="M000816"></a>
285
+
286
+ <div class="method-heading">
287
+
288
+ <a href="#M000816" class="method-signature">
289
+
290
+ <span class="method-name">maxScheduleGranularity</span><span class="method-args">()</span>
291
+
292
+ </a>
293
+
294
+ </div>
295
+
296
+ <div class="method-description">
297
+
298
+ <p>
299
+ <a href="../TaskJuggler.html">TaskJuggler</a> keeps all times in UTC. All
300
+ time values must be multiples of the used scheduling granularity. If the
301
+ local time zone is not hour-aligned to UTC, the maximum allowed schedule
302
+ granularity is reduced.
303
+ </p>
304
+
305
+ <p><a class="source-toggle" href="#"
306
+ onclick="toggleCode('M000816-source');return false;">[Source]</a></p>
307
+ <div class="method-source-code" id="M000816-source">
308
+ <pre>
309
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 669</span>
310
+ 669: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Project</span>.<span class="ruby-identifier">maxScheduleGranularity</span>
311
+ 670: <span class="ruby-identifier">refTime</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">gm</span>(<span class="ruby-value">2000</span>, <span class="ruby-value">1</span>, <span class="ruby-value">1</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>)
312
+ 671: <span class="ruby-keyword kw">case</span> (<span class="ruby-identifier">min</span> = <span class="ruby-identifier">refTime</span>.<span class="ruby-identifier">getlocal</span>.<span class="ruby-identifier">min</span>)
313
+ 672: <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span>
314
+ 673: <span class="ruby-comment cmt"># We are hour-aligned to UTC; scheduleGranularity is 1 hour</span>
315
+ 674: <span class="ruby-value">60</span> <span class="ruby-operator">*</span> <span class="ruby-value">60</span>
316
+ 675: <span class="ruby-keyword kw">when</span> <span class="ruby-value">30</span>
317
+ 676: <span class="ruby-comment cmt"># We are half-hour off from UTC; scheduleGranularity is 30 minutes</span>
318
+ 677: <span class="ruby-value">30</span> <span class="ruby-operator">*</span> <span class="ruby-value">60</span>
319
+ 678: <span class="ruby-keyword kw">when</span> <span class="ruby-value">15</span>, <span class="ruby-value">45</span>
320
+ 679: <span class="ruby-comment cmt"># We are 15 or 45 minutes off from UTC; scheduleGranularity is 15</span>
321
+ 680: <span class="ruby-comment cmt"># minutes</span>
322
+ 681: <span class="ruby-value">15</span> <span class="ruby-operator">*</span> <span class="ruby-value">60</span>
323
+ 682: <span class="ruby-keyword kw">else</span>
324
+ 683: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown Time zone alignment #{min}&quot;</span>
325
+ 684: <span class="ruby-keyword kw">end</span>
326
+ 685: <span class="ruby-keyword kw">end</span>
327
+ </pre>
328
+ </div>
329
+
330
+ </div>
331
+ </div>
332
+
333
+
334
+ <div id="method-M000791" class="method-detail">
335
+ <a name="M000791"></a>
255
336
 
256
337
  <div class="method-heading">
257
338
 
258
- <a href="#M000631" class="method-signature">
339
+ <a href="#M000791" class="method-signature">
259
340
 
260
341
  <span class="method-name">new</span><span class="method-args">(id, name, version, messageHandler)</span>
261
342
 
@@ -274,156 +355,313 @@ The constructor will set default values for all project attributes.
274
355
  </p>
275
356
 
276
357
  <p><a class="source-toggle" href="#"
277
- onclick="toggleCode('M000631-source');return false;">[Source]</a></p>
278
- <div class="method-source-code" id="M000631-source">
358
+ onclick="toggleCode('M000791-source');return false;">[Source]</a></p>
359
+ <div class="method-source-code" id="M000791-source">
279
360
  <pre>
280
- <span class="ruby-comment cmt"># File lib/Project.rb, line 53</span>
281
- 53: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">version</span>, <span class="ruby-identifier">messageHandler</span>)
282
- 54: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
283
- 55: <span class="ruby-ivar">@attributes</span> = {
284
- 56: <span class="ruby-value str">'projectid'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">id</span>,
285
- 57: <span class="ruby-value str">'projectids'</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-identifier">id</span> ],
286
- 58: <span class="ruby-value str">'name'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">name</span>,
287
- 59: <span class="ruby-value str">'version'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">version</span>,
288
- 60: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
289
- 61: <span class="ruby-value str">'copyright'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
290
- 62: <span class="ruby-value str">'currency'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;EUR&quot;</span>,
291
- 63: <span class="ruby-value str">'currencyformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">RealFormat</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'-'</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">','</span>, <span class="ruby-value">2</span> ]),
292
- 64: <span class="ruby-value str">'dailyworkinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">8.0</span>,
293
- 65: <span class="ruby-value str">'end'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
294
- 66: <span class="ruby-value str">'flags'</span> =<span class="ruby-operator">&gt;</span> [],
295
- 67: <span class="ruby-value str">'limits'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
296
- 68: <span class="ruby-value str">'loadunit'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:shortauto</span>,
297
- 69: <span class="ruby-value str">'now'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">align</span>(<span class="ruby-value">3600</span>),
298
- 70: <span class="ruby-value str">'numberformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">RealFormat</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'-'</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">'.'</span>, <span class="ruby-value">1</span>]),
299
- 71: <span class="ruby-value str">'priority'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>,
300
- 72: <span class="ruby-value str">'rate'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>,
301
- 73: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
302
- 74: <span class="ruby-value str">'scheduleGranularity'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">3600</span>,
303
- 75: <span class="ruby-value str">'shorttimeformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%H:%M&quot;</span>,
304
- 76: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
305
- 77: <span class="ruby-value str">'timeformat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%Y-%m-%d&quot;</span>,
306
- 78: <span class="ruby-value str">'timezone'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
307
- 79: <span class="ruby-value str">'vacations'</span> =<span class="ruby-operator">&gt;</span> [],
308
- 80: <span class="ruby-value str">'weekstartsmonday'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>,
309
- 81: <span class="ruby-value str">'workinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">WorkingHours</span>.<span class="ruby-identifier">new</span>,
310
- 82: <span class="ruby-value str">'yearlyworkingdays'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">260.714</span>
311
- 83: }
312
- 84:
313
- 85: <span class="ruby-comment cmt"># Before we can add any properties to this project, we need to define the</span>
314
- 86: <span class="ruby-comment cmt"># attributes that each of the property types will be using. In TaskJuggler</span>
315
- 87: <span class="ruby-comment cmt"># lingo, properties of a project are resources, tasks, accounts, shifts</span>
316
- 88: <span class="ruby-comment cmt"># and scenarios. Each of these properties can have lots of further</span>
317
- 89: <span class="ruby-comment cmt"># information attached to it. These bits of information are called</span>
318
- 90: <span class="ruby-comment cmt"># attributes. An attribute is defined by the AttributeDefinition class.</span>
319
- 91: <span class="ruby-comment cmt"># The PropertySet objects need to be fed with a list of such attribute</span>
320
- 92: <span class="ruby-comment cmt"># definitions to register the attributes with the properties.</span>
321
- 93: <span class="ruby-ivar">@scenarios</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
322
- 94: <span class="ruby-identifier">attrs</span> = [
323
- 95: <span class="ruby-comment cmt"># ID Name Type Inh. Scen. Default</span>
324
- 96: [ <span class="ruby-value str">'enabled'</span>, <span class="ruby-value str">'Enabled'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span> ],
325
- 97: [ <span class="ruby-value str">'minslackrate'</span>, <span class="ruby-value str">'Min. Slack Rate'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
326
- 98: [ <span class="ruby-value str">'projection'</span>, <span class="ruby-value str">'Projection Mode'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span> ],
327
- 99: [ <span class="ruby-value str">'strict'</span>, <span class="ruby-value str">'Strict Bookings'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span> ]
328
- 100: ]
329
- 101: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
330
- 102:
331
- 103: <span class="ruby-ivar">@shifts</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
332
- 104: <span class="ruby-identifier">attrs</span> = [
333
- 105: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
334
- 106: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
335
- 107: [ <span class="ruby-value str">'replace'</span>, <span class="ruby-value str">'Replace'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
336
- 108: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
337
- 109: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
338
- 110: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
339
- 111: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
340
- 112: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
341
- 113: <span class="ruby-keyword kw">nil</span> ]
342
- 114: ]
343
- 115: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
344
- 116:
345
- 117: <span class="ruby-ivar">@accounts</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
346
- 118: <span class="ruby-identifier">attrs</span> = [
347
- 119: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
348
- 120: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
349
- 121: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
350
- 122: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ]
351
- 123: ]
352
- 124: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@accounts</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
353
- 125:
354
- 126: <span class="ruby-ivar">@resources</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
355
- 127: <span class="ruby-identifier">attrs</span> = [
356
- 128: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
357
- 129: [ <span class="ruby-value str">'alloctdeffort'</span>, <span class="ruby-value str">'Alloctd. Effort'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
358
- 130: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
359
- 131: [ <span class="ruby-value str">'duties'</span>, <span class="ruby-value str">'Duties'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
360
- 132: [ <span class="ruby-value str">'efficiency'</span>,<span class="ruby-value str">'Efficiency'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1.0</span> ],
361
- 133: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Total Effort'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
362
- 134: [ <span class="ruby-value str">'email'</span>, <span class="ruby-value str">'Email'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
363
- 135: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
364
- 136: [ <span class="ruby-value str">'fte'</span>, <span class="ruby-value str">'FTE'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1.0</span> ],
365
- 137: [ <span class="ruby-value str">'headcount'</span>, <span class="ruby-value str">'Headcount'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1</span> ],
366
- 138: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
367
- 139: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
368
- 140: [ <span class="ruby-value str">'rate'</span>, <span class="ruby-value str">'Rate'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
369
- 141: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
370
- 142: <span class="ruby-keyword kw">nil</span> ],
371
- 143: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
372
- 144: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
373
- 145: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
374
- 146: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
375
- 147: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
376
- 148: <span class="ruby-keyword kw">nil</span> ]
377
- 149: ]
378
- 150: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
379
- 151:
380
- 152: <span class="ruby-ivar">@tasks</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">false</span>)
381
- 153: <span class="ruby-identifier">attrs</span> = [
382
- 154: <span class="ruby-comment cmt"># ID Name Type Inher. Scen. Default</span>
383
- 155: [ <span class="ruby-value str">'allocate'</span>, <span class="ruby-value str">'Allocations'</span>, <span class="ruby-constant">AllocationAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
384
- 156: [ <span class="ruby-value str">'assignedresources'</span>, <span class="ruby-value str">'Assigned Resources'</span>, <span class="ruby-constant">ResourceListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
385
- 157: [ <span class="ruby-value str">'booking'</span>, <span class="ruby-value str">'Bookings'</span>, <span class="ruby-constant">BookingListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
386
- 158: [ <span class="ruby-value str">'charge'</span>, <span class="ruby-value str">'Charges'</span>, <span class="ruby-constant">ChargeListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
387
- 159: [ <span class="ruby-value str">'chargeset'</span>, <span class="ruby-value str">'Charge Sets'</span>, <span class="ruby-constant">ChargeSetListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
388
- 160: [ <span class="ruby-value str">'complete'</span>, <span class="ruby-value str">'Completion'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
389
- 161: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
390
- 162: [ <span class="ruby-value str">'depends'</span>, <span class="ruby-value str">'-'</span>, <span class="ruby-constant">DependencyListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
391
- 163: [ <span class="ruby-value str">'duration'</span>, <span class="ruby-value str">'Duration'</span>, <span class="ruby-constant">DurationAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
392
- 164: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Effort'</span>, <span class="ruby-constant">DurationAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
393
- 165: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
394
- 166: [ <span class="ruby-value str">'endpreds'</span>, <span class="ruby-value str">'End Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
395
- 167: [ <span class="ruby-value str">'endsuccs'</span>, <span class="ruby-value str">'End Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
396
- 168: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
397
- 169: [ <span class="ruby-value str">'forward'</span>, <span class="ruby-value str">'Scheduling'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span> ],
398
- 170: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
399
- 171: [ <span class="ruby-value str">'length'</span>, <span class="ruby-value str">'Length'</span>, <span class="ruby-constant">DurationAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
400
- 172: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
401
- 173: [ <span class="ruby-value str">'maxend'</span>, <span class="ruby-value str">'Max. End'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
402
- 174: [ <span class="ruby-value str">'maxstart'</span>, <span class="ruby-value str">'Max. Start'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
403
- 175: [ <span class="ruby-value str">'milestone'</span>, <span class="ruby-value str">'Milestone'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
404
- 176: [ <span class="ruby-value str">'minend'</span>, <span class="ruby-value str">'Min. End'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
405
- 177: [ <span class="ruby-value str">'minstart'</span>, <span class="ruby-value str">'Min. Start'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
406
- 178: [ <span class="ruby-value str">'note'</span>, <span class="ruby-value str">'Note'</span>, <span class="ruby-constant">RichTextAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
407
- 179: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-value str">'Path Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
408
- 180: [ <span class="ruby-value str">'precedes'</span>, <span class="ruby-value str">'-'</span>, <span class="ruby-constant">DependencyListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
409
- 181: [ <span class="ruby-value str">'priority'</span>, <span class="ruby-value str">'Priority'</span>, <span class="ruby-constant">FixnumAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">500</span> ],
410
- 182: [ <span class="ruby-value str">'projectid'</span>, <span class="ruby-value str">'Project ID'</span>, <span class="ruby-constant">SymbolAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
411
- 183: [ <span class="ruby-value str">'responsible'</span>, <span class="ruby-value str">'Responsible'</span>, <span class="ruby-constant">ResourceListAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
412
- 184: [ <span class="ruby-value str">'scheduled'</span>, <span class="ruby-value str">'Scheduled'</span>, <span class="ruby-constant">BooleanAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
413
- 185: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>,
414
- 186: <span class="ruby-keyword kw">nil</span> ],
415
- 187: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
416
- 188: [ <span class="ruby-value str">'startpreds'</span>, <span class="ruby-value str">'Start Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
417
- 189: [ <span class="ruby-value str">'startsuccs'</span>, <span class="ruby-value str">'Start Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
418
- 190: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
419
- 191: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ]
420
- 192: ]
421
- 193: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
422
- 194:
423
- 195: <span class="ruby-constant">Scenario</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-value str">'plan'</span>, <span class="ruby-value str">'Plan Scenario'</span>, <span class="ruby-keyword kw">nil</span>)
424
- 196:
425
- 197: <span class="ruby-ivar">@reports</span> = { }
426
- 198: <span class="ruby-keyword kw">end</span>
361
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 56</span>
362
+ 56: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">version</span>, <span class="ruby-identifier">messageHandler</span>)
363
+ 57: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
364
+ 58: <span class="ruby-ivar">@attributes</span> = {
365
+ 59: <span class="ruby-value str">'projectid'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;prj&quot;</span>,
366
+ 60: <span class="ruby-value str">'projectids'</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-identifier">id</span> ],
367
+ 61: <span class="ruby-value str">'name'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">name</span>,
368
+ 62: <span class="ruby-value str">'version'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">version</span> <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;1.0&quot;</span>,
369
+ 63: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
370
+ 64: <span class="ruby-value str">'copyright'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
371
+ 65: <span class="ruby-value str">'currency'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;EUR&quot;</span>,
372
+ 66: <span class="ruby-value str">'currencyFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">RealFormat</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'-'</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">','</span>, <span class="ruby-value">2</span> ]),
373
+ 67: <span class="ruby-value str">'dailyworkinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">8.0</span>,
374
+ 68: <span class="ruby-value str">'end'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
375
+ 69: <span class="ruby-value str">'flags'</span> =<span class="ruby-operator">&gt;</span> [],
376
+ 70: <span class="ruby-value str">'journal'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Journal</span>.<span class="ruby-identifier">new</span>,
377
+ 71: <span class="ruby-value str">'limits'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
378
+ 72: <span class="ruby-value str">'loadUnit'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:shortauto</span>,
379
+ 73: <span class="ruby-value str">'navigators'</span> =<span class="ruby-operator">&gt;</span> {},
380
+ 74: <span class="ruby-value str">'now'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">TjTime</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">align</span>(<span class="ruby-value">3600</span>),
381
+ 75: <span class="ruby-value str">'numberFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">RealFormat</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'-'</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">''</span>, <span class="ruby-value str">'.'</span>, <span class="ruby-value">1</span>]),
382
+ 76: <span class="ruby-value str">'priority'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>,
383
+ 77: <span class="ruby-value str">'rate'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>,
384
+ 78: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
385
+ 79: <span class="ruby-value str">'scheduleGranularity'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Project</span>.<span class="ruby-identifier">maxScheduleGranularity</span>,
386
+ 80: <span class="ruby-value str">'shortTimeFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%H:%M&quot;</span>,
387
+ 81: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
388
+ 82: <span class="ruby-value str">'timeFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%Y-%m-%d&quot;</span>,
389
+ 83: <span class="ruby-value str">'timezone'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
390
+ 84: <span class="ruby-value str">'vacations'</span> =<span class="ruby-operator">&gt;</span> [],
391
+ 85: <span class="ruby-value str">'weekStartsMonday'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>,
392
+ 86: <span class="ruby-value str">'workinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">WorkingHours</span>.<span class="ruby-identifier">new</span>,
393
+ 87: <span class="ruby-value str">'yearlyworkingdays'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">260.714</span>
394
+ 88: }
395
+ 89:
396
+ 90: <span class="ruby-comment cmt"># Before we can add any properties to this project, we need to define the</span>
397
+ 91: <span class="ruby-comment cmt"># attributes that each of the property types will be using. In TaskJuggler</span>
398
+ 92: <span class="ruby-comment cmt"># lingo, properties of a project are resources, tasks, accounts, shifts</span>
399
+ 93: <span class="ruby-comment cmt"># and scenarios. Each of these properties can have lots of further</span>
400
+ 94: <span class="ruby-comment cmt"># information attached to it. These bits of information are called</span>
401
+ 95: <span class="ruby-comment cmt"># attributes. An attribute is defined by the AttributeDefinition class.</span>
402
+ 96: <span class="ruby-comment cmt"># The PropertySet objects need to be fed with a list of such attribute</span>
403
+ 97: <span class="ruby-comment cmt"># definitions to register the attributes with the properties.</span>
404
+ 98: <span class="ruby-ivar">@scenarios</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
405
+ 99: <span class="ruby-identifier">attrs</span> = [
406
+ 100: <span class="ruby-comment cmt"># ID Name Type</span>
407
+ 101: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
408
+ 102: [ <span class="ruby-value str">'enabled'</span>, <span class="ruby-value str">'Enabled'</span>, <span class="ruby-constant">BooleanAttribute</span>,
409
+ 103: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span> ],
410
+ 104: [ <span class="ruby-value str">'minslackrate'</span>, <span class="ruby-value str">'Min. Slack Rate'</span>, <span class="ruby-constant">FloatAttribute</span>,
411
+ 105: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">1.0</span> ],
412
+ 106: [ <span class="ruby-value str">'projection'</span>, <span class="ruby-value str">'Projection Mode'</span>, <span class="ruby-constant">BooleanAttribute</span>,
413
+ 107: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span> ],
414
+ 108: [ <span class="ruby-value str">'strict'</span>, <span class="ruby-value str">'Strict Bookings'</span>, <span class="ruby-constant">BooleanAttribute</span>,
415
+ 109: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span> ]
416
+ 110: ]
417
+ 111: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
418
+ 112:
419
+ 113: <span class="ruby-ivar">@shifts</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
420
+ 114: <span class="ruby-identifier">attrs</span> = [
421
+ 115: <span class="ruby-comment cmt"># ID Name Type</span>
422
+ 116: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
423
+ 117: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
424
+ 118: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
425
+ 119: [ <span class="ruby-value str">'replace'</span>, <span class="ruby-value str">'Replace'</span>, <span class="ruby-constant">BooleanAttribute</span>,
426
+ 120: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
427
+ 121: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
428
+ 122: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
429
+ 123: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
430
+ 124: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
431
+ 125: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>,
432
+ 126: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
433
+ 127: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
434
+ 128: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
435
+ 129: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>,
436
+ 130: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ]
437
+ 131: ]
438
+ 132: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@shifts</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
439
+ 133:
440
+ 134: <span class="ruby-ivar">@accounts</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
441
+ 135: <span class="ruby-identifier">attrs</span> = [
442
+ 136: <span class="ruby-comment cmt"># ID Name Type</span>
443
+ 137: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
444
+ 138: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
445
+ 139: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
446
+ 140: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
447
+ 141: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
448
+ 142: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
449
+ 143: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ]
450
+ 144: ]
451
+ 145: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@accounts</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
452
+ 146:
453
+ 147: <span class="ruby-ivar">@resources</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">true</span>)
454
+ 148: <span class="ruby-identifier">attrs</span> = [
455
+ 149: <span class="ruby-comment cmt"># ID Name Type</span>
456
+ 150: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
457
+ 151: [ <span class="ruby-value str">'alloctdeffort'</span>, <span class="ruby-value str">'Alloctd. Effort'</span>, <span class="ruby-constant">FloatAttribute</span>,
458
+ 152: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
459
+ 153: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
460
+ 154: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
461
+ 155: [ <span class="ruby-value str">'duties'</span>, <span class="ruby-value str">'Duties'</span>, <span class="ruby-constant">TaskListAttribute</span>,
462
+ 156: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
463
+ 157: [ <span class="ruby-value str">'efficiency'</span>,<span class="ruby-value str">'Efficiency'</span>, <span class="ruby-constant">FloatAttribute</span>,
464
+ 158: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1.0</span> ],
465
+ 159: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Total Effort'</span>, <span class="ruby-constant">FixnumAttribute</span>,
466
+ 160: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
467
+ 161: [ <span class="ruby-value str">'email'</span>, <span class="ruby-value str">'Email'</span>, <span class="ruby-constant">StringAttribute</span>,
468
+ 162: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
469
+ 163: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
470
+ 164: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
471
+ 165: [ <span class="ruby-value str">'fte'</span>, <span class="ruby-value str">'FTE'</span>, <span class="ruby-constant">FloatAttribute</span>,
472
+ 166: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1.0</span> ],
473
+ 167: [ <span class="ruby-value str">'headcount'</span>, <span class="ruby-value str">'Headcount'</span>, <span class="ruby-constant">FixnumAttribute</span>,
474
+ 168: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1</span> ],
475
+ 169: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
476
+ 170: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
477
+ 171: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>,
478
+ 172: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
479
+ 173: [ <span class="ruby-value str">'rate'</span>, <span class="ruby-value str">'Rate'</span>, <span class="ruby-constant">FloatAttribute</span>,
480
+ 174: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
481
+ 175: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>,
482
+ 176: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
483
+ 177: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
484
+ 178: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
485
+ 179: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
486
+ 180: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
487
+ 181: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>,
488
+ 182: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
489
+ 183: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
490
+ 184: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
491
+ 185: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>,
492
+ 186: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ]
493
+ 187: ]
494
+ 188: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
495
+ 189:
496
+ 190: <span class="ruby-ivar">@tasks</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">false</span>)
497
+ 191: <span class="ruby-identifier">attrs</span> = [
498
+ 192: <span class="ruby-comment cmt"># ID Name Type</span>
499
+ 193: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
500
+ 194: [ <span class="ruby-value str">'allocate'</span>, <span class="ruby-value str">'Allocations'</span>, <span class="ruby-constant">AllocationAttribute</span>,
501
+ 195: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
502
+ 196: [ <span class="ruby-value str">'assignedresources'</span>, <span class="ruby-value str">'Assigned Resources'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
503
+ 197: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
504
+ 198: [ <span class="ruby-value str">'booking'</span>, <span class="ruby-value str">'Bookings'</span>, <span class="ruby-constant">BookingListAttribute</span>,
505
+ 199: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
506
+ 200: [ <span class="ruby-value str">'charge'</span>, <span class="ruby-value str">'Charges'</span>, <span class="ruby-constant">ChargeListAttribute</span>,
507
+ 201: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
508
+ 202: [ <span class="ruby-value str">'chargeset'</span>, <span class="ruby-value str">'Charge Sets'</span>, <span class="ruby-constant">ChargeSetListAttribute</span>,
509
+ 203: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
510
+ 204: [ <span class="ruby-value str">'complete'</span>, <span class="ruby-value str">'Completion'</span>, <span class="ruby-constant">FloatAttribute</span>,
511
+ 205: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
512
+ 206: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
513
+ 207: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
514
+ 208: [ <span class="ruby-value str">'depends'</span>, <span class="ruby-value str">'Preceding tasks'</span>, <span class="ruby-constant">DependencyListAttribute</span>,
515
+ 209: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
516
+ 210: [ <span class="ruby-value str">'duration'</span>, <span class="ruby-value str">'Duration'</span>, <span class="ruby-constant">DurationAttribute</span>,
517
+ 211: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
518
+ 212: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Effort'</span>, <span class="ruby-constant">DurationAttribute</span>,
519
+ 213: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
520
+ 214: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>,
521
+ 215: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
522
+ 216: [ <span class="ruby-value str">'endpreds'</span>, <span class="ruby-value str">'End Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
523
+ 217: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
524
+ 218: [ <span class="ruby-value str">'endsuccs'</span>, <span class="ruby-value str">'End Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
525
+ 219: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
526
+ 220: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
527
+ 221: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
528
+ 222: [ <span class="ruby-value str">'forward'</span>, <span class="ruby-value str">'Scheduling'</span>, <span class="ruby-constant">BooleanAttribute</span>,
529
+ 223: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span> ],
530
+ 224: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
531
+ 225: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
532
+ 226: [ <span class="ruby-value str">'length'</span>, <span class="ruby-value str">'Length'</span>, <span class="ruby-constant">DurationAttribute</span>,
533
+ 227: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span> ],
534
+ 228: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>,
535
+ 229: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
536
+ 230: [ <span class="ruby-value str">'maxend'</span>, <span class="ruby-value str">'Max. End'</span>, <span class="ruby-constant">DateAttribute</span>,
537
+ 231: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
538
+ 232: [ <span class="ruby-value str">'maxstart'</span>, <span class="ruby-value str">'Max. Start'</span>, <span class="ruby-constant">DateAttribute</span>,
539
+ 233: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
540
+ 234: [ <span class="ruby-value str">'milestone'</span>, <span class="ruby-value str">'Milestone'</span>, <span class="ruby-constant">BooleanAttribute</span>,
541
+ 235: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
542
+ 236: [ <span class="ruby-value str">'minend'</span>, <span class="ruby-value str">'Min. End'</span>, <span class="ruby-constant">DateAttribute</span>,
543
+ 237: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
544
+ 238: [ <span class="ruby-value str">'minstart'</span>, <span class="ruby-value str">'Min. Start'</span>, <span class="ruby-constant">DateAttribute</span>,
545
+ 239: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
546
+ 240: [ <span class="ruby-value str">'note'</span>, <span class="ruby-value str">'Note'</span>, <span class="ruby-constant">RichTextAttribute</span>,
547
+ 241: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
548
+ 242: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-value str">'Path Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
549
+ 243: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span> ],
550
+ 244: [ <span class="ruby-value str">'precedes'</span>, <span class="ruby-value str">'Following tasks'</span>, <span class="ruby-constant">DependencyListAttribute</span>,
551
+ 245: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
552
+ 246: [ <span class="ruby-value str">'priority'</span>, <span class="ruby-value str">'Priority'</span>, <span class="ruby-constant">FixnumAttribute</span>,
553
+ 247: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">500</span> ],
554
+ 248: [ <span class="ruby-value str">'projectid'</span>, <span class="ruby-value str">'Project ID'</span>, <span class="ruby-constant">SymbolAttribute</span>,
555
+ 249: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
556
+ 250: [ <span class="ruby-value str">'responsible'</span>, <span class="ruby-value str">'Responsible'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
557
+ 251: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
558
+ 252: [ <span class="ruby-value str">'scheduled'</span>, <span class="ruby-value str">'Scheduled'</span>, <span class="ruby-constant">BooleanAttribute</span>,
559
+ 253: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span> ],
560
+ 254: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>,
561
+ 255: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
562
+ 256: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>,
563
+ 257: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">nil</span> ],
564
+ 258: [ <span class="ruby-value str">'startpreds'</span>, <span class="ruby-value str">'Start Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
565
+ 259: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
566
+ 260: [ <span class="ruby-value str">'startsuccs'</span>, <span class="ruby-value str">'Start Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
567
+ 261: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
568
+ 262: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
569
+ 263: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
570
+ 264: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
571
+ 265: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ]
572
+ 266: ]
573
+ 267: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
574
+ 268:
575
+ 269: <span class="ruby-ivar">@reports</span> = <span class="ruby-constant">PropertySet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-keyword kw">false</span>)
576
+ 270: <span class="ruby-identifier">attrs</span> = [
577
+ 271: <span class="ruby-comment cmt"># ID Name Type</span>
578
+ 272: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
579
+ 273: [ <span class="ruby-value str">'caption'</span>, <span class="ruby-value str">'Caption'</span>, <span class="ruby-constant">RichTextAttribute</span>,
580
+ 274: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
581
+ 275: [ <span class="ruby-value str">'center'</span>, <span class="ruby-value str">'Center'</span>, <span class="ruby-constant">RichTextAttribute</span>,
582
+ 276: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
583
+ 277: [ <span class="ruby-value str">'columns'</span>, <span class="ruby-value str">'Columns'</span>, <span class="ruby-constant">ColumnListAttribute</span>,
584
+ 278: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [] ],
585
+ 279: [ <span class="ruby-value str">'costAccount'</span>, <span class="ruby-value str">'Cost Account'</span>, <span class="ruby-constant">AccountAttribute</span>,
586
+ 280: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
587
+ 281: [ <span class="ruby-value str">'currencyFormat'</span>, <span class="ruby-value str">'Currency Format'</span>, <span class="ruby-constant">RealFormatAttribute</span>,
588
+ 282: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
589
+ 283: [ <span class="ruby-value str">'definitions'</span>, <span class="ruby-value str">'Definitions'</span>, <span class="ruby-constant">DefinitionListAttribute</span>,
590
+ 284: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-constant">KeywordArray</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'*'</span> ]) ],
591
+ 285: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>,
592
+ 286: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
593
+ 287: [ <span class="ruby-value str">'epilog'</span>, <span class="ruby-value str">'Epilog'</span>, <span class="ruby-constant">RichTextAttribute</span>,
594
+ 288: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
595
+ 289: [ <span class="ruby-value str">'footer'</span>, <span class="ruby-value str">'Footer'</span>, <span class="ruby-constant">RichTextAttribute</span>,
596
+ 290: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
597
+ 291: [ <span class="ruby-value str">'formats'</span>, <span class="ruby-value str">'Formats'</span>, <span class="ruby-constant">FormatListAttribute</span>,
598
+ 292: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [] ],
599
+ 293: [ <span class="ruby-value str">'ganttBars'</span>, <span class="ruby-value str">'Gantt Bars'</span>, <span class="ruby-constant">BooleanAttribute</span>,
600
+ 294: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span> ],
601
+ 295: [ <span class="ruby-value str">'header'</span>, <span class="ruby-value str">'Header'</span>, <span class="ruby-constant">RichTextAttribute</span>,
602
+ 296: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
603
+ 297: [ <span class="ruby-value str">'headline'</span>, <span class="ruby-value str">'Headline'</span>, <span class="ruby-constant">StringAttribute</span>,
604
+ 298: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">''</span> ],
605
+ 299: [ <span class="ruby-value str">'hideResource'</span>, <span class="ruby-value str">'Hide Resource'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
606
+ 300: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
607
+ 301: [ <span class="ruby-value str">'hideTask'</span>, <span class="ruby-value str">'Hide Task'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
608
+ 302: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
609
+ 303: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
610
+ 304: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value">-1</span> ],
611
+ 305: [ <span class="ruby-value str">'left'</span>, <span class="ruby-value str">'Left'</span>, <span class="ruby-constant">RichTextAttribute</span>,
612
+ 306: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
613
+ 307: [ <span class="ruby-value str">'loadUnit'</span>, <span class="ruby-value str">'Load Unit'</span>, <span class="ruby-constant">StringAttribute</span>,
614
+ 308: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
615
+ 309: [ <span class="ruby-value str">'now'</span>, <span class="ruby-value str">'Now'</span>, <span class="ruby-constant">DateAttribute</span>,
616
+ 310: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
617
+ 311: [ <span class="ruby-value str">'numberFormat'</span>, <span class="ruby-value str">'Number Format'</span>, <span class="ruby-constant">RealFormatAttribute</span>,
618
+ 312: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
619
+ 313: [ <span class="ruby-value str">'prolog'</span>, <span class="ruby-value str">'Prolog'</span>, <span class="ruby-constant">RichTextAttribute</span>,
620
+ 314: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span>],
621
+ 315: [ <span class="ruby-value str">'resourceAttributes'</span>, <span class="ruby-value str">'Resource Attributes'</span>, <span class="ruby-constant">FormatListAttribute</span>,
622
+ 316: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-constant">KeywordArray</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'*'</span> ]) ],
623
+ 317: [ <span class="ruby-value str">'resourceRoot'</span>, <span class="ruby-value str">'resource Root'</span>, <span class="ruby-constant">PropertyAttribute</span>,
624
+ 318: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
625
+ 319: [ <span class="ruby-value str">'revenueAccount'</span>, <span class="ruby-value str">'Revenue Account'</span>, <span class="ruby-constant">AccountAttribute</span>,
626
+ 320: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
627
+ 321: [ <span class="ruby-value str">'right'</span>, <span class="ruby-value str">'Right'</span>, <span class="ruby-constant">RichTextAttribute</span>,
628
+ 322: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
629
+ 323: [ <span class="ruby-value str">'rollupResource'</span>, <span class="ruby-value str">'Rollup Resource'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
630
+ 324: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
631
+ 325: [ <span class="ruby-value str">'rollupTask'</span>, <span class="ruby-value str">'Rollup Task'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
632
+ 326: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
633
+ 327: [ <span class="ruby-value str">'scenarios'</span>, <span class="ruby-value str">'Scenarios'</span>, <span class="ruby-constant">ScenarioListAttribute</span>,
634
+ 328: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [ <span class="ruby-value">0</span> ] ],
635
+ 329: [ <span class="ruby-value str">'shortTimeFormat'</span>, <span class="ruby-value str">'Short Time Format'</span>, <span class="ruby-constant">StringAttribute</span>,
636
+ 330: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
637
+ 331: [ <span class="ruby-value str">'sortResources'</span>, <span class="ruby-value str">'Sort Resources'</span>, <span class="ruby-constant">SortListAttribute</span>,
638
+ 332: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [[ <span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">-1</span> ]] ],
639
+ 333: [ <span class="ruby-value str">'sortTasks'</span>, <span class="ruby-value str">'Sort Tasks'</span>, <span class="ruby-constant">SortListAttribute</span>,
640
+ 334: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [[ <span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">-1</span> ]] ],
641
+ 335: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>,
642
+ 336: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
643
+ 337: [ <span class="ruby-value str">'taskAttributes'</span>, <span class="ruby-value str">'Task Attributes'</span>, <span class="ruby-constant">FormatListAttribute</span>,
644
+ 338: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-constant">KeywordArray</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'*'</span> ]) ],
645
+ 339: [ <span class="ruby-value str">'taskRoot'</span>, <span class="ruby-value str">'Task Root'</span>, <span class="ruby-constant">PropertyAttribute</span>,
646
+ 340: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
647
+ 341: [ <span class="ruby-value str">'timeFormat'</span>, <span class="ruby-value str">'Time Format'</span>, <span class="ruby-constant">StringAttribute</span>,
648
+ 342: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
649
+ 343: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
650
+ 344: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">nil</span> ],
651
+ 345: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
652
+ 346: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
653
+ 347: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
654
+ 348: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-value str">&quot;&quot;</span> ],
655
+ 349: [ <span class="ruby-value str">'weekStartsMonday'</span>, <span class="ruby-value str">'Week Starts Monday'</span>, <span class="ruby-constant">BooleanAttribute</span>,
656
+ 350: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span> ]
657
+ 351: ]
658
+ 352: <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">addAttributeType</span>(<span class="ruby-constant">AttributeDefinition</span>.<span class="ruby-identifier">new</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">a</span>)) }
659
+ 353:
660
+ 354: <span class="ruby-constant">Scenario</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-value str">'plan'</span>, <span class="ruby-value str">'Plan Scenario'</span>, <span class="ruby-keyword kw">nil</span>)
661
+ 355:
662
+ 356: <span class="ruby-ivar">@reportContext</span> = <span class="ruby-keyword kw">nil</span>
663
+ 357: <span class="ruby-ivar">@outputDir</span> = <span class="ruby-value str">''</span>
664
+ 358: <span class="ruby-keyword kw">end</span>
427
665
  </pre>
428
666
  </div>
429
667
 
@@ -434,12 +672,12 @@ The constructor will set default values for all project attributes.
434
672
  <h3 class="section-bar">Public Instance methods</h3>
435
673
 
436
674
 
437
- <div id="method-M000633" class="method-detail">
438
- <a name="M000633"></a>
675
+ <div id="method-M000794" class="method-detail">
676
+ <a name="M000794"></a>
439
677
 
440
678
  <div class="method-heading">
441
679
 
442
- <a href="#M000633" class="method-signature">
680
+ <a href="#M000794" class="method-signature">
443
681
 
444
682
  <span class="method-name">[]</span><span class="method-args">(name)</span>
445
683
 
@@ -456,16 +694,16 @@ attribute.
456
694
  </p>
457
695
 
458
696
  <p><a class="source-toggle" href="#"
459
- onclick="toggleCode('M000633-source');return false;">[Source]</a></p>
460
- <div class="method-source-code" id="M000633-source">
697
+ onclick="toggleCode('M000794-source');return false;">[Source]</a></p>
698
+ <div class="method-source-code" id="M000794-source">
461
699
  <pre>
462
- <span class="ruby-comment cmt"># File lib/Project.rb, line 207</span>
463
- 207: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">name</span>)
464
- 208: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
465
- 209: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
466
- 210: <span class="ruby-keyword kw">end</span>
467
- 211: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>]
468
- 212: <span class="ruby-keyword kw">end</span>
700
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 373</span>
701
+ 373: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">name</span>)
702
+ 374: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
703
+ 375: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
704
+ 376: <span class="ruby-keyword kw">end</span>
705
+ 377: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>]
706
+ 378: <span class="ruby-keyword kw">end</span>
469
707
  </pre>
470
708
  </div>
471
709
 
@@ -473,12 +711,12 @@ attribute.
473
711
  </div>
474
712
 
475
713
 
476
- <div id="method-M000634" class="method-detail">
477
- <a name="M000634"></a>
714
+ <div id="method-M000795" class="method-detail">
715
+ <a name="M000795"></a>
478
716
 
479
717
  <div class="method-heading">
480
718
 
481
- <a href="#M000634" class="method-signature">
719
+ <a href="#M000795" class="method-signature">
482
720
 
483
721
  <span class="method-name">[]=</span><span class="method-args">(name, value)</span>
484
722
 
@@ -494,16 +732,16 @@ to <em>value</em>.
494
732
  </p>
495
733
 
496
734
  <p><a class="source-toggle" href="#"
497
- onclick="toggleCode('M000634-source');return false;">[Source]</a></p>
498
- <div class="method-source-code" id="M000634-source">
735
+ onclick="toggleCode('M000795-source');return false;">[Source]</a></p>
736
+ <div class="method-source-code" id="M000795-source">
499
737
  <pre>
500
- <span class="ruby-comment cmt"># File lib/Project.rb, line 215</span>
501
- 215: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)
502
- 216: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
503
- 217: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
504
- 218: <span class="ruby-keyword kw">end</span>
505
- 219: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">value</span>
506
- 220: <span class="ruby-keyword kw">end</span>
738
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 381</span>
739
+ 381: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)
740
+ 382: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)
741
+ 383: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
742
+ 384: <span class="ruby-keyword kw">end</span>
743
+ 385: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">value</span>
744
+ 386: <span class="ruby-keyword kw">end</span>
507
745
  </pre>
508
746
  </div>
509
747
 
@@ -511,12 +749,12 @@ to <em>value</em>.
511
749
  </div>
512
750
 
513
751
 
514
- <div id="method-M000643" class="method-detail">
515
- <a name="M000643"></a>
752
+ <div id="method-M000804" class="method-detail">
753
+ <a name="M000804"></a>
516
754
 
517
755
  <div class="method-heading">
518
756
 
519
- <a href="#M000643" class="method-signature">
757
+ <a href="#M000804" class="method-signature">
520
758
 
521
759
  <span class="method-name">account</span><span class="method-args">(id)</span>
522
760
 
@@ -532,13 +770,13 @@ return nil if it does not exist.
532
770
  </p>
533
771
 
534
772
  <p><a class="source-toggle" href="#"
535
- onclick="toggleCode('M000643-source');return false;">[Source]</a></p>
536
- <div class="method-source-code" id="M000643-source">
773
+ onclick="toggleCode('M000804-source');return false;">[Source]</a></p>
774
+ <div class="method-source-code" id="M000804-source">
537
775
  <pre>
538
- <span class="ruby-comment cmt"># File lib/Project.rb, line 291</span>
539
- 291: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">account</span>(<span class="ruby-identifier">id</span>)
540
- 292: <span class="ruby-ivar">@accounts</span>[<span class="ruby-identifier">id</span>]
541
- 293: <span class="ruby-keyword kw">end</span>
776
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 451</span>
777
+ 451: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">account</span>(<span class="ruby-identifier">id</span>)
778
+ 452: <span class="ruby-ivar">@accounts</span>[<span class="ruby-identifier">id</span>]
779
+ 453: <span class="ruby-keyword kw">end</span>
542
780
  </pre>
543
781
  </div>
544
782
 
@@ -546,12 +784,52 @@ return nil if it does not exist.
546
784
  </div>
547
785
 
548
786
 
549
- <div id="method-M000649" class="method-detail">
550
- <a name="M000649"></a>
787
+ <div id="method-M000817" class="method-detail">
788
+ <a name="M000817"></a>
551
789
 
552
790
  <div class="method-heading">
553
791
 
554
- <a href="#M000649" class="method-signature">
792
+ <a href="#M000817" class="method-signature">
793
+
794
+ <span class="method-name">attributeName</span><span class="method-args">(id)</span>
795
+
796
+ </a>
797
+
798
+ </div>
799
+
800
+ <div class="method-description">
801
+
802
+ <p>
803
+ Return the name of the attribute <em>id</em>. Since we don&#8217;t know
804
+ whether we are looking for a task, resource, etc. attribute, we prefer
805
+ tasks over resources here.
806
+ </p>
807
+
808
+ <p><a class="source-toggle" href="#"
809
+ onclick="toggleCode('M000817-source');return false;">[Source]</a></p>
810
+ <div class="method-source-code" id="M000817-source">
811
+ <pre>
812
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 690</span>
813
+ 690: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">attributeName</span>(<span class="ruby-identifier">id</span>)
814
+ 691: <span class="ruby-comment cmt"># We have to see if the attribute id is a task or resource attribute and</span>
815
+ 692: <span class="ruby-comment cmt"># return it's name.</span>
816
+ 693: (<span class="ruby-identifier">name</span> = <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">attributeName</span>(<span class="ruby-identifier">id</span>)).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span>
817
+ 694: (<span class="ruby-identifier">name</span> = <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">attributeName</span>(<span class="ruby-identifier">id</span>)).<span class="ruby-identifier">nil?</span>
818
+ 695: <span class="ruby-identifier">name</span>
819
+ 696: <span class="ruby-keyword kw">end</span>
820
+ </pre>
821
+ </div>
822
+
823
+ </div>
824
+ </div>
825
+
826
+
827
+ <div id="method-M000812" class="method-detail">
828
+ <a name="M000812"></a>
829
+
830
+ <div class="method-heading">
831
+
832
+ <a href="#M000812" class="method-signature">
555
833
 
556
834
  <span class="method-name">convertToDailyLoad</span><span class="method-args">(seconds)</span>
557
835
 
@@ -567,13 +845,13 @@ setting of the global &#8216;dailyworkinghours&#8217; attribute.
567
845
  </p>
568
846
 
569
847
  <p><a class="source-toggle" href="#"
570
- onclick="toggleCode('M000649-source');return false;">[Source]</a></p>
571
- <div class="method-source-code" id="M000649-source">
848
+ onclick="toggleCode('M000812-source');return false;">[Source]</a></p>
849
+ <div class="method-source-code" id="M000812-source">
572
850
  <pre>
573
- <span class="ruby-comment cmt"># File lib/Project.rb, line 444</span>
574
- 444: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convertToDailyLoad</span>(<span class="ruby-identifier">seconds</span>)
575
- 445: <span class="ruby-identifier">seconds</span> <span class="ruby-operator">/</span> (<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>] <span class="ruby-operator">*</span> <span class="ruby-value">3600.0</span>)
576
- 446: <span class="ruby-keyword kw">end</span>
851
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 624</span>
852
+ 624: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convertToDailyLoad</span>(<span class="ruby-identifier">seconds</span>)
853
+ 625: <span class="ruby-identifier">seconds</span> <span class="ruby-operator">/</span> (<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>] <span class="ruby-operator">*</span> <span class="ruby-value">3600.0</span>)
854
+ 626: <span class="ruby-keyword kw">end</span>
577
855
  </pre>
578
856
  </div>
579
857
 
@@ -581,12 +859,12 @@ setting of the global &#8216;dailyworkinghours&#8217; attribute.
581
859
  </div>
582
860
 
583
861
 
584
- <div id="method-M000636" class="method-detail">
585
- <a name="M000636"></a>
862
+ <div id="method-M000797" class="method-detail">
863
+ <a name="M000797"></a>
586
864
 
587
865
  <div class="method-heading">
588
866
 
589
- <a href="#M000636" class="method-signature">
867
+ <a href="#M000797" class="method-signature">
590
868
 
591
869
  <span class="method-name">dailyWorkingHours</span><span class="method-args">()</span>
592
870
 
@@ -602,13 +880,13 @@ can be set to other values by the user.
602
880
  </p>
603
881
 
604
882
  <p><a class="source-toggle" href="#"
605
- onclick="toggleCode('M000636-source');return false;">[Source]</a></p>
606
- <div class="method-source-code" id="M000636-source">
883
+ onclick="toggleCode('M000797-source');return false;">[Source]</a></p>
884
+ <div class="method-source-code" id="M000797-source">
607
885
  <pre>
608
- <span class="ruby-comment cmt"># File lib/Project.rb, line 229</span>
609
- 229: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dailyWorkingHours</span>
610
- 230: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>].<span class="ruby-identifier">to_f</span>
611
- 231: <span class="ruby-keyword kw">end</span>
886
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 395</span>
887
+ 395: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dailyWorkingHours</span>
888
+ 396: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>].<span class="ruby-identifier">to_f</span>
889
+ 397: <span class="ruby-keyword kw">end</span>
612
890
  </pre>
613
891
  </div>
614
892
 
@@ -616,12 +894,12 @@ can be set to other values by the user.
616
894
  </div>
617
895
 
618
896
 
619
- <div id="method-M000652" class="method-detail">
620
- <a name="M000652"></a>
897
+ <div id="method-M000815" class="method-detail">
898
+ <a name="M000815"></a>
621
899
 
622
900
  <div class="method-heading">
623
901
 
624
- <a href="#M000652" class="method-signature">
902
+ <a href="#M000815" class="method-signature">
625
903
 
626
904
  <span class="method-name">dateToIdx</span><span class="method-args">(date, forceIntoProject = false)</span>
627
905
 
@@ -639,24 +917,60 @@ time frame.
639
917
  </p>
640
918
 
641
919
  <p><a class="source-toggle" href="#"
642
- onclick="toggleCode('M000652-source');return false;">[Source]</a></p>
643
- <div class="method-source-code" id="M000652-source">
920
+ onclick="toggleCode('M000815-source');return false;">[Source]</a></p>
921
+ <div class="method-source-code" id="M000815-source">
922
+ <pre>
923
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 650</span>
924
+ 650: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">forceIntoProject</span> = <span class="ruby-keyword kw">false</span>)
925
+ 651: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>])
926
+ 652: <span class="ruby-comment cmt"># Date is out of range.</span>
927
+ 653: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">forceIntoProject</span>
928
+ 654: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]
929
+ 655: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">scoreboardSize</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>]
930
+ 656: <span class="ruby-keyword kw">else</span>
931
+ 657: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Date #{date} is out of project time range &quot;</span> <span class="ruby-operator">+</span>
932
+ 658: <span class="ruby-node">&quot;(#{@attributes['start']} - #{@attributes['end']})&quot;</span>
933
+ 659: <span class="ruby-keyword kw">end</span>
934
+ 660: <span class="ruby-keyword kw">end</span>
935
+ 661: <span class="ruby-comment cmt"># Calculate the corresponding index.</span>
936
+ 662: ((<span class="ruby-identifier">date</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]) <span class="ruby-operator">/</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
937
+ 663: <span class="ruby-keyword kw">end</span>
938
+ </pre>
939
+ </div>
940
+
941
+ </div>
942
+ </div>
943
+
944
+
945
+ <div id="method-M000792" class="method-detail">
946
+ <a name="M000792"></a>
947
+
948
+ <div class="method-heading">
949
+
950
+ <a href="#M000792" class="method-signature">
951
+
952
+ <span class="method-name">deep_clone</span><span class="method-args">()</span>
953
+
954
+ </a>
955
+
956
+ </div>
957
+
958
+ <div class="method-description">
959
+
960
+ <p>
961
+ Overload the <a href="Project.html#M000792">deep_clone</a> function so that
962
+ references to the project don&#8217;t lead to deep copying of the whole
963
+ project.
964
+ </p>
965
+
966
+ <p><a class="source-toggle" href="#"
967
+ onclick="toggleCode('M000792-source');return false;">[Source]</a></p>
968
+ <div class="method-source-code" id="M000792-source">
644
969
  <pre>
645
- <span class="ruby-comment cmt"># File lib/Project.rb, line 470</span>
646
- 470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">date</span>, <span class="ruby-identifier">forceIntoProject</span> = <span class="ruby-keyword kw">false</span>)
647
- 471: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>])
648
- 472: <span class="ruby-comment cmt"># Date is out of range.</span>
649
- 473: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">forceIntoProject</span>
650
- 474: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]
651
- 475: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">scoreboardSize</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">date</span> <span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>]
652
- 476: <span class="ruby-keyword kw">else</span>
653
- 477: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Date #{date} is out of project time range &quot;</span> <span class="ruby-operator">+</span>
654
- 478: <span class="ruby-node">&quot;(#{@attributes['start']} - #{@attributes['end']})&quot;</span>
655
- 479: <span class="ruby-keyword kw">end</span>
656
- 480: <span class="ruby-keyword kw">end</span>
657
- 481: <span class="ruby-comment cmt"># Calculate the corresponding index.</span>
658
- 482: ((<span class="ruby-identifier">date</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]) <span class="ruby-operator">/</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
659
- 483: <span class="ruby-keyword kw">end</span>
970
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 362</span>
971
+ 362: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deep_clone</span>
972
+ 363: <span class="ruby-keyword kw">self</span>
973
+ 364: <span class="ruby-keyword kw">end</span>
660
974
  </pre>
661
975
  </div>
662
976
 
@@ -664,12 +978,12 @@ time frame.
664
978
  </div>
665
979
 
666
980
 
667
- <div id="method-M000647" class="method-detail">
668
- <a name="M000647"></a>
981
+ <div id="method-M000810" class="method-detail">
982
+ <a name="M000810"></a>
669
983
 
670
984
  <div class="method-heading">
671
985
 
672
- <a href="#M000647" class="method-signature">
986
+ <a href="#M000810" class="method-signature">
673
987
 
674
988
  <span class="method-name">generateReports</span><span class="method-args">(maxCpuCores)</span>
675
989
 
@@ -682,39 +996,45 @@ time frame.
682
996
  <p>
683
997
  Call this function to generate the reports based on the scheduling result.
684
998
  This function may only be called after <a
685
- href="Project.html#M000646">Project#schedule</a> has been called.
999
+ href="Project.html#M000809">Project#schedule</a> has been called.
686
1000
  </p>
687
1001
 
688
1002
  <p><a class="source-toggle" href="#"
689
- onclick="toggleCode('M000647-source');return false;">[Source]</a></p>
690
- <div class="method-source-code" id="M000647-source">
1003
+ onclick="toggleCode('M000810-source');return false;">[Source]</a></p>
1004
+ <div class="method-source-code" id="M000810-source">
691
1005
  <pre>
692
- <span class="ruby-comment cmt"># File lib/Project.rb, line 353</span>
693
- 353: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateReports</span>(<span class="ruby-identifier">maxCpuCores</span>)
694
- 354: <span class="ruby-keyword kw">begin</span>
695
- 355: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">maxCpuCores</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
696
- 356: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
697
- 357: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.name}&quot;</span>)
698
- 358: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
699
- 359: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
700
- 360: <span class="ruby-keyword kw">end</span>
701
- 361: <span class="ruby-keyword kw">else</span>
702
- 362: <span class="ruby-identifier">bp</span> = <span class="ruby-constant">BatchProcessor</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">maxCpuCores</span>)
703
- 363: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span> <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">queue</span>(<span class="ruby-identifier">report</span>) { <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span> } }
704
- 364: <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">wait</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
705
- 365: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stdout</span>)
706
- 366: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stderr</span>)
707
- 367: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.tag.name}&quot;</span>)
708
- 368: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
709
- 369: <span class="ruby-keyword kw">end</span>
710
- 370: <span class="ruby-keyword kw">end</span>
711
- 371: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
712
- 372: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Report Generation Error: #{$!}&quot;</span>
713
- 373: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
714
- 374: <span class="ruby-keyword kw">end</span>
715
- 375:
716
- 376: <span class="ruby-keyword kw">true</span>
717
- 377: <span class="ruby-keyword kw">end</span>
1006
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 527</span>
1007
+ 527: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateReports</span>(<span class="ruby-identifier">maxCpuCores</span>)
1008
+ 528: <span class="ruby-keyword kw">begin</span>
1009
+ 529: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">index</span>
1010
+ 530: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">maxCpuCores</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
1011
+ 531: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
1012
+ 532: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">empty?</span>
1013
+ 533: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.name}&quot;</span>)
1014
+ 534: <span class="ruby-ivar">@reportContext</span> = <span class="ruby-constant">ReportContext</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">report</span>)
1015
+ 535: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
1016
+ 536: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1017
+ 537: <span class="ruby-keyword kw">end</span>
1018
+ 538: <span class="ruby-keyword kw">else</span>
1019
+ 539: <span class="ruby-identifier">bp</span> = <span class="ruby-constant">BatchProcessor</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">maxCpuCores</span>)
1020
+ 540: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
1021
+ 541: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>).<span class="ruby-identifier">empty?</span>
1022
+ 542: <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">queue</span>(<span class="ruby-identifier">report</span>) { <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span> }
1023
+ 543: <span class="ruby-keyword kw">end</span>
1024
+ 544: <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">wait</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
1025
+ 545: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stdout</span>)
1026
+ 546: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stderr</span>)
1027
+ 547: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.tag.name}&quot;</span>)
1028
+ 548: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1029
+ 549: <span class="ruby-keyword kw">end</span>
1030
+ 550: <span class="ruby-keyword kw">end</span>
1031
+ 551: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
1032
+ 552: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Report Generation Error: #{$!}&quot;</span>
1033
+ 553: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1034
+ 554: <span class="ruby-keyword kw">end</span>
1035
+ 555:
1036
+ 556: <span class="ruby-keyword kw">true</span>
1037
+ 557: <span class="ruby-keyword kw">end</span>
718
1038
  </pre>
719
1039
  </div>
720
1040
 
@@ -722,12 +1042,12 @@ href="Project.html#M000646">Project#schedule</a> has been called.
722
1042
  </div>
723
1043
 
724
1044
 
725
- <div id="method-M000651" class="method-detail">
726
- <a name="M000651"></a>
1045
+ <div id="method-M000814" class="method-detail">
1046
+ <a name="M000814"></a>
727
1047
 
728
1048
  <div class="method-heading">
729
1049
 
730
- <a href="#M000651" class="method-signature">
1050
+ <a href="#M000814" class="method-signature">
731
1051
 
732
1052
  <span class="method-name">idxToDate</span><span class="method-args">(idx)</span>
733
1053
 
@@ -745,16 +1065,16 @@ raised.
745
1065
  </p>
746
1066
 
747
1067
  <p><a class="source-toggle" href="#"
748
- onclick="toggleCode('M000651-source');return false;">[Source]</a></p>
749
- <div class="method-source-code" id="M000651-source">
1068
+ onclick="toggleCode('M000814-source');return false;">[Source]</a></p>
1069
+ <div class="method-source-code" id="M000814-source">
750
1070
  <pre>
751
- <span class="ruby-comment cmt"># File lib/Project.rb, line 460</span>
752
- 460: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
753
- 461: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">idx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">scoreboardSize</span>)
754
- 462: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Scoreboard index out of range&quot;</span>
755
- 463: <span class="ruby-keyword kw">end</span>
756
- 464: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
757
- 465: <span class="ruby-keyword kw">end</span>
1071
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 640</span>
1072
+ 640: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
1073
+ 641: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">idx</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">scoreboardSize</span>)
1074
+ 642: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Scoreboard index out of range&quot;</span>
1075
+ 643: <span class="ruby-keyword kw">end</span>
1076
+ 644: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">idx</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
1077
+ 645: <span class="ruby-keyword kw">end</span>
758
1078
  </pre>
759
1079
  </div>
760
1080
 
@@ -762,12 +1082,12 @@ raised.
762
1082
  </div>
763
1083
 
764
1084
 
765
- <div id="method-M000648" class="method-detail">
766
- <a name="M000648"></a>
1085
+ <div id="method-M000811" class="method-detail">
1086
+ <a name="M000811"></a>
767
1087
 
768
1088
  <div class="method-heading">
769
1089
 
770
- <a href="#M000648" class="method-signature">
1090
+ <a href="#M000811" class="method-signature">
771
1091
 
772
1092
  <span class="method-name">isWorkingTime(slot) &rarr; true or false<br />
773
1093
  isWorkingTime(startTime, endTime) &rarr; true or false<br />
@@ -789,32 +1109,32 @@ defined and the slot lies within a defined working time period.
789
1109
  </p>
790
1110
 
791
1111
  <p><a class="source-toggle" href="#"
792
- onclick="toggleCode('M000648-source');return false;">[Source]</a></p>
793
- <div class="method-source-code" id="M000648-source">
1112
+ onclick="toggleCode('M000811-source');return false;">[Source]</a></p>
1113
+ <div class="method-source-code" id="M000811-source">
794
1114
  <pre>
795
- <span class="ruby-comment cmt"># File lib/Project.rb, line 419</span>
796
- 419: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
797
- 420: <span class="ruby-comment cmt"># Normalize argument(s) to Interval</span>
798
- 421: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
799
- 422: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Interval</span>)
800
- 423: <span class="ruby-identifier">iv</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
801
- 424: <span class="ruby-keyword kw">else</span>
802
- 425: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+</span>
803
- 426: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
804
- 427: <span class="ruby-keyword kw">end</span>
805
- 428: <span class="ruby-keyword kw">else</span>
806
- 429: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>])
807
- 430: <span class="ruby-keyword kw">end</span>
808
- 431:
809
- 432: <span class="ruby-comment cmt"># Check if the interval has overlap with any of the global vacations.</span>
810
- 433: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'vacations'</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vacation</span><span class="ruby-operator">|</span>
811
- 434: <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">vacation</span>.<span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">iv</span>)
812
- 435: <span class="ruby-keyword kw">end</span>
813
- 436:
814
- 437: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>].<span class="ruby-identifier">timeOff?</span>(<span class="ruby-identifier">iv</span>)
815
- 438:
816
- 439: <span class="ruby-keyword kw">true</span>
817
- 440: <span class="ruby-keyword kw">end</span>
1115
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 599</span>
1116
+ 599: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isWorkingTime</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
1117
+ 600: <span class="ruby-comment cmt"># Normalize argument(s) to Interval</span>
1118
+ 601: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
1119
+ 602: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Interval</span>)
1120
+ 603: <span class="ruby-identifier">iv</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
1121
+ 604: <span class="ruby-keyword kw">else</span>
1122
+ 605: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+</span>
1123
+ 606: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
1124
+ 607: <span class="ruby-keyword kw">end</span>
1125
+ 608: <span class="ruby-keyword kw">else</span>
1126
+ 609: <span class="ruby-identifier">iv</span> = <span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">args</span>[<span class="ruby-value">1</span>])
1127
+ 610: <span class="ruby-keyword kw">end</span>
1128
+ 611:
1129
+ 612: <span class="ruby-comment cmt"># Check if the interval has overlap with any of the global vacations.</span>
1130
+ 613: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'vacations'</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vacation</span><span class="ruby-operator">|</span>
1131
+ 614: <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">vacation</span>.<span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">iv</span>)
1132
+ 615: <span class="ruby-keyword kw">end</span>
1133
+ 616:
1134
+ 617: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>].<span class="ruby-identifier">timeOff?</span>(<span class="ruby-identifier">iv</span>)
1135
+ 618:
1136
+ 619: <span class="ruby-keyword kw">true</span>
1137
+ 620: <span class="ruby-keyword kw">end</span>
818
1138
  </pre>
819
1139
  </div>
820
1140
 
@@ -822,12 +1142,12 @@ defined and the slot lies within a defined working time period.
822
1142
  </div>
823
1143
 
824
1144
 
825
- <div id="method-M000638" class="method-detail">
826
- <a name="M000638"></a>
1145
+ <div id="method-M000799" class="method-detail">
1146
+ <a name="M000799"></a>
827
1147
 
828
1148
  <div class="method-heading">
829
1149
 
830
- <a href="#M000638" class="method-signature">
1150
+ <a href="#M000799" class="method-signature">
831
1151
 
832
1152
  <span class="method-name">monthlyWorkingDays</span><span class="method-args">()</span>
833
1153
 
@@ -842,13 +1162,48 @@ Return the average number of working days per month.
842
1162
  </p>
843
1163
 
844
1164
  <p><a class="source-toggle" href="#"
845
- onclick="toggleCode('M000638-source');return false;">[Source]</a></p>
846
- <div class="method-source-code" id="M000638-source">
1165
+ onclick="toggleCode('M000799-source');return false;">[Source]</a></p>
1166
+ <div class="method-source-code" id="M000799-source">
1167
+ <pre>
1168
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 405</span>
1169
+ 405: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">monthlyWorkingDays</span>
1170
+ 406: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>] <span class="ruby-operator">/</span> <span class="ruby-value">12.0</span>
1171
+ 407: <span class="ruby-keyword kw">end</span>
1172
+ </pre>
1173
+ </div>
1174
+
1175
+ </div>
1176
+ </div>
1177
+
1178
+
1179
+ <div id="method-M000807" class="method-detail">
1180
+ <a name="M000807"></a>
1181
+
1182
+ <div class="method-heading">
1183
+
1184
+ <a href="#M000807" class="method-signature">
1185
+
1186
+ <span class="method-name">report</span><span class="method-args">(id)</span>
1187
+
1188
+ </a>
1189
+
1190
+ </div>
1191
+
1192
+ <div class="method-description">
1193
+
1194
+ <p>
1195
+ Return the <a href="Report.html">Report</a> with the ID <tt>id</tt> or
1196
+ return nil if it does not exist.
1197
+ </p>
1198
+
1199
+ <p><a class="source-toggle" href="#"
1200
+ onclick="toggleCode('M000807-source');return false;">[Source]</a></p>
1201
+ <div class="method-source-code" id="M000807-source">
847
1202
  <pre>
848
- <span class="ruby-comment cmt"># File lib/Project.rb, line 239</span>
849
- 239: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">monthlyWorkingDays</span>
850
- 240: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>] <span class="ruby-operator">/</span> <span class="ruby-value">12.0</span>
851
- 241: <span class="ruby-keyword kw">end</span>
1203
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 466</span>
1204
+ 466: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">report</span>(<span class="ruby-identifier">id</span>)
1205
+ 467: <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">id</span>]
1206
+ 468: <span class="ruby-keyword kw">end</span>
852
1207
  </pre>
853
1208
  </div>
854
1209
 
@@ -856,12 +1211,50 @@ Return the average number of working days per month.
856
1211
  </div>
857
1212
 
858
1213
 
859
- <div id="method-M000645" class="method-detail">
860
- <a name="M000645"></a>
1214
+ <div id="method-M000808" class="method-detail">
1215
+ <a name="M000808"></a>
861
1216
 
862
1217
  <div class="method-heading">
863
1218
 
864
- <a href="#M000645" class="method-signature">
1219
+ <a href="#M000808" class="method-signature">
1220
+
1221
+ <span class="method-name">reportByName</span><span class="method-args">(name)</span>
1222
+
1223
+ </a>
1224
+
1225
+ </div>
1226
+
1227
+ <div class="method-description">
1228
+
1229
+ <p>
1230
+ Return the <a href="Report.html">Report</a> with the name <tt>name</tt> or
1231
+ return nil if it does not exist.
1232
+ </p>
1233
+
1234
+ <p><a class="source-toggle" href="#"
1235
+ onclick="toggleCode('M000808-source');return false;">[Source]</a></p>
1236
+ <div class="method-source-code" id="M000808-source">
1237
+ <pre>
1238
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 472</span>
1239
+ 472: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reportByName</span>(<span class="ruby-identifier">name</span>)
1240
+ 473: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">report</span><span class="ruby-operator">|</span>
1241
+ 474: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">report</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">name</span>
1242
+ 475: <span class="ruby-keyword kw">end</span>
1243
+ 476: <span class="ruby-keyword kw">nil</span>
1244
+ 477: <span class="ruby-keyword kw">end</span>
1245
+ </pre>
1246
+ </div>
1247
+
1248
+ </div>
1249
+ </div>
1250
+
1251
+
1252
+ <div id="method-M000806" class="method-detail">
1253
+ <a name="M000806"></a>
1254
+
1255
+ <div class="method-heading">
1256
+
1257
+ <a href="#M000806" class="method-signature">
865
1258
 
866
1259
  <span class="method-name">resource</span><span class="method-args">(id)</span>
867
1260
 
@@ -877,13 +1270,13 @@ return nil if it does not exist.
877
1270
  </p>
878
1271
 
879
1272
  <p><a class="source-toggle" href="#"
880
- onclick="toggleCode('M000645-source');return false;">[Source]</a></p>
881
- <div class="method-source-code" id="M000645-source">
1273
+ onclick="toggleCode('M000806-source');return false;">[Source]</a></p>
1274
+ <div class="method-source-code" id="M000806-source">
882
1275
  <pre>
883
- <span class="ruby-comment cmt"># File lib/Project.rb, line 301</span>
884
- 301: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resource</span>(<span class="ruby-identifier">id</span>)
885
- 302: <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">id</span>]
886
- 303: <span class="ruby-keyword kw">end</span>
1276
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 461</span>
1277
+ 461: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resource</span>(<span class="ruby-identifier">id</span>)
1278
+ 462: <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">id</span>]
1279
+ 463: <span class="ruby-keyword kw">end</span>
887
1280
  </pre>
888
1281
  </div>
889
1282
 
@@ -891,12 +1284,12 @@ return nil if it does not exist.
891
1284
  </div>
892
1285
 
893
1286
 
894
- <div id="method-M000640" class="method-detail">
895
- <a name="M000640"></a>
1287
+ <div id="method-M000801" class="method-detail">
1288
+ <a name="M000801"></a>
896
1289
 
897
1290
  <div class="method-heading">
898
1291
 
899
- <a href="#M000640" class="method-signature">
1292
+ <a href="#M000801" class="method-signature">
900
1293
 
901
1294
  <span class="method-name">scenario(index) &rarr; Scenario<br />
902
1295
  scenario(id) &rarr; Scenario<br />
@@ -914,26 +1307,20 @@ or <em>index</em>.
914
1307
  </p>
915
1308
 
916
1309
  <p><a class="source-toggle" href="#"
917
- onclick="toggleCode('M000640-source');return false;">[Source]</a></p>
918
- <div class="method-source-code" id="M000640-source">
1310
+ onclick="toggleCode('M000801-source');return false;">[Source]</a></p>
1311
+ <div class="method-source-code" id="M000801-source">
919
1312
  <pre>
920
- <span class="ruby-comment cmt"># File lib/Project.rb, line 253</span>
921
- 253: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">arg</span>)
922
- 254: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>)
923
- 255: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">arg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">arg</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">items</span>)
924
- 256: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Scenario index out of range: #{arg}&quot;</span>
925
- 257: <span class="ruby-keyword kw">end</span>
926
- 258: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sc</span><span class="ruby-operator">|</span>
927
- 259: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sc</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">arg</span>
928
- 260: <span class="ruby-keyword kw">end</span>
929
- 261: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;No scenario with index #{arg}&quot;</span>
930
- 262: <span class="ruby-keyword kw">else</span>
931
- 263: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$DEBUG</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">arg</span>].<span class="ruby-identifier">nil?</span>
932
- 264: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;No scenario with id '#{arg}'&quot;</span>
933
- 265: <span class="ruby-keyword kw">end</span>
934
- 266: <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">arg</span>]
935
- 267: <span class="ruby-keyword kw">end</span>
936
- 268: <span class="ruby-keyword kw">end</span>
1313
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 419</span>
1314
+ 419: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">arg</span>)
1315
+ 420: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">arg</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>)
1316
+ 421: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sc</span><span class="ruby-operator">|</span>
1317
+ 422: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sc</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">arg</span>
1318
+ 423: <span class="ruby-keyword kw">end</span>
1319
+ 424: <span class="ruby-keyword kw">else</span>
1320
+ 425: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">arg</span>]
1321
+ 426: <span class="ruby-keyword kw">end</span>
1322
+ 427: <span class="ruby-keyword kw">nil</span>
1323
+ 428: <span class="ruby-keyword kw">end</span>
937
1324
  </pre>
938
1325
  </div>
939
1326
 
@@ -941,12 +1328,12 @@ or <em>index</em>.
941
1328
  </div>
942
1329
 
943
1330
 
944
- <div id="method-M000635" class="method-detail">
945
- <a name="M000635"></a>
1331
+ <div id="method-M000796" class="method-detail">
1332
+ <a name="M000796"></a>
946
1333
 
947
1334
  <div class="method-heading">
948
1335
 
949
- <a href="#M000635" class="method-signature">
1336
+ <a href="#M000796" class="method-signature">
950
1337
 
951
1338
  <span class="method-name">scenarioCount</span><span class="method-args">()</span>
952
1339
 
@@ -961,13 +1348,13 @@ Return the number of defined scenarios for the project.
961
1348
  </p>
962
1349
 
963
1350
  <p><a class="source-toggle" href="#"
964
- onclick="toggleCode('M000635-source');return false;">[Source]</a></p>
965
- <div class="method-source-code" id="M000635-source">
1351
+ onclick="toggleCode('M000796-source');return false;">[Source]</a></p>
1352
+ <div class="method-source-code" id="M000796-source">
966
1353
  <pre>
967
- <span class="ruby-comment cmt"># File lib/Project.rb, line 223</span>
968
- 223: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioCount</span>
969
- 224: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">items</span>
970
- 225: <span class="ruby-keyword kw">end</span>
1354
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 389</span>
1355
+ 389: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioCount</span>
1356
+ 390: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">items</span>
1357
+ 391: <span class="ruby-keyword kw">end</span>
971
1358
  </pre>
972
1359
  </div>
973
1360
 
@@ -975,12 +1362,12 @@ Return the number of defined scenarios for the project.
975
1362
  </div>
976
1363
 
977
1364
 
978
- <div id="method-M000641" class="method-detail">
979
- <a name="M000641"></a>
1365
+ <div id="method-M000802" class="method-detail">
1366
+ <a name="M000802"></a>
980
1367
 
981
1368
  <div class="method-heading">
982
1369
 
983
- <a href="#M000641" class="method-signature">
1370
+ <a href="#M000802" class="method-signature">
984
1371
 
985
1372
  <span class="method-name">scenarioIdx(scenario)<br />
986
1373
  scenarioIdx(id)<br />
@@ -998,19 +1385,19 @@ specified by <em>scenario</em> or <em>id</em>.
998
1385
  </p>
999
1386
 
1000
1387
  <p><a class="source-toggle" href="#"
1001
- onclick="toggleCode('M000641-source');return false;">[Source]</a></p>
1002
- <div class="method-source-code" id="M000641-source">
1388
+ onclick="toggleCode('M000802-source');return false;">[Source]</a></p>
1389
+ <div class="method-source-code" id="M000802-source">
1003
1390
  <pre>
1004
- <span class="ruby-comment cmt"># File lib/Project.rb, line 275</span>
1005
- 275: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
1006
- 276: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Scenario</span>)
1007
- 277: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1008
- 278: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">sc</span>].<span class="ruby-identifier">nil?</span>
1009
- 279: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1010
- 280: <span class="ruby-keyword kw">else</span>
1011
- 281: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">sc</span>].<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1012
- 282: <span class="ruby-keyword kw">end</span>
1013
- 283: <span class="ruby-keyword kw">end</span>
1391
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 435</span>
1392
+ 435: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
1393
+ 436: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Scenario</span>)
1394
+ 437: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1395
+ 438: <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">sc</span>].<span class="ruby-identifier">nil?</span>
1396
+ 439: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
1397
+ 440: <span class="ruby-keyword kw">else</span>
1398
+ 441: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">sc</span>].<span class="ruby-identifier">sequenceNo</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
1399
+ 442: <span class="ruby-keyword kw">end</span>
1400
+ 443: <span class="ruby-keyword kw">end</span>
1014
1401
  </pre>
1015
1402
  </div>
1016
1403
 
@@ -1018,12 +1405,12 @@ specified by <em>scenario</em> or <em>id</em>.
1018
1405
  </div>
1019
1406
 
1020
1407
 
1021
- <div id="method-M000646" class="method-detail">
1022
- <a name="M000646"></a>
1408
+ <div id="method-M000809" class="method-detail">
1409
+ <a name="M000809"></a>
1023
1410
 
1024
1411
  <div class="method-heading">
1025
1412
 
1026
- <a href="#M000646" class="method-signature">
1413
+ <a href="#M000809" class="method-signature">
1027
1414
 
1028
1415
  <span class="method-name">schedule</span><span class="method-args">()</span>
1029
1416
 
@@ -1040,52 +1427,52 @@ stores the result in the data structures again.
1040
1427
  </p>
1041
1428
 
1042
1429
  <p><a class="source-toggle" href="#"
1043
- onclick="toggleCode('M000646-source');return false;">[Source]</a></p>
1044
- <div class="method-source-code" id="M000646-source">
1430
+ onclick="toggleCode('M000809-source');return false;">[Source]</a></p>
1431
+ <div class="method-source-code" id="M000809-source">
1045
1432
  <pre>
1046
- <span class="ruby-comment cmt"># File lib/Project.rb, line 308</span>
1047
- 308: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">schedule</span>
1048
- 309: [ <span class="ruby-ivar">@shifts</span>, <span class="ruby-ivar">@resources</span>, <span class="ruby-ivar">@tasks</span> ].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1049
- 310: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">inheritAttributesFromScenario</span>
1050
- 311: <span class="ruby-comment cmt"># Set all index counters to their proper values.</span>
1051
- 312: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">index</span>
1052
- 313: <span class="ruby-keyword kw">end</span>
1053
- 314:
1054
- 315: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">empty?</span>
1055
- 316: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'no_tasks'</span>, <span class="ruby-value str">'error'</span>, <span class="ruby-value str">&quot;No tasks defined&quot;</span>)
1056
- 317: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1057
- 318: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1058
- 319: <span class="ruby-keyword kw">end</span>
1059
- 320:
1060
- 321: <span class="ruby-keyword kw">begin</span>
1061
- 322: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sc</span><span class="ruby-operator">|</span>
1062
- 323: <span class="ruby-comment cmt"># Skip disabled scenarios</span>
1063
- 324: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'enabled'</span>)
1064
- 325:
1065
- 326: <span class="ruby-identifier">scIdx</span> = <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
1066
- 327:
1067
- 328: <span class="ruby-comment cmt"># All user provided values are set now. The next step is to</span>
1068
- 329: <span class="ruby-comment cmt"># propagate inherited values. These values must be marked as</span>
1069
- 330: <span class="ruby-comment cmt"># inherited by setting the mode to 1. As we always call</span>
1070
- 331: <span class="ruby-comment cmt"># PropertyTreeNode#inherit this is just a safeguard.</span>
1071
- 332: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">1</span>)
1072
- 333: <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
1073
- 334:
1074
- 335: <span class="ruby-comment cmt"># Now change to mode 2 so all values that are modified are marked</span>
1075
- 336: <span class="ruby-comment cmt"># as computed.</span>
1076
- 337: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">2</span>)
1077
- 338: <span class="ruby-comment cmt"># Schedule the scenario.</span>
1078
- 339: <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
1079
- 340:
1080
- 341: <span class="ruby-comment cmt"># Complete the data sets, and check the result.</span>
1081
- 342: <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
1082
- 343: <span class="ruby-keyword kw">end</span>
1083
- 344: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
1084
- 345: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1085
- 346: <span class="ruby-keyword kw">end</span>
1086
- 347:
1087
- 348: <span class="ruby-keyword kw">true</span>
1088
- 349: <span class="ruby-keyword kw">end</span>
1433
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 482</span>
1434
+ 482: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">schedule</span>
1435
+ 483: [ <span class="ruby-ivar">@shifts</span>, <span class="ruby-ivar">@resources</span>, <span class="ruby-ivar">@tasks</span> ].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1436
+ 484: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">inheritAttributesFromScenario</span>
1437
+ 485: <span class="ruby-comment cmt"># Set all index counters to their proper values.</span>
1438
+ 486: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">index</span>
1439
+ 487: <span class="ruby-keyword kw">end</span>
1440
+ 488:
1441
+ 489: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">empty?</span>
1442
+ 490: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'no_tasks'</span>, <span class="ruby-value str">'error'</span>, <span class="ruby-value str">&quot;No tasks defined&quot;</span>)
1443
+ 491: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1444
+ 492: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1445
+ 493: <span class="ruby-keyword kw">end</span>
1446
+ 494:
1447
+ 495: <span class="ruby-keyword kw">begin</span>
1448
+ 496: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sc</span><span class="ruby-operator">|</span>
1449
+ 497: <span class="ruby-comment cmt"># Skip disabled scenarios</span>
1450
+ 498: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">sc</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'enabled'</span>)
1451
+ 499:
1452
+ 500: <span class="ruby-identifier">scIdx</span> = <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
1453
+ 501:
1454
+ 502: <span class="ruby-comment cmt"># All user provided values are set now. The next step is to</span>
1455
+ 503: <span class="ruby-comment cmt"># propagate inherited values. These values must be marked as</span>
1456
+ 504: <span class="ruby-comment cmt"># inherited by setting the mode to 1. As we always call</span>
1457
+ 505: <span class="ruby-comment cmt"># PropertyTreeNode#inherit this is just a safeguard.</span>
1458
+ 506: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">1</span>)
1459
+ 507: <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
1460
+ 508:
1461
+ 509: <span class="ruby-comment cmt"># Now change to mode 2 so all values that are modified are marked</span>
1462
+ 510: <span class="ruby-comment cmt"># as computed.</span>
1463
+ 511: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">2</span>)
1464
+ 512: <span class="ruby-comment cmt"># Schedule the scenario.</span>
1465
+ 513: <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
1466
+ 514:
1467
+ 515: <span class="ruby-comment cmt"># Complete the data sets, and check the result.</span>
1468
+ 516: <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
1469
+ 517: <span class="ruby-keyword kw">end</span>
1470
+ 518: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">TjException</span>
1471
+ 519: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1472
+ 520: <span class="ruby-keyword kw">end</span>
1473
+ 521:
1474
+ 522: <span class="ruby-keyword kw">true</span>
1475
+ 523: <span class="ruby-keyword kw">end</span>
1089
1476
  </pre>
1090
1477
  </div>
1091
1478
 
@@ -1093,12 +1480,12 @@ stores the result in the data structures again.
1093
1480
  </div>
1094
1481
 
1095
1482
 
1096
- <div id="method-M000650" class="method-detail">
1097
- <a name="M000650"></a>
1483
+ <div id="method-M000813" class="method-detail">
1484
+ <a name="M000813"></a>
1098
1485
 
1099
1486
  <div class="method-heading">
1100
1487
 
1101
- <a href="#M000650" class="method-signature">
1488
+ <a href="#M000813" class="method-signature">
1102
1489
 
1103
1490
  <span class="method-name">scoreboardSize</span><span class="method-args">()</span>
1104
1491
 
@@ -1116,14 +1503,14 @@ number of entries in the scoreboards.
1116
1503
  </p>
1117
1504
 
1118
1505
  <p><a class="source-toggle" href="#"
1119
- onclick="toggleCode('M000650-source');return false;">[Source]</a></p>
1120
- <div class="method-source-code" id="M000650-source">
1506
+ onclick="toggleCode('M000813-source');return false;">[Source]</a></p>
1507
+ <div class="method-source-code" id="M000813-source">
1121
1508
  <pre>
1122
- <span class="ruby-comment cmt"># File lib/Project.rb, line 452</span>
1123
- 452: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scoreboardSize</span>
1124
- 453: ((<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>] <span class="ruby-operator">-</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]) <span class="ruby-operator">/</span>
1125
- 454: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
1126
- 455: <span class="ruby-keyword kw">end</span>
1509
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 632</span>
1510
+ 632: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scoreboardSize</span>
1511
+ 633: ((<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>] <span class="ruby-operator">-</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>]) <span class="ruby-operator">/</span>
1512
+ 634: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
1513
+ 635: <span class="ruby-keyword kw">end</span>
1127
1514
  </pre>
1128
1515
  </div>
1129
1516
 
@@ -1131,12 +1518,12 @@ number of entries in the scoreboards.
1131
1518
  </div>
1132
1519
 
1133
1520
 
1134
- <div id="method-M000632" class="method-detail">
1135
- <a name="M000632"></a>
1521
+ <div id="method-M000793" class="method-detail">
1522
+ <a name="M000793"></a>
1136
1523
 
1137
1524
  <div class="method-heading">
1138
1525
 
1139
- <a href="#M000632" class="method-signature">
1526
+ <a href="#M000793" class="method-signature">
1140
1527
 
1141
1528
  <span class="method-name">sendMessage</span><span class="method-args">(message)</span>
1142
1529
 
@@ -1152,13 +1539,13 @@ is a <a href="../String.html">String</a> that contains the message.
1152
1539
  </p>
1153
1540
 
1154
1541
  <p><a class="source-toggle" href="#"
1155
- onclick="toggleCode('M000632-source');return false;">[Source]</a></p>
1156
- <div class="method-source-code" id="M000632-source">
1542
+ onclick="toggleCode('M000793-source');return false;">[Source]</a></p>
1543
+ <div class="method-source-code" id="M000793-source">
1157
1544
  <pre>
1158
- <span class="ruby-comment cmt"># File lib/Project.rb, line 202</span>
1159
- 202: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1160
- 203: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1161
- 204: <span class="ruby-keyword kw">end</span>
1545
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 368</span>
1546
+ 368: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1547
+ 369: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">message</span>)
1548
+ 370: <span class="ruby-keyword kw">end</span>
1162
1549
  </pre>
1163
1550
  </div>
1164
1551
 
@@ -1166,12 +1553,12 @@ is a <a href="../String.html">String</a> that contains the message.
1166
1553
  </div>
1167
1554
 
1168
1555
 
1169
- <div id="method-M000642" class="method-detail">
1170
- <a name="M000642"></a>
1556
+ <div id="method-M000803" class="method-detail">
1557
+ <a name="M000803"></a>
1171
1558
 
1172
1559
  <div class="method-heading">
1173
1560
 
1174
- <a href="#M000642" class="method-signature">
1561
+ <a href="#M000803" class="method-signature">
1175
1562
 
1176
1563
  <span class="method-name">shift</span><span class="method-args">(id)</span>
1177
1564
 
@@ -1187,13 +1574,13 @@ nil if it does not exist.
1187
1574
  </p>
1188
1575
 
1189
1576
  <p><a class="source-toggle" href="#"
1190
- onclick="toggleCode('M000642-source');return false;">[Source]</a></p>
1191
- <div class="method-source-code" id="M000642-source">
1577
+ onclick="toggleCode('M000803-source');return false;">[Source]</a></p>
1578
+ <div class="method-source-code" id="M000803-source">
1192
1579
  <pre>
1193
- <span class="ruby-comment cmt"># File lib/Project.rb, line 286</span>
1194
- 286: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">shift</span>(<span class="ruby-identifier">id</span>)
1195
- 287: <span class="ruby-ivar">@shifts</span>[<span class="ruby-identifier">id</span>]
1196
- 288: <span class="ruby-keyword kw">end</span>
1580
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 446</span>
1581
+ 446: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">shift</span>(<span class="ruby-identifier">id</span>)
1582
+ 447: <span class="ruby-ivar">@shifts</span>[<span class="ruby-identifier">id</span>]
1583
+ 448: <span class="ruby-keyword kw">end</span>
1197
1584
  </pre>
1198
1585
  </div>
1199
1586
 
@@ -1201,12 +1588,12 @@ nil if it does not exist.
1201
1588
  </div>
1202
1589
 
1203
1590
 
1204
- <div id="method-M000644" class="method-detail">
1205
- <a name="M000644"></a>
1591
+ <div id="method-M000805" class="method-detail">
1592
+ <a name="M000805"></a>
1206
1593
 
1207
1594
  <div class="method-heading">
1208
1595
 
1209
- <a href="#M000644" class="method-signature">
1596
+ <a href="#M000805" class="method-signature">
1210
1597
 
1211
1598
  <span class="method-name">task</span><span class="method-args">(id)</span>
1212
1599
 
@@ -1222,13 +1609,13 @@ nil if it does not exist.
1222
1609
  </p>
1223
1610
 
1224
1611
  <p><a class="source-toggle" href="#"
1225
- onclick="toggleCode('M000644-source');return false;">[Source]</a></p>
1226
- <div class="method-source-code" id="M000644-source">
1612
+ onclick="toggleCode('M000805-source');return false;">[Source]</a></p>
1613
+ <div class="method-source-code" id="M000805-source">
1227
1614
  <pre>
1228
- <span class="ruby-comment cmt"># File lib/Project.rb, line 296</span>
1229
- 296: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">task</span>(<span class="ruby-identifier">id</span>)
1230
- 297: <span class="ruby-ivar">@tasks</span>[<span class="ruby-identifier">id</span>]
1231
- 298: <span class="ruby-keyword kw">end</span>
1615
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 456</span>
1616
+ 456: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">task</span>(<span class="ruby-identifier">id</span>)
1617
+ 457: <span class="ruby-ivar">@tasks</span>[<span class="ruby-identifier">id</span>]
1618
+ 458: <span class="ruby-keyword kw">end</span>
1232
1619
  </pre>
1233
1620
  </div>
1234
1621
 
@@ -1236,12 +1623,12 @@ nil if it does not exist.
1236
1623
  </div>
1237
1624
 
1238
1625
 
1239
- <div id="method-M000653" class="method-detail">
1240
- <a name="M000653"></a>
1626
+ <div id="method-M000818" class="method-detail">
1627
+ <a name="M000818"></a>
1241
1628
 
1242
1629
  <div class="method-heading">
1243
1630
 
1244
- <a href="#M000653" class="method-signature">
1631
+ <a href="#M000818" class="method-signature">
1245
1632
 
1246
1633
  <span class="method-name">to_s</span><span class="method-args">()</span>
1247
1634
 
@@ -1256,18 +1643,18 @@ Print the attribute values. It&#8217;s used for debugging only.
1256
1643
  </p>
1257
1644
 
1258
1645
  <p><a class="source-toggle" href="#"
1259
- onclick="toggleCode('M000653-source');return false;">[Source]</a></p>
1260
- <div class="method-source-code" id="M000653-source">
1646
+ onclick="toggleCode('M000818-source');return false;">[Source]</a></p>
1647
+ <div class="method-source-code" id="M000818-source">
1261
1648
  <pre>
1262
- <span class="ruby-comment cmt"># File lib/Project.rb, line 486</span>
1263
- 486: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1264
- 487: <span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attribute</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
1265
- 488: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span>
1266
- 489: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{attribute}: &quot;</span> <span class="ruby-operator">+</span>
1267
- 490: <span class="ruby-node">&quot;#{value.is_a?(PropertyTreeNode) ? value.fullId : value}&quot;</span>
1268
- 491: <span class="ruby-keyword kw">end</span>
1269
- 492: <span class="ruby-keyword kw">end</span>
1270
- 493: <span class="ruby-keyword kw">end</span>
1649
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 701</span>
1650
+ 701: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
1651
+ 702: <span class="ruby-ivar">@attributes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attribute</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
1652
+ 703: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span>
1653
+ 704: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{attribute}: &quot;</span> <span class="ruby-operator">+</span>
1654
+ 705: <span class="ruby-node">&quot;#{value.is_a?(PropertyTreeNode) ? value.fullId : value}&quot;</span>
1655
+ 706: <span class="ruby-keyword kw">end</span>
1656
+ 707: <span class="ruby-keyword kw">end</span>
1657
+ 708: <span class="ruby-keyword kw">end</span>
1271
1658
  </pre>
1272
1659
  </div>
1273
1660
 
@@ -1275,12 +1662,12 @@ Print the attribute values. It&#8217;s used for debugging only.
1275
1662
  </div>
1276
1663
 
1277
1664
 
1278
- <div id="method-M000637" class="method-detail">
1279
- <a name="M000637"></a>
1665
+ <div id="method-M000798" class="method-detail">
1666
+ <a name="M000798"></a>
1280
1667
 
1281
1668
  <div class="method-heading">
1282
1669
 
1283
- <a href="#M000637" class="method-signature">
1670
+ <a href="#M000798" class="method-signature">
1284
1671
 
1285
1672
  <span class="method-name">weeklyWorkingDays</span><span class="method-args">()</span>
1286
1673
 
@@ -1295,13 +1682,13 @@ Return the average number of working days per week.
1295
1682
  </p>
1296
1683
 
1297
1684
  <p><a class="source-toggle" href="#"
1298
- onclick="toggleCode('M000637-source');return false;">[Source]</a></p>
1299
- <div class="method-source-code" id="M000637-source">
1685
+ onclick="toggleCode('M000798-source');return false;">[Source]</a></p>
1686
+ <div class="method-source-code" id="M000798-source">
1300
1687
  <pre>
1301
- <span class="ruby-comment cmt"># File lib/Project.rb, line 234</span>
1302
- 234: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">weeklyWorkingDays</span>
1303
- 235: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>] <span class="ruby-operator">/</span> <span class="ruby-value">52.1429</span>
1304
- 236: <span class="ruby-keyword kw">end</span>
1688
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 400</span>
1689
+ 400: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">weeklyWorkingDays</span>
1690
+ 401: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>] <span class="ruby-operator">/</span> <span class="ruby-value">52.1429</span>
1691
+ 402: <span class="ruby-keyword kw">end</span>
1305
1692
  </pre>
1306
1693
  </div>
1307
1694
 
@@ -1309,12 +1696,12 @@ Return the average number of working days per week.
1309
1696
  </div>
1310
1697
 
1311
1698
 
1312
- <div id="method-M000639" class="method-detail">
1313
- <a name="M000639"></a>
1699
+ <div id="method-M000800" class="method-detail">
1700
+ <a name="M000800"></a>
1314
1701
 
1315
1702
  <div class="method-heading">
1316
1703
 
1317
- <a href="#M000639" class="method-signature">
1704
+ <a href="#M000800" class="method-signature">
1318
1705
 
1319
1706
  <span class="method-name">yearlyWorkingDays</span><span class="method-args">()</span>
1320
1707
 
@@ -1329,13 +1716,13 @@ Return the average number of working days per year.
1329
1716
  </p>
1330
1717
 
1331
1718
  <p><a class="source-toggle" href="#"
1332
- onclick="toggleCode('M000639-source');return false;">[Source]</a></p>
1333
- <div class="method-source-code" id="M000639-source">
1719
+ onclick="toggleCode('M000800-source');return false;">[Source]</a></p>
1720
+ <div class="method-source-code" id="M000800-source">
1334
1721
  <pre>
1335
- <span class="ruby-comment cmt"># File lib/Project.rb, line 244</span>
1336
- 244: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">yearlyWorkingDays</span>
1337
- 245: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>].<span class="ruby-identifier">to_f</span>
1338
- 246: <span class="ruby-keyword kw">end</span>
1722
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 410</span>
1723
+ 410: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">yearlyWorkingDays</span>
1724
+ 411: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>].<span class="ruby-identifier">to_f</span>
1725
+ 412: <span class="ruby-keyword kw">end</span>
1339
1726
  </pre>
1340
1727
  </div>
1341
1728
 
@@ -1346,12 +1733,12 @@ Return the average number of working days per year.
1346
1733
  <h3 class="section-bar">Protected Instance methods</h3>
1347
1734
 
1348
1735
 
1349
- <div id="method-M000655" class="method-detail">
1350
- <a name="M000655"></a>
1736
+ <div id="method-M000820" class="method-detail">
1737
+ <a name="M000820"></a>
1351
1738
 
1352
1739
  <div class="method-heading">
1353
1740
 
1354
- <a href="#M000655" class="method-signature">
1741
+ <a href="#M000820" class="method-signature">
1355
1742
 
1356
1743
  <span class="method-name">finishScenario</span><span class="method-args">(scIdx)</span>
1357
1744
 
@@ -1362,28 +1749,28 @@ Return the average number of working days per year.
1362
1749
  <div class="method-description">
1363
1750
 
1364
1751
  <p><a class="source-toggle" href="#"
1365
- onclick="toggleCode('M000655-source');return false;">[Source]</a></p>
1366
- <div class="method-source-code" id="M000655-source">
1752
+ onclick="toggleCode('M000820-source');return false;">[Source]</a></p>
1753
+ <div class="method-source-code" id="M000820-source">
1367
1754
  <pre>
1368
- <span class="ruby-comment cmt"># File lib/Project.rb, line 558</span>
1369
- 558: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
1370
- 559: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Checking scenario #{scenario(scIdx).get('name')}&quot;</span>)
1371
- 560: <span class="ruby-identifier">total</span> = <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">items</span>
1372
- 561: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1373
- 562: <span class="ruby-ivar">@tasks</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>
1374
- 563: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-identifier">scIdx</span>)
1375
- 564: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1376
- 565: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>((<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.5</span>)
1377
- 566: <span class="ruby-keyword kw">end</span>
1378
- 567:
1379
- 568: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1380
- 569: <span class="ruby-ivar">@tasks</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>
1381
- 570: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">postScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1382
- 571: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1383
- 572: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.5</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.5</span>)
1384
- 573: <span class="ruby-keyword kw">end</span>
1385
- 574: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1386
- 575: <span class="ruby-keyword kw">end</span>
1755
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 772</span>
1756
+ 772: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
1757
+ 773: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Checking scenario #{scenario(scIdx).get('name')}&quot;</span>)
1758
+ 774: <span class="ruby-identifier">total</span> = <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">items</span>
1759
+ 775: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1760
+ 776: <span class="ruby-ivar">@tasks</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>
1761
+ 777: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-identifier">scIdx</span>)
1762
+ 778: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1763
+ 779: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>((<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.5</span>)
1764
+ 780: <span class="ruby-keyword kw">end</span>
1765
+ 781:
1766
+ 782: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1767
+ 783: <span class="ruby-ivar">@tasks</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>
1768
+ 784: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">postScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1769
+ 785: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1770
+ 786: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.5</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.5</span>)
1771
+ 787: <span class="ruby-keyword kw">end</span>
1772
+ 788: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1773
+ 789: <span class="ruby-keyword kw">end</span>
1387
1774
  </pre>
1388
1775
  </div>
1389
1776
 
@@ -1391,12 +1778,12 @@ Return the average number of working days per year.
1391
1778
  </div>
1392
1779
 
1393
1780
 
1394
- <div id="method-M000654" class="method-detail">
1395
- <a name="M000654"></a>
1781
+ <div id="method-M000819" class="method-detail">
1782
+ <a name="M000819"></a>
1396
1783
 
1397
1784
  <div class="method-heading">
1398
1785
 
1399
- <a href="#M000654" class="method-signature">
1786
+ <a href="#M000819" class="method-signature">
1400
1787
 
1401
1788
  <span class="method-name">prepareScenario</span><span class="method-args">(scIdx)</span>
1402
1789
 
@@ -1407,70 +1794,69 @@ Return the average number of working days per year.
1407
1794
  <div class="method-description">
1408
1795
 
1409
1796
  <p><a class="source-toggle" href="#"
1410
- onclick="toggleCode('M000654-source');return false;">[Source]</a></p>
1411
- <div class="method-source-code" id="M000654-source">
1797
+ onclick="toggleCode('M000819-source');return false;">[Source]</a></p>
1798
+ <div class="method-source-code" id="M000819-source">
1412
1799
  <pre>
1413
- <span class="ruby-comment cmt"># File lib/Project.rb, line 497</span>
1414
- 497: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
1415
- 498: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Preparing scenario #{scenario(scIdx).get('name')}&quot;</span>)
1416
- 499: <span class="ruby-identifier">resources</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@resources</span>)
1417
- 500: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
1418
- 501:
1419
- 502: <span class="ruby-comment cmt"># Compile a list of leaf resources that are actually used in this</span>
1420
- 503: <span class="ruby-comment cmt"># project.</span>
1421
- 504: <span class="ruby-identifier">usedResources</span> = []
1422
- 505: <span class="ruby-identifier">tasks</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>
1423
- 506: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">candidates</span>(<span class="ruby-identifier">scIdx</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>
1424
- 507: <span class="ruby-identifier">usedResources</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">resource</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">resource</span>)
1425
- 508: <span class="ruby-keyword kw">end</span>
1426
- 509: <span class="ruby-keyword kw">end</span>
1427
- 510: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">length</span>
1428
- 511: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1429
- 512: <span class="ruby-identifier">usedResources</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>
1430
- 513: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>)
1431
- 514: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1432
- 515: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>((<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.8</span>)
1433
- 516: <span class="ruby-keyword kw">end</span>
1434
- 517:
1435
- 518: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>) }
1436
- 519:
1437
- 520: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-constant">Xref</span>(<span class="ruby-identifier">scIdx</span>) }
1438
- 521: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">propagateInitialValues</span>(<span class="ruby-identifier">scIdx</span>) }
1439
- 522: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">preScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>) }
1440
- 523:
1441
- 524: <span class="ruby-comment cmt"># Check for dependency loops in the task graph.</span>
1442
- 525: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">resetLoopFlags</span>(<span class="ruby-identifier">scIdx</span>) }
1443
- 526: <span class="ruby-identifier">tasks</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>
1444
- 527: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">checkForLoops</span>(<span class="ruby-identifier">scIdx</span>, [], <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1445
- 528: <span class="ruby-keyword kw">end</span>
1446
- 529: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.85</span>)
1447
- 530: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">resetLoopFlags</span>(<span class="ruby-identifier">scIdx</span>) }
1448
- 531: <span class="ruby-identifier">tasks</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>
1449
- 532: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">checkForLoops</span>(<span class="ruby-identifier">scIdx</span>, [], <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1450
- 533: <span class="ruby-keyword kw">end</span>
1451
- 534: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.87</span>)
1452
- 535:
1453
- 536: <span class="ruby-comment cmt"># Compute the criticalness of the tasks and their pathes.</span>
1454
- 537: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">countResourceAllocations</span>(<span class="ruby-identifier">scIdx</span>) }
1455
- 538: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.88</span>)
1456
- 539: <span class="ruby-identifier">resources</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">calcCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1457
- 540: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.9</span>)
1458
- 541: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1459
- 542: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.95</span>)
1460
- 543: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcPathCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1461
- 544: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">1.0</span>)
1462
- 545:
1463
- 546: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1464
- 547: <span class="ruby-comment cmt"># This is used for debugging only</span>
1465
- 548: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">false</span>
1466
- 549: <span class="ruby-identifier">resources</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
1467
- 550: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">resource</span>
1468
- 551: <span class="ruby-keyword kw">end</span>
1469
- 552: <span class="ruby-identifier">tasks</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>
1470
- 553: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">task</span>
1471
- 554: <span class="ruby-keyword kw">end</span>
1472
- 555: <span class="ruby-keyword kw">end</span>
1473
- 556: <span class="ruby-keyword kw">end</span>
1800
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 712</span>
1801
+ 712: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
1802
+ 713: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Preparing scenario #{scenario(scIdx).get('name')}&quot;</span>)
1803
+ 714: <span class="ruby-identifier">resources</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@resources</span>)
1804
+ 715: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
1805
+ 716:
1806
+ 717: <span class="ruby-comment cmt"># Compile a list of leaf resources that are actually used in this</span>
1807
+ 718: <span class="ruby-comment cmt"># project.</span>
1808
+ 719: <span class="ruby-identifier">usedResources</span> = []
1809
+ 720: <span class="ruby-identifier">tasks</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>
1810
+ 721: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">candidates</span>(<span class="ruby-identifier">scIdx</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>
1811
+ 722: <span class="ruby-identifier">usedResources</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">resource</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">resource</span>)
1812
+ 723: <span class="ruby-keyword kw">end</span>
1813
+ 724: <span class="ruby-keyword kw">end</span>
1814
+ 725: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">length</span>
1815
+ 726: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1816
+ 727: <span class="ruby-identifier">usedResources</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>
1817
+ 728: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>)
1818
+ 729: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1819
+ 730: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>((<span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">total</span>) <span class="ruby-operator">*</span> <span class="ruby-value">0</span><span class="ruby-value">.8</span>)
1820
+ 731: <span class="ruby-keyword kw">end</span>
1821
+ 732:
1822
+ 733: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>) }
1823
+ 734: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-constant">Xref</span>(<span class="ruby-identifier">scIdx</span>) }
1824
+ 735: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">propagateInitialValues</span>(<span class="ruby-identifier">scIdx</span>) }
1825
+ 736: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">preScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>) }
1826
+ 737:
1827
+ 738: <span class="ruby-comment cmt"># Check for dependency loops in the task graph.</span>
1828
+ 739: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">resetLoopFlags</span>(<span class="ruby-identifier">scIdx</span>) }
1829
+ 740: <span class="ruby-identifier">tasks</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>
1830
+ 741: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">checkForLoops</span>(<span class="ruby-identifier">scIdx</span>, [], <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1831
+ 742: <span class="ruby-keyword kw">end</span>
1832
+ 743: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.85</span>)
1833
+ 744: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">resetLoopFlags</span>(<span class="ruby-identifier">scIdx</span>) }
1834
+ 745: <span class="ruby-identifier">tasks</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>
1835
+ 746: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">checkForLoops</span>(<span class="ruby-identifier">scIdx</span>, [], <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">nil?</span>
1836
+ 747: <span class="ruby-keyword kw">end</span>
1837
+ 748: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.87</span>)
1838
+ 749:
1839
+ 750: <span class="ruby-comment cmt"># Compute the criticalness of the tasks and their pathes.</span>
1840
+ 751: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">countResourceAllocations</span>(<span class="ruby-identifier">scIdx</span>) }
1841
+ 752: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.88</span>)
1842
+ 753: <span class="ruby-identifier">resources</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">calcCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1843
+ 754: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.9</span>)
1844
+ 755: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1845
+ 756: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0</span><span class="ruby-value">.95</span>)
1846
+ 757: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">calcPathCriticalness</span>(<span class="ruby-identifier">scIdx</span>) }
1847
+ 758: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">1.0</span>)
1848
+ 759:
1849
+ 760: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1850
+ 761: <span class="ruby-comment cmt"># This is used for debugging only</span>
1851
+ 762: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">false</span>
1852
+ 763: <span class="ruby-identifier">resources</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>
1853
+ 764: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">resource</span>
1854
+ 765: <span class="ruby-keyword kw">end</span>
1855
+ 766: <span class="ruby-identifier">tasks</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>
1856
+ 767: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">task</span>
1857
+ 768: <span class="ruby-keyword kw">end</span>
1858
+ 769: <span class="ruby-keyword kw">end</span>
1859
+ 770: <span class="ruby-keyword kw">end</span>
1474
1860
  </pre>
1475
1861
  </div>
1476
1862
 
@@ -1478,12 +1864,12 @@ Return the average number of working days per year.
1478
1864
  </div>
1479
1865
 
1480
1866
 
1481
- <div id="method-M000656" class="method-detail">
1482
- <a name="M000656"></a>
1867
+ <div id="method-M000821" class="method-detail">
1868
+ <a name="M000821"></a>
1483
1869
 
1484
1870
  <div class="method-heading">
1485
1871
 
1486
- <a href="#M000656" class="method-signature">
1872
+ <a href="#M000821" class="method-signature">
1487
1873
 
1488
1874
  <span class="method-name">scheduleScenario</span><span class="method-args">(scIdx)</span>
1489
1875
 
@@ -1499,90 +1885,90 @@ index <tt>scIdx</tt>.
1499
1885
  </p>
1500
1886
 
1501
1887
  <p><a class="source-toggle" href="#"
1502
- onclick="toggleCode('M000656-source');return false;">[Source]</a></p>
1503
- <div class="method-source-code" id="M000656-source">
1888
+ onclick="toggleCode('M000821-source');return false;">[Source]</a></p>
1889
+ <div class="method-source-code" id="M000821-source">
1504
1890
  <pre>
1505
- <span class="ruby-comment cmt"># File lib/Project.rb, line 578</span>
1506
- 578: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
1507
- 579: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
1508
- 580: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">task</span>.<span class="ruby-identifier">leaf?</span> }
1509
- 581:
1510
- 582: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">enter</span>(<span class="ruby-value str">'scheduleScenario'</span>, <span class="ruby-node">&quot;#{tasks.length} leaf tasks&quot;</span>)
1511
- 583: <span class="ruby-comment cmt"># The sorting of the work item list determines which tasks will get their</span>
1512
- 584: <span class="ruby-comment cmt"># resources first. The first sorting criterium is the user specified task</span>
1513
- 585: <span class="ruby-comment cmt"># priority. The second criterium is the scheduler determined priority</span>
1514
- 586: <span class="ruby-comment cmt"># stored in the pathcriticalness attribute. That way, the user can always</span>
1515
- 587: <span class="ruby-comment cmt"># override the scheduler determined priority. To always have a defined</span>
1516
- 588: <span class="ruby-comment cmt"># order, the third criterium is the sequence number.</span>
1517
- 589: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">setSorting</span>([ [ <span class="ruby-value str">'priority'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
1518
- 590: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
1519
- 591: [ <span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">-1</span> ] ])
1520
- 592: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">sort!</span>
1521
- 593: <span class="ruby-identifier">totalTasks</span> = <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">length</span>
1522
- 594:
1523
- 595: <span class="ruby-comment cmt"># Enter the main scheduling loop. This loop is only terminated when all</span>
1524
- 596: <span class="ruby-comment cmt"># tasks have been scheduled or another thread has set the breakFlag to</span>
1525
- 597: <span class="ruby-comment cmt"># true.</span>
1526
- 598: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-value str">&quot;Scheduling scenario &quot;</span> <span class="ruby-operator">+</span>
1527
- 599: <span class="ruby-node">&quot;#{scenario(scIdx).get('name')}&quot;</span>)
1528
- 600: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1529
- 601: <span class="ruby-comment cmt"># The main scheduler loop only needs to look at the first task that is</span>
1530
- 602: <span class="ruby-comment cmt"># ready to be scheduled.</span>
1531
- 603: <span class="ruby-identifier">workItems</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tasks</span>)
1532
- 604:
1533
- 605: <span class="ruby-comment cmt"># Count the already completed tasks.</span>
1534
- 606: <span class="ruby-identifier">completedTasks</span> = <span class="ruby-value">0</span>
1535
- 607: <span class="ruby-identifier">workItems</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>
1536
- 608: <span class="ruby-identifier">completedTasks</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-identifier">scIdx</span>]
1537
- 609: <span class="ruby-keyword kw">end</span>
1538
- 610:
1539
- 611: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-identifier">completedTasks</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">totalTasks</span>)
1540
- 612: <span class="ruby-comment cmt"># Remove all tasks that are not ready for scheduling yet.</span>
1541
- 613: <span class="ruby-identifier">workItems</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">task</span>.<span class="ruby-identifier">readyForScheduling?</span>(<span class="ruby-identifier">scIdx</span>) }
1542
- 614:
1543
- 615: <span class="ruby-comment cmt"># Check if we are done.</span>
1544
- 616: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">workItems</span>.<span class="ruby-identifier">empty?</span>
1545
- 617:
1546
- 618: <span class="ruby-comment cmt"># The first task in the list is the one with the highes priority and</span>
1547
- 619: <span class="ruby-comment cmt"># the largest path criticalness that is ready to be scheduled.</span>
1548
- 620: <span class="ruby-identifier">task</span> = <span class="ruby-identifier">workItems</span>[<span class="ruby-value">0</span>]
1549
- 621: <span class="ruby-comment cmt"># Schedule it.</span>
1550
- 622: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">schedule</span>(<span class="ruby-identifier">scIdx</span>)
1551
- 623: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Task #{task.fullId}: #{task['start', scIdx]} -&gt; &quot;</span> <span class="ruby-operator">+</span>
1552
- 624: <span class="ruby-node">&quot;#{task['end', scIdx]}&quot;</span>
1553
- 625: <span class="ruby-keyword kw">end</span>
1554
- 626: <span class="ruby-keyword kw">end</span>
1555
- 627: <span class="ruby-identifier">unscheduledTasks</span> = []
1556
- 628: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span> <span class="ruby-identifier">unscheduledTasks</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">t</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">t</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-identifier">scIdx</span>] }
1557
- 629:
1558
- 630: <span class="ruby-comment cmt"># Check for unscheduled tasks and report the first 10 of them as</span>
1559
- 631: <span class="ruby-comment cmt"># warnings.</span>
1560
- 632: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">unscheduledTasks</span>.<span class="ruby-identifier">empty?</span>
1561
- 633: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'unscheduled_tasks'</span>, <span class="ruby-value str">'warning'</span>,
1562
- 634: <span class="ruby-node">&quot;#{unscheduledTasks.length} tasks could not be &quot;</span> <span class="ruby-operator">+</span>
1563
- 635: <span class="ruby-value str">&quot;scheduled&quot;</span>)
1564
- 636: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1565
- 637: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1566
- 638: <span class="ruby-identifier">unscheduledTasks</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>
1567
- 639: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(
1568
- 640: <span class="ruby-value str">'unscheduled_task'</span>, <span class="ruby-value str">'warning'</span>,
1569
- 641: <span class="ruby-node">&quot;Task #{t.fullId}: &quot;</span> <span class="ruby-operator">+</span>
1570
- 642: <span class="ruby-node">&quot;#{t['start', scIdx] ? t['start', scIdx] : '&lt;?&gt;'} -&gt; &quot;</span> <span class="ruby-operator">+</span>
1571
- 643: <span class="ruby-node">&quot;#{t['end', scIdx] ? t['end', scIdx] : '&lt;?&gt;'}&quot;</span>, <span class="ruby-identifier">t</span>,
1572
- 644: <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">scIdx</span>))
1573
- 645: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1574
- 646:
1575
- 647: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1576
- 648: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">10</span>
1577
- 649: <span class="ruby-keyword kw">end</span>
1578
- 650: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1579
- 651: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1580
- 652: <span class="ruby-keyword kw">end</span>
1581
- 653:
1582
- 654: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1583
- 655: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'scheduleScenario'</span>, <span class="ruby-node">&quot;Scheduling of scenario #{scIdx} finished&quot;</span>)
1584
- 656: <span class="ruby-keyword kw">true</span>
1585
- 657: <span class="ruby-keyword kw">end</span>
1891
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 792</span>
1892
+ 792: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
1893
+ 793: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
1894
+ 794: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">task</span>.<span class="ruby-identifier">leaf?</span> }
1895
+ 795:
1896
+ 796: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">enter</span>(<span class="ruby-value str">'scheduleScenario'</span>, <span class="ruby-node">&quot;#{tasks.length} leaf tasks&quot;</span>)
1897
+ 797: <span class="ruby-comment cmt"># The sorting of the work item list determines which tasks will get their</span>
1898
+ 798: <span class="ruby-comment cmt"># resources first. The first sorting criterium is the user specified task</span>
1899
+ 799: <span class="ruby-comment cmt"># priority. The second criterium is the scheduler determined priority</span>
1900
+ 800: <span class="ruby-comment cmt"># stored in the pathcriticalness attribute. That way, the user can always</span>
1901
+ 801: <span class="ruby-comment cmt"># override the scheduler determined priority. To always have a defined</span>
1902
+ 802: <span class="ruby-comment cmt"># order, the third criterium is the sequence number.</span>
1903
+ 803: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">setSorting</span>([ [ <span class="ruby-value str">'priority'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
1904
+ 804: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
1905
+ 805: [ <span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">-1</span> ] ])
1906
+ 806: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">sort!</span>
1907
+ 807: <span class="ruby-identifier">totalTasks</span> = <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">length</span>
1908
+ 808:
1909
+ 809: <span class="ruby-comment cmt"># Enter the main scheduling loop. This loop is only terminated when all</span>
1910
+ 810: <span class="ruby-comment cmt"># tasks have been scheduled or another thread has set the breakFlag to</span>
1911
+ 811: <span class="ruby-comment cmt"># true.</span>
1912
+ 812: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-value str">&quot;Scheduling scenario &quot;</span> <span class="ruby-operator">+</span>
1913
+ 813: <span class="ruby-node">&quot;#{scenario(scIdx).get('name')}&quot;</span>)
1914
+ 814: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
1915
+ 815: <span class="ruby-comment cmt"># The main scheduler loop only needs to look at the first task that is</span>
1916
+ 816: <span class="ruby-comment cmt"># ready to be scheduled.</span>
1917
+ 817: <span class="ruby-identifier">workItems</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tasks</span>)
1918
+ 818:
1919
+ 819: <span class="ruby-comment cmt"># Count the already completed tasks.</span>
1920
+ 820: <span class="ruby-identifier">completedTasks</span> = <span class="ruby-value">0</span>
1921
+ 821: <span class="ruby-identifier">workItems</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>
1922
+ 822: <span class="ruby-identifier">completedTasks</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-identifier">scIdx</span>]
1923
+ 823: <span class="ruby-keyword kw">end</span>
1924
+ 824:
1925
+ 825: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-identifier">completedTasks</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">totalTasks</span>)
1926
+ 826: <span class="ruby-comment cmt"># Remove all tasks that are not ready for scheduling yet.</span>
1927
+ 827: <span class="ruby-identifier">workItems</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">task</span>.<span class="ruby-identifier">readyForScheduling?</span>(<span class="ruby-identifier">scIdx</span>) }
1928
+ 828:
1929
+ 829: <span class="ruby-comment cmt"># Check if we are done.</span>
1930
+ 830: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">workItems</span>.<span class="ruby-identifier">empty?</span>
1931
+ 831:
1932
+ 832: <span class="ruby-comment cmt"># The first task in the list is the one with the highes priority and</span>
1933
+ 833: <span class="ruby-comment cmt"># the largest path criticalness that is ready to be scheduled.</span>
1934
+ 834: <span class="ruby-identifier">task</span> = <span class="ruby-identifier">workItems</span>[<span class="ruby-value">0</span>]
1935
+ 835: <span class="ruby-comment cmt"># Schedule it.</span>
1936
+ 836: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">schedule</span>(<span class="ruby-identifier">scIdx</span>)
1937
+ 837: <span class="ruby-constant">Log</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Task #{task.fullId}: #{task['start', scIdx]} -&gt; &quot;</span> <span class="ruby-operator">+</span>
1938
+ 838: <span class="ruby-node">&quot;#{task['end', scIdx]}&quot;</span>
1939
+ 839: <span class="ruby-keyword kw">end</span>
1940
+ 840: <span class="ruby-keyword kw">end</span>
1941
+ 841: <span class="ruby-identifier">unscheduledTasks</span> = []
1942
+ 842: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span> <span class="ruby-identifier">unscheduledTasks</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">t</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">t</span>[<span class="ruby-value str">'scheduled'</span>, <span class="ruby-identifier">scIdx</span>] }
1943
+ 843:
1944
+ 844: <span class="ruby-comment cmt"># Check for unscheduled tasks and report the first 10 of them as</span>
1945
+ 845: <span class="ruby-comment cmt"># warnings.</span>
1946
+ 846: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">unscheduledTasks</span>.<span class="ruby-identifier">empty?</span>
1947
+ 847: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'unscheduled_tasks'</span>, <span class="ruby-value str">'warning'</span>,
1948
+ 848: <span class="ruby-node">&quot;#{unscheduledTasks.length} tasks could not be &quot;</span> <span class="ruby-operator">+</span>
1949
+ 849: <span class="ruby-value str">&quot;scheduled&quot;</span>)
1950
+ 850: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1951
+ 851: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
1952
+ 852: <span class="ruby-identifier">unscheduledTasks</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>
1953
+ 853: <span class="ruby-identifier">message</span> = <span class="ruby-constant">Message</span>.<span class="ruby-identifier">new</span>(
1954
+ 854: <span class="ruby-value str">'unscheduled_task'</span>, <span class="ruby-value str">'warning'</span>,
1955
+ 855: <span class="ruby-node">&quot;Task #{t.fullId}: &quot;</span> <span class="ruby-operator">+</span>
1956
+ 856: <span class="ruby-node">&quot;#{t['start', scIdx] ? t['start', scIdx] : '&lt;?&gt;'} -&gt; &quot;</span> <span class="ruby-operator">+</span>
1957
+ 857: <span class="ruby-node">&quot;#{t['end', scIdx] ? t['end', scIdx] : '&lt;?&gt;'}&quot;</span>, <span class="ruby-identifier">t</span>,
1958
+ 858: <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">scIdx</span>))
1959
+ 859: <span class="ruby-identifier">sendMessage</span>(<span class="ruby-identifier">message</span>)
1960
+ 860:
1961
+ 861: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
1962
+ 862: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">10</span>
1963
+ 863: <span class="ruby-keyword kw">end</span>
1964
+ 864: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1965
+ 865: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1966
+ 866: <span class="ruby-keyword kw">end</span>
1967
+ 867:
1968
+ 868: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1969
+ 869: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">exit</span>(<span class="ruby-value str">'scheduleScenario'</span>, <span class="ruby-node">&quot;Scheduling of scenario #{scIdx} finished&quot;</span>)
1970
+ 870: <span class="ruby-keyword kw">true</span>
1971
+ 871: <span class="ruby-keyword kw">end</span>
1586
1972
  </pre>
1587
1973
  </div>
1588
1974