OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/app/views/work_packages/index.html.erb

166 lines
8.3 KiB

<%#-- copyright
OpenProject is a project management system.
Copyright (C) 2012-2013 the OpenProject Foundation (OPF)
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See doc/COPYRIGHT.rdoc for more details.
++#%>
<% breadcrumb_paths(l(:label_work_package_plural)) %>
<% if !query.new_record? && query.editable_by?(User.current) %>
<% content_for :action_menu_main do %>
<%= li_unless_nil link_to(l(:button_edit), {:controller => '/queries', :action => 'edit', :id => query}, :class => 'icon icon-edit') %>
<%= li_unless_nil link_to(l(:button_delete), {:controller => '/queries', :action => 'destroy', :id => query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del') %>
<% end %>
<% content_for :action_menu_more do %>
<% if query.is_public? ? (current_user.allowed_to?(:manage_public_queries, project) || current_user.admin?) : current_user.allowed_to?(:save_queries, project, :global => true) %>
<% if query_menu_item = query.query_menu_item %>
<%= li_unless_nil link_to(l(:button_configure_menu_entry), edit_query_menu_item_path(project, query, query_menu_item)) %>
<%= li_unless_nil link_to(l(:button_delete_menu_entry), query_menu_item_path(project, query, query_menu_item), :method => :delete) %>
<% else %>
<%= li_unless_nil(link_to(l(:button_add_menu_entry), query_menu_items_path(project, query), :method => :create)) %>
<% end %>
<% end %>
<% end %>
<% end %>
<h2><%= query.new_record? ? l(:label_work_package_plural) : h(query.name) %></h2>
<div class="title-bar">
<div class="title-bar-extras">
<% html_title(query.new_record? ? l(:label_work_package_plural) : h(query.name)) %>
<div id='work-packages-query-selection'>
<%= label_tag 'query-select', l('apply_filter', :scope => 'queries') %>
<%= select :query, :id, grouped_options_for_select(grouped_query_options, query.id), {:include_blank => query.new_record?, :selected => query.id}, {:id => 'query-select'} %>
<%# TODO Use placeholder when I18n-js works again %>
<script type='text/javascript'>
(function() {
jQuery('#query-select')
.select2()
.change(function() {
document.location.href = window.location.pathname + '?query_id=' + this.value;
// TODO use FilterQueryStringBuilder
});
})();
</script>
</div>
<%= form_tag({ :controller => '/queries', :action => 'new' }, :id => 'query_form') do %>
<%= hidden_field_tag('project_id', project.to_param) if project %>
<div id="query_form_content" class="hide-when-print">
<fieldset id="filters" class="header_collapsible collapsible <%= query.new_record? ? "" : "collapsed" %>">
<legend title="<%=l(:description_filter_toggle)%>", onclick="toggleFieldset(this);"><a href="javascript:"><%= l(:label_filter_plural) %></a></legend>
<div class="filter-fields" style="<%= query.new_record? ? "" : "display: none;" %>">
<%= render :partial => 'queries/filters', :locals => {:query => query} %>
</div>
</fieldset>
<fieldset id="column_options" class="header_collapsible collapsible collapsed">
<legend title="<%=l(:description_option_toggle)%>", onclick="toggleFieldset(this);"><a href="javascript:"><%= l(:label_options) %></a></legend>
<div style="display: none;">
<table>
<tr>
<td><%= Query.human_attribute_name(:column_names) %></td>
<td><%= render :partial => 'queries/columns', :locals => {:query => query} %></td>
</tr>
<tr>
<td><label for='group_by'><%= Query.human_attribute_name(:group_by) %></label></td>
<td><%= select_tag('group_by', options_for_select([[]] + query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, query.group_by)) %></td>
</tr>
<% if query.any_summable_columns? %>
<tr>
<td><%= label_tag :display_sums, l(:label_display_sums) %></td>
<td><%= check_box_tag :display_sums, 1, query.display_sums? %></td>
</tr>
<% end %>
</table>
<%= call_hook(:view_issue_query_form_options_bottom, :query => query) %>
</div>
</fieldset>
</div>
<p class="buttons hide-when-print">
<%= link_to_remote l(:button_apply),
{ :url => { :set_filter => 1 },
:before => 'selectAllOptions("selected_columns");',
:update => "content",
:method => :get,
:complete => "apply_filters_observer()",
:with => "jQuery('#query_form').serialize()"
}, :class => 'icon icon-checked' %>
<%= link_to_remote l(:button_clear),
{ :url => { :set_filter => 1, :sort => WorkPackagesController::DEFAULT_SORT_ORDER.join(':'), :project_id => project },
:method => :get,
:update => "content",
:complete => 'resetSelectedMenuItem()',
}, :class => 'icon icon-reload' %>
<% if query.new_record? && User.current.allowed_to?(:save_queries, project, :global => true) %>
<%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); jQuery('#query_form').submit(); return false;", :class => 'icon icon-save' %>
<% end %>
</p>
<% end %>
</div><!-- .title-bar-extras -->
</div><!-- .title-bar -->
<%= error_messages_for 'query' %>
<% if query.valid? %>
<% if work_packages.empty? %>
<p class="nodata"><%= l(:label_no_data) %></p>
<% else %>
<%= render :partial => 'work_packages/list', :locals => { :work_packages => work_packages,
:query => query,
:results => results } %>
<%= pagination_links_full work_packages %>
<% end %>
<%= other_formats_links do |f| %>
<%= f.link_to 'Atom', :url => { :project_id => project, :query_id => (query.new_record? ? nil : query), :key => User.current.rss_key } %>
<%= f.link_to 'CSV', :url => { :project_id => project } %>
<%= f.link_to 'PDF', :url => { :project_id => project } %>
<%= f.link_to I18n.t(:label_pdf_with_descriptions), :url => { :project_id => project,
:show_descriptions => true,
:format => 'pdf' } %>
<%= call_hook(:view_work_packages_index_other_formats, :link_formatter => f, :project => project) %>
<% end if User.current.allowed_to? :export_work_packages, project, :global => project.nil? %>
<% end %>
<%= call_hook(:view_work_packages_index_bottom, { :issues => work_packages, :project => project, :query => query }) %>
<% content_for :sidebar do %>
<%= render :partial => 'sidebar' %>
<% end %>
<% content_for :header_tags do %>
<%= auto_discovery_link_tag(:atom, {:query_id => query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_work_package_plural)) %>
<%= auto_discovery_link_tag(:atom, {:controller => '/journals', :action => 'index', :query_id => query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %>
<% end %>
<%= context_menu work_packages_context_menu_path %>