doc/TaskJuggler/NikuReport.html in taskjuggler-0.0.8 vs doc/TaskJuggler/NikuReport.html in taskjuggler-0.0.9
- old
+ new
@@ -149,10 +149,12 @@
<li><a href="../TaskJuggler/AttributeBase.html">TaskJuggler::AttributeBase</a></li>
<li><a href="../TaskJuggler/AttributeDefinition.html">TaskJuggler::AttributeDefinition</a></li>
+ <li><a href="../TaskJuggler/AttributeOverwrite.html">TaskJuggler::AttributeOverwrite</a></li>
+
<li><a href="../TaskJuggler/BatchProcessor.html">TaskJuggler::BatchProcessor</a></li>
<li><a href="../TaskJuggler/Booking.html">TaskJuggler::Booking</a></li>
<li><a href="../TaskJuggler/BookingListAttribute.html">TaskJuggler::BookingListAttribute</a></li>
@@ -227,10 +229,12 @@
<li><a href="../TaskJuggler/HTMLGraphics.html">TaskJuggler::HTMLGraphics</a></li>
<li><a href="../TaskJuggler/Interval.html">TaskJuggler::Interval</a></li>
+ <li><a href="../TaskJuggler/IntervalList.html">TaskJuggler::IntervalList</a></li>
+
<li><a href="../TaskJuggler/IntervalListAttribute.html">TaskJuggler::IntervalListAttribute</a></li>
<li><a href="../TaskJuggler/JobInfo.html">TaskJuggler::JobInfo</a></li>
<li><a href="../TaskJuggler/Journal.html">TaskJuggler::Journal</a></li>
@@ -259,10 +263,12 @@
<li><a href="../TaskJuggler/LogicalExpression.html">TaskJuggler::LogicalExpression</a></li>
<li><a href="../TaskJuggler/LogicalExpressionAttribute.html">TaskJuggler::LogicalExpressionAttribute</a></li>
+ <li><a href="../TaskJuggler/LogicalExpressionListAttribute.html">TaskJuggler::LogicalExpressionListAttribute</a></li>
+
<li><a href="../TaskJuggler/LogicalFlag.html">TaskJuggler::LogicalFlag</a></li>
<li><a href="../TaskJuggler/LogicalFunction.html">TaskJuggler::LogicalFunction</a></li>
<li><a href="../TaskJuggler/LogicalOperation.html">TaskJuggler::LogicalOperation</a></li>
@@ -539,10 +545,12 @@
<li><a href="../TaskJuggler/VimSyntax.html">TaskJuggler::VimSyntax</a></li>
<li><a href="../TaskJuggler/WebServer.html">TaskJuggler::WebServer</a></li>
+ <li><a href="../TaskJuggler/WelcomePage.html">TaskJuggler::WelcomePage</a></li>
+
<li><a href="../TaskJuggler/WorkingHours.html">TaskJuggler::WorkingHours</a></li>
<li><a href="../TaskJuggler/WorkingHoursAttribute.html">TaskJuggler::WorkingHoursAttribute</a></li>
<li><a href="../TaskJuggler/XMLBlob.html">TaskJuggler::XMLBlob</a></li>
@@ -565,12 +573,10 @@
<li><a href="../RuntimeConfig.html">RuntimeConfig</a></li>
<li><a href="../String.html">String</a></li>
- <li><a href="../StringIO.html">StringIO</a></li>
-
</ul>
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
</div>
@@ -625,25 +631,29 @@
<div class="method-source-code"
id="new-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 55</span>
-55: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">report</span>)
-56: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">report</span>)
-57:
-58: <span class="ruby-comment cmt"># A Hash to store NikuProject objects by id</span>
-59: <span class="ruby-ivar">@projects</span> = {}
-60:
-61: <span class="ruby-comment cmt"># A Hash to map ClarityRID to Resource</span>
-62: <span class="ruby-ivar">@resources</span> = {}
-63:
-64: <span class="ruby-comment cmt"># Resources total effort during the report period hashed by ClarityId</span>
-65: <span class="ruby-ivar">@resourcesTotalEffort</span> = {}
-66:
-67: <span class="ruby-ivar">@scenarioIdx</span> = <span class="ruby-keyword kw">nil</span>
-68: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 56</span>
+56: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">report</span>)
+57: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">report</span>)
+58:
+59: <span class="ruby-comment cmt"># A Hash to store NikuProject objects by id</span>
+60: <span class="ruby-ivar">@projects</span> = {}
+61:
+62: <span class="ruby-comment cmt"># A Hash to map ClarityRID to Resource</span>
+63: <span class="ruby-ivar">@resources</span> = {}
+64:
+65: <span class="ruby-comment cmt"># Unallocated and vacation time during the report period for all</span>
+66: <span class="ruby-comment cmt"># resources hashed by ClarityId. Values are in days.</span>
+67: <span class="ruby-ivar">@resourcesFreeWork</span> = {}
+68:
+69: <span class="ruby-comment cmt"># Resources total effort during the report period hashed by ClarityId</span>
+70: <span class="ruby-ivar">@resourcesTotalEffort</span> = {}
+71:
+72: <span class="ruby-ivar">@scenarioIdx</span> = <span class="ruby-keyword kw">nil</span>
+73: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -676,20 +686,20 @@
<div class="method-source-code"
id="generate-ntermediate-ormat-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 70</span>
-70: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
-71: <span class="ruby-keyword kw">super</span>
-72:
-73: <span class="ruby-ivar">@scenarioIdx</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scenarios'</span>)[<span class="ruby-value">0</span>]
-74:
-75: <span class="ruby-identifier">computeResourceTotals</span>
-76: <span class="ruby-identifier">collectProjects</span>
-77: <span class="ruby-identifier">computeProjectAllocations</span>
-78: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 75</span>
+75: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generateIntermediateFormat</span>
+76: <span class="ruby-keyword kw">super</span>
+77:
+78: <span class="ruby-ivar">@scenarioIdx</span> = <span class="ruby-identifier">a</span>(<span class="ruby-value str">'scenarios'</span>)[<span class="ruby-value">0</span>]
+79:
+80: <span class="ruby-identifier">computeResourceTotals</span>
+81: <span class="ruby-identifier">collectProjects</span>
+82: <span class="ruby-identifier">computeProjectAllocations</span>
+83: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -716,39 +726,40 @@
<div class="method-source-code"
id="to-csv-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 196</span>
-196: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_csv</span>
-197: <span class="ruby-identifier">table</span> = []
-198: <span class="ruby-comment cmt"># Header line with project names</span>
-199: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">row</span> = [])
-200: <span class="ruby-comment cmt"># First column is the resource name and ID.</span>
-201: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">""</span>
-202: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-203: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">projectId</span>].<span class="ruby-identifier">name</span>
-204: <span class="ruby-keyword kw">end</span>
-205:
-206: <span class="ruby-comment cmt"># Header line with project IDs</span>
-207: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">row</span> = [])
-208: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"Resource"</span>
-209: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-210: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">projectId</span>
-211: <span class="ruby-keyword kw">end</span>
-212:
-213: <span class="ruby-ivar">@resourcesTotalEffort</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
-214: <span class="ruby-comment cmt"># Add one line per resource.</span>
-215: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">row</span> = [])
-216: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{@resources[resourceId].name} (#{resourceId})"</span>
-217: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-218: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
-219: <span class="ruby-keyword kw">end</span>
-220: <span class="ruby-keyword kw">end</span>
-221:
-222: <span class="ruby-identifier">table</span>
-223: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 200</span>
+200: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_csv</span>
+201: <span class="ruby-identifier">table</span> = []
+202: <span class="ruby-comment cmt"># Header line with project names</span>
+203: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">row</span> = [])
+204: <span class="ruby-comment cmt"># First column is the resource name and ID.</span>
+205: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">""</span>
+206: <span class="ruby-identifier">projectIds</span> = <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>
+207: <span class="ruby-identifier">projectIds</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+208: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">projectId</span>].<span class="ruby-identifier">name</span>
+209: <span class="ruby-keyword kw">end</span>
+210:
+211: <span class="ruby-comment cmt"># Header line with project IDs</span>
+212: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">row</span> = [])
+213: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"Resource"</span>
+214: <span class="ruby-identifier">projectIds</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+215: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">projectId</span>
+216: <span class="ruby-keyword kw">end</span>
+217:
+218: <span class="ruby-ivar">@resourcesTotalEffort</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
+219: <span class="ruby-comment cmt"># Add one line per resource.</span>
+220: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">row</span> = [])
+221: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"#{@resources[resourceId].name} (#{resourceId})"</span>
+222: <span class="ruby-identifier">projectIds</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+223: <span class="ruby-identifier">row</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
+224: <span class="ruby-keyword kw">end</span>
+225: <span class="ruby-keyword kw">end</span>
+226:
+227: <span class="ruby-identifier">table</span>
+228: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -775,72 +786,72 @@
<div class="method-source-code"
id="to-html-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 80</span>
- 80: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
- 81: <span class="ruby-identifier">tableFrame</span> = <span class="ruby-identifier">generateHtmlTableFrame</span>
- 82:
- 83: <span class="ruby-identifier">tableFrame</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>))
- 84: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">td</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'td'</span>))
- 85: <span class="ruby-identifier">td</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">table</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'table'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tj_table'</span>,
- 86: <span class="ruby-value str">'cellspacing'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'1'</span>))
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 85</span>
+ 85: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_html</span>
+ 86: <span class="ruby-identifier">tableFrame</span> = <span class="ruby-identifier">generateHtmlTableFrame</span>
87:
- 88: <span class="ruby-comment cmt"># Table Header with two rows. First the project name, then the ID.</span>
- 89: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">thead</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'thead'</span>))
- 90: <span class="ruby-identifier">thead</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
- 91: <span class="ruby-comment cmt"># First line</span>
- 92: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Project'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'right'</span>)
- 93: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
- 94: <span class="ruby-comment cmt"># Don't include projects without allocations.</span>
- 95: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
- 96: <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">projectId</span>].<span class="ruby-identifier">name</span>
- 97: <span class="ruby-comment cmt"># To avoid exploding tables for long project names, we only show the</span>
- 98: <span class="ruby-comment cmt"># last 15 characters for those. We expect the last characters to be</span>
- 99: <span class="ruby-comment cmt"># more significant in those names than the first.</span>
-100: <span class="ruby-identifier">name</span> = <span class="ruby-value str">'...'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">name</span>[<span class="ruby-value">15</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">></span> <span class="ruby-value">15</span>
-101: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">name</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'center'</span>)
-102: <span class="ruby-keyword kw">end</span>
-103: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">''</span>, <span class="ruby-keyword kw">true</span>)
-104: <span class="ruby-comment cmt"># Second line</span>
-105: <span class="ruby-identifier">thead</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
-106: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Resource'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'left'</span>)
-107: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-108: <span class="ruby-comment cmt"># Don't include projects without allocations.</span>
-109: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
-110: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'center'</span>)
-111: <span class="ruby-keyword kw">end</span>
-112: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Total'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'center'</span>)
-113:
-114: <span class="ruby-comment cmt"># The actual content. One line per resource.</span>
-115: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tbody</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tbody'</span>))
-116: <span class="ruby-ivar">@resourcesTotalEffort</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
-117: <span class="ruby-identifier">tbody</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
-118: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-node">"#{@resources[resourceId].name} (#{resourceId})"</span>,
-119: <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'left'</span>)
-120:
-121: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-122: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
-123: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
-124: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">value</span> <span class="ruby-operator">>=</span> <span class="ruby-value">0.01</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">value</span>) <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
-125: <span class="ruby-keyword kw">end</span>
-126:
-127: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">resourceTotal</span>(<span class="ruby-identifier">resourceId</span>)), <span class="ruby-keyword kw">true</span>)
-128: <span class="ruby-keyword kw">end</span>
-129:
-130: <span class="ruby-comment cmt"># Project totals</span>
-131: <span class="ruby-identifier">tbody</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
-132: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Total'</span>, <span class="ruby-value str">'true'</span>, <span class="ruby-value str">'left'</span>)
-133: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-134: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
-135: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>)), <span class="ruby-keyword kw">true</span>,
-136: <span class="ruby-value str">'right'</span>)
-137: <span class="ruby-keyword kw">end</span>
-138: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">total</span>()), <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'right'</span>)
-139: <span class="ruby-identifier">tableFrame</span>
-140: <span class="ruby-keyword kw">end</span></pre>
+ 88: <span class="ruby-identifier">tableFrame</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>))
+ 89: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">td</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'td'</span>))
+ 90: <span class="ruby-identifier">td</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">table</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'table'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tj_table'</span>,
+ 91: <span class="ruby-value str">'cellspacing'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'1'</span>))
+ 92:
+ 93: <span class="ruby-comment cmt"># Table Header with two rows. First the project name, then the ID.</span>
+ 94: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">thead</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'thead'</span>))
+ 95: <span class="ruby-identifier">thead</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
+ 96: <span class="ruby-comment cmt"># First line</span>
+ 97: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Project'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'right'</span>)
+ 98: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+ 99: <span class="ruby-comment cmt"># Don't include projects without allocations.</span>
+100: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
+101: <span class="ruby-identifier">name</span> = <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">projectId</span>].<span class="ruby-identifier">name</span>
+102: <span class="ruby-comment cmt"># To avoid exploding tables for long project names, we only show the</span>
+103: <span class="ruby-comment cmt"># last 15 characters for those. We expect the last characters to be</span>
+104: <span class="ruby-comment cmt"># more significant in those names than the first.</span>
+105: <span class="ruby-identifier">name</span> = <span class="ruby-value str">'...'</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">name</span>[<span class="ruby-value">15</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">></span> <span class="ruby-value">15</span>
+106: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">name</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'center'</span>)
+107: <span class="ruby-keyword kw">end</span>
+108: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">''</span>, <span class="ruby-keyword kw">true</span>)
+109: <span class="ruby-comment cmt"># Second line</span>
+110: <span class="ruby-identifier">thead</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
+111: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Resource'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'left'</span>)
+112: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+113: <span class="ruby-comment cmt"># Don't include projects without allocations.</span>
+114: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
+115: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'center'</span>)
+116: <span class="ruby-keyword kw">end</span>
+117: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Total'</span>, <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'center'</span>)
+118:
+119: <span class="ruby-comment cmt"># The actual content. One line per resource.</span>
+120: <span class="ruby-identifier">table</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tbody</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tbody'</span>))
+121: <span class="ruby-ivar">@resourcesTotalEffort</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
+122: <span class="ruby-identifier">tbody</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
+123: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-node">"#{@resources[resourceId].name} (#{resourceId})"</span>,
+124: <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'left'</span>)
+125:
+126: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+127: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
+128: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
+129: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">value</span> <span class="ruby-operator">>=</span> <span class="ruby-value">0.01</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">value</span>) <span class="ruby-operator">:</span> <span class="ruby-value str">''</span>)
+130: <span class="ruby-keyword kw">end</span>
+131:
+132: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">resourceTotal</span>(<span class="ruby-identifier">resourceId</span>)), <span class="ruby-keyword kw">true</span>)
+133: <span class="ruby-keyword kw">end</span>
+134:
+135: <span class="ruby-comment cmt"># Project totals</span>
+136: <span class="ruby-identifier">tbody</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">tr</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'tr'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'tabline'</span>))
+137: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-value str">'Total'</span>, <span class="ruby-value str">'true'</span>, <span class="ruby-value str">'left'</span>)
+138: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+139: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
+140: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>)), <span class="ruby-keyword kw">true</span>,
+141: <span class="ruby-value str">'right'</span>)
+142: <span class="ruby-keyword kw">end</span>
+143: <span class="ruby-identifier">tr</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">format</span>(<span class="ruby-value str">"%.2f"</span>, <span class="ruby-identifier">total</span>()), <span class="ruby-keyword kw">true</span>, <span class="ruby-value str">'right'</span>)
+144: <span class="ruby-identifier">tableFrame</span>
+145: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -867,59 +878,58 @@
<div class="method-source-code"
id="to-niku-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 142</span>
-142: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_niku</span>
-143: <span class="ruby-identifier">xml</span> = <span class="ruby-constant">XMLDocument</span>.<span class="ruby-identifier">new</span>
-144: <span class="ruby-identifier">xml</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLComment</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">Generated by #{AppConfig.softwareName} v#{AppConfig.version} on #{TjTime.now}For more information about #{AppConfig.softwareName} see #{AppConfig.contact}.Project: #{@project['name']}Date: #{@project['now']}</span>
-145: )
-146: <span class="ruby-identifier">xml</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">nikuDataBus</span> =
-147: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'NikuDataBus'</span>,
-148: <span class="ruby-value str">'xmlns:xsi'</span> =<span class="ruby-operator">></span>
-149: <span class="ruby-value str">'http://www.w3.org/2001/XMLSchema-instance'</span>,
-150: <span class="ruby-value str">'xsi:noNamespaceSchemaLocation'</span> =<span class="ruby-operator">></span>
-151: <span class="ruby-value str">'../xsd/nikuxog_project.xsd'</span>))
-152: <span class="ruby-identifier">nikuDataBus</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Header'</span>, <span class="ruby-value str">'action'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'write'</span>,
-153: <span class="ruby-value str">'externalSource'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'NIKU'</span>,
-154: <span class="ruby-value str">'objectType'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'project'</span>,
-155: <span class="ruby-value str">'version'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'7.5.0'</span>)
-156: <span class="ruby-identifier">nikuDataBus</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">projects</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Projects'</span>))
-157:
-158: <span class="ruby-identifier">timeFormat</span> = <span class="ruby-value str">'%Y-%m-%dT%H:%M:%S'</span>
-159: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">prj</span><span class="ruby-operator">|</span>
-160: <span class="ruby-comment cmt"># Don't include projects with 0 allocations</span>
-161: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">prj</span>.<span class="ruby-identifier">id</span>) <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 147</span>
+147: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_niku</span>
+148: <span class="ruby-identifier">xml</span> = <span class="ruby-constant">XMLDocument</span>.<span class="ruby-identifier">new</span>
+149: <span class="ruby-identifier">xml</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLComment</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">Generated by #{AppConfig.softwareName} v#{AppConfig.version} on #{TjTime.now}For more information about #{AppConfig.softwareName} see #{AppConfig.contact}.Project: #{@project['name']}Date: #{@project['now']}</span>
+150: )
+151: <span class="ruby-identifier">xml</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">nikuDataBus</span> =
+152: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'NikuDataBus'</span>,
+153: <span class="ruby-value str">'xmlns:xsi'</span> =<span class="ruby-operator">></span>
+154: <span class="ruby-value str">'http://www.w3.org/2001/XMLSchema-instance'</span>,
+155: <span class="ruby-value str">'xsi:noNamespaceSchemaLocation'</span> =<span class="ruby-operator">></span>
+156: <span class="ruby-value str">'../xsd/nikuxog_project.xsd'</span>))
+157: <span class="ruby-identifier">nikuDataBus</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Header'</span>, <span class="ruby-value str">'action'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'write'</span>,
+158: <span class="ruby-value str">'externalSource'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'NIKU'</span>,
+159: <span class="ruby-value str">'objectType'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'project'</span>,
+160: <span class="ruby-value str">'version'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'7.5.0'</span>)
+161: <span class="ruby-identifier">nikuDataBus</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">projects</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Projects'</span>))
162:
-163: <span class="ruby-identifier">projects</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">project</span> =
-164: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Project'</span>,
-165: <span class="ruby-value str">'name'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">prj</span>.<span class="ruby-identifier">name</span>,
-166: <span class="ruby-value str">'projectID'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">prj</span>.<span class="ruby-identifier">id</span>))
-167: <span class="ruby-identifier">project</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">resources</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Resources'</span>))
-168: <span class="ruby-identifier">prj</span>.<span class="ruby-identifier">resources</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
-169: <span class="ruby-identifier">resources</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">resource</span> =
-170: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Resource'</span>,
-171: <span class="ruby-value str">'resourceID'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">id</span>,
-172: <span class="ruby-value str">'defaultAllocation'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'0'</span>))
-173: <span class="ruby-identifier">resource</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">allocCurve</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'AllocCurve'</span>))
-174: <span class="ruby-identifier">allocCurve</span> <span class="ruby-operator"><<</span> (<span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Segment'</span>,
-175: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">></span>
-176: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">timeFormat</span>),
-177: <span class="ruby-value str">'finish'</span> =<span class="ruby-operator">></span>
-178: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">timeFormat</span>),
-179: <span class="ruby-value str">'sum'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">prj</span>.<span class="ruby-identifier">id</span>, <span class="ruby-identifier">res</span>.<span class="ruby-identifier">id</span>).<span class="ruby-identifier">to_s</span>))
-180: <span class="ruby-keyword kw">end</span>
-181:
-182: <span class="ruby-comment cmt"># The custom information section usually contains Clarity installation</span>
-183: <span class="ruby-comment cmt"># specific parts. They are identical for each project section, so we</span>
-184: <span class="ruby-comment cmt"># mis-use the title attribute to insert them as an XML blob.</span>
-185: <span class="ruby-identifier">project</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'title'</span>)) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'title'</span>).<span class="ruby-identifier">empty?</span>
-186: <span class="ruby-keyword kw">end</span>
-187:
-188: <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">to_s</span>
-189: <span class="ruby-keyword kw">end</span></pre>
+163: <span class="ruby-identifier">timeFormat</span> = <span class="ruby-value str">'%Y-%m-%dT%H:%M:%S'</span>
+164: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+165: <span class="ruby-identifier">prj</span> = <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">projectId</span>]
+166: <span class="ruby-identifier">projects</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">project</span> =
+167: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Project'</span>,
+168: <span class="ruby-value str">'name'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">prj</span>.<span class="ruby-identifier">name</span>,
+169: <span class="ruby-value str">'projectID'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">prj</span>.<span class="ruby-identifier">id</span>))
+170: <span class="ruby-identifier">project</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">resources</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Resources'</span>))
+171: <span class="ruby-identifier">prj</span>.<span class="ruby-identifier">resources</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
+172: <span class="ruby-identifier">res</span> = <span class="ruby-identifier">prj</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>]
+173: <span class="ruby-identifier">resources</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">resource</span> =
+174: <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Resource'</span>,
+175: <span class="ruby-value str">'resourceID'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">id</span>,
+176: <span class="ruby-value str">'defaultAllocation'</span> =<span class="ruby-operator">></span> <span class="ruby-value str">'0'</span>))
+177: <span class="ruby-identifier">resource</span> <span class="ruby-operator"><<</span> (<span class="ruby-identifier">allocCurve</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'AllocCurve'</span>))
+178: <span class="ruby-identifier">allocCurve</span> <span class="ruby-operator"><<</span> (<span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'Segment'</span>,
+179: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">></span>
+180: <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>).<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">timeFormat</span>),
+181: <span class="ruby-value str">'finish'</span> =<span class="ruby-operator">></span>
+182: (<span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>) <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">timeFormat</span>),
+183: <span class="ruby-value str">'sum'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">prj</span>.<span class="ruby-identifier">id</span>, <span class="ruby-identifier">res</span>.<span class="ruby-identifier">id</span>).<span class="ruby-identifier">to_s</span>))
+184: <span class="ruby-keyword kw">end</span>
+185:
+186: <span class="ruby-comment cmt"># The custom information section usually contains Clarity installation</span>
+187: <span class="ruby-comment cmt"># specific parts. They are identical for each project section, so we</span>
+188: <span class="ruby-comment cmt"># mis-use the title attribute to insert them as an XML blob.</span>
+189: <span class="ruby-identifier">project</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLBlob</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'title'</span>)) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'title'</span>).<span class="ruby-identifier">empty?</span>
+190: <span class="ruby-keyword kw">end</span>
+191:
+192: <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">to_s</span>
+193: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -955,70 +965,81 @@
<div class="method-source-code"
id="collect-rojects-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 335</span>
-335: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collectProjects</span>
-336: <span class="ruby-comment cmt"># Prepare the task list.</span>
-337: <span class="ruby-identifier">taskList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">tasks</span>)
-338: <span class="ruby-identifier">taskList</span>.<span class="ruby-identifier">setSorting</span>(<span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'sortTasks'</span>))
-339: <span class="ruby-identifier">taskList</span> = <span class="ruby-identifier">filterTaskList</span>(<span class="ruby-identifier">taskList</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'hideTask'</span>),
-340: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'rollupTask'</span>), <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'openNodes'</span>))
-341:
-342:
-343: <span class="ruby-identifier">taskList</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>
-344: <span class="ruby-comment cmt"># We only care about tasks that are leaf tasks and have resource</span>
-345: <span class="ruby-comment cmt"># allocations.</span>
-346: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">||</span>
-347: <span class="ruby-identifier">task</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">empty?</span>
-348:
-349: <span class="ruby-identifier">id</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityPID'</span>)
-350: <span class="ruby-comment cmt"># Ignore tasks without a ClarityPID attribute.</span>
-351: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">id</span>.<span class="ruby-identifier">nil?</span>
-352: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">id</span>.<span class="ruby-identifier">empty?</span>
-353: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
-354: <span class="ruby-node">"ClarityPID of task #{task.fullId} may not be empty"</span>
-355: <span class="ruby-keyword kw">end</span>
-356:
-357: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityPName'</span>)
-358: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>
-359: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
-360: <span class="ruby-node">"ClarityPName of task #{task.fullId} has not been set!"</span>
-361: <span class="ruby-keyword kw">end</span>
-362: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">empty?</span>
-363: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
-364: <span class="ruby-node">"ClarityPName of task #{task.fullId} may not be empty!"</span>
-365: <span class="ruby-keyword kw">end</span>
-366:
-367: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">project</span> = <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">id</span>]).<span class="ruby-identifier">nil?</span>
-368: <span class="ruby-comment cmt"># We don't have a record for the Clarity project yet, so we create a</span>
-369: <span class="ruby-comment cmt"># new NikuProject object.</span>
-370: <span class="ruby-identifier">project</span> = <span class="ruby-constant">NikuProject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>)
-371: <span class="ruby-comment cmt"># And store it in the project list hashed by the ClarityPID.</span>
-372: <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">id</span>] = <span class="ruby-identifier">project</span>
-373: <span class="ruby-keyword kw">else</span>
-374: <span class="ruby-comment cmt"># Due to a design flaw in the Niku file format, Clarity projects are</span>
-375: <span class="ruby-comment cmt"># identified by a name and an ID. We have to check that those pairs</span>
-376: <span class="ruby-comment cmt"># are always the same.</span>
-377: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fTask</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">first</span>).<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityPName'</span>) <span class="ruby-operator">!=</span> <span class="ruby-identifier">name</span>
-378: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
-379: <span class="ruby-node">"Task #{task.fullId} and task #{fTask.fullId} "</span> <span class="ruby-operator">+</span>
-380: <span class="ruby-node">"have same ClarityPID (#{id}) but different ClarityPName "</span> <span class="ruby-operator">+</span>
-381: <span class="ruby-node">"(#{name}/#{fTask.get('ClarityPName')})"</span>
-382: <span class="ruby-keyword kw">end</span>
-383: <span class="ruby-keyword kw">end</span>
-384: <span class="ruby-comment cmt"># Append the Task to the task list of the Clarity project.</span>
-385: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">tasks</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">task</span>
-386: <span class="ruby-keyword kw">end</span>
-387:
-388: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">empty?</span>
-389: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
-390: <span class="ruby-value str">'No tasks with the custom attributes ClarityPID and ClarityPName '</span> <span class="ruby-operator">+</span>
-391: <span class="ruby-value str">'were found!'</span>
-392: <span class="ruby-keyword kw">end</span>
-393: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 351</span>
+351: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">collectProjects</span>
+352: <span class="ruby-comment cmt"># Prepare the task list.</span>
+353: <span class="ruby-identifier">taskList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">tasks</span>)
+354: <span class="ruby-identifier">taskList</span>.<span class="ruby-identifier">setSorting</span>(<span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'sortTasks'</span>))
+355: <span class="ruby-identifier">taskList</span> = <span class="ruby-identifier">filterTaskList</span>(<span class="ruby-identifier">taskList</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'hideTask'</span>),
+356: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'rollupTask'</span>),
+357: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'openNodes'</span>))
+358:
+359:
+360: <span class="ruby-identifier">taskList</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>
+361: <span class="ruby-comment cmt"># We only care about tasks that are leaf tasks and have resource</span>
+362: <span class="ruby-comment cmt"># allocations.</span>
+363: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">||</span>
+364: <span class="ruby-identifier">task</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">empty?</span>
+365:
+366: <span class="ruby-identifier">id</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityPID'</span>)
+367: <span class="ruby-comment cmt"># Ignore tasks without a ClarityPID attribute.</span>
+368: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">id</span>.<span class="ruby-identifier">nil?</span>
+369: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">id</span>.<span class="ruby-identifier">empty?</span>
+370: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
+371: <span class="ruby-node">"ClarityPID of task #{task.fullId} may not be empty"</span>
+372: <span class="ruby-keyword kw">end</span>
+373:
+374: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">task</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityPName'</span>)
+375: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>
+376: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
+377: <span class="ruby-node">"ClarityPName of task #{task.fullId} has not been set!"</span>
+378: <span class="ruby-keyword kw">end</span>
+379: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">empty?</span>
+380: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
+381: <span class="ruby-node">"ClarityPName of task #{task.fullId} may not be empty!"</span>
+382: <span class="ruby-keyword kw">end</span>
+383:
+384: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">project</span> = <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">id</span>]).<span class="ruby-identifier">nil?</span>
+385: <span class="ruby-comment cmt"># We don't have a record for the Clarity project yet, so we create a</span>
+386: <span class="ruby-comment cmt"># new NikuProject object.</span>
+387: <span class="ruby-identifier">project</span> = <span class="ruby-constant">NikuProject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>)
+388: <span class="ruby-comment cmt"># And store it in the project list hashed by the ClarityPID.</span>
+389: <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">id</span>] = <span class="ruby-identifier">project</span>
+390: <span class="ruby-keyword kw">else</span>
+391: <span class="ruby-comment cmt"># Due to a design flaw in the Niku file format, Clarity projects are</span>
+392: <span class="ruby-comment cmt"># identified by a name and an ID. We have to check that those pairs</span>
+393: <span class="ruby-comment cmt"># are always the same.</span>
+394: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">fTask</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">first</span>).<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityPName'</span>) <span class="ruby-operator">!=</span> <span class="ruby-identifier">name</span>
+395: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
+396: <span class="ruby-node">"Task #{task.fullId} and task #{fTask.fullId} "</span> <span class="ruby-operator">+</span>
+397: <span class="ruby-node">"have same ClarityPID (#{id}) but different ClarityPName "</span> <span class="ruby-operator">+</span>
+398: <span class="ruby-node">"(#{name}/#{fTask.get('ClarityPName')})"</span>
+399: <span class="ruby-keyword kw">end</span>
+400: <span class="ruby-keyword kw">end</span>
+401: <span class="ruby-comment cmt"># Append the Task to the task list of the Clarity project.</span>
+402: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">tasks</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">task</span>
+403: <span class="ruby-keyword kw">end</span>
+404:
+405: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">empty?</span>
+406: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
+407: <span class="ruby-value str">'No tasks with the custom attributes ClarityPID and ClarityPName '</span> <span class="ruby-operator">+</span>
+408: <span class="ruby-value str">'were found!'</span>
+409: <span class="ruby-keyword kw">end</span>
+410:
+411: <span class="ruby-comment cmt"># If the user did specify a project ID and name to collect the vacation</span>
+412: <span class="ruby-comment cmt"># time, we'll add this as a project as well.</span>
+413: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">id</span> = <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'timeOffId'</span>)) <span class="ruby-operator">&&</span> (<span class="ruby-identifier">name</span> = <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'timeOffName'</span>))
+414: <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">id</span>] = <span class="ruby-identifier">project</span> = <span class="ruby-constant">NikuProject</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">id</span>, <span class="ruby-identifier">name</span>)
+415: <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">resourceId</span>, <span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
+416: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">r</span> = <span class="ruby-constant">NikuResource</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">resourceId</span>)
+417: <span class="ruby-identifier">r</span>.<span class="ruby-identifier">sum</span> = <span class="ruby-ivar">@resourcesFreeWork</span>[<span class="ruby-identifier">resourceId</span>]
+418: <span class="ruby-keyword kw">end</span>
+419: <span class="ruby-keyword kw">end</span>
+420: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1049,54 +1070,57 @@
<div class="method-source-code"
id="compute-roject-llocations-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 397</span>
-397: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">computeProjectAllocations</span>
-398: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
-399: <span class="ruby-identifier">project</span>.<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>
-400: <span class="ruby-identifier">task</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
-401: <span class="ruby-comment cmt"># Only consider resources that are in the filtered resource list.</span>
-402: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">resource</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityRID'</span>)]
-403:
-404: <span class="ruby-comment cmt"># Prepare a template for the Query we will use to get all the data.</span>
-405: <span class="ruby-identifier">queryAttrs</span> = { <span class="ruby-value str">'project'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@project</span>,
-406: <span class="ruby-value str">'property'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">task</span>,
-407: <span class="ruby-value str">'scopeProperty'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">resource</span>,
-408: <span class="ruby-value str">'scenarioIdx'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@scenarioIdx</span>,
-409: <span class="ruby-value str">'loadUnit'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'loadUnit'</span>),
-410: <span class="ruby-value str">'numberFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'numberFormat'</span>),
-411: <span class="ruby-value str">'timeFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'timeFormat'</span>),
-412: <span class="ruby-value str">'currencyFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'currencyFormat'</span>),
-413: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>), <span class="ruby-value str">'end'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>),
-414: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'costAccount'</span>),
-415: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'revenueAccount'</span>) }
-416:
-417: <span class="ruby-identifier">query</span> = <span class="ruby-constant">Query</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">queryAttrs</span>)
-418: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">attributeId</span> = <span class="ruby-value str">'effort'</span>
-419: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">process</span>
-420: <span class="ruby-identifier">work</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">to_num</span>
-421:
-422: <span class="ruby-comment cmt"># If the resource was not actually working on this task during the</span>
-423: <span class="ruby-comment cmt"># report period, we don't create a record for it.</span>
-424: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">work</span> <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
-425:
-426: <span class="ruby-identifier">resourceId</span> = <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityRID'</span>)
-427: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">resourceRecord</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>]).<span class="ruby-identifier">nil?</span>
-428: <span class="ruby-comment cmt"># If we don't already have a NikuResource object for the</span>
-429: <span class="ruby-comment cmt"># Resource, we create a new one.</span>
-430: <span class="ruby-identifier">resourceRecord</span> = <span class="ruby-constant">NikuResource</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">resourceId</span>)
-431: <span class="ruby-comment cmt"># Store the new NikuResource in the resource list of the</span>
-432: <span class="ruby-comment cmt"># NikuProject record.</span>
-433: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">resourceRecord</span>
-434: <span class="ruby-keyword kw">end</span>
-435: <span class="ruby-identifier">resourceRecord</span>.<span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">to_num</span>
-436: <span class="ruby-keyword kw">end</span>
-437: <span class="ruby-keyword kw">end</span>
-438: <span class="ruby-keyword kw">end</span>
-439: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 424</span>
+424: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">computeProjectAllocations</span>
+425: <span class="ruby-comment cmt"># Prepare a template for the Query we will use to get all the data.</span>
+426: <span class="ruby-identifier">queryAttrs</span> = { <span class="ruby-value str">'project'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@project</span>,
+427: <span class="ruby-value str">'scenarioIdx'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@scenarioIdx</span>,
+428: <span class="ruby-value str">'loadUnit'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'loadUnit'</span>),
+429: <span class="ruby-value str">'numberFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'numberFormat'</span>),
+430: <span class="ruby-value str">'timeFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'timeFormat'</span>),
+431: <span class="ruby-value str">'currencyFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'currencyFormat'</span>),
+432: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>), <span class="ruby-value str">'end'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>),
+433: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'costAccount'</span>),
+434: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'revenueAccount'</span>) }
+435: <span class="ruby-identifier">query</span> = <span class="ruby-constant">Query</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">queryAttrs</span>)
+436:
+437: <span class="ruby-identifier">timeOffId</span> = <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'timeOffId'</span>)
+438: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">project</span><span class="ruby-operator">|</span>
+439: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">timeOffId</span>
+440: <span class="ruby-identifier">project</span>.<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>
+441: <span class="ruby-identifier">task</span>[<span class="ruby-value str">'assignedresources'</span>, <span class="ruby-ivar">@scenarioIdx</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resource</span><span class="ruby-operator">|</span>
+442: <span class="ruby-comment cmt"># Only consider resources that are in the filtered resource list.</span>
+443: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">resource</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityRID'</span>)]
+444:
+445: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">property</span> = <span class="ruby-identifier">task</span>
+446: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">scopeProperty</span> = <span class="ruby-identifier">resource</span>
+447: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">attributeId</span> = <span class="ruby-value str">'effort'</span>
+448: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">process</span>
+449:
+450: <span class="ruby-identifier">work</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">to_num</span>
+451:
+452: <span class="ruby-comment cmt"># If the resource was not actually working on this task during the</span>
+453: <span class="ruby-comment cmt"># report period, we don't create a record for it.</span>
+454: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">work</span> <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
+455:
+456: <span class="ruby-identifier">resourceId</span> = <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityRID'</span>)
+457: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">resourceRecord</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>]).<span class="ruby-identifier">nil?</span>
+458: <span class="ruby-comment cmt"># If we don't already have a NikuResource object for the</span>
+459: <span class="ruby-comment cmt"># Resource, we create a new one.</span>
+460: <span class="ruby-identifier">resourceRecord</span> = <span class="ruby-constant">NikuResource</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">resourceId</span>)
+461: <span class="ruby-comment cmt"># Store the new NikuResource in the resource list of the</span>
+462: <span class="ruby-comment cmt"># NikuProject record.</span>
+463: <span class="ruby-identifier">project</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">resourceRecord</span>
+464: <span class="ruby-keyword kw">end</span>
+465: <span class="ruby-identifier">resourceRecord</span>.<span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">to_num</span>
+466: <span class="ruby-keyword kw">end</span>
+467: <span class="ruby-keyword kw">end</span>
+468: <span class="ruby-keyword kw">end</span>
+469: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1128,67 +1152,78 @@
<div class="method-source-code"
id="compute-esource-otals-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 276</span>
-276: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">computeResourceTotals</span>
-277: <span class="ruby-comment cmt"># Prepare the resource list.</span>
-278: <span class="ruby-identifier">resourceList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">resources</span>)
-279: <span class="ruby-identifier">resourceList</span>.<span class="ruby-identifier">setSorting</span>(<span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'sortResources'</span>))
-280: <span class="ruby-identifier">resourceList</span> = <span class="ruby-identifier">filterResourceList</span>(<span class="ruby-identifier">resourceList</span>, <span class="ruby-keyword kw">nil</span>,
-281: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'hideResource'</span>),
-282: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'rollupResource'</span>),
-283: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'openNodes'</span>))
-284:
-285: <span class="ruby-identifier">resourceList</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>
-286: <span class="ruby-comment cmt"># We only care about leaf resources that have the custom attribute</span>
-287: <span class="ruby-comment cmt"># 'ClarityRID' set.</span>
-288: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">resource</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">||</span>
-289: (<span class="ruby-identifier">resourceId</span> = <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityRID'</span>)).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
-290: <span class="ruby-identifier">resourceId</span>.<span class="ruby-identifier">empty?</span>
-291:
-292: <span class="ruby-comment cmt"># Prepare a template for the Query we will use to get all the data.</span>
-293: <span class="ruby-identifier">queryAttrs</span> = { <span class="ruby-value str">'project'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@project</span>,
-294: <span class="ruby-value str">'property'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">resource</span>,
-295: <span class="ruby-value str">'scopeProperty'</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">nil</span>,
-296: <span class="ruby-value str">'scenarioIdx'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@scenarioIdx</span>,
-297: <span class="ruby-value str">'loadUnit'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'loadUnit'</span>),
-298: <span class="ruby-value str">'numberFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'numberFormat'</span>),
-299: <span class="ruby-value str">'timeFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'timeFormat'</span>),
-300: <span class="ruby-value str">'currencyFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'currencyFormat'</span>),
-301: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>), <span class="ruby-value str">'end'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>),
-302: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'costAccount'</span>),
-303: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'revenueAccount'</span>) }
-304:
-305: <span class="ruby-identifier">query</span> = <span class="ruby-constant">Query</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">queryAttrs</span>)
-306:
-307: <span class="ruby-comment cmt"># First get the allocated effort.</span>
-308: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">attributeId</span> = <span class="ruby-value str">'effort'</span>
-309: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">process</span>
-310: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">to_num</span>
-311:
-312: <span class="ruby-comment cmt"># Then add the still available effort.</span>
-313: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">attributeId</span> = <span class="ruby-value str">'freework'</span>
-314: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">process</span>
-315: <span class="ruby-identifier">total</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">query</span>.<span class="ruby-identifier">to_num</span>
-316:
-317: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">total</span> <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
-318:
-319: <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">resource</span>
-320:
-321: <span class="ruby-comment cmt"># This is the maximum possible work of this resource in the report</span>
-322: <span class="ruby-comment cmt"># period.</span>
-323: <span class="ruby-ivar">@resourcesTotalEffort</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">total</span>
-324: <span class="ruby-keyword kw">end</span>
-325:
-326: <span class="ruby-comment cmt"># Make sure that we have at least one Resource with a ClarityRID.</span>
-327: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@resourcesTotalEffort</span>.<span class="ruby-identifier">empty?</span>
-328: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
-329: <span class="ruby-value str">'No resources with the custom attribute ClarityRID were found!'</span>
-330: <span class="ruby-keyword kw">end</span>
-331: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 281</span>
+281: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">computeResourceTotals</span>
+282: <span class="ruby-comment cmt"># Prepare the resource list.</span>
+283: <span class="ruby-identifier">resourceList</span> = <span class="ruby-constant">PropertyList</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@project</span>.<span class="ruby-identifier">resources</span>)
+284: <span class="ruby-identifier">resourceList</span>.<span class="ruby-identifier">setSorting</span>(<span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'sortResources'</span>))
+285: <span class="ruby-identifier">resourceList</span> = <span class="ruby-identifier">filterResourceList</span>(<span class="ruby-identifier">resourceList</span>, <span class="ruby-keyword kw">nil</span>,
+286: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'hideResource'</span>),
+287: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'rollupResource'</span>),
+288: <span class="ruby-ivar">@report</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'openNodes'</span>))
+289:
+290: <span class="ruby-comment cmt"># Prepare a template for the Query we will use to get all the data.</span>
+291: <span class="ruby-identifier">queryAttrs</span> = { <span class="ruby-value str">'project'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@project</span>,
+292: <span class="ruby-value str">'scopeProperty'</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">nil</span>,
+293: <span class="ruby-value str">'scenarioIdx'</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@scenarioIdx</span>,
+294: <span class="ruby-value str">'loadUnit'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'loadUnit'</span>),
+295: <span class="ruby-value str">'numberFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'numberFormat'</span>),
+296: <span class="ruby-value str">'timeFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'timeFormat'</span>),
+297: <span class="ruby-value str">'currencyFormat'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'currencyFormat'</span>),
+298: <span class="ruby-value str">'start'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>), <span class="ruby-value str">'end'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>),
+299: <span class="ruby-value str">'costAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'costAccount'</span>),
+300: <span class="ruby-value str">'revenueAccount'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">a</span>(<span class="ruby-value str">'revenueAccount'</span>) }
+301: <span class="ruby-identifier">query</span> = <span class="ruby-constant">Query</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">queryAttrs</span>)
+302:
+303: <span class="ruby-comment cmt"># Calculate the number of working days in the report interval.</span>
+304: <span class="ruby-identifier">workingDays</span> = <span class="ruby-ivar">@project</span>.<span class="ruby-identifier">workingDays</span>(<span class="ruby-constant">Interval</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">a</span>(<span class="ruby-value str">'start'</span>), <span class="ruby-identifier">a</span>(<span class="ruby-value str">'end'</span>)))
+305:
+306: <span class="ruby-identifier">resourceList</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>
+307: <span class="ruby-comment cmt"># We only care about leaf resources that have the custom attribute</span>
+308: <span class="ruby-comment cmt"># 'ClarityRID' set.</span>
+309: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">resource</span>.<span class="ruby-identifier">leaf?</span> <span class="ruby-operator">||</span>
+310: (<span class="ruby-identifier">resourceId</span> = <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">get</span>(<span class="ruby-value str">'ClarityRID'</span>)).<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span>
+311: <span class="ruby-identifier">resourceId</span>.<span class="ruby-identifier">empty?</span>
+312:
+313:
+314: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">property</span> = <span class="ruby-identifier">resource</span>
+315:
+316: <span class="ruby-comment cmt"># First get the allocated effort.</span>
+317: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">attributeId</span> = <span class="ruby-value str">'effort'</span>
+318: <span class="ruby-identifier">query</span>.<span class="ruby-identifier">process</span>
+319: <span class="ruby-comment cmt"># Effort in resource days</span>
+320: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">query</span>.<span class="ruby-identifier">to_num</span>
+321:
+322: <span class="ruby-comment cmt"># Ignore resources that have no work allocations.</span>
+323: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">total</span> <span class="ruby-operator"><=</span> <span class="ruby-value">0.0</span>
+324:
+325: <span class="ruby-comment cmt"># A fully allocated resource should always have a total of 1.0 per</span>
+326: <span class="ruby-comment cmt"># working day. If the total is larger, we assume unpaid overtime. If</span>
+327: <span class="ruby-comment cmt"># it's less, the resource was either not fully allocated or had less</span>
+328: <span class="ruby-comment cmt"># working hours or was on vacation.</span>
+329: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">total</span> <span class="ruby-operator">>=</span> <span class="ruby-identifier">workingDays</span>
+330: <span class="ruby-ivar">@resourcesFreeWork</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-value">0.0</span>
+331: <span class="ruby-keyword kw">else</span>
+332: <span class="ruby-ivar">@resourcesFreeWork</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">workingDays</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">total</span>
+333: <span class="ruby-identifier">total</span> = <span class="ruby-identifier">workingDays</span>
+334: <span class="ruby-keyword kw">end</span>
+335: <span class="ruby-ivar">@resources</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">resource</span>
+336:
+337: <span class="ruby-comment cmt"># This is the maximum possible work of this resource in the report</span>
+338: <span class="ruby-comment cmt"># period.</span>
+339: <span class="ruby-ivar">@resourcesTotalEffort</span>[<span class="ruby-identifier">resourceId</span>] = <span class="ruby-identifier">total</span>
+340: <span class="ruby-keyword kw">end</span>
+341:
+342: <span class="ruby-comment cmt"># Make sure that we have at least one Resource with a ClarityRID.</span>
+343: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@resourcesTotalEffort</span>.<span class="ruby-identifier">empty?</span>
+344: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TjException</span>.<span class="ruby-identifier">new</span>,
+345: <span class="ruby-value str">'No resources with the custom attribute ClarityRID were found!'</span>
+346: <span class="ruby-keyword kw">end</span>
+347: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1215,18 +1250,18 @@
<div class="method-source-code"
id="html-ab-ell-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 263</span>
-263: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">headerCell</span> = <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">align</span> = <span class="ruby-value str">'right'</span>)
-264: <span class="ruby-identifier">td</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'td'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">headerCell</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'tabhead'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'taskcell1'</span>)
-265: <span class="ruby-identifier">td</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLNamedText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">text</span>, <span class="ruby-value str">'div'</span>,
-266: <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">headerCell</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'headercelldiv'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'celldiv'</span>,
-267: <span class="ruby-value str">'style'</span> =<span class="ruby-operator">></span> <span class="ruby-node">"text-align:#{align}"</span>)
-268: <span class="ruby-identifier">td</span>
-269: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 268</span>
+268: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">htmlTabCell</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">headerCell</span> = <span class="ruby-keyword kw">false</span>, <span class="ruby-identifier">align</span> = <span class="ruby-value str">'right'</span>)
+269: <span class="ruby-identifier">td</span> = <span class="ruby-constant">XMLElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value str">'td'</span>, <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">headerCell</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'tabhead'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'taskcell1'</span>)
+270: <span class="ruby-identifier">td</span> <span class="ruby-operator"><<</span> <span class="ruby-constant">XMLNamedText</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">text</span>, <span class="ruby-value str">'div'</span>,
+271: <span class="ruby-value str">'class'</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">headerCell</span> <span class="ruby-operator">?</span> <span class="ruby-value str">'headercelldiv'</span> <span class="ruby-operator">:</span> <span class="ruby-value str">'celldiv'</span>,
+272: <span class="ruby-value str">'style'</span> =<span class="ruby-operator">></span> <span class="ruby-node">"text-align:#{align}"</span>)
+273: <span class="ruby-identifier">td</span>
+274: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1253,18 +1288,18 @@
<div class="method-source-code"
id="project-otal-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 245</span>
-245: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>)
-246: <span class="ruby-identifier">total</span> = <span class="ruby-value">0.0</span>
-247: <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
-248: <span class="ruby-identifier">total</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
-249: <span class="ruby-keyword kw">end</span>
-250: <span class="ruby-identifier">total</span>
-251: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 250</span>
+250: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">projectTotal</span>(<span class="ruby-identifier">projectId</span>)
+251: <span class="ruby-identifier">total</span> = <span class="ruby-value">0.0</span>
+252: <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
+253: <span class="ruby-identifier">total</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
+254: <span class="ruby-keyword kw">end</span>
+255: <span class="ruby-identifier">total</span>
+256: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1291,18 +1326,18 @@
<div class="method-source-code"
id="resource-otal-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 237</span>
-237: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resourceTotal</span>(<span class="ruby-identifier">resourceId</span>)
-238: <span class="ruby-identifier">total</span> = <span class="ruby-value">0.0</span>
-239: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-240: <span class="ruby-identifier">total</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
-241: <span class="ruby-keyword kw">end</span>
-242: <span class="ruby-identifier">total</span>
-243: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 242</span>
+242: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">resourceTotal</span>(<span class="ruby-identifier">resourceId</span>)
+243: <span class="ruby-identifier">total</span> = <span class="ruby-value">0.0</span>
+244: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+245: <span class="ruby-identifier">total</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
+246: <span class="ruby-keyword kw">end</span>
+247: <span class="ruby-identifier">total</span>
+248: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1329,20 +1364,20 @@
<div class="method-source-code"
id="sum-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 227</span>
-227: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
-228: <span class="ruby-identifier">project</span> = <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">projectId</span>]
-229: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">project</span>
-230:
-231: <span class="ruby-identifier">resource</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>]
-232: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">resource</span> <span class="ruby-operator">&&</span> <span class="ruby-ivar">@resourcesTotalEffort</span>[<span class="ruby-identifier">resourceId</span>]
-233:
-234: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">sum</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@resourcesTotalEffort</span>[<span class="ruby-identifier">resourceId</span>]
-235: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 232</span>
+232: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
+233: <span class="ruby-identifier">project</span> = <span class="ruby-ivar">@projects</span>[<span class="ruby-identifier">projectId</span>]
+234: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">project</span>
+235:
+236: <span class="ruby-identifier">resource</span> = <span class="ruby-identifier">project</span>.<span class="ruby-identifier">resources</span>[<span class="ruby-identifier">resourceId</span>]
+237: <span class="ruby-keyword kw">return</span> <span class="ruby-value">0.0</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">resource</span> <span class="ruby-operator">&&</span> <span class="ruby-ivar">@resourcesTotalEffort</span>[<span class="ruby-identifier">resourceId</span>]
+238:
+239: <span class="ruby-identifier">resource</span>.<span class="ruby-identifier">sum</span> <span class="ruby-operator">/</span> <span class="ruby-ivar">@resourcesTotalEffort</span>[<span class="ruby-identifier">resourceId</span>]
+240: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>
@@ -1369,19 +1404,19 @@
<div class="method-source-code"
id="total-source">
<pre>
- <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 253</span>
-253: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">total</span>
-254: <span class="ruby-identifier">total</span> = <span class="ruby-value">0.0</span>
-255: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
-256: <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
-257: <span class="ruby-identifier">total</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
-258: <span class="ruby-keyword kw">end</span>
-259: <span class="ruby-keyword kw">end</span>
-260: <span class="ruby-identifier">total</span>
-261: <span class="ruby-keyword kw">end</span></pre>
+ <span class="ruby-comment cmt"># File lib/reports/NikuReport.rb, line 258</span>
+258: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">total</span>
+259: <span class="ruby-identifier">total</span> = <span class="ruby-value">0.0</span>
+260: <span class="ruby-ivar">@projects</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">projectId</span><span class="ruby-operator">|</span>
+261: <span class="ruby-ivar">@resources</span>.<span class="ruby-identifier">each_key</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">resourceId</span><span class="ruby-operator">|</span>
+262: <span class="ruby-identifier">total</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sum</span>(<span class="ruby-identifier">projectId</span>, <span class="ruby-identifier">resourceId</span>)
+263: <span class="ruby-keyword kw">end</span>
+264: <span class="ruby-keyword kw">end</span>
+265: <span class="ruby-identifier">total</span>
+266: <span class="ruby-keyword kw">end</span></pre>
</div>
</div>