Feature #3718 » 0009-categoria_padre.diff
| app/views/issues/_attributes.html.erb Wed Aug 07 15:28:59 2013 +0200 | ||
|---|---|---|
| 19 | 19 |
<% end %> |
| 20 | 20 |
|
| 21 | 21 |
<% if @issue.safe_attribute?('category_id') && @issue.project.issue_categories.any? %>
|
| 22 |
<p><%= f.select :category_id, (@issue.project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true, :required => @issue.required_attribute?('category_id') %>
|
|
| 22 |
<p><%= f.select :category_id, (@issue.project.issue_categories[0].get_categories(@project,nil).collect{ |c| [c.full_name(c,@project,c.name),c.id]}), :include_blank => true, :required => @issue.required_attribute?('category_id') %>
|
|
| 23 | 23 |
<%= link_to(image_tag('add.png', :style => 'vertical-align: middle;'),
|
| 24 | 24 |
new_project_issue_category_path(@issue.project), |
| 25 | 25 |
:remote => true, |
| app/models/issue_category.rb Wed Aug 07 15:28:59 2013 +0200 | ||
|---|---|---|
| 25 | 25 |
validates_uniqueness_of :name, :scope => [:project_id] |
| 26 | 26 |
validates_length_of :name, :maximum => 30 |
| 27 | 27 |
|
| 28 |
safe_attributes 'name', 'assigned_to_id' |
|
| 28 |
safe_attributes 'name', 'assigned_to_id', 'categoria_padre'
|
|
| 29 | 29 |
|
| 30 | 30 |
scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)}
|
| 31 | 31 |
|
| ... | ... | |
| 43 | 43 |
def <=>(category) |
| 44 | 44 |
name <=> category.name |
| 45 | 45 |
end |
| 46 |
|
|
| 46 |
|
|
| 47 |
def all_sons(cat,proj) |
|
| 48 |
mysons = proj.issue_categories.select{ |c| c.categoria_padre == cat.id }
|
|
| 49 |
sons = [] |
|
| 50 |
if mysons.length < 1 |
|
| 51 |
return mysons |
|
| 52 |
else |
|
| 53 |
for son in mysons |
|
| 54 |
sons.push(son) |
|
| 55 |
sons.push *all_sons(son,proj) |
|
| 56 |
end |
|
| 57 |
return sons |
|
| 58 |
end |
|
| 59 |
end |
|
| 60 |
|
|
| 61 |
def full_name(cat,proj,fullname) |
|
| 62 |
if cat.categoria_padre.nil? |
|
| 63 |
myfathers = proj.issue_categories.select{ |c| c.id == 0 }
|
|
| 64 |
else |
|
| 65 |
myfathers = proj.issue_categories.select{ |c| c.id == cat.categoria_padre }
|
|
| 66 |
end |
|
| 67 |
if myfathers.length < 1 |
|
| 68 |
return fullname |
|
| 69 |
else |
|
| 70 |
father = myfathers[0] |
|
| 71 |
fullname = father.name+" / "+fullname |
|
| 72 |
return full_name(father,proj,fullname) |
|
| 73 |
end |
|
| 74 |
end |
|
| 75 |
|
|
| 76 |
def get_categories(proj,idcat) |
|
| 77 |
categories = proj.issue_categories.select{ |c| c.categoria_padre == nil && !c.id.nil? && c.id != idcat }
|
|
| 78 |
cats = [] |
|
| 79 |
for c in categories |
|
| 80 |
cats.push(c) |
|
| 81 |
cats.push *all_sons(c,proj) |
|
| 82 |
end |
|
| 83 |
return cats |
|
| 84 |
end |
|
| 85 |
|
|
| 47 | 86 |
def to_s; name end |
| 48 | 87 |
end |
| 49 | 88 | |
| app/views/issue_categories/_form.html.erb Wed Aug 07 15:28:59 2013 +0200 | ||
|---|---|---|
| 3 | 3 |
<div class="box tabular"> |
| 4 | 4 |
<p><%= f.text_field :name, :size => 30, :required => true %></p> |
| 5 | 5 |
<p><%= f.select :assigned_to_id, principals_options_for_select(@project.assignable_users, @category.assigned_to), :include_blank => true %></p> |
| 6 |
<p><%= f.select :categoria_padre, options_for_select(@category.name.nil? || @category.name=="" ? @category.get_categories(@project,nil).collect{ |c| [c.full_name(c,@project,c.name),c.id]} : ((@category.get_categories(@project,@category.id).collect{ |c| [c.full_name(c,@project,c.name),c.id] })),@category.categoria_padre) , :include_blank => true %></p>
|
|
| 6 | 7 |
</div> |
| app/views/issues/show.html.erb Wed Aug 07 15:28:59 2013 +0200 | ||
|---|---|---|
| 40 | 40 |
rows.left l(:field_assigned_to), avatar(@issue.assigned_to, :size => "14").to_s.html_safe + (@issue.assigned_to ? link_to_user(@issue.assigned_to) : "-"), :class => 'assigned-to' |
| 41 | 41 |
end |
| 42 | 42 |
unless @issue.disabled_core_fields.include?('category_id')
|
| 43 |
rows.left l(:field_category), h(@issue.category ? @issue.category.name : "-"), :class => 'category'
|
|
| 43 |
rows.left l(:field_category), h(@issue.category ? @issue.category.full_name(@issue.category,@project,@issue.category.name) : "-"), :class => 'category'
|
|
| 44 | 44 |
end |
| 45 | 45 |
unless @issue.disabled_core_fields.include?('fixed_version_id')
|
| 46 | 46 |
rows.left l(:field_fixed_version), (@issue.fixed_version ? link_to_version(@issue.fixed_version) : "-"), :class => 'fixed-version' |
| app/models/project.rb Wed Aug 07 15:28:59 2013 +0200 | ||
|---|---|---|
| 45 | 45 |
has_many :queries, :class_name => 'IssueQuery', :dependent => :delete_all |
| 46 | 46 |
has_many :documents, :dependent => :destroy |
| 47 | 47 |
has_many :news, :dependent => :destroy, :include => :author |
| 48 |
has_many :issue_categories, :dependent => :delete_all, :order => "#{IssueCategory.table_name}.name"
|
|
| 48 |
has_many :issue_categories, :dependent => :delete_all, :order => "COALESCE(#{IssueCategory.table_name}.categoria_padre, #{IssueCategory.table_name}.id), #{IssueCategory.table_name}.categoria_padre IS NOT NULL, #{IssueCategory.table_name}.id"
|
|
| 49 | 49 |
has_many :boards, :dependent => :destroy, :order => "position ASC" |
| 50 | 50 |
has_one :repository, :conditions => ["is_default = ?", true] |
| 51 | 51 |
has_many :repositories, :dependent => :destroy |
| db/migrate/20130807152159_add_categoria_padre_to_issue_categories.rb Thu Aug 08 08:42:00 2013 +0200 | ||
|---|---|---|
| 1 |
class AddCategoriaPadreToIssueCategories < ActiveRecord::Migration |
|
| 2 |
|
|
| 3 |
def self.up |
|
| 4 |
add_column :issue_categories, :categoria_padre, :int, :default => 0 |
|
| 5 |
end |
|
| 6 |
|
|
| 7 |
def self.down |
|
| 8 |
remove_column :issue_categories, :categoria_padre |
|
| 9 |
end |
|
| 10 |
|
|
| 11 |
end |
|
| app/views/projects/settings/_issue_categories.html.erb Thu Aug 08 08:42:00 2013 +0200 | ||
|---|---|---|
| 2 | 2 |
<table class="list"> |
| 3 | 3 |
<thead><tr> |
| 4 | 4 |
<th><%= l(:label_issue_category) %></th> |
| 5 |
<th><%= l(:categoria_padre) %></th> |
|
| 5 | 6 |
<th><%= l(:field_assigned_to) %></th> |
| 6 | 7 |
<th></th> |
| 7 | 8 |
</tr></thead> |
| 8 | 9 |
<tbody> |
| 9 |
<% for category in @project.issue_categories %> |
|
| 10 |
<% for category in @project.issue_categories[0].get_categories(@project,nil) %>
|
|
| 10 | 11 |
<% unless category.new_record? %> |
| 11 | 12 |
<tr class="<%= cycle 'odd', 'even' %>"> |
| 12 |
<td><%=h(category.name) %></td> |
|
| 13 |
<td><%=h( ("»"*((category.full_name(category,@project,category.name).split("/").length)-1))+" "+category.name ) %></td>
|
|
| 14 |
<td><%=h((@project.issue_categories.detect{ |c| c.id == category.categoria_padre}).name) if category.categoria_padre %></td>
|
|
| 13 | 15 |
<td><%=h(category.assigned_to.name) if category.assigned_to %></td> |
| 14 | 16 |
<td class="buttons"> |
| 15 | 17 |
<% if User.current.allowed_to?(:manage_categories, @project) %> |
| config/locales/es.yml Thu Aug 08 08:42:00 2013 +0200 | ||
|---|---|---|
| 1124 | 1124 |
field_closed_on: Closed |
| 1125 | 1125 |
setting_default_projects_tracker_ids: Default trackers for new projects |
| 1126 | 1126 |
label_total_time: Total |
| 1127 |
categoria_padre: categoría padre |
|
| 1128 |
field_categoria_padre: categoría padre |
|
| 1129 |
notice_tiene_subcategorias: "Primero debe eliminar las subcategorias" |
|
| app/controllers/issue_categories_controller.rb Thu Aug 08 08:42:00 2013 +0200 | ||
|---|---|---|
| 51 | 51 |
def create |
| 52 | 52 |
@category = @project.issue_categories.build |
| 53 | 53 |
@category.safe_attributes = params[:issue_category] |
| 54 |
#cat2 = @project.issue_categories.detect{ |c| c.id == @category.categoria_padre }
|
|
| 55 |
@category.name = level(@category,"") + @category.name |
|
| 54 | 56 |
if @category.save |
| 55 | 57 |
respond_to do |format| |
| 56 | 58 |
format.html do |
| ... | ... | |
| 69 | 70 |
end |
| 70 | 71 |
end |
| 71 | 72 |
end |
| 73 |
|
|
| 74 |
def level(cat=nil,lev="") |
|
| 75 |
if cat.categoria_padre.nil? || cat.categoria_padre == "" |
|
| 76 |
return lev |
|
| 77 |
else |
|
| 78 |
#lev = lev+">" |
|
| 79 |
cat2 = @project.issue_categories.detect{ |c| c.id == cat.categoria_padre }
|
|
| 80 |
if !cat2.name.nil? && cat2.name != "" |
|
| 81 |
#lev = lev + ">" |
|
| 82 |
#super unless ['try', 'test', 'my_method'].include? |
|
| 83 |
level(cat2,lev) |
|
| 84 |
else |
|
| 85 |
return lev |
|
| 86 |
end |
|
| 87 |
end |
|
| 88 |
end |
|
| 72 | 89 |
|
| 73 | 90 |
def edit |
| 74 | 91 |
end |
| ... | ... | |
| 91 | 107 |
end |
| 92 | 108 |
|
| 93 | 109 |
def destroy |
| 94 |
@issue_count = @category.issues.size |
|
| 95 |
if @issue_count == 0 || params[:todo] || api_request? |
|
| 96 |
reassign_to = nil |
|
| 97 |
if params[:reassign_to_id] && (params[:todo] == 'reassign' || params[:todo].blank?) |
|
| 98 |
reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id]) |
|
| 99 |
end |
|
| 100 |
@category.destroy(reassign_to) |
|
| 101 |
respond_to do |format| |
|
| 102 |
format.html { redirect_to_settings_in_projects }
|
|
| 103 |
format.api { render_api_ok }
|
|
| 104 |
end |
|
| 105 |
return |
|
| 106 |
end |
|
| 107 |
@categories = @project.issue_categories - [@category] |
|
| 108 |
end |
|
| 110 |
if @category.all_sons(@category,@project).length > 0 |
|
| 111 |
flash[:notice] = l(:notice_tiene_subcategorias) |
|
| 112 |
index |
|
| 113 |
else |
|
| 114 |
@issue_count = @category.issues.size |
|
| 115 |
if @issue_count == 0 || params[:todo] || api_request? |
|
| 116 |
reassign_to = nil |
|
| 117 |
if params[:reassign_to_id] && (params[:todo] == 'reassign' || params[:todo].blank?) |
|
| 118 |
reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id]) |
|
| 119 |
end |
|
| 120 |
@category.destroy(reassign_to) |
|
| 121 |
respond_to do |format| |
|
| 122 |
format.html { redirect_to_settings_in_projects }
|
|
| 123 |
format.api { render_api_ok }
|
|
| 124 |
end |
|
| 125 |
return |
|
| 126 |
end |
|
| 127 |
@categories = @project.issue_categories - [@category] |
|
| 128 |
end |
|
| 129 |
end |
|
| 109 | 130 |
|
| 110 | 131 |
private |
| 111 | 132 |
|
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »