]> source.dussan.org Git - redmine.git/commitdiff
Patch #9530 Progress bars for roadmap versions (Nick Read)
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 25 Mar 2007 12:59:48 +0000 (12:59 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 25 Mar 2007 12:59:48 +0000 (12:59 +0000)
Slightly edited and links to issues list added

git-svn-id: http://redmine.rubyforge.org/svn/trunk@379 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/views/projects/roadmap.rhtml
lang/de.yml
lang/en.yml
lang/es.yml
lang/fr.yml
lang/it.yml
lang/ja.yml
public/stylesheets/application.css

index 38e5fbd15273342f8e9a808883537db81d3eb565..19a3032b05c6c59676f9716b9d827b9270bc40ac 100644 (file)
 
 <% @versions.each do |version| %>   
     <h3 class="icon22 icon22-package"><%= version.name %></h3>
-    <p><%= format_date(version.effective_date) %><br />
-    <%=h version.description %></p>
-    <ul>
-    <% version.fixed_issues.find(:all,
+    <p><%=h version.description %></p>
+    <p><strong><%=l(:label_roadmap_due_in)%> <%= distance_of_time_in_words Time.now, version.effective_date %> (<%= format_date(version.effective_date) %>)</strong></p>    
+    <% issues = version.fixed_issues.find(:all,
                                  :include => :status,
                                  :conditions => ["tracker_id in (#{@selected_tracker_ids.join(',')})"],
-                                 :order => "position").each do |issue| %>
-        <li>
-               <%= 
-                       link = link_to("#{issue.tracker.name} ##{issue.id}", :controller => 'issues', :action => 'show', :id => issue)
-                       issue.status.is_closed? ? content_tag("del", link) : link
-               %> : <%=h issue.subject %>
-               
-        <%= content_tag "em", "(#{l(:label_closed_issues)})" if issue.status.is_closed? %></li>
-    <% end %>
+                                 :order => "position")
+
+       total = issues.size
+       complete = issues.inject(0) {|c,i| i.status.is_closed? ? c + 1 : c } 
+       percentComplete = total == 0 ? 100 : (100 / total * complete).floor 
+       percentIncomplete = 100 - percentComplete
+    %>
+    <table class="progress">
+      <tr>
+       <% if percentComplete > 0 %>
+          <td class="closed" style="width: <%= percentComplete %>%"></td>
+        <% end; if percentIncomplete > 0 %>
+          <td class="open" style="width: <%= percentIncomplete %>%"></td>
+        <% end %>
+      </tr>
+    </table>
+    <em><%= link_to(complete, :controller => 'projects', :action => 'list_issues', :id => @project, :status_id => 'c', :fixed_version_id => version, :set_filter => 1) %> <%= lwr(:label_closed_issues, complete) %> (<%= percentComplete %>%) &#160;
+        <%= link_to((total - complete), :controller => 'projects', :action => 'list_issues', :id => @project, :status_id => 'o', :fixed_version_id => version, :set_filter => 1) %> <%= lwr(:label_open_issues, total - complete)%> (<%= percentIncomplete %>%)</em>
+    <br />
+    <br />
+    <ul>
+      <% if total == 0 %>
+        <li><%=l(:label_roadmap_no_issues)%></li>
+      <% else %>
+        <% issues.each do |issue| %>
+          <li>
+            <%= link = link_to("#{issue.tracker.name} ##{issue.id}", :controller => 'issues', :action => 'show', :id => issue)
+                       issue.status.is_closed? ? content_tag("del", link) : link %>
+            : <%=h issue.subject %>
+            <%= content_tag "em", "(#{l(:label_closed_issues)})" if issue.status.is_closed? %>
+          </li>
+        <% end %>
+      <% end %>
     </ul>
 <% end %>
-</div>
\ No newline at end of file
+</div>
index 3046dceb64b6d29de22e0aab32f54e7928c21611..82c61551efa6a8e884608793ad05b6bad48bcd38 100644 (file)
@@ -325,6 +325,8 @@ label_sort_higher: eins höher
 label_sort_lower: eins tiefer
 label_sort_lowest: Ende
 label_roadmap: Roadmap
+label_roadmap_due_in: Due in 
+label_roadmap_no_issues: No issues for this version
 label_search: Suche
 label_result: %d Resultat
 label_result_plural: %d Resultate
index 6ed10aa88c1a77cd59592a0903d95939b2ea6108..2b5ceb60cc53f47a68e67042357dfe5666659525 100644 (file)
@@ -325,6 +325,8 @@ label_sort_higher: Move up
 label_sort_lower: Move down
 label_sort_lowest: Move to bottom
 label_roadmap: Roadmap
+label_roadmap_due_in: Due in 
+label_roadmap_no_issues: No issues for this version
 label_search: Search
 label_result: %d result
 label_result_plural: %d results
index a0a04562e069aa93721df064bb0632760e85c32a..20cadb623182dd384453d5de689cec75657f0ade 100644 (file)
@@ -325,6 +325,8 @@ label_sort_higher: Subir
 label_sort_lower: Bajar
 label_sort_lowest: Último
 label_roadmap: Roadmap
+label_roadmap_due_in: Due in 
+label_roadmap_no_issues: No issues for this version
 label_search: Búsqueda
 label_result: %d resultado
 label_result_plural: %d resultados
index 9a2195b119a0f7b3c7af0606071d7bce83388440..7ec3e93fdde7f808ea73b187ac4b17b361e92901 100644 (file)
@@ -325,6 +325,8 @@ label_sort_higher: Remonter
 label_sort_lower: Descendre
 label_sort_lowest: Descendre en dernier
 label_roadmap: Roadmap
+label_roadmap_due_in: Echéance dans
+label_roadmap_no_issues: Aucune demande pour cette version
 label_search: Recherche
 label_result: %d résultat
 label_result_plural: %d résultats
index df89120ff43bb9455583d9867785ef48b76d9474..d9abb0d23d49c0756648483222dfe6460744d6ec 100644 (file)
@@ -325,6 +325,8 @@ label_sort_higher: Su
 label_sort_lower: Giù
 label_sort_lowest: Sposta in fondo
 label_roadmap: Roadmap
+label_roadmap_due_in: Due in 
+label_roadmap_no_issues: No issues for this version
 label_search: Ricerca
 label_result: %d risultato
 label_result_plural: %d risultati
index 57d3df41bfd5364273382473302c2ff9b3698513..d0a255a8ea3db85dc3123f7a4f34c8d932ea159f 100644 (file)
@@ -326,6 +326,8 @@ label_sort_higher: 上へ
 label_sort_lower: 下へ
 label_sort_lowest: 一番下へ
 label_roadmap: ロードマップ
+label_roadmap_due_in: Due in 
+label_roadmap_no_issues: No issues for this version
 label_search: 検索
 label_result: %d 件の結果
 label_result_plural: %d 件の結果
index ea0aaa4c06d35f541b439b05f6ae37bee8613727..6239fafccc239cb437573d4848c1259525672f64 100644 (file)
@@ -501,6 +501,20 @@ img.calendar-trigger {
     margin-left: 34px;\r
 }\r
 \r
+.progress {\r
+    border: 1px solid #D7D7D7;\r
+    border-collapse: collapse;\r
+    border-spacing: 0pt;\r
+    empty-cells: show;\r
+    padding: 3px;\r
+    width: 40em;\r
+    text-align: center;\r
+}\r
+\r
+.progress td { height: 1em; }\r
+.progress .closed { background: #BAE0BA none repeat scroll 0%; }\r
+.progress .open { background: #FFF none repeat scroll 0%; }\r
+\r
 /***** Contextual links div *****/\r
 .contextual {\r
 float: right;\r