Initial Redmine tooling and local plugin forks

This commit is contained in:
Jason Thistlethwaite
2026-04-24 22:01:18 +00:00
commit 9f682af0eb
683 changed files with 56878 additions and 0 deletions
@@ -0,0 +1,25 @@
<tr class="metrics">
<td colspan="<%= @collector.columns.count / 2 %>">
<p><%= l(:label_helpdesk_busiest_time_of_day_new_tickets) %></p>
<div class="num"><%= @collector.new_issues_count %></div>
<div class="change" title="<%= process_deviation(@collector.previous_new_issues_count, @collector.new_issues_count, false) %>">
<%= progress_in_percents(-@collector.new_issue_count_progress) %>
</div>
</td>
<td colspan="<%= @collector.columns.count / 2 %>">
<p><%= l(:label_helpdesk_busiest_time_of_day_new_contacts) %></p>
<div class="num"><%= @collector.contacts_count %></div>
<div class="change" title="<%= process_deviation(@collector.previous_contacts_count, @collector.contacts_count, false) %>">
<%= progress_in_percents(-@collector.total_contacts_count_progress) %>
</div>
</td>
</tr>
<tr class="metrics">
<td colspan="<%= @collector.columns.count / 2 %>">
<p><%= l(:label_helpdesk_busiest_time_of_day_total_incoming) %></p>
<div class="num"><%= @collector.issues_count %></div>
<div class="change" title="<%= process_deviation(@collector.previous_issues_count, @collector.issues_count, false) %>">
<%= progress_in_percents(-@collector.issue_count_progress) %>
</div>
</td>
</tr>
@@ -0,0 +1,33 @@
<% if @collector.issues_count.zero? %>
<p class="nodata"><%= l(:label_no_data) %></p>
<% else %>
<div class="helpdesk_chart">
<table class="chart_table">
<tr class="header">
<% @collector.columns.each do |column| %>
<td class="column_data">
<p class="issues_count"><%= column[:issues_count] %></p>
<p><%= [column[:issues_percent], '%'].join %></p>
</td>
<% end %>
</tr>
<tr class="main_block">
<% @collector.columns.each do |column| %>
<td class="column_data">
<% if column[:issues_count] > 0 %>
<div class="percents" style='height: <%= (column[:issues_count] * @collector.issue_weight).ceil %>px'></div>
<% end %>
</td>
<% end %>
</tr>
<tr class="footer">
<% @collector.columns.each do |column| %>
<td class="column_data">
<%= l("label_helpdesk_#{@report}_interval_#{column[:name]}") %>
</td>
<% end %>
</tr>
<%= render :partial => "#{@report}_metrics" %>
</table>
</div>
<% end %>
@@ -0,0 +1,33 @@
<tr class="metrics">
<td colspan="<%= @collector.columns.count / 2 %>">
<p><%= l(:label_helpdesk_average_first_response_time) %></p>
<div class="num"><%= helpdesk_time_label(@collector.average_response_time) %></div>
<div class="change" title="<%= process_deviation(@collector.previous_average_response_time, @collector.average_response_time) %>">
<%= mirror_progress_in_percents(@collector.average_response_time_progress) %>
</div>
</td>
<td colspan="<%= @collector.columns.count / 2 %>">
<p><%= l(:label_helpdesk_average_time_to_close) %></p>
<div class="num"><%= helpdesk_time_label(@collector.average_close_time) %></div>
<div class="change" title="<%= process_deviation(@collector.previous_average_close_time, @collector.average_close_time) %>">
<%= mirror_progress_in_percents(@collector.average_close_time_progress) %>
</div>
</td>
</tr>
<tr class="metrics">
<td colspan="<%= @collector.columns.count / 2 %>">
<p><%= l(:label_helpdesk_average_responses_count) %></p>
<div class="num"><%= @collector.average_response_count %></div>
<div class="change" title="<%= process_deviation(@collector.previous_average_response_count, @collector.average_response_count, false) %>">
<%= progress_in_percents(@collector.average_response_count_progress) %>
</div>
</td>
<td colspan="<%= @collector.columns.count / 2 %>">
<p><%= l(:label_helpdesk_total_replies) %></p>
<div class="num"><%= @collector.total_response_count %></div>
<div class="change" title="<%= process_deviation(@collector.previous_total_response_count, @collector.total_response_count, false) %>">
<%= progress_in_percents(-@collector.total_response_count_progress) %>
</div>
</td>
</td>
</tr>
@@ -0,0 +1,29 @@
<h2><%= l("label_helpdesk_report_names_#{@report}") %></h2>
<% html_title(l("label_helpdesk_report_names_#{@report}")) %>
<%= form_tag({ :controller => 'helpdesk_reports', :action => 'show', :project_id => @project },
:method => :get, :id => 'query_form') do %>
<div id="query_form_with_buttons" class="hide-when-print">
<%= hidden_field_tag 'set_filter', '1' %>
<div id="query_form_content">
<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
<div style="<%= @query.new_record? ? "" : "display: none;" %>">
<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
</div>
</fieldset>
</div>
<p class="buttons">
<%= link_to_function l(:button_apply), '$("#query_form").submit()', :class => 'icon icon-checked' %>
<%= link_to l(:button_clear), { :set_filter => 1, :project_id => @project }, :class => 'icon icon-reload' %>
</p>
</div>
<% end %>
<%= error_messages_for 'query' %>
<%= render :partial => 'chart' %>
<% content_for :sidebar do %>
<%= render :partial => 'issues/helpdesk_reports' %>
<% end %>