https://redmine.ociotec.com/
https://redmine.ociotec.com/favicon.ico?1576844386
2010-08-19T10:29:45Z
Redmine OCIO y TECnología
Advanced roadmap - Error #268: Wrong labels in roadmap for "Due in" values
https://redmine.ociotec.com/issues/268?journal_id=459
2010-08-19T10:29:45Z
Andrew Rudenko
<ul><li><strong>File</strong> <a href="/attachments/88">projects_roadmap.png</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/88/projects_roadmap.png">projects_roadmap.png</a> added</li><li><strong>File</strong> <a href="/attachments/89">versions_show.png</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/89/versions_show.png">versions_show.png</a> added</li><li><strong>File</strong> <a href="/attachments/90">milestones_show.png</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/90/milestones_show.png">milestones_show.png</a> added</li></ul><p>I've resolved this issue by modifying the existing code and extending i18n.rb Redmine's lib.</p>
<p>First, modify <strong>show.rhtml</strong> for <em>milestones</em> and <em>versions</em> views, and <strong>roadmap.rhtml</strong> for <em>projects</em> view inside of <code>./vendor/plugins/advanced_roadmap/app/views</code> by providing <em>l_days</em> and <em>l_weeks</em> functions<br /><pre><code class="ruby syntaxhl"><span class="no">Index</span><span class="p">:</span> <span class="n">vendor</span><span class="o">/</span><span class="n">plugins</span><span class="o">/</span><span class="n">advanced_roadmap</span><span class="o">/</span><span class="n">app</span><span class="o">/</span><span class="n">views</span><span class="o">/</span><span class="n">milestones</span><span class="o">/</span><span class="n">show</span><span class="p">.</span><span class="nf">rthml</span>
<span class="o">===================================================================</span>
<span class="err">@@</span> <span class="o">-</span><span class="mi">58</span><span class="p">,</span><span class="mi">1</span> <span class="o">+</span><span class="mi">58</span><span class="p">,</span><span class="mi">1</span> <span class="err">@@</span>
<span class="o">-</span> <span class="o"><</span><span class="n">td</span> <span class="n">width</span><span class="o">=</span><span class="s2">"340px"</span> <span class="k">class</span><span class="o">=</span><span class="s2">"total-hours"</span><span class="o">><</span><span class="sx">%= "#{l_hours(rest_hours)} / #{l_hours(rest_hours / 8.0)} / #{l_hours(rest_hours / 40.0)}" %></td>
+ <td width=</span><span class="s2">"340px"</span> <span class="k">class</span><span class="o">=</span><span class="s2">"total-hours"</span><span class="o">><</span><span class="sx">%= "#{l_hours(rest_hours)} / #{l_days(rest_hours / 8.0)} / #{l_weeks(rest_hours / 40.0)}" %></td>
Index: vendor/plugins/advanced_roadmap/app/views/projects/roadmap.rthml
=</span><span class="o">==================================================================</span>
<span class="err">@@</span> <span class="o">-</span><span class="mi">49</span><span class="p">,</span><span class="mi">1</span> <span class="o">+</span><span class="mi">49</span><span class="p">,</span><span class="mi">1</span> <span class="err">@@</span>
<span class="o">-</span> <span class="o"><</span><span class="n">td</span> <span class="n">width</span><span class="o">=</span><span class="s2">"340px"</span> <span class="k">class</span><span class="o">=</span><span class="s2">"total-hours"</span><span class="o">><</span><span class="sx">%= "#{l_hours(rest_hours)} / #{l_hours(rest_hours / 8.0)} / #{l_hours(rest_hours / 40.0)}" %></td>
+ <td width=</span><span class="s2">"340px"</span> <span class="k">class</span><span class="o">=</span><span class="s2">"total-hours"</span><span class="o">><</span><span class="sx">%= "#{l_hours(rest_hours)} / #{l_days(rest_hours / 8.0)} / #{l_weeks(rest_hours / 40.0)}" %></td>
Index: vendor/plugins/advanced_roadmap/app/views/versions/show.rthml
=</span><span class="o">==================================================================</span>
<span class="err">@@</span> <span class="o">-</span><span class="mi">26</span><span class="p">,</span><span class="mi">1</span> <span class="o">+</span><span class="mi">26</span><span class="p">,</span><span class="mi">1</span> <span class="err">@@</span>
<span class="o">-</span> <span class="o"><</span><span class="n">td</span> <span class="n">width</span><span class="o">=</span><span class="s2">"240px"</span> <span class="k">class</span><span class="o">=</span><span class="s2">"total-hours"</span><span class="o">><</span><span class="sx">%= "#{l_hours(@version.rest_hours)} <br/> #{l_hours(@version.rest_hours / 8.0)} <br/> #{l_hours(@version.rest_hours / 40.0)}" %></td>
+ <td width=</span><span class="s2">"240px"</span> <span class="k">class</span><span class="o">=</span><span class="s2">"total-hours"</span><span class="o">><</span><span class="sx">%= "#{l_hours(@version.rest_hours)} <br/> #{l_days(@version.rest_hours / 8.0)} <br/> #{l_weeks(@version.rest_hours / 40.0)}" %></td>
</span></code></pre></p>
<p>Second, modify locales YAML file(s) to properly display output values from <em>l_days</em> and <em>l_weeks</em> functions inside of <code>vendor/plugins/advanced_roadmap/config/locales</code><br /><pre><code class="text syntaxhl">Index: vendor/plugins/advanced_roadmap/config/locales/en.yml
===================================================================
@@ -2,4 +2,4 @@
- label_f_day: %.2f day
- label_f_day_plural: %.2f days
- label_f_week: %.2f week
- label_f_week_plural: %.2f weeks
+ label_f_day: "{{value}} day"
+ label_f_day_plural: "{{value}} days"
+ label_f_week: "{{value}} week"
+ label_f_week_plural: "{{value}} weeks"
</code></pre></p>
<p>Third, extend <strong>i18b.rb</strong> Redmine's library with <em>l_days</em> and <em>l_weeks</em> functions inside of <code>lib/redmine</code><br /><pre><code class="ruby syntaxhl"><span class="no">Index</span><span class="p">:</span> <span class="n">lib</span><span class="o">/</span><span class="n">redmine</span><span class="o">/</span><span class="n">i18n</span><span class="p">.</span><span class="nf">rb</span>
<span class="o">===================================================================</span>
<span class="err">@@</span> <span class="o">-</span><span class="mi">29</span><span class="p">,</span><span class="mi">8</span> <span class="o">+</span><span class="mi">29</span><span class="p">,</span><span class="mi">18</span> <span class="err">@@</span>
<span class="k">def</span> <span class="nf">l_hours</span><span class="p">(</span><span class="n">hours</span><span class="p">)</span>
<span class="n">hours</span> <span class="o">=</span> <span class="n">hours</span><span class="p">.</span><span class="nf">to_f</span>
<span class="n">l</span><span class="p">((</span><span class="n">hours</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_hour</span> <span class="p">:</span> <span class="ss">:label_f_hour_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">hours</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="k">end</span>
<span class="o">+</span> <span class="k">def</span> <span class="nf">l_days</span><span class="p">(</span><span class="n">days</span><span class="p">)</span>
<span class="o">+</span> <span class="n">days</span> <span class="o">=</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span>
<span class="o">+</span> <span class="n">l</span><span class="p">((</span><span class="n">days</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_day</span> <span class="p">:</span> <span class="ss">:label_f_day_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="o">+</span> <span class="k">end</span>
<span class="o">+</span>
<span class="o">+</span> <span class="k">def</span> <span class="nf">l_weeks</span><span class="p">(</span><span class="n">weeks</span><span class="p">)</span>
<span class="o">+</span> <span class="n">weeks</span> <span class="o">=</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span>
<span class="o">+</span> <span class="n">l</span><span class="p">((</span><span class="n">weeks</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_week</span> <span class="p">:</span> <span class="ss">:label_f_week_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="o">+</span> <span class="k">end</span>
<span class="o">+</span>
<span class="k">def</span> <span class="nf">ll</span><span class="p">(</span><span class="n">lang</span><span class="p">,</span> <span class="n">str</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span>
<span class="o">::</span><span class="no">I18n</span><span class="p">.</span><span class="nf">t</span><span class="p">(</span><span class="n">str</span><span class="p">.</span><span class="nf">to_s</span><span class="p">,</span> <span class="ss">:value</span> <span class="o">=></span> <span class="n">value</span><span class="p">,</span> <span class="ss">:locale</span> <span class="o">=></span> <span class="n">lang</span><span class="p">.</span><span class="nf">to_s</span><span class="p">.</span><span class="nf">gsub</span><span class="p">(</span><span class="sr">%r{(.+)</span><span class="se">\-</span><span class="sr">(.+)$}</span><span class="p">)</span> <span class="p">{</span> <span class="s2">"</span><span class="si">#{</span><span class="vg">$1</span><span class="si">}</span><span class="s2">-</span><span class="si">#{</span><span class="vg">$2</span><span class="p">.</span><span class="nf">upcase</span><span class="si">}</span><span class="s2">"</span> <span class="p">})</span>
<span class="k">end</span>
</code></pre><br />Of course, we might create/extend helpers for <em>milestones</em>, <em>projects</em> and <em>versions</em> with <em>l_days</em> and <em>l_weeks</em> functions but I prefer to extend i18n.rb instead due to leak of experience how to extend helpers :).</p>
<p>Fourth, restart your application server (webrick, mongrel, apache+mod_passenger, etc.) and Enjoy!<br /><img src="https://redmine.ociotec.com/attachments/download/88/projects_roadmap.png" alt="" /><br /><img src="https://redmine.ociotec.com/attachments/download/89/versions_show.png" alt="" /><br /><img src="https://redmine.ociotec.com/attachments/download/90/milestones_show.png" alt="" /></p>
Advanced roadmap - Error #268: Wrong labels in roadmap for "Due in" values
https://redmine.ociotec.com/issues/268?journal_id=460
2010-08-19T11:56:47Z
Andrew Rudenko
<ul></ul><p>Updated Third action:<br />as I said before, we may not modify <strong>i18n.rb</strong> Redmine's library but put all necessary code into plugin helpers.</p>
<p>I'm a newbie in Ruby on Rails so sorry if do something wrongly. I understand that the code below conflicts with DRY principals of the RoR but don't know how to force this code work in compliance to DRY.<br />so what I have,</p>
<p>Third, create <strong>helpers</strong> inside of plugin folder, and add <em>l_days</em> and <em>l_weeks</em> functions there<br /><code>vendor/plugins/advanced_roadmap/app/helpers/milestones_helper.rb</code><br /><pre><code class="ruby syntaxhl"><span class="k">module</span> <span class="nn">MilestonesHelper</span>
<span class="k">def</span> <span class="nf">l_days</span><span class="p">(</span><span class="n">days</span><span class="p">)</span>
<span class="n">days</span> <span class="o">=</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span>
<span class="n">l</span><span class="p">((</span><span class="n">days</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_day</span> <span class="p">:</span> <span class="ss">:label_f_day_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">l_weeks</span><span class="p">(</span><span class="n">weeks</span><span class="p">)</span>
<span class="n">weeks</span> <span class="o">=</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span>
<span class="n">l</span><span class="p">((</span><span class="n">weeks</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_week</span> <span class="p">:</span> <span class="ss">:label_f_week_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="k">end</span>
<span class="k">end</span></code></pre><br /><code>vendor/plugins/advanced_roadmap/app/helpers/projects_helper.rb</code><br /><pre><code class="ruby syntaxhl"><span class="k">module</span> <span class="nn">ProjectsHelper</span>
<span class="k">def</span> <span class="nf">l_days</span><span class="p">(</span><span class="n">days</span><span class="p">)</span>
<span class="n">days</span> <span class="o">=</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span>
<span class="n">l</span><span class="p">((</span><span class="n">days</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_day</span> <span class="p">:</span> <span class="ss">:label_f_day_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">l_weeks</span><span class="p">(</span><span class="n">weeks</span><span class="p">)</span>
<span class="n">weeks</span> <span class="o">=</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span>
<span class="n">l</span><span class="p">((</span><span class="n">weeks</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_week</span> <span class="p">:</span> <span class="ss">:label_f_week_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="k">end</span>
<span class="k">end</span></code></pre><br /><code>vendor/plugins/advanced_roadmap/app/helpers/versions_helper.rb</code><br /><pre><code class="ruby syntaxhl"><span class="k">module</span> <span class="nn">VersionsHelper</span>
<span class="k">def</span> <span class="nf">l_days</span><span class="p">(</span><span class="n">days</span><span class="p">)</span>
<span class="n">days</span> <span class="o">=</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span>
<span class="n">l</span><span class="p">((</span><span class="n">days</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_day</span> <span class="p">:</span> <span class="ss">:label_f_day_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">days</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">l_weeks</span><span class="p">(</span><span class="n">weeks</span><span class="p">)</span>
<span class="n">weeks</span> <span class="o">=</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span>
<span class="n">l</span><span class="p">((</span><span class="n">weeks</span> <span class="o"><</span> <span class="mf">2.0</span> <span class="p">?</span> <span class="p">:</span><span class="n">label_f_week</span> <span class="p">:</span> <span class="ss">:label_f_week_plural</span><span class="p">),</span> <span class="ss">:value</span> <span class="o">=></span> <span class="p">(</span><span class="s2">"%.2f"</span> <span class="o">%</span> <span class="n">weeks</span><span class="p">.</span><span class="nf">to_f</span><span class="p">))</span>
<span class="k">end</span>
<span class="k">end</span></code></pre></p>
Advanced roadmap - Error #268: Wrong labels in roadmap for "Due in" values
https://redmine.ociotec.com/issues/268?journal_id=465
2010-08-23T13:44:20Z
Emilio González Montaña
<ul><li><strong>Status</strong> changed from <i>New</i> to <i>In progress</i></li><li><strong>Target version</strong> set to <i>Advanced roadmap 0.1.0</i></li></ul>
Advanced roadmap - Error #268: Wrong labels in roadmap for "Due in" values
https://redmine.ociotec.com/issues/268?journal_id=466
2010-08-23T14:06:36Z
Emilio González Montaña
<ul><li><strong>Due date</strong> set to <i>2010-08-23</i></li><li><strong>Status</strong> changed from <i>In progress</i> to <i>Resolved</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>Thanks Andrew.</p>