taskjuggler 0.0.8 → 0.0.9

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 (613) hide show
  1. data/CHANGELOG +1144 -2047
  2. data/README +1 -1
  3. data/Rakefile +6 -6
  4. data/data/css/tjmanual.css +20 -0
  5. data/data/css/tjreport.css +7 -6
  6. data/doc/AppConfig.html +136 -130
  7. data/doc/Arguments.html +46 -40
  8. data/doc/CHANGELOG.html +1162 -2057
  9. data/doc/COPYING.html +8 -2
  10. data/doc/Object.html +205 -199
  11. data/doc/README.html +9 -3
  12. data/doc/RuntimeConfig.html +75 -69
  13. data/doc/String.html +69 -63
  14. data/doc/TaskJuggler.html +350 -291
  15. data/doc/TaskJuggler/Account.html +26 -20
  16. data/doc/TaskJuggler/AccountAttribute.html +24 -18
  17. data/doc/TaskJuggler/AccountScenario.html +24 -18
  18. data/doc/TaskJuggler/Allocation.html +74 -68
  19. data/doc/TaskJuggler/AllocationAttribute.html +54 -48
  20. data/doc/TaskJuggler/AttributeBase.html +172 -93
  21. data/doc/TaskJuggler/AttributeDefinition.html +22 -16
  22. data/doc/TaskJuggler/AttributeOverwrite.html +586 -0
  23. data/doc/TaskJuggler/BatchProcessor.html +263 -257
  24. data/doc/TaskJuggler/Booking.html +44 -38
  25. data/doc/TaskJuggler/BookingListAttribute.html +25 -21
  26. data/doc/TaskJuggler/BooleanAttribute.html +24 -18
  27. data/doc/TaskJuggler/CSVFile.html +193 -187
  28. data/doc/TaskJuggler/CellSettingPattern.html +13 -7
  29. data/doc/TaskJuggler/CellSettingPatternList.html +25 -19
  30. data/doc/TaskJuggler/Charge.html +49 -43
  31. data/doc/TaskJuggler/ChargeListAttribute.html +21 -15
  32. data/doc/TaskJuggler/ChargeSet.html +94 -88
  33. data/doc/TaskJuggler/ChargeSetListAttribute.html +29 -25
  34. data/doc/TaskJuggler/CollisionDetector.html +142 -136
  35. data/doc/TaskJuggler/ColumnListAttribute.html +21 -17
  36. data/doc/TaskJuggler/ColumnTable.html +50 -44
  37. data/doc/TaskJuggler/Daemon.html +71 -50
  38. data/doc/TaskJuggler/DataCache.html +110 -58
  39. data/doc/TaskJuggler/DataCacheEntry.html +22 -16
  40. data/doc/TaskJuggler/DateAttribute.html +24 -18
  41. data/doc/TaskJuggler/DefinitionListAttribute.html +12 -6
  42. data/doc/TaskJuggler/DependencyListAttribute.html +29 -25
  43. data/doc/TaskJuggler/DurationAttribute.html +25 -19
  44. data/doc/TaskJuggler/FileList.html +25 -19
  45. data/doc/TaskJuggler/FileRecord.html +17 -11
  46. data/doc/TaskJuggler/FixnumAttribute.html +16 -10
  47. data/doc/TaskJuggler/FlagListAttribute.html +25 -21
  48. data/doc/TaskJuggler/FloatAttribute.html +20 -14
  49. data/doc/TaskJuggler/FormatListAttribute.html +17 -11
  50. data/doc/TaskJuggler/GanttChart.html +242 -236
  51. data/doc/TaskJuggler/GanttContainer.html +71 -67
  52. data/doc/TaskJuggler/GanttHeader.html +113 -107
  53. data/doc/TaskJuggler/GanttHeaderScaleItem.html +26 -20
  54. data/doc/TaskJuggler/GanttLine.html +217 -210
  55. data/doc/TaskJuggler/GanttLoadStack.html +89 -83
  56. data/doc/TaskJuggler/GanttMilestone.html +11 -6
  57. data/doc/TaskJuggler/GanttRouter.html +194 -186
  58. data/doc/TaskJuggler/GanttTaskBar.html +41 -34
  59. data/doc/TaskJuggler/HTMLDocument.html +52 -46
  60. data/doc/TaskJuggler/HTMLGraphics.html +58 -52
  61. data/doc/TaskJuggler/Interval.html +90 -84
  62. data/doc/TaskJuggler/IntervalList.html +777 -0
  63. data/doc/TaskJuggler/IntervalListAttribute.html +29 -25
  64. data/doc/TaskJuggler/JobInfo.html +36 -30
  65. data/doc/TaskJuggler/Journal.html +188 -177
  66. data/doc/TaskJuggler/JournalEntry.html +36 -30
  67. data/doc/TaskJuggler/JournalEntryList.html +88 -82
  68. data/doc/TaskJuggler/KeywordArray.html +12 -6
  69. data/doc/TaskJuggler/KeywordDocumentation.html +512 -503
  70. data/doc/TaskJuggler/Limits.html +111 -105
  71. data/doc/TaskJuggler/Limits/Limit.html +71 -65
  72. data/doc/TaskJuggler/LimitsAttribute.html +21 -15
  73. data/doc/TaskJuggler/ListAttributeBase.html +16 -10
  74. data/doc/TaskJuggler/Log.html +111 -105
  75. data/doc/TaskJuggler/LogFile.html +54 -48
  76. data/doc/TaskJuggler/LogicalAttribute.html +35 -29
  77. data/doc/TaskJuggler/LogicalExpression.html +32 -26
  78. data/doc/TaskJuggler/LogicalExpressionAttribute.html +16 -10
  79. data/doc/TaskJuggler/LogicalExpressionListAttribute.html +671 -0
  80. data/doc/TaskJuggler/LogicalFlag.html +24 -18
  81. data/doc/TaskJuggler/LogicalFunction.html +164 -158
  82. data/doc/TaskJuggler/LogicalOperation.html +138 -132
  83. data/doc/TaskJuggler/Macro.html +14 -8
  84. data/doc/TaskJuggler/MacroTable.html +42 -36
  85. data/doc/TaskJuggler/ManagerResponsibilities.html +19 -13
  86. data/doc/TaskJuggler/ManagerStatusRecord.html +23 -17
  87. data/doc/TaskJuggler/Message.html +56 -50
  88. data/doc/TaskJuggler/MessageHandler.html +73 -67
  89. data/doc/TaskJuggler/Navigator.html +92 -86
  90. data/doc/TaskJuggler/NavigatorElement.html +88 -82
  91. data/doc/TaskJuggler/NikuProject.html +15 -9
  92. data/doc/TaskJuggler/NikuReport.html +405 -370
  93. data/doc/TaskJuggler/NikuResource.html +13 -7
  94. data/doc/TaskJuggler/NodeListAttribute.html +13 -9
  95. data/doc/TaskJuggler/PlaceHolderCell.html +22 -16
  96. data/doc/TaskJuggler/ProcessIntercom.html +116 -110
  97. data/doc/TaskJuggler/ProcessIntercomIface.html +39 -33
  98. data/doc/TaskJuggler/Project.html +1064 -895
  99. data/doc/TaskJuggler/ProjectBroker.html +439 -366
  100. data/doc/TaskJuggler/ProjectBrokerIface.html +63 -53
  101. data/doc/TaskJuggler/ProjectFileParser.html +329 -319
  102. data/doc/TaskJuggler/ProjectFileScanner.html +351 -345
  103. data/doc/TaskJuggler/ProjectRecord.html +66 -60
  104. data/doc/TaskJuggler/ProjectServer.html +287 -280
  105. data/doc/TaskJuggler/ProjectServerIface.html +43 -37
  106. data/doc/TaskJuggler/PropertyAttribute.html +16 -10
  107. data/doc/TaskJuggler/PropertyList.html +205 -199
  108. data/doc/TaskJuggler/PropertySet.html +264 -296
  109. data/doc/TaskJuggler/PropertyTreeNode.html +455 -505
  110. data/doc/TaskJuggler/Query.html +309 -524
  111. data/doc/TaskJuggler/RTFHandlers.html +17 -11
  112. data/doc/TaskJuggler/RTFNavigator.html +33 -27
  113. data/doc/TaskJuggler/RTFQuery.html +135 -129
  114. data/doc/TaskJuggler/RTFReport.html +63 -57
  115. data/doc/TaskJuggler/RTFReportLink.html +55 -49
  116. data/doc/TaskJuggler/RTFWithQuerySupport.html +17 -11
  117. data/doc/TaskJuggler/RealFormat.html +64 -58
  118. data/doc/TaskJuggler/RealFormatAttribute.html +12 -6
  119. data/doc/TaskJuggler/ReferenceAttribute.html +35 -29
  120. data/doc/TaskJuggler/Report.html +294 -249
  121. data/doc/TaskJuggler/ReportBase.html +229 -223
  122. data/doc/TaskJuggler/ReportContext.html +52 -46
  123. data/doc/TaskJuggler/ReportServer.html +143 -137
  124. data/doc/TaskJuggler/ReportServerIface.html +51 -43
  125. data/doc/TaskJuggler/ReportServerRecord.html +36 -30
  126. data/doc/TaskJuggler/ReportServlet.html +167 -140
  127. data/doc/TaskJuggler/ReportTable.html +137 -131
  128. data/doc/TaskJuggler/ReportTableCell.html +332 -292
  129. data/doc/TaskJuggler/ReportTableColumn.html +46 -40
  130. data/doc/TaskJuggler/ReportTableLegend.html +43 -38
  131. data/doc/TaskJuggler/ReportTableLine.html +66 -60
  132. data/doc/TaskJuggler/Resource.html +166 -160
  133. data/doc/TaskJuggler/ResourceListAttribute.html +54 -32
  134. data/doc/TaskJuggler/ResourceListRE.html +47 -41
  135. data/doc/TaskJuggler/ResourceScenario.html +671 -644
  136. data/doc/TaskJuggler/RichText.html +51 -45
  137. data/doc/TaskJuggler/RichTextAttribute.html +28 -22
  138. data/doc/TaskJuggler/RichTextDocument.html +96 -90
  139. data/doc/TaskJuggler/RichTextElement.html +503 -497
  140. data/doc/TaskJuggler/RichTextFunctionExample.html +41 -35
  141. data/doc/TaskJuggler/RichTextFunctionHandler.html +19 -13
  142. data/doc/TaskJuggler/RichTextImage.html +14 -8
  143. data/doc/TaskJuggler/RichTextIntermediate.html +86 -80
  144. data/doc/TaskJuggler/RichTextParser.html +59 -53
  145. data/doc/TaskJuggler/RichTextScanner.html +184 -178
  146. data/doc/TaskJuggler/RichTextSnip.html +69 -63
  147. data/doc/TaskJuggler/RichTextSyntaxRules.html +416 -410
  148. data/doc/TaskJuggler/Scenario.html +13 -7
  149. data/doc/TaskJuggler/ScenarioData.html +40 -34
  150. data/doc/TaskJuggler/ScenarioListAttribute.html +21 -15
  151. data/doc/TaskJuggler/Scoreboard.html +129 -107
  152. data/doc/TaskJuggler/SheetHandlerBase.html +245 -239
  153. data/doc/TaskJuggler/SheetReceiver.html +333 -327
  154. data/doc/TaskJuggler/SheetSender.html +227 -221
  155. data/doc/TaskJuggler/Shift.html +26 -20
  156. data/doc/TaskJuggler/ShiftAssignment.html +45 -39
  157. data/doc/TaskJuggler/ShiftAssignments.html +178 -172
  158. data/doc/TaskJuggler/ShiftAssignmentsAttribute.html +21 -15
  159. data/doc/TaskJuggler/ShiftScenario.html +29 -23
  160. data/doc/TaskJuggler/SimpleQueryExpander.html +36 -30
  161. data/doc/TaskJuggler/SortListAttribute.html +17 -13
  162. data/doc/TaskJuggler/SourceFileInfo.html +19 -13
  163. data/doc/TaskJuggler/StatusSheetReceiver.html +31 -25
  164. data/doc/TaskJuggler/StatusSheetReport.html +166 -159
  165. data/doc/TaskJuggler/StatusSheetSender.html +80 -74
  166. data/doc/TaskJuggler/StringAttribute.html +20 -14
  167. data/doc/TaskJuggler/SymbolAttribute.html +16 -10
  168. data/doc/TaskJuggler/SyntaxReference.html +231 -225
  169. data/doc/TaskJuggler/TOCEntry.html +46 -40
  170. data/doc/TaskJuggler/TSResourceRecord.html +15 -9
  171. data/doc/TaskJuggler/TSTaskRecord.html +16 -10
  172. data/doc/TaskJuggler/TableColumnDefinition.html +84 -39
  173. data/doc/TaskJuggler/TableOfContents.html +28 -22
  174. data/doc/TaskJuggler/TableReport.html +906 -866
  175. data/doc/TaskJuggler/Task.html +99 -93
  176. data/doc/TaskJuggler/TaskDependency.html +24 -18
  177. data/doc/TaskJuggler/TaskListAttribute.html +29 -25
  178. data/doc/TaskJuggler/TaskListRE.html +46 -39
  179. data/doc/TaskJuggler/TaskScenario.html +2218 -1965
  180. data/doc/TaskJuggler/TextFormatter.html +154 -148
  181. data/doc/TaskJuggler/TextParser.html +362 -348
  182. data/doc/TaskJuggler/TextParser/Pattern.html +313 -307
  183. data/doc/TaskJuggler/TextParser/Rule.html +147 -141
  184. data/doc/TaskJuggler/TextParser/StackElement.html +58 -52
  185. data/doc/TaskJuggler/TextParser/State.html +88 -82
  186. data/doc/TaskJuggler/TextParser/StateTransition.html +42 -36
  187. data/doc/TaskJuggler/TextParser/TextParserResultArray.html +20 -14
  188. data/doc/TaskJuggler/TextParser/TokenDoc.html +19 -13
  189. data/doc/TaskJuggler/TextReport.html +80 -74
  190. data/doc/TaskJuggler/TextScanner.html +284 -272
  191. data/doc/TaskJuggler/TextScanner/BufferStreamHandle.html +14 -8
  192. data/doc/TaskJuggler/TextScanner/FileStreamHandle.html +21 -15
  193. data/doc/TaskJuggler/TextScanner/MacroStackEntry.html +15 -9
  194. data/doc/TaskJuggler/TextScanner/StreamHandle.html +102 -96
  195. data/doc/TaskJuggler/TimeSheet.html +123 -117
  196. data/doc/TaskJuggler/TimeSheetReceiver.html +28 -22
  197. data/doc/TaskJuggler/TimeSheetRecord.html +212 -206
  198. data/doc/TaskJuggler/TimeSheetReport.html +206 -199
  199. data/doc/TaskJuggler/TimeSheetSender.html +27 -21
  200. data/doc/TaskJuggler/TimeSheetSummary.html +140 -134
  201. data/doc/TaskJuggler/TimeSheets.html +20 -14
  202. data/doc/TaskJuggler/Tj3AppBase.html +100 -94
  203. data/doc/TaskJuggler/Tj3Client.html +407 -483
  204. data/doc/TaskJuggler/Tj3Daemon.html +116 -107
  205. data/doc/TaskJuggler/Tj3SheetAppBase.html +45 -39
  206. data/doc/TaskJuggler/Tj3SsReceiver.html +31 -25
  207. data/doc/TaskJuggler/Tj3SsSender.html +64 -58
  208. data/doc/TaskJuggler/Tj3TsReceiver.html +31 -25
  209. data/doc/TaskJuggler/Tj3TsSender.html +51 -45
  210. data/doc/TaskJuggler/Tj3TsSummary.html +59 -53
  211. data/doc/TaskJuggler/TjException.html +13 -7
  212. data/doc/TaskJuggler/TjTime.html +444 -438
  213. data/doc/TaskJuggler/TjpExample.html +84 -78
  214. data/doc/TaskJuggler/TjpExportRE.html +356 -349
  215. data/doc/TaskJuggler/TjpSyntaxRules.html +4279 -4151
  216. data/doc/TaskJuggler/URLParameter.html +16 -10
  217. data/doc/TaskJuggler/UserManual.html +185 -179
  218. data/doc/TaskJuggler/VimSyntax.html +144 -138
  219. data/doc/TaskJuggler/WebServer.html +46 -39
  220. data/doc/TaskJuggler/WelcomePage.html +769 -0
  221. data/doc/TaskJuggler/WorkingHours.html +185 -179
  222. data/doc/TaskJuggler/WorkingHoursAttribute.html +42 -36
  223. data/doc/TaskJuggler/XMLBlob.html +21 -15
  224. data/doc/TaskJuggler/XMLComment.html +17 -11
  225. data/doc/TaskJuggler/XMLDocument.html +33 -27
  226. data/doc/TaskJuggler/XMLElement.html +97 -91
  227. data/doc/TaskJuggler/XMLNamedText.html +13 -7
  228. data/doc/TaskJuggler/XMLText.html +32 -26
  229. data/doc/index.html +601 -563
  230. data/doc/lib/AccountScenario_rb.html +5 -3
  231. data/doc/lib/Account_rb.html +5 -3
  232. data/doc/lib/Allocation_rb.html +5 -3
  233. data/doc/lib/AppConfig_rb.html +5 -3
  234. data/doc/lib/AttributeBase_rb.html +5 -3
  235. data/doc/lib/AttributeDefinition_rb.html +5 -3
  236. data/doc/lib/Attributes_rb.html +5 -3
  237. data/doc/lib/BatchProcessor_rb.html +5 -3
  238. data/doc/lib/Booking_rb.html +5 -3
  239. data/doc/lib/ChargeSet_rb.html +5 -3
  240. data/doc/lib/Charge_rb.html +5 -3
  241. data/doc/lib/DataCache_rb.html +5 -3
  242. data/doc/lib/FileList_rb.html +5 -3
  243. data/doc/lib/HTMLDocument_rb.html +5 -3
  244. data/doc/lib/IntervalList_rb.html +69 -0
  245. data/doc/lib/Interval_rb.html +5 -3
  246. data/doc/lib/Journal_rb.html +5 -3
  247. data/doc/lib/KeywordArray_rb.html +5 -3
  248. data/doc/lib/KeywordDocumentation_rb.html +5 -3
  249. data/doc/lib/Limits_rb.html +5 -3
  250. data/doc/lib/LogFile_rb.html +5 -3
  251. data/doc/lib/Log_rb.html +5 -3
  252. data/doc/lib/LogicalExpression_rb.html +5 -3
  253. data/doc/lib/LogicalFunction_rb.html +5 -3
  254. data/doc/lib/LogicalOperation_rb.html +5 -3
  255. data/doc/lib/MacroTable_rb.html +5 -3
  256. data/doc/lib/MessageHandler_rb.html +5 -3
  257. data/doc/lib/ProjectFileParser_rb.html +5 -3
  258. data/doc/lib/ProjectFileScanner_rb.html +5 -3
  259. data/doc/lib/Project_rb.html +5 -3
  260. data/doc/lib/PropertyList_rb.html +5 -3
  261. data/doc/lib/PropertySet_rb.html +5 -3
  262. data/doc/lib/PropertyTreeNode_rb.html +5 -3
  263. data/doc/lib/Query_rb.html +5 -3
  264. data/doc/lib/RTFHandlers_rb.html +5 -3
  265. data/doc/lib/RTFNavigator_rb.html +5 -3
  266. data/doc/lib/RTFQuery_rb.html +5 -3
  267. data/doc/lib/RTFReportLink_rb.html +5 -3
  268. data/doc/lib/RTFReport_rb.html +5 -3
  269. data/doc/lib/RTFWithQuerySupport_rb.html +5 -3
  270. data/doc/lib/RealFormat_rb.html +5 -3
  271. data/doc/lib/ResourceScenario_rb.html +5 -3
  272. data/doc/lib/Resource_rb.html +5 -3
  273. data/doc/lib/RichTextDocument_rb.html +5 -3
  274. data/doc/lib/RichTextElement_rb.html +5 -3
  275. data/doc/lib/RichTextFunctionExample_rb.html +5 -3
  276. data/doc/lib/RichTextFunctionHandler_rb.html +5 -3
  277. data/doc/lib/RichTextParser_rb.html +5 -3
  278. data/doc/lib/RichTextScanner_rb.html +5 -3
  279. data/doc/lib/RichTextSnip_rb.html +5 -3
  280. data/doc/lib/RichTextSyntaxRules_rb.html +5 -3
  281. data/doc/lib/RichText_rb.html +5 -3
  282. data/doc/lib/RuntimeConfig_rb.html +5 -3
  283. data/doc/lib/ScenarioData_rb.html +5 -3
  284. data/doc/lib/Scenario_rb.html +5 -3
  285. data/doc/lib/Scoreboard_rb.html +7 -3
  286. data/doc/lib/SheetHandlerBase_rb.html +5 -3
  287. data/doc/lib/SheetReceiver_rb.html +5 -3
  288. data/doc/lib/SheetSender_rb.html +5 -3
  289. data/doc/lib/ShiftAssignments_rb.html +5 -3
  290. data/doc/lib/ShiftScenario_rb.html +5 -3
  291. data/doc/lib/Shift_rb.html +5 -3
  292. data/doc/lib/SimpleQueryExpander_rb.html +5 -3
  293. data/doc/lib/SourceFileInfo_rb.html +5 -3
  294. data/doc/lib/StatusSheetReceiver_rb.html +5 -3
  295. data/doc/lib/StatusSheetSender_rb.html +5 -3
  296. data/doc/lib/SyntaxReference_rb.html +5 -3
  297. data/doc/lib/TOCEntry_rb.html +5 -3
  298. data/doc/lib/TableColumnDefinition_rb.html +5 -3
  299. data/doc/lib/TableOfContents_rb.html +5 -3
  300. data/doc/lib/TaskDependency_rb.html +5 -3
  301. data/doc/lib/TaskJuggler_rb.html +5 -3
  302. data/doc/lib/TaskScenario_rb.html +5 -3
  303. data/doc/lib/Task_rb.html +5 -3
  304. data/doc/lib/TextFormatter_rb.html +6 -4
  305. data/doc/lib/TextParser/Pattern_rb.html +5 -3
  306. data/doc/lib/TextParser/Rule_rb.html +5 -3
  307. data/doc/lib/TextParser/StackElement_rb.html +5 -3
  308. data/doc/lib/TextParser/State_rb.html +6 -4
  309. data/doc/lib/TextParser/TokenDoc_rb.html +5 -3
  310. data/doc/lib/TextParser_rb.html +5 -3
  311. data/doc/lib/TextScanner_rb.html +5 -3
  312. data/doc/lib/TimeSheetReceiver_rb.html +5 -3
  313. data/doc/lib/TimeSheetSender_rb.html +5 -3
  314. data/doc/lib/TimeSheetSummary_rb.html +6 -4
  315. data/doc/lib/TimeSheets_rb.html +5 -3
  316. data/doc/lib/Tj3AppBase_rb.html +5 -3
  317. data/doc/lib/Tj3Config_rb.html +5 -3
  318. data/doc/lib/Tj3SheetAppBase_rb.html +5 -3
  319. data/doc/lib/TjException_rb.html +5 -3
  320. data/doc/lib/TjTime_rb.html +5 -3
  321. data/doc/lib/TjpExample_rb.html +5 -3
  322. data/doc/lib/TjpSyntaxRules_rb.html +5 -3
  323. data/doc/lib/URLParameter_rb.html +5 -3
  324. data/doc/lib/UTF8String_rb.html +5 -3
  325. data/doc/lib/UserManual_rb.html +5 -3
  326. data/doc/lib/VimSyntax_rb.html +6 -4
  327. data/doc/lib/WorkingHours_rb.html +5 -3
  328. data/doc/lib/XMLDocument_rb.html +5 -3
  329. data/doc/lib/XMLElement_rb.html +5 -3
  330. data/doc/lib/daemon/Daemon_rb.html +5 -3
  331. data/doc/lib/daemon/ProcessIntercom_rb.html +7 -3
  332. data/doc/lib/daemon/ProjectBroker_rb.html +5 -3
  333. data/doc/lib/daemon/ProjectServer_rb.html +5 -3
  334. data/doc/lib/daemon/ReportServer_rb.html +5 -3
  335. data/doc/lib/daemon/ReportServlet_rb.html +69 -0
  336. data/doc/lib/daemon/WebServer_rb.html +9 -3
  337. data/doc/lib/daemon/WelcomePage_rb.html +71 -0
  338. data/doc/lib/deep_copy_rb.html +5 -3
  339. data/doc/lib/reports/CSVFile_rb.html +5 -3
  340. data/doc/lib/reports/CollisionDetector_rb.html +5 -3
  341. data/doc/lib/reports/ColumnTable_rb.html +5 -3
  342. data/doc/lib/reports/GanttChart_rb.html +5 -3
  343. data/doc/lib/reports/GanttContainer_rb.html +5 -3
  344. data/doc/lib/reports/GanttHeaderScaleItem_rb.html +5 -3
  345. data/doc/lib/reports/GanttHeader_rb.html +5 -3
  346. data/doc/lib/reports/GanttLine_rb.html +5 -3
  347. data/doc/lib/reports/GanttLoadStack_rb.html +5 -3
  348. data/doc/lib/reports/GanttMilestone_rb.html +5 -3
  349. data/doc/lib/reports/GanttRouter_rb.html +5 -3
  350. data/doc/lib/reports/GanttTaskBar_rb.html +5 -3
  351. data/doc/lib/reports/HTMLGraphics_rb.html +5 -3
  352. data/doc/lib/reports/Navigator_rb.html +5 -3
  353. data/doc/lib/reports/NikuReport_rb.html +5 -3
  354. data/doc/lib/reports/ReportBase_rb.html +5 -3
  355. data/doc/lib/reports/ReportContext_rb.html +5 -3
  356. data/doc/lib/reports/ReportTableCell_rb.html +5 -3
  357. data/doc/lib/reports/ReportTableColumn_rb.html +5 -3
  358. data/doc/lib/reports/ReportTableLegend_rb.html +5 -3
  359. data/doc/lib/reports/ReportTableLine_rb.html +5 -3
  360. data/doc/lib/reports/ReportTable_rb.html +5 -3
  361. data/doc/lib/reports/Report_rb.html +5 -3
  362. data/doc/lib/reports/ResourceListRE_rb.html +5 -3
  363. data/doc/lib/reports/StatusSheetReport_rb.html +5 -3
  364. data/doc/lib/reports/TableReport_rb.html +5 -3
  365. data/doc/lib/reports/TaskListRE_rb.html +5 -3
  366. data/doc/lib/reports/TextReport_rb.html +5 -3
  367. data/doc/lib/reports/TimeSheetReport_rb.html +5 -3
  368. data/doc/lib/reports/TjpExportRE_rb.html +5 -3
  369. data/doc/lib/{taskjuggler3_rb.html → tj3_rb.html} +7 -5
  370. data/doc/lib/tj3client_rb.html +5 -3
  371. data/doc/lib/tj3d_rb.html +6 -4
  372. data/doc/lib/tj3man_rb.html +5 -3
  373. data/doc/lib/tj3ss_receiver_rb.html +5 -3
  374. data/doc/lib/tj3ss_sender_rb.html +5 -3
  375. data/doc/lib/tj3ts_receiver_rb.html +5 -3
  376. data/doc/lib/tj3ts_sender_rb.html +5 -3
  377. data/doc/lib/tj3ts_summary_rb.html +5 -3
  378. data/examples/tutorial.tjp +13 -5
  379. data/gem_spec.rb +3 -0
  380. data/lib/Account.rb +2 -1
  381. data/lib/AccountScenario.rb +2 -1
  382. data/lib/Allocation.rb +2 -1
  383. data/lib/AppConfig.rb +2 -1
  384. data/lib/AttributeBase.rb +19 -5
  385. data/lib/AttributeDefinition.rb +2 -1
  386. data/lib/Attributes.rb +49 -38
  387. data/lib/BatchProcessor.rb +2 -1
  388. data/lib/Booking.rb +2 -1
  389. data/lib/Charge.rb +2 -1
  390. data/lib/ChargeSet.rb +2 -1
  391. data/lib/DataCache.rb +15 -1
  392. data/lib/FileList.rb +2 -1
  393. data/lib/HTMLDocument.rb +2 -1
  394. data/lib/Interval.rb +2 -1
  395. data/lib/IntervalList.rb +100 -0
  396. data/lib/Journal.rb +8 -2
  397. data/lib/KeywordArray.rb +2 -1
  398. data/lib/KeywordDocumentation.rb +10 -6
  399. data/lib/Limits.rb +2 -1
  400. data/lib/Log.rb +3 -2
  401. data/lib/LogFile.rb +2 -1
  402. data/lib/LogicalExpression.rb +2 -1
  403. data/lib/LogicalFunction.rb +2 -1
  404. data/lib/LogicalOperation.rb +2 -1
  405. data/lib/MacroTable.rb +2 -1
  406. data/lib/MessageHandler.rb +2 -1
  407. data/lib/Project.rb +92 -25
  408. data/lib/ProjectFileParser.rb +7 -2
  409. data/lib/ProjectFileScanner.rb +2 -1
  410. data/lib/PropertyList.rb +2 -1
  411. data/lib/PropertySet.rb +2 -6
  412. data/lib/PropertyTreeNode.rb +22 -44
  413. data/lib/Query.rb +32 -13
  414. data/lib/RTFHandlers.rb +2 -1
  415. data/lib/RTFNavigator.rb +2 -1
  416. data/lib/RTFQuery.rb +3 -2
  417. data/lib/RTFReport.rb +2 -1
  418. data/lib/RTFReportLink.rb +2 -1
  419. data/lib/RTFWithQuerySupport.rb +2 -1
  420. data/lib/RealFormat.rb +2 -1
  421. data/lib/Resource.rb +2 -1
  422. data/lib/ResourceScenario.rb +35 -14
  423. data/lib/RichText.rb +2 -1
  424. data/lib/RichTextDocument.rb +2 -1
  425. data/lib/RichTextElement.rb +2 -1
  426. data/lib/RichTextFunctionExample.rb +2 -1
  427. data/lib/RichTextFunctionHandler.rb +2 -1
  428. data/lib/RichTextParser.rb +2 -1
  429. data/lib/RichTextScanner.rb +2 -1
  430. data/lib/RichTextSnip.rb +2 -1
  431. data/lib/RichTextSyntaxRules.rb +2 -1
  432. data/lib/RuntimeConfig.rb +2 -1
  433. data/lib/Scenario.rb +2 -1
  434. data/lib/ScenarioData.rb +2 -1
  435. data/lib/Scoreboard.rb +27 -8
  436. data/lib/SheetHandlerBase.rb +2 -1
  437. data/lib/SheetReceiver.rb +2 -1
  438. data/lib/SheetSender.rb +2 -1
  439. data/lib/Shift.rb +2 -1
  440. data/lib/ShiftAssignments.rb +2 -1
  441. data/lib/ShiftScenario.rb +2 -1
  442. data/lib/SimpleQueryExpander.rb +2 -1
  443. data/lib/SourceFileInfo.rb +2 -1
  444. data/lib/StatusSheetReceiver.rb +2 -1
  445. data/lib/StatusSheetSender.rb +2 -1
  446. data/lib/SyntaxReference.rb +2 -1
  447. data/lib/TOCEntry.rb +2 -1
  448. data/lib/TableColumnDefinition.rb +9 -2
  449. data/lib/TableOfContents.rb +2 -1
  450. data/lib/Task.rb +2 -1
  451. data/lib/TaskDependency.rb +2 -1
  452. data/lib/TaskJuggler.rb +8 -6
  453. data/lib/TaskScenario.rb +337 -153
  454. data/lib/TextFormatter.rb +3 -2
  455. data/lib/TextParser.rb +7 -2
  456. data/lib/TextParser/Pattern.rb +2 -1
  457. data/lib/TextParser/Rule.rb +2 -1
  458. data/lib/TextParser/StackElement.rb +2 -1
  459. data/lib/TextParser/State.rb +3 -2
  460. data/lib/TextParser/TokenDoc.rb +2 -1
  461. data/lib/TextScanner.rb +12 -5
  462. data/lib/TimeSheetReceiver.rb +2 -1
  463. data/lib/TimeSheetSender.rb +2 -1
  464. data/lib/TimeSheetSummary.rb +3 -2
  465. data/lib/TimeSheets.rb +2 -1
  466. data/lib/Tj3AppBase.rb +6 -5
  467. data/lib/Tj3Config.rb +5 -4
  468. data/lib/Tj3SheetAppBase.rb +2 -1
  469. data/lib/TjException.rb +2 -1
  470. data/lib/TjTime.rb +2 -1
  471. data/lib/TjpExample.rb +2 -1
  472. data/lib/TjpSyntaxRules.rb +264 -65
  473. data/lib/URLParameter.rb +2 -1
  474. data/lib/UTF8String.rb +2 -1
  475. data/lib/UserManual.rb +2 -1
  476. data/lib/VimSyntax.rb +3 -2
  477. data/lib/WorkingHours.rb +2 -1
  478. data/lib/XMLDocument.rb +2 -1
  479. data/lib/XMLElement.rb +2 -1
  480. data/lib/daemon/Daemon.rb +3 -1
  481. data/lib/daemon/ProcessIntercom.rb +3 -1
  482. data/lib/daemon/ProjectBroker.rb +84 -32
  483. data/lib/daemon/ProjectServer.rb +5 -3
  484. data/lib/daemon/ReportServer.rb +8 -5
  485. data/lib/daemon/ReportServlet.rb +166 -0
  486. data/lib/daemon/WebServer.rb +6 -150
  487. data/lib/daemon/WelcomePage.rb +80 -0
  488. data/lib/deep_copy.rb +2 -1
  489. data/lib/reports/CSVFile.rb +2 -1
  490. data/lib/reports/CollisionDetector.rb +2 -1
  491. data/lib/reports/ColumnTable.rb +2 -1
  492. data/lib/reports/GanttChart.rb +2 -1
  493. data/lib/reports/GanttContainer.rb +3 -4
  494. data/lib/reports/GanttHeader.rb +2 -1
  495. data/lib/reports/GanttHeaderScaleItem.rb +2 -1
  496. data/lib/reports/GanttLine.rb +12 -10
  497. data/lib/reports/GanttLoadStack.rb +2 -1
  498. data/lib/reports/GanttMilestone.rb +3 -3
  499. data/lib/reports/GanttRouter.rb +4 -1
  500. data/lib/reports/GanttTaskBar.rb +9 -7
  501. data/lib/reports/HTMLGraphics.rb +2 -1
  502. data/lib/reports/Navigator.rb +2 -1
  503. data/lib/reports/NikuReport.rb +79 -49
  504. data/lib/reports/Report.rb +42 -10
  505. data/lib/reports/ReportBase.rb +2 -1
  506. data/lib/reports/ReportContext.rb +2 -1
  507. data/lib/reports/ReportTable.rb +2 -1
  508. data/lib/reports/ReportTableCell.rb +63 -28
  509. data/lib/reports/ReportTableColumn.rb +2 -1
  510. data/lib/reports/ReportTableLegend.rb +5 -5
  511. data/lib/reports/ReportTableLine.rb +2 -1
  512. data/lib/reports/ResourceListRE.rb +2 -1
  513. data/lib/reports/StatusSheetReport.rb +4 -2
  514. data/lib/reports/TableReport.rb +42 -38
  515. data/lib/reports/TaskListRE.rb +4 -2
  516. data/lib/reports/TextReport.rb +2 -1
  517. data/lib/reports/TimeSheetReport.rb +4 -2
  518. data/lib/reports/TjpExportRE.rb +4 -2
  519. data/lib/{taskjuggler3.rb → tj3.rb} +6 -5
  520. data/lib/tj3client.rb +19 -36
  521. data/lib/tj3d.rb +6 -2
  522. data/lib/tj3man.rb +4 -3
  523. data/lib/tj3ss_receiver.rb +2 -1
  524. data/lib/tj3ss_sender.rb +2 -1
  525. data/lib/tj3ts_receiver.rb +2 -1
  526. data/lib/tj3ts_sender.rb +2 -1
  527. data/lib/tj3ts_summary.rb +2 -1
  528. data/manual/Day_To_Day_Juggling +36 -0
  529. data/manual/How_To_Contribute +9 -4
  530. data/manual/Installation +10 -3
  531. data/manual/TaskJuggler_Internals +0 -2
  532. data/manual/Tutorial +25 -3
  533. data/prj_cfg.rb +4 -2
  534. data/spec/IntervalList_spec.rb +138 -0
  535. data/spec/ProjectBroker_spec.rb +133 -0
  536. data/tasks/changelog.rake +41 -24
  537. data/tasks/csts.rake +1 -0
  538. data/tasks/gem.rake +1 -0
  539. data/tasks/rcov.rake +1 -1
  540. data/tasks/spec.rake +7 -0
  541. data/tasks/test.rake +1 -0
  542. data/test/MessageChecker.rb +2 -1
  543. data/test/TestSuite/CSV-Reports/niku.tjp +70 -0
  544. data/test/TestSuite/CSV-Reports/{celltext-Reference.csv → refs/celltext.csv} +0 -0
  545. data/test/TestSuite/CSV-Reports/refs/niku.csv +5 -0
  546. data/test/TestSuite/CSV-Reports/{resourcereport-Reference.csv → refs/resourcereport.csv} +0 -0
  547. data/test/TestSuite/CSV-Reports/{resourcereport_with_tasks-Reference.csv → refs/resourcereport_with_tasks.csv} +0 -0
  548. data/test/TestSuite/CSV-Reports/{sortByTree-Reference.csv → refs/sortByTree.csv} +0 -0
  549. data/test/TestSuite/CSV-Reports/{sortBy_duration.down-Reference.csv → refs/sortBy_duration.down.csv} +0 -0
  550. data/test/TestSuite/CSV-Reports/{sortBy_effort.up-Reference.csv → refs/sortBy_effort.up.csv} +0 -0
  551. data/test/TestSuite/CSV-Reports/{sortBy_plan.start.down-Reference.csv → refs/sortBy_plan.start.down.csv} +0 -0
  552. data/test/TestSuite/CSV-Reports/{taskreport-Reference.csv → refs/taskreport.csv} +0 -0
  553. data/test/TestSuite/CSV-Reports/{taskreport_with_resources-Reference.csv → refs/taskreport_with_resources.csv} +0 -0
  554. data/test/TestSuite/CSV-Reports/{weekly-Reference.csv → refs/weekly.csv} +0 -0
  555. data/test/TestSuite/HTML-Reports/Alerts.tjp +12 -0
  556. data/test/TestSuite/Scheduler/Correct/Allocate.tjp +2 -2
  557. data/test/TestSuite/Scheduler/Correct/Container-2.tjp +1 -2
  558. data/test/TestSuite/Scheduler/Correct/InheritedAttributes.tjp +77 -0
  559. data/test/TestSuite/Scheduler/Correct/WeakDeps.tjp +40 -0
  560. data/test/TestSuite/Scheduler/Errors/loop_detected_12.tjp +2 -2
  561. data/test/TestSuite/Scheduler/Errors/loop_detected_13.tjp +3 -4
  562. data/test/TestSuite/Scheduler/Errors/loop_detected_3.tjp +2 -2
  563. data/test/TestSuite/Scheduler/Errors/loop_detected_6.tjp +8 -7
  564. data/test/TestSuite/Scheduler/Errors/onend_wrong_direction.tjp +19 -0
  565. data/test/TestSuite/Scheduler/Errors/onstart_wrong_direction.tjp +18 -0
  566. data/test/TestSuite/Scheduler/Errors/task_depend_multi.tjp +1 -2
  567. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/boss_2002-03-02.tji +46 -0
  568. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/dev2_2002-03-02.tji +22 -0
  569. data/test/TestSuite/StatusSheets/StatusSheetTemplates/2002-03-02/resources.yml +11 -0
  570. data/test/TestSuite/StatusSheets/StatusSheetTemplates/acceptable_intervals +1 -0
  571. data/test/TestSuite/StatusSheets/sender.log +256 -0
  572. data/test/TestSuite/StatusSheets/statussheets.log +9 -0
  573. data/test/TestSuite/StatusSheets/tj3d.log +395 -0
  574. data/test/TestSuite/Syntax/Correct/Limits-1.tjp +2 -0
  575. data/test/TestSuite/Syntax/Correct/Niku.tjp +6 -1
  576. data/test/TestSuite/Syntax/Correct/Scenario.tjp +4 -1
  577. data/test/TestSuite/Syntax/Correct/Supplement.tjp +12 -5
  578. data/test/TestSuite/Syntax/Correct/TaskPrefix.tji +3 -0
  579. data/test/TestSuite/Syntax/Correct/TaskPrefix.tjp +24 -0
  580. data/test/TestSuite/Syntax/Correct/css/tjreport.css +7 -2
  581. data/test/TestSuite/Syntax/Correct/tutorial.tjp +15 -5
  582. data/test/all.rb +2 -4
  583. data/test/test_BatchProcessor.rb +2 -1
  584. data/test/test_CSV-Reports.rb +34 -23
  585. data/test/test_CSVFile.rb +2 -1
  586. data/test/test_CollisionDetector.rb +3 -2
  587. data/test/test_Journal.rb +2 -1
  588. data/test/test_Limits.rb +2 -1
  589. data/test/test_LogicalExpression.rb +2 -1
  590. data/test/test_MacroTable.rb +2 -1
  591. data/test/test_Project.rb +3 -2
  592. data/test/test_ProjectFileScanner.rb +2 -1
  593. data/test/test_PropertySet.rb +2 -1
  594. data/test/test_Query.rb +2 -1
  595. data/test/test_RealFormat.rb +2 -1
  596. data/test/test_ReportGenerator.rb +2 -1
  597. data/test/test_RichText.rb +2 -1
  598. data/test/test_Scheduler.rb +2 -1
  599. data/test/test_ShiftAssignments.rb +2 -1
  600. data/test/test_SimpleQueryExpander.rb +2 -1
  601. data/test/test_Syntax.rb +2 -1
  602. data/test/test_TextFormatter.rb +3 -2
  603. data/test/test_TjTime.rb +2 -1
  604. data/test/test_TjpExample.rb +2 -1
  605. data/test/test_URLParameter.rb +2 -1
  606. data/test/test_UTF8String.rb +2 -1
  607. data/test/test_WorkingHours.rb +2 -1
  608. data/test/test_deep_copy.rb +2 -1
  609. metadata +74 -20
  610. data/doc/StringIO.html +0 -595
  611. data/test/TestSuite/Scheduler/Errors/loop_detected_7.tjp +0 -46
  612. data/test/TestSuite/Scheduler/Errors/loop_detected_8.tjp +0 -51
  613. data/test/TestSuite/Scheduler/Errors/multiple_durations.tjp +0 -11
@@ -126,6 +126,8 @@
126
126
 
127
127
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
128
128
 
129
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
130
+
129
131
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
130
132
 
131
133
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -204,6 +206,8 @@
204
206
 
205
207
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
206
208
 
209
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
210
+
207
211
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
208
212
 
209
213
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -236,6 +240,8 @@
236
240
 
237
241
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
238
242
 
243
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
244
+
239
245
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
240
246
 
241
247
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -516,6 +522,8 @@
516
522
 
517
523
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
518
524
 
525
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
526
+
519
527
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
520
528
 
521
529
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -542,8 +550,6 @@
542
550
 
543
551
  <li><a href="../String.html">String</a></li>
544
552
 
545
- <li><a href="../StringIO.html">StringIO</a></li>
546
-
547
553
  </ul>
548
554
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
549
555
  </div>
@@ -591,12 +597,12 @@
591
597
  <div class="method-source-code"
592
598
  id="connect-source">
593
599
  <pre>
594
- <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 39</span>
595
- 39: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connect</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-identifier">stdout</span>, <span class="ruby-identifier">stderr</span>, <span class="ruby-identifier">stdin</span>, <span class="ruby-identifier">silent</span>)
596
- 40: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-value str">'connect'</span>)
597
- 41:
598
- 42: <span class="ruby-identifier">trap</span> { <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-identifier">stdout</span>, <span class="ruby-identifier">stderr</span>, <span class="ruby-identifier">stdin</span>, <span class="ruby-identifier">silent</span>) }
599
- 43: <span class="ruby-keyword kw">end</span></pre>
600
+ <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 41</span>
601
+ 41: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">connect</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-identifier">stdout</span>, <span class="ruby-identifier">stderr</span>, <span class="ruby-identifier">stdin</span>, <span class="ruby-identifier">silent</span>)
602
+ 42: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-value str">'connect'</span>)
603
+ 43:
604
+ 44: <span class="ruby-identifier">trap</span> { <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-identifier">stdout</span>, <span class="ruby-identifier">stderr</span>, <span class="ruby-identifier">stdin</span>, <span class="ruby-identifier">silent</span>) }
605
+ 45: <span class="ruby-keyword kw">end</span></pre>
600
606
  </div>
601
607
 
602
608
  </div>
@@ -627,12 +633,12 @@
627
633
  <div class="method-source-code"
628
634
  id="disconnect-source">
629
635
  <pre>
630
- <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 45</span>
631
- 45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnect</span>(<span class="ruby-identifier">authKey</span>)
632
- 46: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-value str">'disconnect'</span>)
633
- 47:
634
- 48: <span class="ruby-identifier">trap</span> { <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">disconnect</span> }
635
- 49: <span class="ruby-keyword kw">end</span></pre>
636
+ <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 47</span>
637
+ 47: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">disconnect</span>(<span class="ruby-identifier">authKey</span>)
638
+ 48: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-value str">'disconnect'</span>)
639
+ 49:
640
+ 50: <span class="ruby-identifier">trap</span> { <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">disconnect</span> }
641
+ 51: <span class="ruby-keyword kw">end</span></pre>
636
642
  </div>
637
643
 
638
644
  </div>
@@ -663,12 +669,12 @@
663
669
  <div class="method-source-code"
664
670
  id="terminate-source">
665
671
  <pre>
666
- <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 33</span>
667
- 33: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminate</span>(<span class="ruby-identifier">authKey</span>)
668
- 34: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-value str">'terminate'</span>)
669
- 35:
670
- 36: <span class="ruby-identifier">trap</span> { <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">terminate</span> }
671
- 37: <span class="ruby-keyword kw">end</span></pre>
672
+ <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 35</span>
673
+ 35: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">terminate</span>(<span class="ruby-identifier">authKey</span>)
674
+ 36: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">checkKey</span>(<span class="ruby-identifier">authKey</span>, <span class="ruby-value str">'terminate'</span>)
675
+ 37:
676
+ 38: <span class="ruby-identifier">trap</span> { <span class="ruby-ivar">@server</span>.<span class="ruby-identifier">terminate</span> }
677
+ 39: <span class="ruby-keyword kw">end</span></pre>
672
678
  </div>
673
679
 
674
680
  </div>
@@ -701,19 +707,19 @@ This function catches all unhandled exceptions in the passed block.
701
707
  <div class="method-source-code"
702
708
  id="trap-source">
703
709
  <pre>
704
- <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 20</span>
705
- 20: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">trap</span>
706
- 21: <span class="ruby-identifier">log</span> = <span class="ruby-constant">LogFile</span>.<span class="ruby-identifier">instance</span>
707
- 22:
708
- 23: <span class="ruby-keyword kw">begin</span>
709
- 24: <span class="ruby-keyword kw">yield</span>
710
- 25: <span class="ruby-keyword kw">rescue</span>
711
- 26: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>
712
- 27: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
713
- 28: <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-identifier">$!</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>))
714
- 29: <span class="ruby-identifier">log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Unexpected exception: #{$!}&quot;</span>)
715
- 30: <span class="ruby-keyword kw">end</span>
716
- 31: <span class="ruby-keyword kw">end</span></pre>
710
+ <span class="ruby-comment cmt"># File lib/daemon/ProcessIntercom.rb, line 22</span>
711
+ 22: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">trap</span>
712
+ 23: <span class="ruby-identifier">log</span> = <span class="ruby-constant">LogFile</span>.<span class="ruby-identifier">instance</span>
713
+ 24:
714
+ 25: <span class="ruby-keyword kw">begin</span>
715
+ 26: <span class="ruby-keyword kw">yield</span>
716
+ 27: <span class="ruby-keyword kw">rescue</span>
717
+ 28: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">to_s</span>
718
+ 29: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span> <span class="ruby-identifier">$!</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
719
+ 30: <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-identifier">$!</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>))
720
+ 31: <span class="ruby-identifier">log</span>.<span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;Unexpected exception: #{$!}&quot;</span>)
721
+ 32: <span class="ruby-keyword kw">end</span>
722
+ 33: <span class="ruby-keyword kw">end</span></pre>
717
723
  </div>
718
724
 
719
725
  </div>
@@ -93,6 +93,8 @@
93
93
 
94
94
  <li><a href="#method-i-checkTimeSheets">#checkTimeSheets</a></li>
95
95
 
96
+ <li><a href="#method-i-collectTimeOffIntervals">#collectTimeOffIntervals</a></li>
97
+
96
98
  <li><a href="#method-i-convertToDailyLoad">#convertToDailyLoad</a></li>
97
99
 
98
100
  <li><a href="#method-i-dailyWorkingHours">#dailyWorkingHours</a></li>
@@ -111,6 +113,8 @@
111
113
 
112
114
  <li><a href="#method-i-idxToDate">#idxToDate</a></li>
113
115
 
116
+ <li><a href="#method-i-initScoreboards">#initScoreboards</a></li>
117
+
114
118
  <li><a href="#method-i-isWorkingTime">#isWorkingTime</a></li>
115
119
 
116
120
  <li><a href="#method-i-listReports">#listReports</a></li>
@@ -149,6 +153,8 @@
149
153
 
150
154
  <li><a href="#method-i-weeklyWorkingDays">#weeklyWorkingDays</a></li>
151
155
 
156
+ <li><a href="#method-i-workingDays">#workingDays</a></li>
157
+
152
158
  <li><a href="#method-i-yearlyWorkingDays">#yearlyWorkingDays</a></li>
153
159
 
154
160
  </ul>
@@ -207,6 +213,8 @@
207
213
 
208
214
  <li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
209
215
 
216
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
217
+
210
218
  <li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
211
219
 
212
220
  <li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
@@ -285,6 +293,8 @@
285
293
 
286
294
  <li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
287
295
 
296
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
297
+
288
298
  <li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
289
299
 
290
300
  <li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
@@ -317,6 +327,8 @@
317
327
 
318
328
  <li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
319
329
 
330
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
331
+
320
332
  <li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
321
333
 
322
334
  <li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
@@ -597,6 +609,8 @@
597
609
 
598
610
  <li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
599
611
 
612
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
613
+
600
614
  <li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
601
615
 
602
616
  <li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
@@ -623,8 +637,6 @@
623
637
 
624
638
  <li><a href="../String.html">String</a></li>
625
639
 
626
- <li><a href="../StringIO.html">StringIO</a></li>
627
-
628
640
  </ul>
629
641
  <div id="no-class-search-results" style="display: none;">No matching classes.</div>
630
642
  </div>
@@ -887,24 +899,24 @@ granularity is reduced.
887
899
  <div class="method-source-code"
888
900
  id="max-chedule-ranularity-source">
889
901
  <pre>
890
- <span class="ruby-comment cmt"># File lib/Project.rb, line 847</span>
891
- 847: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Project</span>.<span class="ruby-identifier">maxScheduleGranularity</span>
892
- 848: <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>)
893
- 849: <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>)
894
- 850: <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span>
895
- 851: <span class="ruby-comment cmt"># We are hour-aligned to UTC; scheduleGranularity is 1 hour</span>
896
- 852: <span class="ruby-value">60</span> * <span class="ruby-value">60</span>
897
- 853: <span class="ruby-keyword kw">when</span> <span class="ruby-value">30</span>
898
- 854: <span class="ruby-comment cmt"># We are half-hour off from UTC; scheduleGranularity is 30 minutes</span>
899
- 855: <span class="ruby-value">30</span> * <span class="ruby-value">60</span>
900
- 856: <span class="ruby-keyword kw">when</span> <span class="ruby-value">15</span>, <span class="ruby-value">45</span>
901
- 857: <span class="ruby-comment cmt"># We are 15 or 45 minutes off from UTC; scheduleGranularity is 15</span>
902
- 858: <span class="ruby-comment cmt"># minutes</span>
903
- 859: <span class="ruby-value">15</span> * <span class="ruby-value">60</span>
904
- 860: <span class="ruby-keyword kw">else</span>
905
- 861: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown Time zone alignment #{min}&quot;</span>
906
- 862: <span class="ruby-keyword kw">end</span>
907
- 863: <span class="ruby-keyword kw">end</span></pre>
902
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 880</span>
903
+ 880: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Project</span>.<span class="ruby-identifier">maxScheduleGranularity</span>
904
+ 881: <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>)
905
+ 882: <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>)
906
+ 883: <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span>
907
+ 884: <span class="ruby-comment cmt"># We are hour-aligned to UTC; scheduleGranularity is 1 hour</span>
908
+ 885: <span class="ruby-value">60</span> * <span class="ruby-value">60</span>
909
+ 886: <span class="ruby-keyword kw">when</span> <span class="ruby-value">30</span>
910
+ 887: <span class="ruby-comment cmt"># We are half-hour off from UTC; scheduleGranularity is 30 minutes</span>
911
+ 888: <span class="ruby-value">30</span> * <span class="ruby-value">60</span>
912
+ 889: <span class="ruby-keyword kw">when</span> <span class="ruby-value">15</span>, <span class="ruby-value">45</span>
913
+ 890: <span class="ruby-comment cmt"># We are 15 or 45 minutes off from UTC; scheduleGranularity is 15</span>
914
+ 891: <span class="ruby-comment cmt"># minutes</span>
915
+ 892: <span class="ruby-value">15</span> * <span class="ruby-value">60</span>
916
+ 893: <span class="ruby-keyword kw">else</span>
917
+ 894: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown Time zone alignment #{min}&quot;</span>
918
+ 895: <span class="ruby-keyword kw">end</span>
919
+ 896: <span class="ruby-keyword kw">end</span></pre>
908
920
  </div>
909
921
 
910
922
  </div>
@@ -941,359 +953,369 @@ The constructor will set default values for all project attributes.
941
953
  <div class="method-source-code"
942
954
  id="new-source">
943
955
  <pre>
944
- <span class="ruby-comment cmt"># File lib/Project.rb, line 60</span>
945
- 60: <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>)
946
- 61: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
947
- 62: <span class="ruby-ivar">@attributes</span> = {
948
- 63: <span class="ruby-comment cmt"># This nested Array defines the supported alert levels. The lowest</span>
949
- 64: <span class="ruby-comment cmt"># level comes first at index 0 and the level rises from there on.</span>
950
- 65: <span class="ruby-comment cmt"># Currently, these levels are hardcoded. Each level entry has 3</span>
951
- 66: <span class="ruby-comment cmt"># members: the tjp syntax token, the user visible name and the</span>
952
- 67: <span class="ruby-comment cmt"># associated color as RGB byte array.</span>
953
- 68: <span class="ruby-value str">'alertLevels'</span> =<span class="ruby-operator">&gt;</span> [
954
- 69: [ <span class="ruby-value str">'green'</span>, <span class="ruby-value str">'Green'</span>, <span class="ruby-value str">'#008000'</span> ],
955
- 70: [ <span class="ruby-value str">'yellow'</span>, <span class="ruby-value str">'Yellow'</span>, <span class="ruby-value str">'#BEA800'</span> ],
956
- 71: [ <span class="ruby-value str">'red'</span>, <span class="ruby-value str">'Red'</span>, <span class="ruby-value str">'#C00000'</span> ] ],
957
- 72: <span class="ruby-value str">'copyright'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
958
- 73: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
959
- 74: <span class="ruby-value str">'currency'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;EUR&quot;</span>,
960
- 75: <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> ]),
961
- 76: <span class="ruby-value str">'dailyworkinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">8.0</span>,
962
- 77: <span class="ruby-value str">'end'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
963
- 78: <span class="ruby-value str">'flags'</span> =<span class="ruby-operator">&gt;</span> [],
964
- 79: <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>,
965
- 80: <span class="ruby-value str">'limits'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
966
- 81: <span class="ruby-value str">'loadUnit'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:days</span>,
967
- 82: <span class="ruby-value str">'name'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">name</span>,
968
- 83: <span class="ruby-value str">'navigators'</span> =<span class="ruby-operator">&gt;</span> {},
969
- 84: <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>),
970
- 85: <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>]),
971
- 86: <span class="ruby-value str">'priority'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>,
972
- 87: <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>,
973
- 88: <span class="ruby-value str">'projectids'</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-identifier">id</span> ],
974
- 89: <span class="ruby-value str">'rate'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0.0</span>,
975
- 90: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
976
- 91: <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>,
977
- 92: <span class="ruby-value str">'shortTimeFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%H:%M&quot;</span>,
978
- 93: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
979
- 94: <span class="ruby-value str">'timeFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%Y-%m-%d&quot;</span>,
980
- 95: <span class="ruby-value str">'timezone'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
981
- 96: <span class="ruby-value str">'trackingScenarioIdx'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>,
982
- 97: <span class="ruby-value str">'vacations'</span> =<span class="ruby-operator">&gt;</span> [],
983
- 98: <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>,
984
- 99: <span class="ruby-value str">'weekStartsMonday'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>,
985
- 100: <span class="ruby-value str">'workinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
986
- 101: <span class="ruby-value str">'yearlyworkingdays'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">260.714</span>
987
- 102: }
988
- 103:
989
- 104: <span class="ruby-comment cmt"># Before we can add any properties to this project, we need to define the</span>
990
- 105: <span class="ruby-comment cmt"># attributes that each of the property types will be using. In TaskJuggler</span>
991
- 106: <span class="ruby-comment cmt"># lingo, properties of a project are resources, tasks, accounts, shifts</span>
992
- 107: <span class="ruby-comment cmt"># and scenarios. Each of these properties can have lots of further</span>
993
- 108: <span class="ruby-comment cmt"># information attached to it. These bits of information are called</span>
994
- 109: <span class="ruby-comment cmt"># attributes. An attribute is defined by the AttributeDefinition class.</span>
995
- 110: <span class="ruby-comment cmt"># The PropertySet objects need to be fed with a list of such attribute</span>
996
- 111: <span class="ruby-comment cmt"># definitions to register the attributes with the properties.</span>
997
- 112: <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>)
998
- 113: <span class="ruby-identifier">attrs</span> = [
999
- 114: <span class="ruby-comment cmt"># ID Name Type</span>
1000
- 115: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1001
- 116: [ <span class="ruby-value str">'enabled'</span>, <span class="ruby-value str">'Enabled'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1002
- 117: <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> ],
1003
- 118: [ <span class="ruby-value str">'minslackrate'</span>, <span class="ruby-value str">'Min. Slack Rate'</span>, <span class="ruby-constant">FloatAttribute</span>,
1004
- 119: <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> ],
1005
- 120: [ <span class="ruby-value str">'projection'</span>, <span class="ruby-value str">'Projection Mode'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1006
- 121: <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> ],
1007
- 122: [ <span class="ruby-value str">'strict'</span>, <span class="ruby-value str">'Strict Bookings'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1008
- 123: <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> ]
1009
- 124: ]
1010
- 125: <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-identifier">a</span>)) }
1011
- 126:
1012
- 127: <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>)
1013
- 128: <span class="ruby-identifier">attrs</span> = [
1014
- 129: <span class="ruby-comment cmt"># ID Name Type</span>
1015
- 130: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1016
- 131: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1017
- 132: <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> ],
1018
- 133: [ <span class="ruby-value str">'replace'</span>, <span class="ruby-value str">'Replace'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1019
- 134: <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> ],
1020
- 135: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
1021
- 136: <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> ],
1022
- 137: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1023
- 138: <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> ],
1024
- 139: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>,
1025
- 140: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
1026
- 141: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1027
- 142: <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> ],
1028
- 143: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>,
1029
- 144: <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> ]
1030
- 145: ]
1031
- 146: <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-identifier">a</span>)) }
1032
- 147:
1033
- 148: <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>)
1034
- 149: <span class="ruby-identifier">attrs</span> = [
1035
- 150: <span class="ruby-comment cmt"># ID Name Type</span>
1036
- 151: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1037
- 152: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1038
- 153: <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> ],
1039
- 154: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1040
- 155: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1041
- 156: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1042
- 157: <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> ],
1043
- 158: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1044
- 159: <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> ]
1045
- 160: ]
1046
- 161: <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-identifier">a</span>)) }
1047
- 162:
1048
- 163: <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>)
1049
- 164: <span class="ruby-identifier">attrs</span> = [
1050
- 165: <span class="ruby-comment cmt"># ID Name Type</span>
1051
- 166: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1052
- 167: [ <span class="ruby-value str">'alloctdeffort'</span>, <span class="ruby-value str">'Alloctd. Effort'</span>, <span class="ruby-constant">FloatAttribute</span>,
1053
- 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">0.0</span> ],
1054
- 169: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
956
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 61</span>
957
+ 61: <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>)
958
+ 62: <span class="ruby-ivar">@messageHandler</span> = <span class="ruby-identifier">messageHandler</span>
959
+ 63: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">0</span>)
960
+ 64: <span class="ruby-ivar">@attributes</span> = {
961
+ 65: <span class="ruby-comment cmt"># This nested Array defines the supported alert levels. The lowest</span>
962
+ 66: <span class="ruby-comment cmt"># level comes first at index 0 and the level rises from there on.</span>
963
+ 67: <span class="ruby-comment cmt"># Currently, these levels are hardcoded. Each level entry has 3</span>
964
+ 68: <span class="ruby-comment cmt"># members: the tjp syntax token, the user visible name and the</span>
965
+ 69: <span class="ruby-comment cmt"># associated color as RGB byte array.</span>
966
+ 70: <span class="ruby-value str">'alertLevels'</span> =<span class="ruby-operator">&gt;</span> [
967
+ 71: [ <span class="ruby-value str">'green'</span>, <span class="ruby-value str">'Green'</span>, <span class="ruby-value str">'#008000'</span> ],
968
+ 72: [ <span class="ruby-value str">'yellow'</span>, <span class="ruby-value str">'Yellow'</span>, <span class="ruby-value str">'#BEA800'</span> ],
969
+ 73: [ <span class="ruby-value str">'red'</span>, <span class="ruby-value str">'Red'</span>, <span class="ruby-value str">'#C00000'</span> ] ],
970
+ 74: <span class="ruby-value str">'copyright'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
971
+ 75: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
972
+ 76: <span class="ruby-value str">'currency'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;EUR&quot;</span>,
973
+ 77: <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> ]),
974
+ 78: <span class="ruby-value str">'dailyworkinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">8.0</span>,
975
+ 79: <span class="ruby-value str">'end'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
976
+ 80: <span class="ruby-value str">'flags'</span> =<span class="ruby-operator">&gt;</span> [],
977
+ 81: <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>,
978
+ 82: <span class="ruby-value str">'limits'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
979
+ 83: <span class="ruby-value str">'loadUnit'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:days</span>,
980
+ 84: <span class="ruby-value str">'name'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">name</span>,
981
+ 85: <span class="ruby-value str">'navigators'</span> =<span class="ruby-operator">&gt;</span> {},
982
+ 86: <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>),
983
+ 87: <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>]),
984
+ 88: <span class="ruby-value str">'priority'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>,
985
+ 89: <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>,
986
+ 90: <span class="ruby-value str">'projectids'</span> =<span class="ruby-operator">&gt;</span> [ <span class="ruby-identifier">id</span> ],
987
+ 91: <span class="ruby-value str">'rate'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0.0</span>,
988
+ 92: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
989
+ 93: <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>,
990
+ 94: <span class="ruby-value str">'shortTimeFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%H:%M&quot;</span>,
991
+ 95: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
992
+ 96: <span class="ruby-value str">'timeFormat'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;%Y-%m-%d&quot;</span>,
993
+ 97: <span class="ruby-value str">'timezone'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
994
+ 98: <span class="ruby-value str">'trackingScenarioIdx'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>,
995
+ 99: <span class="ruby-value str">'vacations'</span> =<span class="ruby-operator">&gt;</span> [],
996
+ 100: <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>,
997
+ 101: <span class="ruby-value str">'weekStartsMonday'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>,
998
+ 102: <span class="ruby-value str">'workinghours'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
999
+ 103: <span class="ruby-value str">'yearlyworkingdays'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">260.714</span>
1000
+ 104: }
1001
+ 105:
1002
+ 106: <span class="ruby-comment cmt"># Before we can add any properties to this project, we need to define the</span>
1003
+ 107: <span class="ruby-comment cmt"># attributes that each of the property types will be using. In TaskJuggler</span>
1004
+ 108: <span class="ruby-comment cmt"># lingo, properties of a project are resources, tasks, accounts, shifts</span>
1005
+ 109: <span class="ruby-comment cmt"># and scenarios. Each of these properties can have lots of further</span>
1006
+ 110: <span class="ruby-comment cmt"># information attached to it. These bits of information are called</span>
1007
+ 111: <span class="ruby-comment cmt"># attributes. An attribute is defined by the AttributeDefinition class.</span>
1008
+ 112: <span class="ruby-comment cmt"># The PropertySet objects need to be fed with a list of such attribute</span>
1009
+ 113: <span class="ruby-comment cmt"># definitions to register the attributes with the properties.</span>
1010
+ 114: <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>)
1011
+ 115: <span class="ruby-identifier">attrs</span> = [
1012
+ 116: <span class="ruby-comment cmt"># ID Name Type</span>
1013
+ 117: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1014
+ 118: [ <span class="ruby-value str">'enabled'</span>, <span class="ruby-value str">'Enabled'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1015
+ 119: <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> ],
1016
+ 120: [ <span class="ruby-value str">'minslackrate'</span>, <span class="ruby-value str">'Min. Slack Rate'</span>, <span class="ruby-constant">FloatAttribute</span>,
1017
+ 121: <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> ],
1018
+ 122: [ <span class="ruby-value str">'projection'</span>, <span class="ruby-value str">'Projection Mode'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1019
+ 123: <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> ],
1020
+ 124: [ <span class="ruby-value str">'strict'</span>, <span class="ruby-value str">'Strict Bookings'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1021
+ 125: <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> ]
1022
+ 126: ]
1023
+ 127: <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-identifier">a</span>)) }
1024
+ 128:
1025
+ 129: <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>)
1026
+ 130: <span class="ruby-identifier">attrs</span> = [
1027
+ 131: <span class="ruby-comment cmt"># ID Name Type</span>
1028
+ 132: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1029
+ 133: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1030
+ 134: <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> ],
1031
+ 135: [ <span class="ruby-value str">'replace'</span>, <span class="ruby-value str">'Replace'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1032
+ 136: <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> ],
1033
+ 137: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
1034
+ 138: <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> ],
1035
+ 139: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1036
+ 140: <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> ],
1037
+ 141: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>,
1038
+ 142: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
1039
+ 143: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1040
+ 144: <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> ],
1041
+ 145: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>,
1042
+ 146: <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> ]
1043
+ 147: ]
1044
+ 148: <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-identifier">a</span>)) }
1045
+ 149:
1046
+ 150: <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>)
1047
+ 151: <span class="ruby-identifier">attrs</span> = [
1048
+ 152: <span class="ruby-comment cmt"># ID Name Type</span>
1049
+ 153: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1050
+ 154: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1051
+ 155: <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> ],
1052
+ 156: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1053
+ 157: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1054
+ 158: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1055
+ 159: <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> ],
1056
+ 160: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1057
+ 161: <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> ]
1058
+ 162: ]
1059
+ 163: <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-identifier">a</span>)) }
1060
+ 164:
1061
+ 165: <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>)
1062
+ 166: <span class="ruby-identifier">attrs</span> = [
1063
+ 167: <span class="ruby-comment cmt"># ID Name Type</span>
1064
+ 168: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1065
+ 169: [ <span class="ruby-value str">'alloctdeffort'</span>, <span class="ruby-value str">'Alloctd. Effort'</span>, <span class="ruby-constant">FloatAttribute</span>,
1055
1066
  170: <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.0</span> ],
1056
- 171: [ <span class="ruby-value str">'duties'</span>, <span class="ruby-value str">'Duties'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1057
- 172: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1058
- 173: [ <span class="ruby-value str">'directreports'</span>, <span class="ruby-value str">'Direct Reports'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1067
+ 171: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
1068
+ 172: <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.0</span> ],
1069
+ 173: [ <span class="ruby-value str">'duties'</span>, <span class="ruby-value str">'Duties'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1059
1070
  174: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1060
- 175: [ <span class="ruby-value str">'efficiency'</span>,<span class="ruby-value str">'Efficiency'</span>, <span class="ruby-constant">FloatAttribute</span>,
1061
- 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-value">1.0</span> ],
1062
- 177: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Total Effort'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1063
- 178: <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> ],
1064
- 179: [ <span class="ruby-value str">'email'</span>, <span class="ruby-value str">'Email'</span>, <span class="ruby-constant">StringAttribute</span>,
1065
- 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-keyword kw">nil</span> ],
1066
- 181: [ <span class="ruby-value str">'fail'</span>, <span class="ruby-value str">'Failure Condition'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1067
- 182: <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> ],
1068
- 183: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1069
- 184: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1070
- 185: [ <span class="ruby-value str">'fte'</span>, <span class="ruby-value str">'FTE'</span>, <span class="ruby-constant">FloatAttribute</span>,
1071
- 186: <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> ],
1072
- 187: [ <span class="ruby-value str">'headcount'</span>, <span class="ruby-value str">'Headcount'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1073
- 188: <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> ],
1074
- 189: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1075
- 190: <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> ],
1076
- 191: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>,
1077
- 192: <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> ],
1078
- 193: [ <span class="ruby-value str">'managers'</span>, <span class="ruby-value str">'Managers'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1079
- 194: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1080
- 195: [ <span class="ruby-value str">'rate'</span>, <span class="ruby-value str">'Rate'</span>, <span class="ruby-constant">FloatAttribute</span>,
1081
- 196: <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.0</span> ],
1082
- 197: [ <span class="ruby-value str">'reports'</span>, <span class="ruby-value str">'Reports'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1083
- 198: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1084
- 199: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>,
1085
- 200: <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> ],
1086
- 201: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
1087
- 202: <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> ],
1088
- 203: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1089
- 204: <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> ],
1090
- 205: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>,
1091
- 206: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
1092
- 207: [ <span class="ruby-value str">'warn'</span>, <span class="ruby-value str">'Warning Condition'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1093
- 208: <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> ],
1094
- 209: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1095
- 210: <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> ],
1096
- 211: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>,
1097
- 212: <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> ]
1098
- 213: ]
1099
- 214: <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-identifier">a</span>)) }
1100
- 215:
1101
- 216: <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>)
1102
- 217: <span class="ruby-identifier">attrs</span> = [
1103
- 218: <span class="ruby-comment cmt"># ID Name Type</span>
1104
- 219: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1105
- 220: [ <span class="ruby-value str">'allocate'</span>, <span class="ruby-value str">'Allocations'</span>, <span class="ruby-constant">AllocationAttribute</span>,
1106
- 221: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1107
- 222: [ <span class="ruby-value str">'assignedresources'</span>, <span class="ruby-value str">'Assigned Resources'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1108
- 223: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1109
- 224: [ <span class="ruby-value str">'booking'</span>, <span class="ruby-value str">'Bookings'</span>, <span class="ruby-constant">BookingListAttribute</span>,
1071
+ 175: [ <span class="ruby-value str">'directreports'</span>, <span class="ruby-value str">'Direct Reports'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1072
+ 176: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1073
+ 177: [ <span class="ruby-value str">'efficiency'</span>,<span class="ruby-value str">'Efficiency'</span>, <span class="ruby-constant">FloatAttribute</span>,
1074
+ 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-value">1.0</span> ],
1075
+ 179: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Total Effort'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1076
+ 180: <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> ],
1077
+ 181: [ <span class="ruby-value str">'email'</span>, <span class="ruby-value str">'Email'</span>, <span class="ruby-constant">StringAttribute</span>,
1078
+ 182: <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> ],
1079
+ 183: [ <span class="ruby-value str">'fail'</span>, <span class="ruby-value str">'Failure Conditions'</span>, <span class="ruby-constant">LogicalExpressionListAttribute</span>,
1080
+ 184: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1081
+ 185: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1082
+ 186: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1083
+ 187: [ <span class="ruby-value str">'fte'</span>, <span class="ruby-value str">'FTE'</span>, <span class="ruby-constant">FloatAttribute</span>,
1084
+ 188: <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> ],
1085
+ 189: [ <span class="ruby-value str">'headcount'</span>, <span class="ruby-value str">'Headcount'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1086
+ 190: <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> ],
1087
+ 191: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1088
+ 192: <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> ],
1089
+ 193: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>,
1090
+ 194: <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> ],
1091
+ 195: [ <span class="ruby-value str">'managers'</span>, <span class="ruby-value str">'Managers'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1092
+ 196: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1093
+ 197: [ <span class="ruby-value str">'rate'</span>, <span class="ruby-value str">'Rate'</span>, <span class="ruby-constant">FloatAttribute</span>,
1094
+ 198: <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.0</span> ],
1095
+ 199: [ <span class="ruby-value str">'reports'</span>, <span class="ruby-value str">'Reports'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1096
+ 200: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1097
+ 201: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>,
1098
+ 202: <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> ],
1099
+ 203: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
1100
+ 204: <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> ],
1101
+ 205: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1102
+ 206: <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> ],
1103
+ 207: [ <span class="ruby-value str">'vacations'</span>, <span class="ruby-value str">'Vacations'</span>, <span class="ruby-constant">IntervalListAttribute</span>,
1104
+ 208: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">true</span>, [] ],
1105
+ 209: [ <span class="ruby-value str">'warn'</span>, <span class="ruby-value str">'Warning Condition'</span>, <span class="ruby-constant">LogicalExpressionListAttribute</span>,
1106
+ 210: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1107
+ 211: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1108
+ 212: <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> ],
1109
+ 213: [ <span class="ruby-value str">'workinghours'</span>, <span class="ruby-value str">'Working Hours'</span>, <span class="ruby-constant">WorkingHoursAttribute</span>,
1110
+ 214: <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> ]
1111
+ 215: ]
1112
+ 216: <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-identifier">a</span>)) }
1113
+ 217:
1114
+ 218: <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>)
1115
+ 219: <span class="ruby-identifier">attrs</span> = [
1116
+ 220: <span class="ruby-comment cmt"># ID Name Type</span>
1117
+ 221: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1118
+ 222: [ <span class="ruby-value str">'allocate'</span>, <span class="ruby-value str">'Allocations'</span>, <span class="ruby-constant">AllocationAttribute</span>,
1119
+ 223: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1120
+ 224: [ <span class="ruby-value str">'assignedresources'</span>, <span class="ruby-value str">'Assigned Resources'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1110
1121
  225: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1111
- 226: [ <span class="ruby-value str">'charge'</span>, <span class="ruby-value str">'Charges'</span>, <span class="ruby-constant">ChargeListAttribute</span>,
1122
+ 226: [ <span class="ruby-value str">'booking'</span>, <span class="ruby-value str">'Bookings'</span>, <span class="ruby-constant">BookingListAttribute</span>,
1112
1123
  227: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1113
- 228: [ <span class="ruby-value str">'chargeset'</span>, <span class="ruby-value str">'Charge Sets'</span>, <span class="ruby-constant">ChargeSetListAttribute</span>,
1114
- 229: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1115
- 230: [ <span class="ruby-value str">'complete'</span>, <span class="ruby-value str">'Completion'</span>, <span class="ruby-constant">FloatAttribute</span>,
1116
- 231: <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> ],
1117
- 232: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
1118
- 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-value">0.0</span> ],
1119
- 234: [ <span class="ruby-value str">'depends'</span>, <span class="ruby-value str">'Preceding tasks'</span>, <span class="ruby-constant">DependencyListAttribute</span>,
1120
- 235: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1121
- 236: [ <span class="ruby-value str">'duration'</span>, <span class="ruby-value str">'Duration'</span>, <span class="ruby-constant">DurationAttribute</span>,
1122
- 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-value">0</span> ],
1123
- 238: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Effort'</span>, <span class="ruby-constant">DurationAttribute</span>,
1124
+ 228: [ <span class="ruby-value str">'charge'</span>, <span class="ruby-value str">'Charges'</span>, <span class="ruby-constant">ChargeListAttribute</span>,
1125
+ 229: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1126
+ 230: [ <span class="ruby-value str">'chargeset'</span>, <span class="ruby-value str">'Charge Sets'</span>, <span class="ruby-constant">ChargeSetListAttribute</span>,
1127
+ 231: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1128
+ 232: [ <span class="ruby-value str">'complete'</span>, <span class="ruby-value str">'Completion'</span>, <span class="ruby-constant">FloatAttribute</span>,
1129
+ 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> ],
1130
+ 234: [ <span class="ruby-value str">'criticalness'</span>, <span class="ruby-value str">'Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
1131
+ 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-value">0.0</span> ],
1132
+ 236: [ <span class="ruby-value str">'depends'</span>, <span class="ruby-value str">'Preceding tasks'</span>, <span class="ruby-constant">DependencyListAttribute</span>,
1133
+ 237: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1134
+ 238: [ <span class="ruby-value str">'duration'</span>, <span class="ruby-value str">'Duration'</span>, <span class="ruby-constant">DurationAttribute</span>,
1124
1135
  239: <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> ],
1125
- 240: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>,
1126
- 241: <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> ],
1127
- 242: [ <span class="ruby-value str">'endpreds'</span>, <span class="ruby-value str">'End Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1128
- 243: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1129
- 244: [ <span class="ruby-value str">'endsuccs'</span>, <span class="ruby-value str">'End Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1136
+ 240: [ <span class="ruby-value str">'effort'</span>, <span class="ruby-value str">'Effort'</span>, <span class="ruby-constant">DurationAttribute</span>,
1137
+ 241: <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> ],
1138
+ 242: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>,
1139
+ 243: <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> ],
1140
+ 244: [ <span class="ruby-value str">'endpreds'</span>, <span class="ruby-value str">'End Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1130
1141
  245: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1131
- 246: [ <span class="ruby-value str">'fail'</span>, <span class="ruby-value str">'Failure Condition'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1132
- 247: <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> ],
1133
- 248: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1134
- 249: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1135
- 250: [ <span class="ruby-value str">'forward'</span>, <span class="ruby-value str">'Scheduling'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1136
- 251: <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> ],
1137
- 252: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1138
- 253: <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> ],
1139
- 254: [ <span class="ruby-value str">'length'</span>, <span class="ruby-value str">'Length'</span>, <span class="ruby-constant">DurationAttribute</span>,
1140
- 255: <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> ],
1141
- 256: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>,
1142
- 257: <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> ],
1143
- 258: [ <span class="ruby-value str">'maxend'</span>, <span class="ruby-value str">'Max. End'</span>, <span class="ruby-constant">DateAttribute</span>,
1144
- 259: <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> ],
1145
- 260: [ <span class="ruby-value str">'maxstart'</span>, <span class="ruby-value str">'Max. Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1146
- 261: <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> ],
1147
- 262: [ <span class="ruby-value str">'milestone'</span>, <span class="ruby-value str">'Milestone'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1148
- 263: <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> ],
1149
- 264: [ <span class="ruby-value str">'minend'</span>, <span class="ruby-value str">'Min. End'</span>, <span class="ruby-constant">DateAttribute</span>,
1150
- 265: <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> ],
1151
- 266: [ <span class="ruby-value str">'minstart'</span>, <span class="ruby-value str">'Min. Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1152
- 267: <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> ],
1153
- 268: [ <span class="ruby-value str">'note'</span>, <span class="ruby-value str">'Note'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1154
- 269: <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> ],
1155
- 270: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-value str">'Path Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
1156
- 271: <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.0</span> ],
1157
- 272: [ <span class="ruby-value str">'precedes'</span>, <span class="ruby-value str">'Following tasks'</span>, <span class="ruby-constant">DependencyListAttribute</span>,
1158
- 273: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1159
- 274: [ <span class="ruby-value str">'priority'</span>, <span class="ruby-value str">'Priority'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1160
- 275: <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> ],
1161
- 276: [ <span class="ruby-value str">'projectid'</span>, <span class="ruby-value str">'Project ID'</span>, <span class="ruby-constant">SymbolAttribute</span>,
1162
- 277: <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> ],
1163
- 278: [ <span class="ruby-value str">'responsible'</span>, <span class="ruby-value str">'Responsible'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1164
- 279: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1165
- 280: [ <span class="ruby-value str">'scheduled'</span>, <span class="ruby-value str">'Scheduled'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1166
- 281: <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> ],
1167
- 282: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>,
1168
- 283: <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> ],
1169
- 284: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1170
- 285: <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> ],
1171
- 286: [ <span class="ruby-value str">'startpreds'</span>, <span class="ruby-value str">'Start Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1172
- 287: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1173
- 288: [ <span class="ruby-value str">'startsuccs'</span>, <span class="ruby-value str">'Start Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1142
+ 246: [ <span class="ruby-value str">'endsuccs'</span>, <span class="ruby-value str">'End Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1143
+ 247: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1144
+ 248: [ <span class="ruby-value str">'fail'</span>, <span class="ruby-value str">'Failure Conditions'</span>, <span class="ruby-constant">LogicalExpressionListAttribute</span>,
1145
+ 249: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1146
+ 250: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1147
+ 251: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1148
+ 252: [ <span class="ruby-value str">'forward'</span>, <span class="ruby-value str">'Scheduling'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1149
+ 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">true</span> ],
1150
+ 254: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1151
+ 255: <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> ],
1152
+ 256: [ <span class="ruby-value str">'length'</span>, <span class="ruby-value str">'Length'</span>, <span class="ruby-constant">DurationAttribute</span>,
1153
+ 257: <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> ],
1154
+ 258: [ <span class="ruby-value str">'limits'</span>, <span class="ruby-value str">'Limits'</span>, <span class="ruby-constant">LimitsAttribute</span>,
1155
+ 259: <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> ],
1156
+ 260: [ <span class="ruby-value str">'maxend'</span>, <span class="ruby-value str">'Max. End'</span>, <span class="ruby-constant">DateAttribute</span>,
1157
+ 261: <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> ],
1158
+ 262: [ <span class="ruby-value str">'maxstart'</span>, <span class="ruby-value str">'Max. Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1159
+ 263: <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> ],
1160
+ 264: [ <span class="ruby-value str">'milestone'</span>, <span class="ruby-value str">'Milestone'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1161
+ 265: <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> ],
1162
+ 266: [ <span class="ruby-value str">'minend'</span>, <span class="ruby-value str">'Min. End'</span>, <span class="ruby-constant">DateAttribute</span>,
1163
+ 267: <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> ],
1164
+ 268: [ <span class="ruby-value str">'minstart'</span>, <span class="ruby-value str">'Min. Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1165
+ 269: <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> ],
1166
+ 270: [ <span class="ruby-value str">'note'</span>, <span class="ruby-value str">'Note'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1167
+ 271: <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> ],
1168
+ 272: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-value str">'Path Criticalness'</span>, <span class="ruby-constant">FloatAttribute</span>,
1169
+ 273: <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.0</span> ],
1170
+ 274: [ <span class="ruby-value str">'precedes'</span>, <span class="ruby-value str">'Following tasks'</span>, <span class="ruby-constant">DependencyListAttribute</span>,
1171
+ 275: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1172
+ 276: [ <span class="ruby-value str">'priority'</span>, <span class="ruby-value str">'Priority'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1173
+ 277: <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> ],
1174
+ 278: [ <span class="ruby-value str">'projectid'</span>, <span class="ruby-value str">'Project ID'</span>, <span class="ruby-constant">SymbolAttribute</span>,
1175
+ 279: <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> ],
1176
+ 280: [ <span class="ruby-value str">'responsible'</span>, <span class="ruby-value str">'Responsible'</span>, <span class="ruby-constant">ResourceListAttribute</span>,
1177
+ 281: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1178
+ 282: [ <span class="ruby-value str">'scheduled'</span>, <span class="ruby-value str">'Scheduled'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1179
+ 283: <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> ],
1180
+ 284: [ <span class="ruby-value str">'shifts'</span>, <span class="ruby-value str">'Shifts'</span>, <span class="ruby-constant">ShiftAssignmentsAttribute</span>,
1181
+ 285: <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> ],
1182
+ 286: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1183
+ 287: <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> ],
1184
+ 288: [ <span class="ruby-value str">'startpreds'</span>, <span class="ruby-value str">'Start Preds.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1174
1185
  289: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1175
- 290: [ <span class="ruby-value str">'status'</span>, <span class="ruby-value str">'Task Status'</span>, <span class="ruby-constant">StringAttribute</span>,
1176
- 291: <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 str">&quot;&quot;</span> ],
1177
- 292: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1178
- 293: <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> ],
1179
- 294: [ <span class="ruby-value str">'warn'</span>, <span class="ruby-value str">'Warning Condition'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1180
- 295: <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> ],
1181
- 296: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1182
- 297: <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> ]
1183
- 298: ]
1184
- 299: <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-identifier">a</span>)) }
1185
- 300:
1186
- 301: <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>)
1187
- 302: <span class="ruby-identifier">attrs</span> = [
1188
- 303: <span class="ruby-comment cmt"># ID Name Type</span>
1189
- 304: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1190
- 305: [ <span class="ruby-value str">'caption'</span>, <span class="ruby-value str">'Caption'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1191
- 306: <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> ],
1192
- 307: [ <span class="ruby-value str">'center'</span>, <span class="ruby-value str">'Center'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1193
- 308: <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> ],
1194
- 309: [ <span class="ruby-value str">'columns'</span>, <span class="ruby-value str">'Columns'</span>, <span class="ruby-constant">ColumnListAttribute</span>,
1195
- 310: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [] ],
1196
- 311: [ <span class="ruby-value str">'costAccount'</span>, <span class="ruby-value str">'Cost Account'</span>, <span class="ruby-constant">AccountAttribute</span>,
1197
- 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> ],
1198
- 313: [ <span class="ruby-value str">'currencyFormat'</span>, <span class="ruby-value str">'Currency Format'</span>, <span class="ruby-constant">RealFormatAttribute</span>,
1186
+ 290: [ <span class="ruby-value str">'startsuccs'</span>, <span class="ruby-value str">'Start Succs.'</span>, <span class="ruby-constant">TaskListAttribute</span>,
1187
+ 291: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1188
+ 292: [ <span class="ruby-value str">'status'</span>, <span class="ruby-value str">'Task Status'</span>, <span class="ruby-constant">StringAttribute</span>,
1189
+ 293: <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 str">&quot;&quot;</span> ],
1190
+ 294: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1191
+ 295: <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> ],
1192
+ 296: [ <span class="ruby-value str">'warn'</span>, <span class="ruby-value str">'Warning Condition'</span>, <span class="ruby-constant">LogicalExpressionListAttribute</span>,
1193
+ 297: <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1194
+ 298: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1195
+ 299: <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> ]
1196
+ 300: ]
1197
+ 301: <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-identifier">a</span>)) }
1198
+ 302:
1199
+ 303: <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>)
1200
+ 304: <span class="ruby-identifier">attrs</span> = [
1201
+ 305: <span class="ruby-comment cmt"># ID Name Type</span>
1202
+ 306: <span class="ruby-comment cmt"># Inh. Inh.Prj Scen. Default</span>
1203
+ 307: [ <span class="ruby-value str">'caption'</span>, <span class="ruby-value str">'Caption'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1204
+ 308: <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> ],
1205
+ 309: [ <span class="ruby-value str">'center'</span>, <span class="ruby-value str">'Center'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1206
+ 310: <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> ],
1207
+ 311: [ <span class="ruby-value str">'columns'</span>, <span class="ruby-value str">'Columns'</span>, <span class="ruby-constant">ColumnListAttribute</span>,
1208
+ 312: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [] ],
1209
+ 313: [ <span class="ruby-value str">'costAccount'</span>, <span class="ruby-value str">'Cost Account'</span>, <span class="ruby-constant">AccountAttribute</span>,
1199
1210
  314: <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> ],
1200
- 315: [ <span class="ruby-value str">'definitions'</span>, <span class="ruby-value str">'Definitions'</span>, <span class="ruby-constant">DefinitionListAttribute</span>,
1201
- 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> ]) ],
1202
- 317: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>,
1203
- 318: <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> ],
1204
- 319: [ <span class="ruby-value str">'epilog'</span>, <span class="ruby-value str">'Epilog'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1205
- 320: <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> ],
1206
- 321: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1207
- 322: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1208
- 323: [ <span class="ruby-value str">'footer'</span>, <span class="ruby-value str">'Footer'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1209
- 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> ],
1210
- 325: [ <span class="ruby-value str">'formats'</span>, <span class="ruby-value str">'Formats'</span>, <span class="ruby-constant">FormatListAttribute</span>,
1211
- 326: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [] ],
1212
- 327: [ <span class="ruby-value str">'ganttBars'</span>, <span class="ruby-value str">'Gantt Bars'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1213
- 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-keyword kw">true</span> ],
1214
- 329: [ <span class="ruby-value str">'header'</span>, <span class="ruby-value str">'Header'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1215
- 330: <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> ],
1216
- 331: [ <span class="ruby-value str">'headline'</span>, <span class="ruby-value str">'Headline'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1217
- 332: <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> ],
1218
- 333: [ <span class="ruby-value str">'hideResource'</span>, <span class="ruby-value str">'Hide Resource'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1219
- 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-keyword kw">nil</span> ],
1220
- 335: [ <span class="ruby-value str">'hideTask'</span>, <span class="ruby-value str">'Hide Task'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1211
+ 315: [ <span class="ruby-value str">'currencyFormat'</span>, <span class="ruby-value str">'Currency Format'</span>, <span class="ruby-constant">RealFormatAttribute</span>,
1212
+ 316: <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> ],
1213
+ 317: [ <span class="ruby-value str">'definitions'</span>, <span class="ruby-value str">'Definitions'</span>, <span class="ruby-constant">DefinitionListAttribute</span>,
1214
+ 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-constant">KeywordArray</span>.<span class="ruby-identifier">new</span>([ <span class="ruby-value str">'*'</span> ]) ],
1215
+ 319: [ <span class="ruby-value str">'end'</span>, <span class="ruby-value str">'End'</span>, <span class="ruby-constant">DateAttribute</span>,
1216
+ 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> ],
1217
+ 321: [ <span class="ruby-value str">'epilog'</span>, <span class="ruby-value str">'Epilog'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1218
+ 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> ],
1219
+ 323: [ <span class="ruby-value str">'flags'</span>, <span class="ruby-value str">'Flags'</span>, <span class="ruby-constant">FlagListAttribute</span>,
1220
+ 324: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">true</span>, [] ],
1221
+ 325: [ <span class="ruby-value str">'footer'</span>, <span class="ruby-value str">'Footer'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1222
+ 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> ],
1223
+ 327: [ <span class="ruby-value str">'formats'</span>, <span class="ruby-value str">'Formats'</span>, <span class="ruby-constant">FormatListAttribute</span>,
1224
+ 328: <span class="ruby-keyword kw">true</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-keyword kw">false</span>, [] ],
1225
+ 329: [ <span class="ruby-value str">'ganttBars'</span>, <span class="ruby-value str">'Gantt Bars'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1226
+ 330: <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> ],
1227
+ 331: [ <span class="ruby-value str">'header'</span>, <span class="ruby-value str">'Header'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1228
+ 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-keyword kw">nil</span> ],
1229
+ 333: [ <span class="ruby-value str">'headline'</span>, <span class="ruby-value str">'Headline'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1230
+ 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-keyword kw">nil</span> ],
1231
+ 335: [ <span class="ruby-value str">'hideResource'</span>, <span class="ruby-value str">'Hide Resource'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1221
1232
  336: <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> ],
1222
- 337: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1223
- 338: <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> ],
1224
- 339: [ <span class="ruby-value str">'interactive'</span>, <span class="ruby-value str">'Interactive'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1225
- 340: <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">false</span> ],
1226
- 341: [ <span class="ruby-value str">'left'</span>, <span class="ruby-value str">'Left'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1227
- 342: <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> ],
1228
- 343: [ <span class="ruby-value str">'loadUnit'</span>, <span class="ruby-value str">'Load Unit'</span>, <span class="ruby-constant">StringAttribute</span>,
1229
- 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> ],
1230
- 345: [ <span class="ruby-value str">'now'</span>, <span class="ruby-value str">'Now'</span>, <span class="ruby-constant">DateAttribute</span>,
1233
+ 337: [ <span class="ruby-value str">'hideTask'</span>, <span class="ruby-value str">'Hide Task'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1234
+ 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-keyword kw">nil</span> ],
1235
+ 339: [ <span class="ruby-value str">'index'</span>, <span class="ruby-value str">'Index'</span>, <span class="ruby-constant">FixnumAttribute</span>,
1236
+ 340: <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> ],
1237
+ 341: [ <span class="ruby-value str">'interactive'</span>, <span class="ruby-value str">'Interactive'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1238
+ 342: <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">false</span> ],
1239
+ 343: [ <span class="ruby-value str">'left'</span>, <span class="ruby-value str">'Left'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1240
+ 344: <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> ],
1241
+ 345: [ <span class="ruby-value str">'loadUnit'</span>, <span class="ruby-value str">'Load Unit'</span>, <span class="ruby-constant">StringAttribute</span>,
1231
1242
  346: <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> ],
1232
- 347: [ <span class="ruby-value str">'numberFormat'</span>, <span class="ruby-value str">'Number Format'</span>, <span class="ruby-constant">RealFormatAttribute</span>,
1243
+ 347: [ <span class="ruby-value str">'now'</span>, <span class="ruby-value str">'Now'</span>, <span class="ruby-constant">DateAttribute</span>,
1233
1244
  348: <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> ],
1234
- 349: [ <span class="ruby-value str">'openNodes'</span>, <span class="ruby-value str">'Open Nodes'</span>, <span class="ruby-constant">NodeListAttribute</span>,
1235
- 350: <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> ],
1236
- 351: [ <span class="ruby-value str">'prolog'</span>, <span class="ruby-value str">'Prolog'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1237
- 352: <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>],
1238
- 353: [ <span class="ruby-value str">'resourceAttributes'</span>, <span class="ruby-value str">'Resource Attributes'</span>, <span class="ruby-constant">FormatListAttribute</span>,
1239
- 354: <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> ]) ],
1240
- 355: [ <span class="ruby-value str">'resourceRoot'</span>, <span class="ruby-value str">'resource Root'</span>, <span class="ruby-constant">PropertyAttribute</span>,
1241
- 356: <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> ],
1242
- 357: [ <span class="ruby-value str">'revenueAccount'</span>, <span class="ruby-value str">'Revenue Account'</span>, <span class="ruby-constant">AccountAttribute</span>,
1243
- 358: <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> ],
1244
- 359: [ <span class="ruby-value str">'right'</span>, <span class="ruby-value str">'Right'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1245
- 360: <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> ],
1246
- 361: [ <span class="ruby-value str">'rollupResource'</span>, <span class="ruby-value str">'Rollup Resource'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1245
+ 349: [ <span class="ruby-value str">'numberFormat'</span>, <span class="ruby-value str">'Number Format'</span>, <span class="ruby-constant">RealFormatAttribute</span>,
1246
+ 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">nil</span> ],
1247
+ 351: [ <span class="ruby-value str">'openNodes'</span>, <span class="ruby-value str">'Open Nodes'</span>, <span class="ruby-constant">NodeListAttribute</span>,
1248
+ 352: <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> ],
1249
+ 353: [ <span class="ruby-value str">'prolog'</span>, <span class="ruby-value str">'Prolog'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1250
+ 354: <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>],
1251
+ 355: [ <span class="ruby-value str">'resourceAttributes'</span>, <span class="ruby-value str">'Resource Attributes'</span>, <span class="ruby-constant">FormatListAttribute</span>,
1252
+ 356: <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> ]) ],
1253
+ 357: [ <span class="ruby-value str">'resourceRoot'</span>, <span class="ruby-value str">'resource Root'</span>, <span class="ruby-constant">PropertyAttribute</span>,
1254
+ 358: <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> ],
1255
+ 359: [ <span class="ruby-value str">'revenueAccount'</span>, <span class="ruby-value str">'Revenue Account'</span>, <span class="ruby-constant">AccountAttribute</span>,
1256
+ 360: <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> ],
1257
+ 361: [ <span class="ruby-value str">'right'</span>, <span class="ruby-value str">'Right'</span>, <span class="ruby-constant">RichTextAttribute</span>,
1247
1258
  362: <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> ],
1248
- 363: [ <span class="ruby-value str">'rollupTask'</span>, <span class="ruby-value str">'Rollup Task'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1249
- 364: <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> ],
1250
- 365: [ <span class="ruby-value str">'scenarios'</span>, <span class="ruby-value str">'Scenarios'</span>, <span class="ruby-constant">ScenarioListAttribute</span>,
1251
- 366: <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> ] ],
1252
- 367: [ <span class="ruby-value str">'selfcontained'</span>, <span class="ruby-value str">'Selfcontained'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1253
- 368: <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> ],
1254
- 369: [ <span class="ruby-value str">'shortTimeFormat'</span>, <span class="ruby-value str">'Short Time Format'</span>, <span class="ruby-constant">StringAttribute</span>,
1255
- 370: <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> ],
1256
- 371: [ <span class="ruby-value str">'sortResources'</span>, <span class="ruby-value str">'Sort Resources'</span>, <span class="ruby-constant">SortListAttribute</span>,
1257
- 372: <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> ]] ],
1258
- 373: [ <span class="ruby-value str">'sortTasks'</span>, <span class="ruby-value str">'Sort Tasks'</span>, <span class="ruby-constant">SortListAttribute</span>,
1259
+ 363: [ <span class="ruby-value str">'rollupResource'</span>, <span class="ruby-value str">'Rollup Resource'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1260
+ 364: <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> ],
1261
+ 365: [ <span class="ruby-value str">'rollupTask'</span>, <span class="ruby-value str">'Rollup Task'</span>, <span class="ruby-constant">LogicalExpressionAttribute</span>,
1262
+ 366: <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> ],
1263
+ 367: [ <span class="ruby-value str">'scenarios'</span>, <span class="ruby-value str">'Scenarios'</span>, <span class="ruby-constant">ScenarioListAttribute</span>,
1264
+ 368: <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> ] ],
1265
+ 369: [ <span class="ruby-value str">'selfcontained'</span>, <span class="ruby-value str">'Selfcontained'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1266
+ 370: <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> ],
1267
+ 371: [ <span class="ruby-value str">'shortTimeFormat'</span>, <span class="ruby-value str">'Short Time Format'</span>, <span class="ruby-constant">StringAttribute</span>,
1268
+ 372: <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> ],
1269
+ 373: [ <span class="ruby-value str">'sortResources'</span>, <span class="ruby-value str">'Sort Resources'</span>, <span class="ruby-constant">SortListAttribute</span>,
1259
1270
  374: <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> ]] ],
1260
- 375: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1261
- 376: <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> ],
1262
- 377: [ <span class="ruby-value str">'taskAttributes'</span>, <span class="ruby-value str">'Task Attributes'</span>, <span class="ruby-constant">FormatListAttribute</span>,
1263
- 378: <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> ]) ],
1264
- 379: [ <span class="ruby-value str">'taskRoot'</span>, <span class="ruby-value str">'Task Root'</span>, <span class="ruby-constant">PropertyAttribute</span>,
1265
- 380: <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> ],
1266
- 381: [ <span class="ruby-value str">'timeFormat'</span>, <span class="ruby-value str">'Time Format'</span>, <span class="ruby-constant">StringAttribute</span>,
1267
- 382: <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> ],
1268
- 383: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
1271
+ 375: [ <span class="ruby-value str">'sortTasks'</span>, <span class="ruby-value str">'Sort Tasks'</span>, <span class="ruby-constant">SortListAttribute</span>,
1272
+ 376: <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> ]] ],
1273
+ 377: [ <span class="ruby-value str">'start'</span>, <span class="ruby-value str">'Start'</span>, <span class="ruby-constant">DateAttribute</span>,
1274
+ 378: <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> ],
1275
+ 379: [ <span class="ruby-value str">'taskAttributes'</span>, <span class="ruby-value str">'Task Attributes'</span>, <span class="ruby-constant">FormatListAttribute</span>,
1276
+ 380: <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> ]) ],
1277
+ 381: [ <span class="ruby-value str">'taskRoot'</span>, <span class="ruby-value str">'Task Root'</span>, <span class="ruby-constant">PropertyAttribute</span>,
1278
+ 382: <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> ],
1279
+ 383: [ <span class="ruby-value str">'timeFormat'</span>, <span class="ruby-value str">'Time Format'</span>, <span class="ruby-constant">StringAttribute</span>,
1269
1280
  384: <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> ],
1270
- 385: [ <span class="ruby-value str">'title'</span>, <span class="ruby-value str">'Title'</span>, <span class="ruby-constant">StringAttribute</span>,
1271
- 386: <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> ],
1272
- 387: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1273
- 388: <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> ],
1274
- 389: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1275
- 390: <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> ],
1276
- 391: [ <span class="ruby-value str">'weekStartsMonday'</span>, <span class="ruby-value str">'Week Starts Monday'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1277
- 392: <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> ]
1278
- 393: ]
1279
- 394: <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-identifier">a</span>)) }
1280
- 395:
1281
- 396: <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>)
1282
- 397:
1283
- 398: <span class="ruby-comment cmt"># A list of files that contained the project data.</span>
1284
- 399: <span class="ruby-ivar">@inputFiles</span> = <span class="ruby-constant">FileList</span>.<span class="ruby-identifier">new</span>
1285
- 400:
1286
- 401: <span class="ruby-ivar">@timeSheets</span> = <span class="ruby-constant">TimeSheets</span>.<span class="ruby-identifier">new</span>
1287
- 402:
1288
- 403: <span class="ruby-comment cmt"># The ReportContext provides additional settings to the report that can</span>
1289
- 404: <span class="ruby-comment cmt"># complement or replace the report attributes. Reports can include other</span>
1290
- 405: <span class="ruby-comment cmt"># reports. During report generation, only one context is active, but the</span>
1291
- 406: <span class="ruby-comment cmt"># context of enclosing reports needs to be preserved. Therefor we use a</span>
1292
- 407: <span class="ruby-comment cmt"># stack to implement this.</span>
1293
- 408: <span class="ruby-ivar">@reportContexts</span> = []
1294
- 409: <span class="ruby-ivar">@outputDir</span> = <span class="ruby-value str">''</span>
1295
- 410: <span class="ruby-ivar">@warnTsDeltas</span> = <span class="ruby-keyword kw">false</span>
1296
- 411: <span class="ruby-keyword kw">end</span></pre>
1281
+ 385: [ <span class="ruby-value str">'timeOffId'</span>, <span class="ruby-value str">'Time Off ID'</span>, <span class="ruby-constant">StringAttribute</span>,
1282
+ 386: <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> ],
1283
+ 387: [ <span class="ruby-value str">'timeOffName'</span>, <span class="ruby-value str">'Time Off Name'</span>, <span class="ruby-constant">StringAttribute</span>,
1284
+ 388: <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> ],
1285
+ 389: [ <span class="ruby-value str">'timezone'</span>, <span class="ruby-value str">'Time Zone'</span>, <span class="ruby-constant">StringAttribute</span>,
1286
+ 390: <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> ],
1287
+ 391: [ <span class="ruby-value str">'title'</span>, <span class="ruby-value str">'Title'</span>, <span class="ruby-constant">StringAttribute</span>,
1288
+ 392: <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> ],
1289
+ 393: [ <span class="ruby-value str">'tree'</span>, <span class="ruby-value str">'Tree Index'</span>, <span class="ruby-constant">StringAttribute</span>,
1290
+ 394: <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> ],
1291
+ 395: [ <span class="ruby-value str">'wbs'</span>, <span class="ruby-value str">'WBS'</span>, <span class="ruby-constant">StringAttribute</span>,
1292
+ 396: <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> ],
1293
+ 397: [ <span class="ruby-value str">'weekStartsMonday'</span>, <span class="ruby-value str">'Week Starts Monday'</span>, <span class="ruby-constant">BooleanAttribute</span>,
1294
+ 398: <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> ]
1295
+ 399: ]
1296
+ 400: <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-identifier">a</span>)) }
1297
+ 401:
1298
+ 402: <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>)
1299
+ 403:
1300
+ 404: <span class="ruby-comment cmt"># A list of files that contained the project data.</span>
1301
+ 405: <span class="ruby-ivar">@inputFiles</span> = <span class="ruby-constant">FileList</span>.<span class="ruby-identifier">new</span>
1302
+ 406:
1303
+ 407: <span class="ruby-ivar">@timeSheets</span> = <span class="ruby-constant">TimeSheets</span>.<span class="ruby-identifier">new</span>
1304
+ 408:
1305
+ 409: <span class="ruby-comment cmt"># A scoreboard that reflects the global working hours and vacations.</span>
1306
+ 410: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-keyword kw">nil</span>
1307
+ 411: <span class="ruby-comment cmt"># A scoreboard that reflects the global working hours but no vacations.</span>
1308
+ 412: <span class="ruby-ivar">@scoreboardNoVacations</span> = <span class="ruby-keyword kw">nil</span>
1309
+ 413:
1310
+ 414: <span class="ruby-comment cmt"># The ReportContext provides additional settings to the report that can</span>
1311
+ 415: <span class="ruby-comment cmt"># complement or replace the report attributes. Reports can include other</span>
1312
+ 416: <span class="ruby-comment cmt"># reports. During report generation, only one context is active, but the</span>
1313
+ 417: <span class="ruby-comment cmt"># context of enclosing reports needs to be preserved. Therefor we use a</span>
1314
+ 418: <span class="ruby-comment cmt"># stack to implement this.</span>
1315
+ 419: <span class="ruby-ivar">@reportContexts</span> = []
1316
+ 420: <span class="ruby-ivar">@outputDir</span> = <span class="ruby-value str">''</span>
1317
+ 421: <span class="ruby-ivar">@warnTsDeltas</span> = <span class="ruby-keyword kw">false</span>
1318
+ 422: <span class="ruby-keyword kw">end</span></pre>
1297
1319
  </div>
1298
1320
 
1299
1321
  </div>
@@ -1334,13 +1356,13 @@ attribute.
1334
1356
  <div class="method-source-code"
1335
1357
  id="--source">
1336
1358
  <pre>
1337
- <span class="ruby-comment cmt"># File lib/Project.rb, line 420</span>
1338
- 420: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">name</span>)
1339
- 421: <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>)
1340
- 422: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
1341
- 423: <span class="ruby-keyword kw">end</span>
1342
- 424: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>]
1343
- 425: <span class="ruby-keyword kw">end</span></pre>
1359
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 431</span>
1360
+ 431: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]</span>(<span class="ruby-identifier">name</span>)
1361
+ 432: <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>)
1362
+ 433: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
1363
+ 434: <span class="ruby-keyword kw">end</span>
1364
+ 435: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>]
1365
+ 436: <span class="ruby-keyword kw">end</span></pre>
1344
1366
  </div>
1345
1367
 
1346
1368
  </div>
@@ -1374,30 +1396,30 @@ to <em>value</em>.
1374
1396
  <div class="method-source-code"
1375
1397
  id="--source">
1376
1398
  <pre>
1377
- <span class="ruby-comment cmt"># File lib/Project.rb, line 428</span>
1378
- 428: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)
1379
- 429: <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>)
1380
- 430: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
1381
- 431: <span class="ruby-keyword kw">end</span>
1382
- 432: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">value</span>
1383
- 433:
1384
- 434: <span class="ruby-comment cmt"># If the start, end or schedule granularity have been changed, we have</span>
1385
- 435: <span class="ruby-comment cmt"># to reset the working hours.</span>
1386
- 436: <span class="ruby-keyword kw">if</span> <span class="ruby-node">%(start end scheduleGranularity timezone timingresolution)</span>.
1387
- 437: <span class="ruby-identifier">include?</span>(<span class="ruby-identifier">name</span>)
1388
- 438: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>]
1389
- 439: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>] =
1390
- 440: <span class="ruby-constant">WorkingHours</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>],
1391
- 441: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>], <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>])
1392
- 442: <span class="ruby-comment cmt"># WorkingHours is using a copy-on-write scheme to prevent multiple</span>
1393
- 443: <span class="ruby-comment cmt"># copies of the same Scoreboard. All other WorkingHours objects are</span>
1394
- 444: <span class="ruby-comment cmt"># created as copies of this object. By calling</span>
1395
- 445: <span class="ruby-comment cmt"># WorkingHours::onShift? we make sure this instance has got a</span>
1396
- 446: <span class="ruby-comment cmt"># Scoreboard than gets reused by the other instances.</span>
1397
- 447: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>].<span class="ruby-identifier">onShift?</span>(<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>])
1398
- 448: <span class="ruby-keyword kw">end</span>
1399
- 449: <span class="ruby-keyword kw">end</span>
1400
- 450: <span class="ruby-keyword kw">end</span></pre>
1399
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 439</span>
1400
+ 439: <span class="ruby-keyword kw">def</span> <span class="ruby-operator">[]=</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)
1401
+ 440: <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>)
1402
+ 441: <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown project attribute #{name}&quot;</span>
1403
+ 442: <span class="ruby-keyword kw">end</span>
1404
+ 443: <span class="ruby-ivar">@attributes</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">value</span>
1405
+ 444:
1406
+ 445: <span class="ruby-comment cmt"># If the start, end or schedule granularity have been changed, we have</span>
1407
+ 446: <span class="ruby-comment cmt"># to reset the working hours.</span>
1408
+ 447: <span class="ruby-keyword kw">if</span> <span class="ruby-node">%(start end scheduleGranularity timezone timingresolution)</span>.
1409
+ 448: <span class="ruby-identifier">include?</span>(<span class="ruby-identifier">name</span>)
1410
+ 449: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>]
1411
+ 450: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>] =
1412
+ 451: <span class="ruby-constant">WorkingHours</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>],
1413
+ 452: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>], <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>])
1414
+ 453: <span class="ruby-comment cmt"># WorkingHours is using a copy-on-write scheme to prevent multiple</span>
1415
+ 454: <span class="ruby-comment cmt"># copies of the same Scoreboard. All other WorkingHours objects are</span>
1416
+ 455: <span class="ruby-comment cmt"># created as copies of this object. By calling</span>
1417
+ 456: <span class="ruby-comment cmt"># WorkingHours::onShift? we make sure this instance has got a</span>
1418
+ 457: <span class="ruby-comment cmt"># Scoreboard than gets reused by the other instances.</span>
1419
+ 458: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>].<span class="ruby-identifier">onShift?</span>(<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>])
1420
+ 459: <span class="ruby-keyword kw">end</span>
1421
+ 460: <span class="ruby-keyword kw">end</span>
1422
+ 461: <span class="ruby-keyword kw">end</span></pre>
1401
1423
  </div>
1402
1424
 
1403
1425
  </div>
@@ -1431,10 +1453,10 @@ return nil if it does not exist.
1431
1453
  <div class="method-source-code"
1432
1454
  id="account-source">
1433
1455
  <pre>
1434
- <span class="ruby-comment cmt"># File lib/Project.rb, line 553</span>
1435
- 553: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">account</span>(<span class="ruby-identifier">id</span>)
1436
- 554: <span class="ruby-ivar">@accounts</span>[<span class="ruby-identifier">id</span>]
1437
- 555: <span class="ruby-keyword kw">end</span></pre>
1456
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 564</span>
1457
+ 564: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">account</span>(<span class="ruby-identifier">id</span>)
1458
+ 565: <span class="ruby-ivar">@accounts</span>[<span class="ruby-identifier">id</span>]
1459
+ 566: <span class="ruby-keyword kw">end</span></pre>
1438
1460
  </div>
1439
1461
 
1440
1462
  </div>
@@ -1470,11 +1492,11 @@ pound sign.
1470
1492
  <div class="method-source-code"
1471
1493
  id="alert-evel-olor-source">
1472
1494
  <pre>
1473
- <span class="ruby-comment cmt"># File lib/Project.rb, line 485</span>
1474
- 485: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelColor</span>(<span class="ruby-identifier">levelIndex</span>)
1475
- 486: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'unknown'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>]
1476
- 487: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>][<span class="ruby-value">2</span>]
1477
- 488: <span class="ruby-keyword kw">end</span></pre>
1495
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 496</span>
1496
+ 496: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelColor</span>(<span class="ruby-identifier">levelIndex</span>)
1497
+ 497: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'unknown'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>]
1498
+ 498: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>][<span class="ruby-value">2</span>]
1499
+ 499: <span class="ruby-keyword kw">end</span></pre>
1478
1500
  </div>
1479
1501
 
1480
1502
  </div>
@@ -1508,11 +1530,11 @@ Return the ID or keyword of the alert level with the given
1508
1530
  <div class="method-source-code"
1509
1531
  id="alert-evel-d-source">
1510
1532
  <pre>
1511
- <span class="ruby-comment cmt"># File lib/Project.rb, line 470</span>
1512
- 470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelId</span>(<span class="ruby-identifier">levelIndex</span>)
1513
- 471: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'unknown'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>]
1514
- 472: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>][<span class="ruby-value">0</span>]
1515
- 473: <span class="ruby-keyword kw">end</span></pre>
1533
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 481</span>
1534
+ 481: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelId</span>(<span class="ruby-identifier">levelIndex</span>)
1535
+ 482: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'unknown'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>]
1536
+ 483: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>][<span class="ruby-value">0</span>]
1537
+ 484: <span class="ruby-keyword kw">end</span></pre>
1516
1538
  </div>
1517
1539
 
1518
1540
  </div>
@@ -1546,15 +1568,15 @@ the index of it. If no level is found, nil is returned.
1546
1568
  <div class="method-source-code"
1547
1569
  id="alert-evel-ndex-source">
1548
1570
  <pre>
1549
- <span class="ruby-comment cmt"># File lib/Project.rb, line 459</span>
1550
- 459: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelIndex</span>(<span class="ruby-identifier">levelName</span>)
1551
- 460: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>].<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1552
- 461: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">levelName</span>
1553
- 462: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">i</span>
1554
- 463: <span class="ruby-keyword kw">end</span>
1555
- 464: <span class="ruby-keyword kw">end</span>
1556
- 465: <span class="ruby-keyword kw">nil</span>
1557
- 466: <span class="ruby-keyword kw">end</span></pre>
1571
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 470</span>
1572
+ 470: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelIndex</span>(<span class="ruby-identifier">levelName</span>)
1573
+ 471: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>].<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
1574
+ 472: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">i</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">levelName</span>
1575
+ 473: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">i</span>
1576
+ 474: <span class="ruby-keyword kw">end</span>
1577
+ 475: <span class="ruby-keyword kw">end</span>
1578
+ 476: <span class="ruby-keyword kw">nil</span>
1579
+ 477: <span class="ruby-keyword kw">end</span></pre>
1558
1580
  </div>
1559
1581
 
1560
1582
  </div>
@@ -1588,11 +1610,11 @@ Return the user readable name of the alert level with the given
1588
1610
  <div class="method-source-code"
1589
1611
  id="alert-evel-ame-source">
1590
1612
  <pre>
1591
- <span class="ruby-comment cmt"># File lib/Project.rb, line 477</span>
1592
- 477: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelName</span>(<span class="ruby-identifier">levelIndex</span>)
1593
- 478: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'unknown'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>]
1594
- 479: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>][<span class="ruby-value">1</span>]
1595
- 480: <span class="ruby-keyword kw">end</span></pre>
1613
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 488</span>
1614
+ 488: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">alertLevelName</span>(<span class="ruby-identifier">levelIndex</span>)
1615
+ 489: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">'unknown'</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>]
1616
+ 490: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'alertLevels'</span>][<span class="ruby-identifier">levelIndex</span>][<span class="ruby-value">1</span>]
1617
+ 491: <span class="ruby-keyword kw">end</span></pre>
1596
1618
  </div>
1597
1619
 
1598
1620
  </div>
@@ -1627,14 +1649,14 @@ tasks over resources here.
1627
1649
  <div class="method-source-code"
1628
1650
  id="attribute-ame-source">
1629
1651
  <pre>
1630
- <span class="ruby-comment cmt"># File lib/Project.rb, line 868</span>
1631
- 868: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">attributeName</span>(<span class="ruby-identifier">id</span>)
1632
- 869: <span class="ruby-comment cmt"># We have to see if the attribute id is a task or resource attribute and</span>
1633
- 870: <span class="ruby-comment cmt"># return it's name.</span>
1634
- 871: (<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>
1635
- 872: (<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>
1636
- 873: <span class="ruby-identifier">name</span>
1637
- 874: <span class="ruby-keyword kw">end</span></pre>
1652
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 901</span>
1653
+ 901: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">attributeName</span>(<span class="ruby-identifier">id</span>)
1654
+ 902: <span class="ruby-comment cmt"># We have to see if the attribute id is a task or resource attribute and</span>
1655
+ 903: <span class="ruby-comment cmt"># return it's name.</span>
1656
+ 904: (<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>
1657
+ 905: (<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>
1658
+ 906: <span class="ruby-identifier">name</span>
1659
+ 907: <span class="ruby-keyword kw">end</span></pre>
1638
1660
  </div>
1639
1661
 
1640
1662
  </div>
@@ -1668,22 +1690,22 @@ format.
1668
1690
  <div class="method-source-code"
1669
1691
  id="check-eports-source">
1670
1692
  <pre>
1671
- <span class="ruby-comment cmt"># File lib/Project.rb, line 624</span>
1672
- 624: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkReports</span>
1673
- 625: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">empty?</span>
1674
- 626: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-value str">'no_report_defined'</span>,
1675
- 627: <span class="ruby-value str">&quot;This project has no reports defined. &quot;</span> <span class="ruby-operator">+</span>
1676
- 628: <span class="ruby-value str">&quot;No output data will be generated.&quot;</span>)
1677
- 629: <span class="ruby-keyword kw">end</span>
1678
- 630:
1679
- 631: <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>
1680
- 632: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</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>
1681
- 633: <span class="ruby-keyword kw">end</span>
1682
- 634:
1683
- 635: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-value str">'all_formats_empty'</span>,
1684
- 636: <span class="ruby-value str">&quot;None of the reports has a 'formats' attribute. &quot;</span> <span class="ruby-operator">+</span>
1685
- 637: <span class="ruby-value str">&quot;No output data will be generated.&quot;</span>)
1686
- 638: <span class="ruby-keyword kw">end</span></pre>
1693
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 636</span>
1694
+ 636: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkReports</span>
1695
+ 637: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">empty?</span>
1696
+ 638: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-value str">'no_report_defined'</span>,
1697
+ 639: <span class="ruby-value str">&quot;This project has no reports defined. &quot;</span> <span class="ruby-operator">+</span>
1698
+ 640: <span class="ruby-value str">&quot;No output data will be generated.&quot;</span>)
1699
+ 641: <span class="ruby-keyword kw">end</span>
1700
+ 642:
1701
+ 643: <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>
1702
+ 644: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</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>
1703
+ 645: <span class="ruby-keyword kw">end</span>
1704
+ 646:
1705
+ 647: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-value str">'all_formats_empty'</span>,
1706
+ 648: <span class="ruby-value str">&quot;None of the reports has a 'formats' attribute. &quot;</span> <span class="ruby-operator">+</span>
1707
+ 649: <span class="ruby-value str">&quot;No output data will be generated.&quot;</span>)
1708
+ 650: <span class="ruby-keyword kw">end</span></pre>
1687
1709
  </div>
1688
1710
 
1689
1711
  </div>
@@ -1714,10 +1736,46 @@ format.
1714
1736
  <div class="method-source-code"
1715
1737
  id="check-ime-heets-source">
1716
1738
  <pre>
1717
- <span class="ruby-comment cmt"># File lib/Project.rb, line 732</span>
1718
- 732: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkTimeSheets</span>
1719
- 733: <span class="ruby-ivar">@timeSheets</span>.<span class="ruby-identifier">check</span>
1720
- 734: <span class="ruby-keyword kw">end</span></pre>
1739
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 747</span>
1740
+ 747: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">checkTimeSheets</span>
1741
+ 748: <span class="ruby-ivar">@timeSheets</span>.<span class="ruby-identifier">check</span>
1742
+ 749: <span class="ruby-keyword kw">end</span></pre>
1743
+ </div>
1744
+
1745
+ </div>
1746
+
1747
+
1748
+
1749
+
1750
+ </div>
1751
+
1752
+
1753
+ <div id="collect-ime-ff-ntervals-method" class="method-detail ">
1754
+ <a name="method-i-collectTimeOffIntervals"></a>
1755
+
1756
+ <div class="method-heading">
1757
+
1758
+ <span class="method-name">collectTimeOffIntervals</span><span
1759
+ class="method-args">(iv, minDuration)</span>
1760
+ <span class="method-click-advice">click to toggle source</span>
1761
+
1762
+ </div>
1763
+
1764
+ <div class="method-description">
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+ <div class="method-source-code"
1771
+ id="collect-ime-ff-ntervals-source">
1772
+ <pre>
1773
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 858</span>
1774
+ 858: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collectTimeOffIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>)
1775
+ 859: <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">collectIntervals</span>(<span class="ruby-identifier">iv</span>, <span class="ruby-identifier">minDuration</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
1776
+ 860: <span class="ruby-identifier">val</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Fixnum</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x3E</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1777
+ 861: <span class="ruby-keyword kw">end</span>
1778
+ 862: <span class="ruby-keyword kw">end</span></pre>
1721
1779
  </div>
1722
1780
 
1723
1781
  </div>
@@ -1751,10 +1809,10 @@ setting of the global &#8216;dailyworkinghours&#8217; attribute.
1751
1809
  <div class="method-source-code"
1752
1810
  id="convert-o-aily-oad-source">
1753
1811
  <pre>
1754
- <span class="ruby-comment cmt"># File lib/Project.rb, line 802</span>
1755
- 802: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convertToDailyLoad</span>(<span class="ruby-identifier">seconds</span>)
1756
- 803: <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-value">3600.0</span>)
1757
- 804: <span class="ruby-keyword kw">end</span></pre>
1812
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 817</span>
1813
+ 817: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">convertToDailyLoad</span>(<span class="ruby-identifier">seconds</span>)
1814
+ 818: <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-value">3600.0</span>)
1815
+ 819: <span class="ruby-keyword kw">end</span></pre>
1758
1816
  </div>
1759
1817
 
1760
1818
  </div>
@@ -1788,10 +1846,10 @@ can be set to other values by the user.
1788
1846
  <div class="method-source-code"
1789
1847
  id="daily-orking-ours-source">
1790
1848
  <pre>
1791
- <span class="ruby-comment cmt"># File lib/Project.rb, line 492</span>
1792
- 492: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dailyWorkingHours</span>
1793
- 493: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>].<span class="ruby-identifier">to_f</span>
1794
- 494: <span class="ruby-keyword kw">end</span></pre>
1849
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 503</span>
1850
+ 503: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">dailyWorkingHours</span>
1851
+ 504: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'dailyworkinghours'</span>].<span class="ruby-identifier">to_f</span>
1852
+ 505: <span class="ruby-keyword kw">end</span></pre>
1795
1853
  </div>
1796
1854
 
1797
1855
  </div>
@@ -1827,21 +1885,21 @@ time frame.
1827
1885
  <div class="method-source-code"
1828
1886
  id="date-o-dx-source">
1829
1887
  <pre>
1830
- <span class="ruby-comment cmt"># File lib/Project.rb, line 828</span>
1831
- 828: <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>)
1832
- 829: <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>])
1833
- 830: <span class="ruby-comment cmt"># Date is out of range.</span>
1834
- 831: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">forceIntoProject</span>
1835
- 832: <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>]
1836
- 833: <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>]
1837
- 834: <span class="ruby-keyword kw">else</span>
1838
- 835: <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>
1839
- 836: <span class="ruby-node">&quot;(#{@attributes['start']} - #{@attributes['end']})&quot;</span>
1840
- 837: <span class="ruby-keyword kw">end</span>
1841
- 838: <span class="ruby-keyword kw">end</span>
1842
- 839: <span class="ruby-comment cmt"># Calculate the corresponding index.</span>
1843
- 840: ((<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>
1844
- 841: <span class="ruby-keyword kw">end</span></pre>
1888
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 843</span>
1889
+ 843: <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>)
1890
+ 844: <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>])
1891
+ 845: <span class="ruby-comment cmt"># Date is out of range.</span>
1892
+ 846: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">forceIntoProject</span>
1893
+ 847: <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>]
1894
+ 848: <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>]
1895
+ 849: <span class="ruby-keyword kw">else</span>
1896
+ 850: <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>
1897
+ 851: <span class="ruby-node">&quot;(#{@attributes['start']} - #{@attributes['end']})&quot;</span>
1898
+ 852: <span class="ruby-keyword kw">end</span>
1899
+ 853: <span class="ruby-keyword kw">end</span>
1900
+ 854: <span class="ruby-comment cmt"># Calculate the corresponding index.</span>
1901
+ 855: ((<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>
1902
+ 856: <span class="ruby-keyword kw">end</span></pre>
1845
1903
  </div>
1846
1904
 
1847
1905
  </div>
@@ -1876,10 +1934,10 @@ of the whole project.
1876
1934
  <div class="method-source-code"
1877
1935
  id="deep-clone-source">
1878
1936
  <pre>
1879
- <span class="ruby-comment cmt"># File lib/Project.rb, line 415</span>
1880
- 415: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deep_clone</span>
1881
- 416: <span class="ruby-keyword kw">self</span>
1882
- 417: <span class="ruby-keyword kw">end</span></pre>
1937
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 426</span>
1938
+ 426: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deep_clone</span>
1939
+ 427: <span class="ruby-keyword kw">self</span>
1940
+ 428: <span class="ruby-keyword kw">end</span></pre>
1883
1941
  </div>
1884
1942
 
1885
1943
  </div>
@@ -1912,10 +1970,10 @@ This function sends an error message to the message handler.
1912
1970
  <div class="method-source-code"
1913
1971
  id="error-source">
1914
1972
  <pre>
1915
- <span class="ruby-comment cmt"># File lib/Project.rb, line 890</span>
1916
- 890: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>)
1917
- 891: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>)
1918
- 892: <span class="ruby-keyword kw">end</span></pre>
1973
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 923</span>
1974
+ 923: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>)
1975
+ 924: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">text</span>)
1976
+ 925: <span class="ruby-keyword kw">end</span></pre>
1919
1977
  </div>
1920
1978
 
1921
1979
  </div>
@@ -1932,7 +1990,7 @@ This function sends an error message to the message handler.
1932
1990
  <div class="method-heading">
1933
1991
 
1934
1992
  <span class="method-name">generateReport</span><span
1935
- class="method-args">(reportId, regExpMode, dynamicAttributes = nil)</span>
1993
+ class="method-args">(reportId, regExpMode, formats = nil, dynamicAttributes = nil)</span>
1936
1994
  <span class="method-click-advice">click to toggle source</span>
1937
1995
 
1938
1996
  </div>
@@ -1946,43 +2004,46 @@ This function sends an error message to the message handler.
1946
2004
  <div class="method-source-code"
1947
2005
  id="generate-eport-source">
1948
2006
  <pre>
1949
- <span class="ruby-comment cmt"># File lib/Project.rb, line 682</span>
1950
- 682: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateReport</span>(<span class="ruby-identifier">reportId</span>, <span class="ruby-identifier">regExpMode</span>, <span class="ruby-identifier">dynamicAttributes</span> = <span class="ruby-keyword kw">nil</span>)
1951
- 683: <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">regExpMode</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">matchingReports</span>(<span class="ruby-identifier">reportId</span>) <span class="ruby-operator">:</span>
1952
- 684: [ <span class="ruby-identifier">reportId</span> ]
1953
- 685: <span class="ruby-identifier">reportList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">id</span><span class="ruby-operator">|</span>
1954
- 686: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">report</span> = <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">id</span>])
1955
- 687: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unknown_report_id'</span>,
1956
- 688: <span class="ruby-node">&quot;Request to generate unknown report #{id}&quot;</span>)
1957
- 689: <span class="ruby-keyword kw">end</span>
1958
- 690: <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>
1959
- 691: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'formats_empty'</span>,
1960
- 692: <span class="ruby-node">&quot;The report #{report.fullId} has no 'formats' attribute. &quot;</span> <span class="ruby-operator">+</span>
1961
- 693: <span class="ruby-value str">&quot;No output data will be generated.&quot;</span>)
1962
- 694: <span class="ruby-keyword kw">end</span>
1963
- 695:
1964
- 696: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.name}&quot;</span>)
1965
- 697: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">context</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>))
1966
- 698:
1967
- 699: <span class="ruby-comment cmt"># If we have dynamic attributes we need to backup the old attributes</span>
1968
- 700: <span class="ruby-comment cmt"># first, then parse the dynamicAttributes String replacing the</span>
1969
- 701: <span class="ruby-comment cmt"># original values.</span>
1970
- 702: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dynamicAttributes</span>
1971
- 703: <span class="ruby-identifier">context</span>.<span class="ruby-identifier">attributeBackup</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">backupAttributes</span>
1972
- 704: <span class="ruby-identifier">parser</span> = <span class="ruby-constant">ProjectFileParser</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@messageHandler</span>)
1973
- 705: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">parseReportAttributes</span>(<span class="ruby-identifier">report</span>, <span class="ruby-identifier">dynamicAttributes</span>)
1974
- 706: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">set</span>(<span class="ruby-value str">'interactive'</span>, <span class="ruby-keyword kw">true</span>)
2007
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 694</span>
2008
+ 694: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateReport</span>(<span class="ruby-identifier">reportId</span>, <span class="ruby-identifier">regExpMode</span>, <span class="ruby-identifier">formats</span> = <span class="ruby-keyword kw">nil</span>,
2009
+ 695: <span class="ruby-identifier">dynamicAttributes</span> = <span class="ruby-keyword kw">nil</span>)
2010
+ 696: <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">regExpMode</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">matchingReports</span>(<span class="ruby-identifier">reportId</span>) <span class="ruby-operator">:</span>
2011
+ 697: [ <span class="ruby-identifier">reportId</span> ]
2012
+ 698: <span class="ruby-identifier">reportList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">id</span><span class="ruby-operator">|</span>
2013
+ 699: <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">report</span> = <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">id</span>])
2014
+ 700: <span class="ruby-identifier">error</span>(<span class="ruby-value str">'unknown_report_id'</span>,
2015
+ 701: <span class="ruby-node">&quot;Request to generate unknown report #{id}&quot;</span>)
2016
+ 702: <span class="ruby-keyword kw">end</span>
2017
+ 703: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">formats</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</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>
2018
+ 704: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'formats_empty'</span>,
2019
+ 705: <span class="ruby-node">&quot;The report #{report.fullId} has no 'formats' attribute. &quot;</span> <span class="ruby-operator">+</span>
2020
+ 706: <span class="ruby-value str">&quot;No output data will be generated.&quot;</span>)
1975
2021
  707: <span class="ruby-keyword kw">end</span>
1976
2022
  708:
1977
- 709: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
1978
- 710:
1979
- 711: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dynamicAttributes</span>
1980
- 712: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">restoreAttributes</span>(<span class="ruby-identifier">context</span>.<span class="ruby-identifier">attributeBackup</span>)
1981
- 713: <span class="ruby-keyword kw">end</span>
1982
- 714: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">pop</span>
1983
- 715: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
1984
- 716: <span class="ruby-keyword kw">end</span>
1985
- 717: <span class="ruby-keyword kw">end</span></pre>
2023
+ 709: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.name}&quot;</span>)
2024
+ 710: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">context</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>))
2025
+ 711:
2026
+ 712: <span class="ruby-comment cmt"># If we have dynamic attributes we need to backup the old attributes</span>
2027
+ 713: <span class="ruby-comment cmt"># first, then parse the dynamicAttributes String replacing the</span>
2028
+ 714: <span class="ruby-comment cmt"># original values.</span>
2029
+ 715: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dynamicAttributes</span>
2030
+ 716: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">dynamicAttributes</span>.<span class="ruby-identifier">empty?</span>
2031
+ 717: <span class="ruby-identifier">context</span>.<span class="ruby-identifier">attributeBackup</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">backupAttributes</span>
2032
+ 718: <span class="ruby-identifier">parser</span> = <span class="ruby-constant">ProjectFileParser</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@messageHandler</span>)
2033
+ 719: <span class="ruby-identifier">parser</span>.<span class="ruby-identifier">parseReportAttributes</span>(<span class="ruby-identifier">report</span>, <span class="ruby-identifier">dynamicAttributes</span>)
2034
+ 720: <span class="ruby-keyword kw">end</span>
2035
+ 721: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">set</span>(<span class="ruby-value str">'interactive'</span>, <span class="ruby-keyword kw">true</span>)
2036
+ 722: <span class="ruby-keyword kw">end</span>
2037
+ 723:
2038
+ 724: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>(<span class="ruby-identifier">formats</span>)
2039
+ 725:
2040
+ 726: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">dynamicAttributes</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">dynamicAttributes</span>.<span class="ruby-identifier">empty?</span>
2041
+ 727: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">restoreAttributes</span>(<span class="ruby-identifier">context</span>.<span class="ruby-identifier">attributeBackup</span>)
2042
+ 728: <span class="ruby-keyword kw">end</span>
2043
+ 729: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">pop</span>
2044
+ 730: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2045
+ 731: <span class="ruby-keyword kw">end</span>
2046
+ 732: <span class="ruby-keyword kw">end</span></pre>
1986
2047
  </div>
1987
2048
 
1988
2049
  </div>
@@ -2017,46 +2078,46 @@ href="Project.html#method-i-schedule">Project#schedule</a> has been called.
2017
2078
  <div class="method-source-code"
2018
2079
  id="generate-eports-source">
2019
2080
  <pre>
2020
- <span class="ruby-comment cmt"># File lib/Project.rb, line 642</span>
2021
- 642: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateReports</span>(<span class="ruby-identifier">maxCpuCores</span>)
2022
- 643: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">index</span>
2023
- 644: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">maxCpuCores</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
2024
- 645: <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>
2025
- 646: <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>
2026
- 647: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.name}&quot;</span>)
2027
- 648: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">push</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>))
2028
- 649: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
2029
- 650: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">pop</span>
2030
- 651: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2031
- 652: <span class="ruby-keyword kw">end</span>
2032
- 653: <span class="ruby-keyword kw">else</span>
2033
- 654: <span class="ruby-comment cmt"># Kickoff the generation of all reports by pushing the jobs into the</span>
2034
- 655: <span class="ruby-comment cmt"># BatchProcessor queue.</span>
2035
- 656: <span class="ruby-identifier">bp</span> = <span class="ruby-constant">BatchProcessor</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">maxCpuCores</span>)
2081
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 654</span>
2082
+ 654: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateReports</span>(<span class="ruby-identifier">maxCpuCores</span>)
2083
+ 655: <span class="ruby-ivar">@reports</span>.<span class="ruby-identifier">index</span>
2084
+ 656: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">maxCpuCores</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
2036
2085
  657: <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>
2037
2086
  658: <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>
2038
- 659: <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">queue</span>(<span class="ruby-identifier">report</span>) {
2039
- 660: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">push</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>))
2040
- 661: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
2041
- 662: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">pop</span>
2042
- 663: <span class="ruby-identifier">res</span>
2043
- 664: }
2044
- 665: <span class="ruby-keyword kw">end</span>
2045
- 666: <span class="ruby-comment cmt"># Now wait for all the jobs to finish.</span>
2046
- 667: <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>
2047
- 668: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.tag.name}&quot;</span>)
2048
- 669: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stdout</span>)
2049
- 670: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stderr</span>)
2050
- 671: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">retVal</span>.<span class="ruby-identifier">signaled?</span>
2051
- 672: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'rg_signal'</span>, <span class="ruby-value str">&quot;Signal raised&quot;</span>)
2052
- 673: <span class="ruby-keyword kw">end</span>
2053
- 674: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">retVal</span>.<span class="ruby-identifier">success?</span>
2054
- 675: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'rg_abort'</span>, <span class="ruby-value str">&quot;Process aborted&quot;</span>)
2055
- 676: <span class="ruby-keyword kw">end</span>
2056
- 677: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2057
- 678: <span class="ruby-keyword kw">end</span>
2058
- 679: <span class="ruby-keyword kw">end</span>
2059
- 680: <span class="ruby-keyword kw">end</span></pre>
2087
+ 659: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.name}&quot;</span>)
2088
+ 660: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">push</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>))
2089
+ 661: <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
2090
+ 662: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">pop</span>
2091
+ 663: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2092
+ 664: <span class="ruby-keyword kw">end</span>
2093
+ 665: <span class="ruby-keyword kw">else</span>
2094
+ 666: <span class="ruby-comment cmt"># Kickoff the generation of all reports by pushing the jobs into the</span>
2095
+ 667: <span class="ruby-comment cmt"># BatchProcessor queue.</span>
2096
+ 668: <span class="ruby-identifier">bp</span> = <span class="ruby-constant">BatchProcessor</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">maxCpuCores</span>)
2097
+ 669: <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>
2098
+ 670: <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>
2099
+ 671: <span class="ruby-identifier">bp</span>.<span class="ruby-identifier">queue</span>(<span class="ruby-identifier">report</span>) {
2100
+ 672: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">push</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>))
2101
+ 673: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">generate</span>
2102
+ 674: <span class="ruby-ivar">@reportContexts</span>.<span class="ruby-identifier">pop</span>
2103
+ 675: <span class="ruby-identifier">res</span>
2104
+ 676: }
2105
+ 677: <span class="ruby-keyword kw">end</span>
2106
+ 678: <span class="ruby-comment cmt"># Now wait for all the jobs to finish.</span>
2107
+ 679: <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>
2108
+ 680: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-node">&quot;Report #{report.tag.name}&quot;</span>)
2109
+ 681: <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stdout</span>)
2110
+ 682: <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">report</span>.<span class="ruby-identifier">stderr</span>)
2111
+ 683: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">retVal</span>.<span class="ruby-identifier">signaled?</span>
2112
+ 684: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'rg_signal'</span>, <span class="ruby-value str">&quot;Signal raised&quot;</span>)
2113
+ 685: <span class="ruby-keyword kw">end</span>
2114
+ 686: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">report</span>.<span class="ruby-identifier">retVal</span>.<span class="ruby-identifier">success?</span>
2115
+ 687: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'rg_abort'</span>, <span class="ruby-value str">&quot;Process aborted&quot;</span>)
2116
+ 688: <span class="ruby-keyword kw">end</span>
2117
+ 689: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2118
+ 690: <span class="ruby-keyword kw">end</span>
2119
+ 691: <span class="ruby-keyword kw">end</span>
2120
+ 692: <span class="ruby-keyword kw">end</span></pre>
2060
2121
  </div>
2061
2122
 
2062
2123
  </div>
@@ -2092,13 +2153,13 @@ raised.
2092
2153
  <div class="method-source-code"
2093
2154
  id="idx-o-ate-source">
2094
2155
  <pre>
2095
- <span class="ruby-comment cmt"># File lib/Project.rb, line 818</span>
2096
- 818: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
2097
- 819: <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>)
2098
- 820: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Scoreboard index out of range&quot;</span>
2099
- 821: <span class="ruby-keyword kw">end</span>
2100
- 822: <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-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
2101
- 823: <span class="ruby-keyword kw">end</span></pre>
2156
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 833</span>
2157
+ 833: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">idxToDate</span>(<span class="ruby-identifier">idx</span>)
2158
+ 834: <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>)
2159
+ 835: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Scoreboard index out of range&quot;</span>
2160
+ 836: <span class="ruby-keyword kw">end</span>
2161
+ 837: <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-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
2162
+ 838: <span class="ruby-keyword kw">end</span></pre>
2102
2163
  </div>
2103
2164
 
2104
2165
  </div>
@@ -2136,29 +2197,29 @@ defined and the slot lies within a defined working time period.
2136
2197
  <div class="method-source-code"
2137
2198
  id="is-orking-ime-source">
2138
2199
  <pre>
2139
- <span class="ruby-comment cmt"># File lib/Project.rb, line 777</span>
2140
- 777: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isWorkingTime</span>(*<span class="ruby-identifier">args</span>)
2141
- 778: <span class="ruby-comment cmt"># Normalize argument(s) to Interval</span>
2142
- 779: <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>
2143
- 780: <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>)
2144
- 781: <span class="ruby-identifier">iv</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
2145
- 782: <span class="ruby-keyword kw">else</span>
2146
- 783: <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>
2147
- 784: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
2148
- 785: <span class="ruby-keyword kw">end</span>
2149
- 786: <span class="ruby-keyword kw">else</span>
2150
- 787: <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>])
2151
- 788: <span class="ruby-keyword kw">end</span>
2152
- 789:
2153
- 790: <span class="ruby-comment cmt"># Check if the interval has overlap with any of the global vacations.</span>
2154
- 791: <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>
2155
- 792: <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>)
2156
- 793: <span class="ruby-keyword kw">end</span>
2157
- 794:
2158
- 795: <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>)
2159
- 796:
2160
- 797: <span class="ruby-keyword kw">true</span>
2161
- 798: <span class="ruby-keyword kw">end</span></pre>
2200
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 792</span>
2201
+ 792: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">isWorkingTime</span>(*<span class="ruby-identifier">args</span>)
2202
+ 793: <span class="ruby-comment cmt"># Normalize argument(s) to Interval</span>
2203
+ 794: <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>
2204
+ 795: <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>)
2205
+ 796: <span class="ruby-identifier">iv</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>]
2206
+ 797: <span class="ruby-keyword kw">else</span>
2207
+ 798: <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>
2208
+ 799: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>])
2209
+ 800: <span class="ruby-keyword kw">end</span>
2210
+ 801: <span class="ruby-keyword kw">else</span>
2211
+ 802: <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>])
2212
+ 803: <span class="ruby-keyword kw">end</span>
2213
+ 804:
2214
+ 805: <span class="ruby-comment cmt"># Check if the interval has overlap with any of the global vacations.</span>
2215
+ 806: <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>
2216
+ 807: <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>)
2217
+ 808: <span class="ruby-keyword kw">end</span>
2218
+ 809:
2219
+ 810: <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>)
2220
+ 811:
2221
+ 812: <span class="ruby-keyword kw">true</span>
2222
+ 813: <span class="ruby-keyword kw">end</span></pre>
2162
2223
  </div>
2163
2224
 
2164
2225
  </div>
@@ -2189,19 +2250,19 @@ defined and the slot lies within a defined working time period.
2189
2250
  <div class="method-source-code"
2190
2251
  id="list-eports-source">
2191
2252
  <pre>
2192
- <span class="ruby-comment cmt"># File lib/Project.rb, line 719</span>
2193
- 719: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">listReports</span>(<span class="ruby-identifier">reportId</span>, <span class="ruby-identifier">regExpMode</span>)
2194
- 720: <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">regExpMode</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">matchingReports</span>(<span class="ruby-identifier">reportId</span>) <span class="ruby-operator">:</span>
2195
- 721: <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">reportId</span>] <span class="ruby-operator">?</span> [ <span class="ruby-identifier">reportId</span> ] <span class="ruby-operator">:</span> []
2196
- 722: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;No match for #{reportId}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportList</span>.<span class="ruby-identifier">empty?</span>
2197
- 723: <span class="ruby-identifier">reportList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">id</span><span class="ruby-operator">|</span>
2198
- 724: <span class="ruby-identifier">report</span> = <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">id</span>]
2199
- 725: <span class="ruby-identifier">formats</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>)
2200
- 726: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">formats</span>.<span class="ruby-identifier">empty?</span>
2201
- 727:
2202
- 728: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">sprintf</span>(<span class="ruby-value str">&quot;%s\t%s\t%s&quot;</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">formats</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">', '</span>), <span class="ruby-identifier">report</span>.<span class="ruby-identifier">name</span>)
2203
- 729: <span class="ruby-keyword kw">end</span>
2204
- 730: <span class="ruby-keyword kw">end</span></pre>
2253
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 734</span>
2254
+ 734: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">listReports</span>(<span class="ruby-identifier">reportId</span>, <span class="ruby-identifier">regExpMode</span>)
2255
+ 735: <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">regExpMode</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">reportList</span> = <span class="ruby-identifier">matchingReports</span>(<span class="ruby-identifier">reportId</span>) <span class="ruby-operator">:</span>
2256
+ 736: <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">reportId</span>] <span class="ruby-operator">?</span> [ <span class="ruby-identifier">reportId</span> ] <span class="ruby-operator">:</span> []
2257
+ 737: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;No match for #{reportId}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">reportList</span>.<span class="ruby-identifier">empty?</span>
2258
+ 738: <span class="ruby-identifier">reportList</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">id</span><span class="ruby-operator">|</span>
2259
+ 739: <span class="ruby-identifier">report</span> = <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">id</span>]
2260
+ 740: <span class="ruby-identifier">formats</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'formats'</span>)
2261
+ 741: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">formats</span>.<span class="ruby-identifier">empty?</span>
2262
+ 742:
2263
+ 743: <span class="ruby-identifier">puts</span> <span class="ruby-identifier">sprintf</span>(<span class="ruby-value str">&quot;%s\t%s\t%s&quot;</span>, <span class="ruby-identifier">id</span>, <span class="ruby-identifier">formats</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">', '</span>), <span class="ruby-identifier">report</span>.<span class="ruby-identifier">name</span>)
2264
+ 744: <span class="ruby-keyword kw">end</span>
2265
+ 745: <span class="ruby-keyword kw">end</span></pre>
2205
2266
  </div>
2206
2267
 
2207
2268
  </div>
@@ -2234,10 +2295,10 @@ Return the average number of working days per month.
2234
2295
  <div class="method-source-code"
2235
2296
  id="monthly-orking-ays-source">
2236
2297
  <pre>
2237
- <span class="ruby-comment cmt"># File lib/Project.rb, line 502</span>
2238
- 502: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">monthlyWorkingDays</span>
2239
- 503: <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>
2240
- 504: <span class="ruby-keyword kw">end</span></pre>
2298
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 513</span>
2299
+ 513: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">monthlyWorkingDays</span>
2300
+ 514: <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>
2301
+ 515: <span class="ruby-keyword kw">end</span></pre>
2241
2302
  </div>
2242
2303
 
2243
2304
  </div>
@@ -2271,10 +2332,10 @@ return nil if it does not exist.
2271
2332
  <div class="method-source-code"
2272
2333
  id="report-source">
2273
2334
  <pre>
2274
- <span class="ruby-comment cmt"># File lib/Project.rb, line 568</span>
2275
- 568: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">report</span>(<span class="ruby-identifier">id</span>)
2276
- 569: <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">id</span>]
2277
- 570: <span class="ruby-keyword kw">end</span></pre>
2335
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 579</span>
2336
+ 579: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">report</span>(<span class="ruby-identifier">id</span>)
2337
+ 580: <span class="ruby-ivar">@reports</span>[<span class="ruby-identifier">id</span>]
2338
+ 581: <span class="ruby-keyword kw">end</span></pre>
2278
2339
  </div>
2279
2340
 
2280
2341
  </div>
@@ -2308,13 +2369,13 @@ return nil if it does not exist.
2308
2369
  <div class="method-source-code"
2309
2370
  id="report-y-ame-source">
2310
2371
  <pre>
2311
- <span class="ruby-comment cmt"># File lib/Project.rb, line 574</span>
2312
- 574: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reportByName</span>(<span class="ruby-identifier">name</span>)
2313
- 575: <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>
2314
- 576: <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>
2315
- 577: <span class="ruby-keyword kw">end</span>
2316
- 578: <span class="ruby-keyword kw">nil</span>
2317
- 579: <span class="ruby-keyword kw">end</span></pre>
2372
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 585</span>
2373
+ 585: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reportByName</span>(<span class="ruby-identifier">name</span>)
2374
+ 586: <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>
2375
+ 587: <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>
2376
+ 588: <span class="ruby-keyword kw">end</span>
2377
+ 589: <span class="ruby-keyword kw">nil</span>
2378
+ 590: <span class="ruby-keyword kw">end</span></pre>
2318
2379
  </div>
2319
2380
 
2320
2381
  </div>
@@ -2348,10 +2409,10 @@ return nil if it does not exist.
2348
2409
  <div class="method-source-code"
2349
2410
  id="resource-source">
2350
2411
  <pre>
2351
- <span class="ruby-comment cmt"># File lib/Project.rb, line 563</span>
2352
- 563: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resource</span>(<span class="ruby-identifier">id</span>)
2353
- 564: <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">id</span>]
2354
- 565: <span class="ruby-keyword kw">end</span></pre>
2412
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 574</span>
2413
+ 574: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resource</span>(<span class="ruby-identifier">id</span>)
2414
+ 575: <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">id</span>]
2415
+ 576: <span class="ruby-keyword kw">end</span></pre>
2355
2416
  </div>
2356
2417
 
2357
2418
  </div>
@@ -2385,17 +2446,17 @@ or <em>index</em>.
2385
2446
  <div class="method-source-code"
2386
2447
  id="scenario-source">
2387
2448
  <pre>
2388
- <span class="ruby-comment cmt"># File lib/Project.rb, line 521</span>
2389
- 521: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">arg</span>)
2390
- 522: <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>)
2391
- 523: <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>
2392
- 524: <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>
2393
- 525: <span class="ruby-keyword kw">end</span>
2394
- 526: <span class="ruby-keyword kw">else</span>
2395
- 527: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">arg</span>]
2396
- 528: <span class="ruby-keyword kw">end</span>
2397
- 529: <span class="ruby-keyword kw">nil</span>
2398
- 530: <span class="ruby-keyword kw">end</span></pre>
2449
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 532</span>
2450
+ 532: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">arg</span>)
2451
+ 533: <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>)
2452
+ 534: <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>
2453
+ 535: <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>
2454
+ 536: <span class="ruby-keyword kw">end</span>
2455
+ 537: <span class="ruby-keyword kw">else</span>
2456
+ 538: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@scenarios</span>[<span class="ruby-identifier">arg</span>]
2457
+ 539: <span class="ruby-keyword kw">end</span>
2458
+ 540: <span class="ruby-keyword kw">nil</span>
2459
+ 541: <span class="ruby-keyword kw">end</span></pre>
2399
2460
  </div>
2400
2461
 
2401
2462
  </div>
@@ -2428,10 +2489,10 @@ Return the number of defined scenarios for the project.
2428
2489
  <div class="method-source-code"
2429
2490
  id="scenario-ount-source">
2430
2491
  <pre>
2431
- <span class="ruby-comment cmt"># File lib/Project.rb, line 453</span>
2432
- 453: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioCount</span>
2433
- 454: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">items</span>
2434
- 455: <span class="ruby-keyword kw">end</span></pre>
2492
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 464</span>
2493
+ 464: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioCount</span>
2494
+ 465: <span class="ruby-ivar">@scenarios</span>.<span class="ruby-identifier">items</span>
2495
+ 466: <span class="ruby-keyword kw">end</span></pre>
2435
2496
  </div>
2436
2497
 
2437
2498
  </div>
@@ -2465,16 +2526,16 @@ specified by <em>scenario</em> or <em>id</em>.
2465
2526
  <div class="method-source-code"
2466
2527
  id="scenario-dx-source">
2467
2528
  <pre>
2468
- <span class="ruby-comment cmt"># File lib/Project.rb, line 537</span>
2469
- 537: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
2470
- 538: <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>)
2471
- 539: <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>
2472
- 540: <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>
2473
- 541: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
2474
- 542: <span class="ruby-keyword kw">else</span>
2475
- 543: <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>
2476
- 544: <span class="ruby-keyword kw">end</span>
2477
- 545: <span class="ruby-keyword kw">end</span></pre>
2529
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 548</span>
2530
+ 548: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
2531
+ 549: <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>)
2532
+ 550: <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>
2533
+ 551: <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>
2534
+ 552: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
2535
+ 553: <span class="ruby-keyword kw">else</span>
2536
+ 554: <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>
2537
+ 555: <span class="ruby-keyword kw">end</span>
2538
+ 556: <span class="ruby-keyword kw">end</span></pre>
2478
2539
  </div>
2479
2540
 
2480
2541
  </div>
@@ -2509,44 +2570,45 @@ stores the result in the data structures again.
2509
2570
  <div class="method-source-code"
2510
2571
  id="schedule-source">
2511
2572
  <pre>
2512
- <span class="ruby-comment cmt"># File lib/Project.rb, line 584</span>
2513
- 584: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">schedule</span>
2514
- 585: [ <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>
2515
- 586: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">inheritAttributesFromScenario</span>
2516
- 587: <span class="ruby-comment cmt"># Set all index counters to their proper values.</span>
2517
- 588: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">index</span>
2518
- 589: <span class="ruby-keyword kw">end</span>
2519
- 590:
2520
- 591: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">empty?</span>
2521
- 592: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'no_tasks'</span>, <span class="ruby-value str">&quot;No tasks defined&quot;</span>)
2522
- 593: <span class="ruby-keyword kw">end</span>
2523
- 594:
2524
- 595: <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>
2525
- 596: <span class="ruby-comment cmt"># Skip disabled scenarios</span>
2526
- 597: <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>)
2527
- 598:
2528
- 599: <span class="ruby-identifier">scIdx</span> = <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
2529
- 600:
2530
- 601: <span class="ruby-comment cmt"># All user provided values are set now. The next step is to</span>
2531
- 602: <span class="ruby-comment cmt"># propagate inherited values. These values must be marked as</span>
2532
- 603: <span class="ruby-comment cmt"># inherited by setting the mode to 1. As we always call</span>
2533
- 604: <span class="ruby-comment cmt"># PropertyTreeNode#inherit this is just a safeguard.</span>
2534
- 605: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">1</span>)
2535
- 606: <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
2536
- 607:
2537
- 608: <span class="ruby-comment cmt"># Now change to mode 2 so all values that are modified are marked</span>
2538
- 609: <span class="ruby-comment cmt"># as computed.</span>
2539
- 610: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">2</span>)
2540
- 611: <span class="ruby-comment cmt"># Schedule the scenario.</span>
2541
- 612: <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
2542
- 613:
2543
- 614: <span class="ruby-comment cmt"># Complete the data sets, and check the result.</span>
2544
- 615: <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
2545
- 616: <span class="ruby-keyword kw">end</span>
2546
- 617:
2547
- 618: <span class="ruby-ivar">@timeSheets</span>.<span class="ruby-identifier">warnOnDelta</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@warnTsDeltas</span>
2548
- 619: <span class="ruby-keyword kw">true</span>
2549
- 620: <span class="ruby-keyword kw">end</span></pre>
2573
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 595</span>
2574
+ 595: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">schedule</span>
2575
+ 596: <span class="ruby-identifier">initScoreboards</span>
2576
+ 597:
2577
+ 598: [ <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>
2578
+ 599: <span class="ruby-comment cmt"># Set all index counters to their proper values.</span>
2579
+ 600: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">index</span>
2580
+ 601: <span class="ruby-keyword kw">end</span>
2581
+ 602:
2582
+ 603: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">empty?</span>
2583
+ 604: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">error</span>(<span class="ruby-value str">'no_tasks'</span>, <span class="ruby-value str">&quot;No tasks defined&quot;</span>)
2584
+ 605: <span class="ruby-keyword kw">end</span>
2585
+ 606:
2586
+ 607: <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>
2587
+ 608: <span class="ruby-comment cmt"># Skip disabled scenarios</span>
2588
+ 609: <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>)
2589
+ 610:
2590
+ 611: <span class="ruby-identifier">scIdx</span> = <span class="ruby-identifier">scenarioIdx</span>(<span class="ruby-identifier">sc</span>)
2591
+ 612:
2592
+ 613: <span class="ruby-comment cmt"># All user provided values are set now. The next step is to</span>
2593
+ 614: <span class="ruby-comment cmt"># propagate inherited values. These values must be marked as</span>
2594
+ 615: <span class="ruby-comment cmt"># inherited by setting the mode to 1. As we always call</span>
2595
+ 616: <span class="ruby-comment cmt"># PropertyTreeNode#inherit this is just a safeguard.</span>
2596
+ 617: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">1</span>)
2597
+ 618: <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
2598
+ 619:
2599
+ 620: <span class="ruby-comment cmt"># Now change to mode 2 so all values that are modified are marked</span>
2600
+ 621: <span class="ruby-comment cmt"># as computed.</span>
2601
+ 622: <span class="ruby-constant">AttributeBase</span>.<span class="ruby-identifier">setMode</span>(<span class="ruby-value">2</span>)
2602
+ 623: <span class="ruby-comment cmt"># Schedule the scenario.</span>
2603
+ 624: <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
2604
+ 625:
2605
+ 626: <span class="ruby-comment cmt"># Complete the data sets, and check the result.</span>
2606
+ 627: <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
2607
+ 628: <span class="ruby-keyword kw">end</span>
2608
+ 629:
2609
+ 630: <span class="ruby-ivar">@timeSheets</span>.<span class="ruby-identifier">warnOnDelta</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@warnTsDeltas</span>
2610
+ 631: <span class="ruby-keyword kw">true</span>
2611
+ 632: <span class="ruby-keyword kw">end</span></pre>
2550
2612
  </div>
2551
2613
 
2552
2614
  </div>
@@ -2582,11 +2644,11 @@ number of entries in the scoreboards.
2582
2644
  <div class="method-source-code"
2583
2645
  id="scoreboard-ize-source">
2584
2646
  <pre>
2585
- <span class="ruby-comment cmt"># File lib/Project.rb, line 810</span>
2586
- 810: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scoreboardSize</span>
2587
- 811: ((<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>
2588
- 812: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
2589
- 813: <span class="ruby-keyword kw">end</span></pre>
2647
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 825</span>
2648
+ 825: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scoreboardSize</span>
2649
+ 826: ((<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>
2650
+ 827: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]).<span class="ruby-identifier">to_i</span>
2651
+ 828: <span class="ruby-keyword kw">end</span></pre>
2590
2652
  </div>
2591
2653
 
2592
2654
  </div>
@@ -2620,10 +2682,10 @@ nil if it does not exist.
2620
2682
  <div class="method-source-code"
2621
2683
  id="shift-source">
2622
2684
  <pre>
2623
- <span class="ruby-comment cmt"># File lib/Project.rb, line 548</span>
2624
- 548: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">shift</span>(<span class="ruby-identifier">id</span>)
2625
- 549: <span class="ruby-ivar">@shifts</span>[<span class="ruby-identifier">id</span>]
2626
- 550: <span class="ruby-keyword kw">end</span></pre>
2685
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 559</span>
2686
+ 559: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">shift</span>(<span class="ruby-identifier">id</span>)
2687
+ 560: <span class="ruby-ivar">@shifts</span>[<span class="ruby-identifier">id</span>]
2688
+ 561: <span class="ruby-keyword kw">end</span></pre>
2627
2689
  </div>
2628
2690
 
2629
2691
  </div>
@@ -2656,10 +2718,10 @@ Convert timeSlots to working days.
2656
2718
  <div class="method-source-code"
2657
2719
  id="slots-o-ays-source">
2658
2720
  <pre>
2659
- <span class="ruby-comment cmt"># File lib/Project.rb, line 512</span>
2660
- 512: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">slotsToDays</span>(<span class="ruby-identifier">slots</span>)
2661
- 513: <span class="ruby-identifier">slots</span> * <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>] <span class="ruby-operator">/</span> (<span class="ruby-value">60</span> * <span class="ruby-value">60</span> * <span class="ruby-identifier">dailyWorkingHours</span>)
2662
- 514: <span class="ruby-keyword kw">end</span></pre>
2721
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 523</span>
2722
+ 523: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">slotsToDays</span>(<span class="ruby-identifier">slots</span>)
2723
+ 524: <span class="ruby-identifier">slots</span> * <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>] <span class="ruby-operator">/</span> (<span class="ruby-value">60</span> * <span class="ruby-value">60</span> * <span class="ruby-identifier">dailyWorkingHours</span>)
2724
+ 525: <span class="ruby-keyword kw">end</span></pre>
2663
2725
  </div>
2664
2726
 
2665
2727
  </div>
@@ -2693,10 +2755,10 @@ nil if it does not exist.
2693
2755
  <div class="method-source-code"
2694
2756
  id="task-source">
2695
2757
  <pre>
2696
- <span class="ruby-comment cmt"># File lib/Project.rb, line 558</span>
2697
- 558: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">task</span>(<span class="ruby-identifier">id</span>)
2698
- 559: <span class="ruby-ivar">@tasks</span>[<span class="ruby-identifier">id</span>]
2699
- 560: <span class="ruby-keyword kw">end</span></pre>
2758
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 569</span>
2759
+ 569: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">task</span>(<span class="ruby-identifier">id</span>)
2760
+ 570: <span class="ruby-ivar">@tasks</span>[<span class="ruby-identifier">id</span>]
2761
+ 571: <span class="ruby-keyword kw">end</span></pre>
2700
2762
  </div>
2701
2763
 
2702
2764
  </div>
@@ -2729,18 +2791,18 @@ Print the attribute values. It&#8217;s used for debugging only.
2729
2791
  <div class="method-source-code"
2730
2792
  id="to-s-source">
2731
2793
  <pre>
2732
- <span class="ruby-comment cmt"># File lib/Project.rb, line 877</span>
2733
- 877: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
2734
- 878: <span class="ruby-comment cmt">#raise &quot;STOP!&quot;</span>
2735
- 879: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
2736
- 880: <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>
2737
- 881: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span>
2738
- 882: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{attribute}: &quot;</span> <span class="ruby-operator">+</span>
2739
- 883: <span class="ruby-node">&quot;#{value.is_a?(PropertyTreeNode) ? value.fullId : value}&quot;</span>
2740
- 884: <span class="ruby-keyword kw">end</span>
2741
- 885: <span class="ruby-keyword kw">end</span>
2742
- 886: <span class="ruby-identifier">str</span>
2743
- 887: <span class="ruby-keyword kw">end</span></pre>
2794
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 910</span>
2795
+ 910: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
2796
+ 911: <span class="ruby-comment cmt">#raise &quot;STOP!&quot;</span>
2797
+ 912: <span class="ruby-identifier">str</span> = <span class="ruby-value str">''</span>
2798
+ 913: <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>
2799
+ 914: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span>
2800
+ 915: <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{attribute}: &quot;</span> <span class="ruby-operator">+</span>
2801
+ 916: <span class="ruby-node">&quot;#{value.is_a?(PropertyTreeNode) ? value.fullId : value}&quot;</span>
2802
+ 917: <span class="ruby-keyword kw">end</span>
2803
+ 918: <span class="ruby-keyword kw">end</span>
2804
+ 919: <span class="ruby-identifier">str</span>
2805
+ 920: <span class="ruby-keyword kw">end</span></pre>
2744
2806
  </div>
2745
2807
 
2746
2808
  </div>
@@ -2773,10 +2835,53 @@ Return the average number of working days per week.
2773
2835
  <div class="method-source-code"
2774
2836
  id="weekly-orking-ays-source">
2775
2837
  <pre>
2776
- <span class="ruby-comment cmt"># File lib/Project.rb, line 497</span>
2777
- 497: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">weeklyWorkingDays</span>
2778
- 498: <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>
2779
- 499: <span class="ruby-keyword kw">end</span></pre>
2838
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 508</span>
2839
+ 508: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">weeklyWorkingDays</span>
2840
+ 509: <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>
2841
+ 510: <span class="ruby-keyword kw">end</span></pre>
2842
+ </div>
2843
+
2844
+ </div>
2845
+
2846
+
2847
+
2848
+
2849
+ </div>
2850
+
2851
+
2852
+ <div id="working-ays-method" class="method-detail ">
2853
+ <a name="method-i-workingDays"></a>
2854
+
2855
+ <div class="method-heading">
2856
+
2857
+ <span class="method-name">workingDays</span><span
2858
+ class="method-args">(interval)</span>
2859
+ <span class="method-click-advice">click to toggle source</span>
2860
+
2861
+ </div>
2862
+
2863
+ <div class="method-description">
2864
+
2865
+ <p>
2866
+ Return the number of working days (ignoring global vacations) during the
2867
+ given <em>interval</em>.
2868
+ </p>
2869
+
2870
+
2871
+
2872
+ <div class="method-source-code"
2873
+ id="working-ays-source">
2874
+ <pre>
2875
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 866</span>
2876
+ 866: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">workingDays</span>(<span class="ruby-identifier">interval</span>)
2877
+ 867: <span class="ruby-identifier">startIdx</span> = <span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">start</span>, <span class="ruby-keyword kw">true</span>)
2878
+ 868: <span class="ruby-identifier">endIdx</span> = <span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">interval</span>.<span class="ruby-identifier">end</span>, <span class="ruby-keyword kw">true</span>)
2879
+ 869: <span class="ruby-identifier">slots</span> = <span class="ruby-value">0</span>
2880
+ 870: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">idx</span><span class="ruby-operator">|</span>
2881
+ 871: <span class="ruby-identifier">slots</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scoreboardNoVacations</span>[<span class="ruby-identifier">idx</span>]
2882
+ 872: <span class="ruby-keyword kw">end</span>
2883
+ 873: <span class="ruby-identifier">slotsToDays</span>(<span class="ruby-identifier">slots</span>)
2884
+ 874: <span class="ruby-keyword kw">end</span></pre>
2780
2885
  </div>
2781
2886
 
2782
2887
  </div>
@@ -2809,10 +2914,10 @@ Return the average number of working days per year.
2809
2914
  <div class="method-source-code"
2810
2915
  id="yearly-orking-ays-source">
2811
2916
  <pre>
2812
- <span class="ruby-comment cmt"># File lib/Project.rb, line 507</span>
2813
- 507: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">yearlyWorkingDays</span>
2814
- 508: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>].<span class="ruby-identifier">to_f</span>
2815
- 509: <span class="ruby-keyword kw">end</span></pre>
2917
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 518</span>
2918
+ 518: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">yearlyWorkingDays</span>
2919
+ 519: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'yearlyworkingdays'</span>].<span class="ruby-identifier">to_f</span>
2920
+ 520: <span class="ruby-keyword kw">end</span></pre>
2816
2921
  </div>
2817
2922
 
2818
2923
  </div>
@@ -2849,34 +2954,34 @@ Return the average number of working days per year.
2849
2954
  <div class="method-source-code"
2850
2955
  id="finish-cenario-source">
2851
2956
  <pre>
2852
- <span class="ruby-comment cmt"># File lib/Project.rb, line 963</span>
2853
- 963: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
2854
- 964: <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>)
2855
- 965: <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>
2856
- 966: <span class="ruby-comment cmt"># Recursively traverse the top-level tasks to finish all tasks.</span>
2857
- 967: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-identifier">scIdx</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>
2858
- 968: <span class="ruby-keyword kw">end</span>
2859
- 969:
2860
- 970: <span class="ruby-ivar">@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>
2861
- 971: <span class="ruby-comment cmt"># Recursively traverse the top-level resources to finish them all.</span>
2862
- 972: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-identifier">scIdx</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">parent</span>
2863
- 973: <span class="ruby-keyword kw">end</span>
2864
- 974:
2865
- 975: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
2866
- 976: <span class="ruby-identifier">total</span> = <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">items</span>
2867
- 977: <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>
2868
- 978: <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>
2869
- 979: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
2870
- 980: <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>)
2871
- 981: <span class="ruby-keyword kw">end</span>
2872
- 982:
2873
- 983: <span class="ruby-comment cmt"># This should be really fast so we don't log progess.</span>
2874
- 984: <span class="ruby-ivar">@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>
2875
- 985: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">postScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>)
2876
- 986: <span class="ruby-keyword kw">end</span>
2877
- 987:
2878
- 988: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2879
- 989: <span class="ruby-keyword kw">end</span></pre>
2957
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 996</span>
2958
+ 996: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">finishScenario</span>(<span class="ruby-identifier">scIdx</span>)
2959
+ 997: <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>)
2960
+ 998: <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>
2961
+ 999: <span class="ruby-comment cmt"># Recursively traverse the top-level tasks to finish all tasks.</span>
2962
+ 1000: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-identifier">scIdx</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">parent</span>
2963
+ 1001: <span class="ruby-keyword kw">end</span>
2964
+ 1002:
2965
+ 1003: <span class="ruby-ivar">@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>
2966
+ 1004: <span class="ruby-comment cmt"># Recursively traverse the top-level resources to finish them all.</span>
2967
+ 1005: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">finishScheduling</span>(<span class="ruby-identifier">scIdx</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">parent</span>
2968
+ 1006: <span class="ruby-keyword kw">end</span>
2969
+ 1007:
2970
+ 1008: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
2971
+ 1009: <span class="ruby-identifier">total</span> = <span class="ruby-ivar">@tasks</span>.<span class="ruby-identifier">items</span>
2972
+ 1010: <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>
2973
+ 1011: <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>
2974
+ 1012: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
2975
+ 1013: <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>)
2976
+ 1014: <span class="ruby-keyword kw">end</span>
2977
+ 1015:
2978
+ 1016: <span class="ruby-comment cmt"># This should be really fast so we don't log progess.</span>
2979
+ 1017: <span class="ruby-ivar">@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>
2980
+ 1018: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">postScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>)
2981
+ 1019: <span class="ruby-keyword kw">end</span>
2982
+ 1020:
2983
+ 1021: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2984
+ 1022: <span class="ruby-keyword kw">end</span></pre>
2880
2985
  </div>
2881
2986
 
2882
2987
  </div>
@@ -2907,73 +3012,73 @@ Return the average number of working days per year.
2907
3012
  <div class="method-source-code"
2908
3013
  id="prepare-cenario-source">
2909
3014
  <pre>
2910
- <span class="ruby-comment cmt"># File lib/Project.rb, line 896</span>
2911
- 896: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
2912
- 897: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-value str">&quot;Preparing scenario &quot;</span> <span class="ruby-operator">+</span>
2913
- 898: <span class="ruby-node">&quot;#{scenario(scIdx).get('name')}&quot;</span>)
2914
- 899: <span class="ruby-identifier">resources</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@resources</span>)
2915
- 900: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
2916
- 901:
2917
- 902: <span class="ruby-comment cmt"># Compile a list of leaf resources that are actually used in this</span>
2918
- 903: <span class="ruby-comment cmt"># project.</span>
2919
- 904: <span class="ruby-identifier">usedResources</span> = []
2920
- 905: <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>
2921
- 906: <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>
2922
- 907: <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>)
2923
- 908: <span class="ruby-keyword kw">end</span>
2924
- 909: <span class="ruby-keyword kw">end</span>
2925
- 910: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">length</span>
2926
- 911: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
2927
- 912: <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>
2928
- 913: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>)
2929
- 914: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">preScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>)
2930
- 915: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
2931
- 916: <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-value">0.8</span>)
2932
- 917: <span class="ruby-keyword kw">end</span>
2933
- 918:
2934
- 919: <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">setDirectReports</span>(<span class="ruby-identifier">scIdx</span>) }
2935
- 920: <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">setReports</span>(<span class="ruby-identifier">scIdx</span>) }
2936
- 921:
2937
- 922: <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>) }
2938
- 923: <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>) }
2939
- 924: <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>) }
2940
- 925: <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>) }
2941
- 926:
2942
- 927: <span class="ruby-comment cmt"># Check for dependency loops in the task graph.</span>
2943
- 928: <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>) }
2944
- 929: <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>
2945
- 930: <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>
2946
- 931: <span class="ruby-keyword kw">end</span>
2947
- 932: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.85</span>)
2948
- 933: <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>) }
2949
- 934: <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>
2950
- 935: <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>
2951
- 936: <span class="ruby-keyword kw">end</span>
2952
- 937: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.87</span>)
2953
- 938:
2954
- 939: <span class="ruby-comment cmt"># Compute the criticalness of the tasks and their pathes.</span>
2955
- 940: <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>) }
2956
- 941: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.88</span>)
2957
- 942: <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>) }
2958
- 943: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.9</span>)
2959
- 944: <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>) }
2960
- 945: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.95</span>)
2961
- 946: <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>) }
2962
- 947: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.99</span>)
2963
- 948: <span class="ruby-ivar">@timeSheets</span>.<span class="ruby-identifier">check</span>
2964
- 949: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">1.0</span>)
2965
- 950:
2966
- 951: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
2967
- 952: <span class="ruby-comment cmt"># This is used for debugging only</span>
2968
- 953: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">false</span>
2969
- 954: <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>
2970
- 955: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{resource}&quot;</span>
2971
- 956: <span class="ruby-keyword kw">end</span>
2972
- 957: <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>
2973
- 958: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{task}&quot;</span>
2974
- 959: <span class="ruby-keyword kw">end</span>
2975
- 960: <span class="ruby-keyword kw">end</span>
2976
- 961: <span class="ruby-keyword kw">end</span></pre>
3015
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 929</span>
3016
+ 929: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prepareScenario</span>(<span class="ruby-identifier">scIdx</span>)
3017
+ 930: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">startProgressMeter</span>(<span class="ruby-value str">&quot;Preparing scenario &quot;</span> <span class="ruby-operator">+</span>
3018
+ 931: <span class="ruby-node">&quot;#{scenario(scIdx).get('name')}&quot;</span>)
3019
+ 932: <span class="ruby-identifier">resources</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@resources</span>)
3020
+ 933: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
3021
+ 934:
3022
+ 935: <span class="ruby-comment cmt"># Compile a list of leaf resources that are actually used in this</span>
3023
+ 936: <span class="ruby-comment cmt"># project.</span>
3024
+ 937: <span class="ruby-identifier">usedResources</span> = []
3025
+ 938: <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>
3026
+ 939: <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>
3027
+ 940: <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>)
3028
+ 941: <span class="ruby-keyword kw">end</span>
3029
+ 942: <span class="ruby-keyword kw">end</span>
3030
+ 943: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">usedResources</span>.<span class="ruby-identifier">length</span>
3031
+ 944: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
3032
+ 945: <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>
3033
+ 946: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">prepareScheduling</span>(<span class="ruby-identifier">scIdx</span>)
3034
+ 947: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">preScheduleCheck</span>(<span class="ruby-identifier">scIdx</span>)
3035
+ 948: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
3036
+ 949: <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-value">0.8</span>)
3037
+ 950: <span class="ruby-keyword kw">end</span>
3038
+ 951:
3039
+ 952: <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">setDirectReports</span>(<span class="ruby-identifier">scIdx</span>) }
3040
+ 953: <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">setReports</span>(<span class="ruby-identifier">scIdx</span>) }
3041
+ 954:
3042
+ 955: <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>) }
3043
+ 956: <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>) }
3044
+ 957: <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>) }
3045
+ 958: <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>) }
3046
+ 959:
3047
+ 960: <span class="ruby-comment cmt"># Check for dependency loops in the task graph.</span>
3048
+ 961: <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>) }
3049
+ 962: <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>
3050
+ 963: <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">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>
3051
+ 964: <span class="ruby-keyword kw">end</span>
3052
+ 965: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.85</span>)
3053
+ 966: <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>) }
3054
+ 967: <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>
3055
+ 968: <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">false</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>
3056
+ 969: <span class="ruby-keyword kw">end</span>
3057
+ 970: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.87</span>)
3058
+ 971:
3059
+ 972: <span class="ruby-comment cmt"># Compute the criticalness of the tasks and their pathes.</span>
3060
+ 973: <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>) }
3061
+ 974: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.88</span>)
3062
+ 975: <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>) }
3063
+ 976: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.9</span>)
3064
+ 977: <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>) }
3065
+ 978: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.95</span>)
3066
+ 979: <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>) }
3067
+ 980: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">0.99</span>)
3068
+ 981: <span class="ruby-ivar">@timeSheets</span>.<span class="ruby-identifier">check</span>
3069
+ 982: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">progress</span>(<span class="ruby-value">1.0</span>)
3070
+ 983:
3071
+ 984: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
3072
+ 985: <span class="ruby-comment cmt"># This is used for debugging only</span>
3073
+ 986: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">false</span>
3074
+ 987: <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>
3075
+ 988: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{resource}&quot;</span>
3076
+ 989: <span class="ruby-keyword kw">end</span>
3077
+ 990: <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>
3078
+ 991: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{task}&quot;</span>
3079
+ 992: <span class="ruby-keyword kw">end</span>
3080
+ 993: <span class="ruby-keyword kw">end</span>
3081
+ 994: <span class="ruby-keyword kw">end</span></pre>
2977
3082
  </div>
2978
3083
 
2979
3084
  </div>
@@ -3007,85 +3112,85 @@ index <tt>scIdx</tt>.
3007
3112
  <div class="method-source-code"
3008
3113
  id="schedule-cenario-source">
3009
3114
  <pre>
3010
- <span class="ruby-comment cmt"># File lib/Project.rb, line 992</span>
3011
- 992: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
3012
- 993: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
3013
- 994: <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> }
3014
- 995:
3015
- 996: <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>)
3016
- 997: <span class="ruby-comment cmt"># The sorting of the work item list determines which tasks will get their</span>
3017
- 998: <span class="ruby-comment cmt"># resources first. The first sorting criterium is the user specified task</span>
3018
- 999: <span class="ruby-comment cmt"># priority. The second criterium is the scheduler determined priority</span>
3019
- 1000: <span class="ruby-comment cmt"># stored in the pathcriticalness attribute. That way, the user can always</span>
3020
- 1001: <span class="ruby-comment cmt"># override the scheduler determined priority. To always have a defined</span>
3021
- 1002: <span class="ruby-comment cmt"># order, the third criterium is the sequence number.</span>
3022
- 1003: <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> ],
3023
- 1004: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
3024
- 1005: [ <span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1</span> ] ])
3025
- 1006: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">sort!</span>
3026
- 1007: <span class="ruby-identifier">totalTasks</span> = <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">length</span>
3027
- 1008:
3028
- 1009: <span class="ruby-comment cmt"># Enter the main scheduling loop. This loop is only terminated when all</span>
3029
- 1010: <span class="ruby-comment cmt"># tasks have been scheduled or another thread has set the breakFlag to</span>
3030
- 1011: <span class="ruby-comment cmt"># true.</span>
3031
- 1012: <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>
3032
- 1013: <span class="ruby-node">&quot;#{scenario(scIdx).get('name')}&quot;</span>)
3033
- 1014: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
3034
- 1015: <span class="ruby-comment cmt"># The main scheduler loop only needs to look at the first task that is</span>
3035
- 1016: <span class="ruby-comment cmt"># ready to be scheduled.</span>
3036
- 1017: <span class="ruby-identifier">workItems</span> = <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">to_ary</span>
3037
- 1018:
3038
- 1019: <span class="ruby-comment cmt"># Count the already completed tasks.</span>
3039
- 1020: <span class="ruby-identifier">completedTasks</span> = <span class="ruby-value">0</span>
3040
- 1021: <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>
3041
- 1022: <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>]
3042
- 1023: <span class="ruby-keyword kw">end</span>
3043
- 1024:
3044
- 1025: <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>)
3045
- 1026: <span class="ruby-comment cmt"># Remove all tasks that are not ready for scheduling yet.</span>
3046
- 1027: <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>) }
3115
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 1025</span>
3116
+ 1025: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scheduleScenario</span>(<span class="ruby-identifier">scIdx</span>)
3117
+ 1026: <span class="ruby-identifier">tasks</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@tasks</span>)
3118
+ 1027: <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> }
3047
3119
  1028:
3048
- 1029: <span class="ruby-comment cmt"># Check if we are done.</span>
3049
- 1030: <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>
3050
- 1031:
3051
- 1032: <span class="ruby-comment cmt"># The first task in the list is the one with the highes priority and</span>
3052
- 1033: <span class="ruby-comment cmt"># the largest path criticalness that is ready to be scheduled.</span>
3053
- 1034: <span class="ruby-identifier">task</span> = <span class="ruby-identifier">workItems</span>[<span class="ruby-value">0</span>]
3054
- 1035: <span class="ruby-comment cmt"># Schedule it.</span>
3055
- 1036: <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>)
3056
- 1037: <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>
3057
- 1038: <span class="ruby-node">&quot;#{task['end', scIdx]}&quot;</span>
3058
- 1039: <span class="ruby-keyword kw">end</span>
3059
- 1040: <span class="ruby-keyword kw">end</span>
3060
- 1041: <span class="ruby-identifier">unscheduledTasks</span> = []
3061
- 1042: <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>] }
3062
- 1043:
3063
- 1044: <span class="ruby-comment cmt"># Check for unscheduled tasks and report the first 10 of them as</span>
3064
- 1045: <span class="ruby-comment cmt"># warnings.</span>
3065
- 1046: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">unscheduledTasks</span>.<span class="ruby-identifier">empty?</span>
3066
- 1047: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(
3067
- 1048: <span class="ruby-value str">'unscheduled_tasks'</span>,
3068
- 1049: <span class="ruby-node">&quot;#{unscheduledTasks.length} tasks could not be scheduled&quot;</span>)
3069
- 1050: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
3070
- 1051: <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>
3071
- 1052: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(
3072
- 1053: <span class="ruby-value str">'unscheduled_task'</span>,
3073
- 1054: <span class="ruby-node">&quot;Task #{t.fullId}: &quot;</span> <span class="ruby-operator">+</span>
3074
- 1055: <span class="ruby-node">&quot;#{t['start', scIdx] ? t['start', scIdx] : '&lt;?&gt;'} -&gt; &quot;</span> <span class="ruby-operator">+</span>
3075
- 1056: <span class="ruby-node">&quot;#{t['end', scIdx] ? t['end', scIdx] : '&lt;?&gt;'}&quot;</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">t</span>,
3076
- 1057: <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">scIdx</span>))
3077
- 1058:
3078
- 1059: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
3079
- 1060: <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>
3080
- 1061: <span class="ruby-keyword kw">end</span>
3081
- 1062: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
3082
- 1063: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
3083
- 1064: <span class="ruby-keyword kw">end</span>
3084
- 1065:
3085
- 1066: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
3086
- 1067: <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>)
3087
- 1068: <span class="ruby-keyword kw">true</span>
3088
- 1069: <span class="ruby-keyword kw">end</span></pre>
3120
+ 1029: <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>)
3121
+ 1030: <span class="ruby-comment cmt"># The sorting of the work item list determines which tasks will get their</span>
3122
+ 1031: <span class="ruby-comment cmt"># resources first. The first sorting criterium is the user specified task</span>
3123
+ 1032: <span class="ruby-comment cmt"># priority. The second criterium is the scheduler determined priority</span>
3124
+ 1033: <span class="ruby-comment cmt"># stored in the pathcriticalness attribute. That way, the user can always</span>
3125
+ 1034: <span class="ruby-comment cmt"># override the scheduler determined priority. To always have a defined</span>
3126
+ 1035: <span class="ruby-comment cmt"># order, the third criterium is the sequence number.</span>
3127
+ 1036: <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> ],
3128
+ 1037: [ <span class="ruby-value str">'pathcriticalness'</span>, <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">scIdx</span> ],
3129
+ 1038: [ <span class="ruby-value str">'seqno'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value">1</span> ] ])
3130
+ 1039: <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">sort!</span>
3131
+ 1040: <span class="ruby-identifier">totalTasks</span> = <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">length</span>
3132
+ 1041:
3133
+ 1042: <span class="ruby-comment cmt"># Enter the main scheduling loop. This loop is only terminated when all</span>
3134
+ 1043: <span class="ruby-comment cmt"># tasks have been scheduled or another thread has set the breakFlag to</span>
3135
+ 1044: <span class="ruby-comment cmt"># true.</span>
3136
+ 1045: <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>
3137
+ 1046: <span class="ruby-node">&quot;#{scenario(scIdx).get('name')}&quot;</span>)
3138
+ 1047: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
3139
+ 1048: <span class="ruby-comment cmt"># The main scheduler loop only needs to look at the first task that is</span>
3140
+ 1049: <span class="ruby-comment cmt"># ready to be scheduled.</span>
3141
+ 1050: <span class="ruby-identifier">workItems</span> = <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">to_ary</span>
3142
+ 1051:
3143
+ 1052: <span class="ruby-comment cmt"># Count the already completed tasks.</span>
3144
+ 1053: <span class="ruby-identifier">completedTasks</span> = <span class="ruby-value">0</span>
3145
+ 1054: <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>
3146
+ 1055: <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>]
3147
+ 1056: <span class="ruby-keyword kw">end</span>
3148
+ 1057:
3149
+ 1058: <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>)
3150
+ 1059: <span class="ruby-comment cmt"># Remove all tasks that are not ready for scheduling yet.</span>
3151
+ 1060: <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>) }
3152
+ 1061:
3153
+ 1062: <span class="ruby-comment cmt"># Check if we are done.</span>
3154
+ 1063: <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>
3155
+ 1064:
3156
+ 1065: <span class="ruby-comment cmt"># The first task in the list is the one with the highes priority and</span>
3157
+ 1066: <span class="ruby-comment cmt"># the largest path criticalness that is ready to be scheduled.</span>
3158
+ 1067: <span class="ruby-identifier">task</span> = <span class="ruby-identifier">workItems</span>[<span class="ruby-value">0</span>]
3159
+ 1068: <span class="ruby-comment cmt"># Schedule it.</span>
3160
+ 1069: <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>)
3161
+ 1070: <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>
3162
+ 1071: <span class="ruby-node">&quot;#{task['end', scIdx]}&quot;</span>
3163
+ 1072: <span class="ruby-keyword kw">end</span>
3164
+ 1073: <span class="ruby-keyword kw">end</span>
3165
+ 1074: <span class="ruby-identifier">unscheduledTasks</span> = []
3166
+ 1075: <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>] }
3167
+ 1076:
3168
+ 1077: <span class="ruby-comment cmt"># Check for unscheduled tasks and report the first 10 of them as</span>
3169
+ 1078: <span class="ruby-comment cmt"># warnings.</span>
3170
+ 1079: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">unscheduledTasks</span>.<span class="ruby-identifier">empty?</span>
3171
+ 1080: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(
3172
+ 1081: <span class="ruby-value str">'unscheduled_tasks'</span>,
3173
+ 1082: <span class="ruby-node">&quot;#{unscheduledTasks.length} tasks could not be scheduled&quot;</span>)
3174
+ 1083: <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
3175
+ 1084: <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>
3176
+ 1085: <span class="ruby-ivar">@messageHandler</span>.<span class="ruby-identifier">warning</span>(
3177
+ 1086: <span class="ruby-value str">'unscheduled_task'</span>,
3178
+ 1087: <span class="ruby-node">&quot;Task #{t.fullId}: &quot;</span> <span class="ruby-operator">+</span>
3179
+ 1088: <span class="ruby-node">&quot;#{t['start', scIdx] ? t['start', scIdx] : '&lt;?&gt;'} -&gt; &quot;</span> <span class="ruby-operator">+</span>
3180
+ 1089: <span class="ruby-node">&quot;#{t['end', scIdx] ? t['end', scIdx] : '&lt;?&gt;'}&quot;</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">t</span>,
3181
+ 1090: <span class="ruby-identifier">scenario</span>(<span class="ruby-identifier">scIdx</span>))
3182
+ 1091:
3183
+ 1092: <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
3184
+ 1093: <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>
3185
+ 1094: <span class="ruby-keyword kw">end</span>
3186
+ 1095: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
3187
+ 1096: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
3188
+ 1097: <span class="ruby-keyword kw">end</span>
3189
+ 1098:
3190
+ 1099: <span class="ruby-constant">Log</span>.<span class="ruby-identifier">stopProgressMeter</span>
3191
+ 1100: <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>)
3192
+ 1101: <span class="ruby-keyword kw">true</span>
3193
+ 1102: <span class="ruby-keyword kw">end</span></pre>
3089
3194
  </div>
3090
3195
 
3091
3196
  </div>
@@ -3102,6 +3207,70 @@ index <tt>scIdx</tt>.
3102
3207
  <h3 class="section-header">Private Instance Methods</h3>
3103
3208
 
3104
3209
 
3210
+ <div id="init-coreboards-method" class="method-detail ">
3211
+ <a name="method-i-initScoreboards"></a>
3212
+
3213
+ <div class="method-heading">
3214
+
3215
+ <span class="method-name">initScoreboards</span><span
3216
+ class="method-args">()</span>
3217
+ <span class="method-click-advice">click to toggle source</span>
3218
+
3219
+ </div>
3220
+
3221
+ <div class="method-description">
3222
+
3223
+
3224
+
3225
+
3226
+
3227
+ <div class="method-source-code"
3228
+ id="init-coreboards-source">
3229
+ <pre>
3230
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 1106</span>
3231
+ 1106: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initScoreboards</span>
3232
+ 1107: <span class="ruby-comment cmt"># Create scoreboard and mark all slots as unavailable</span>
3233
+ 1108: <span class="ruby-ivar">@scoreboard</span> = <span class="ruby-constant">Scoreboard</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>], <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>],
3234
+ 1109: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>], <span class="ruby-value">2</span>)
3235
+ 1110: <span class="ruby-comment cmt"># And the same for another scoreboard.</span>
3236
+ 1111: <span class="ruby-ivar">@scoreboardNoVacations</span> =
3237
+ 1112: <span class="ruby-constant">Scoreboard</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'start'</span>], <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'end'</span>],
3238
+ 1113: <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>], <span class="ruby-value">2</span>)
3239
+ 1114:
3240
+ 1115: <span class="ruby-identifier">workinghours</span> = <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'workinghours'</span>]
3241
+ 1116:
3242
+ 1117: <span class="ruby-comment cmt"># Change all work time slots to nil (available) again.</span>
3243
+ 1118: <span class="ruby-identifier">date</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">idxToDate</span>(<span class="ruby-value">0</span>)
3244
+ 1119: <span class="ruby-identifier">delta</span> = <span class="ruby-ivar">@attributes</span>[<span class="ruby-value str">'scheduleGranularity'</span>]
3245
+ 1120: <span class="ruby-identifier">scoreboardSize</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
3246
+ 1121: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">workinghours</span>.<span class="ruby-identifier">onShift?</span>(<span class="ruby-identifier">date</span>)
3247
+ 1122: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-keyword kw">nil</span>
3248
+ 1123: <span class="ruby-ivar">@scoreboardNoVacations</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-keyword kw">nil</span>
3249
+ 1124: <span class="ruby-keyword kw">end</span>
3250
+ 1125: <span class="ruby-identifier">date</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">delta</span>
3251
+ 1126: <span class="ruby-keyword kw">end</span>
3252
+ 1127:
3253
+ 1128: <span class="ruby-comment cmt"># Mark all global vacation slots as such</span>
3254
+ 1129: <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>
3255
+ 1130: <span class="ruby-identifier">startIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">start</span>, <span class="ruby-keyword kw">true</span>)
3256
+ 1131: <span class="ruby-identifier">endIdx</span> = <span class="ruby-ivar">@scoreboard</span>.<span class="ruby-identifier">dateToIdx</span>(<span class="ruby-identifier">vacation</span>.<span class="ruby-identifier">end</span>, <span class="ruby-keyword kw">true</span>)
3257
+ 1132: <span class="ruby-identifier">startIdx</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">endIdx</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
3258
+ 1133: <span class="ruby-comment cmt"># If the slot is nil or set to 4 then don't set the time-off bit.</span>
3259
+ 1134: <span class="ruby-identifier">sb</span> = <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>]
3260
+ 1135: <span class="ruby-ivar">@scoreboard</span>[<span class="ruby-identifier">i</span>] = ((<span class="ruby-identifier">sb</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">sb</span> <span class="ruby-operator">==</span> <span class="ruby-value">4</span>) <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-value">2</span>) <span class="ruby-operator">|</span> (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">2</span>)
3261
+ 1136: <span class="ruby-keyword kw">end</span>
3262
+ 1137: <span class="ruby-keyword kw">end</span>
3263
+ 1138: <span class="ruby-keyword kw">end</span></pre>
3264
+ </div>
3265
+
3266
+ </div>
3267
+
3268
+
3269
+
3270
+
3271
+ </div>
3272
+
3273
+
3105
3274
  <div id="matching-eports-method" class="method-detail ">
3106
3275
  <a name="method-i-matchingReports"></a>
3107
3276
 
@@ -3122,15 +3291,15 @@ index <tt>scIdx</tt>.
3122
3291
  <div class="method-source-code"
3123
3292
  id="matching-eports-source">
3124
3293
  <pre>
3125
- <span class="ruby-comment cmt"># File lib/Project.rb, line 1073</span>
3126
- 1073: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">matchingReports</span>(<span class="ruby-identifier">reportId</span>)
3127
- 1074: <span class="ruby-identifier">list</span> = []
3128
- 1075: <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>
3129
- 1076: <span class="ruby-identifier">id</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">fullId</span>
3130
- 1077: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">id</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">reportId</span>) <span class="ruby-operator">=~</span> <span class="ruby-identifier">id</span>
3131
- 1078: <span class="ruby-keyword kw">end</span>
3132
- 1079: <span class="ruby-identifier">list</span>
3133
- 1080: <span class="ruby-keyword kw">end</span></pre>
3294
+ <span class="ruby-comment cmt"># File lib/Project.rb, line 1140</span>
3295
+ 1140: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">matchingReports</span>(<span class="ruby-identifier">reportId</span>)
3296
+ 1141: <span class="ruby-identifier">list</span> = []
3297
+ 1142: <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>
3298
+ 1143: <span class="ruby-identifier">id</span> = <span class="ruby-identifier">report</span>.<span class="ruby-identifier">fullId</span>
3299
+ 1144: <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">id</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">reportId</span>) <span class="ruby-operator">=~</span> <span class="ruby-identifier">id</span>
3300
+ 1145: <span class="ruby-keyword kw">end</span>
3301
+ 1146: <span class="ruby-identifier">list</span>
3302
+ 1147: <span class="ruby-keyword kw">end</span></pre>
3134
3303
  </div>
3135
3304
 
3136
3305
  </div>