Skip to content

Commit 52aa177

Browse files
committed
splits resources items into people and assets #26 #24
1 parent eb98cc5 commit 52aa177

37 files changed

+503
-151
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class AssetResourceItemsController < ResourceItemsController
2+
menu_item :asset_resource_items
3+
4+
def resource_class
5+
Asset
6+
end
7+
8+
def redirect_to_index
9+
redirect_to project_asset_resource_items_path @project
10+
end
11+
end
12+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class HumanResourceItemsController < ResourceItemsController
2+
menu_item :human_resource_items
3+
4+
def resource_class
5+
Human
6+
end
7+
8+
def redirect_to_index
9+
redirect_to project_human_resource_items_path @project
10+
end
11+
end

app/controllers/issue_resource_items_controller.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ class IssueResourceItemsController < ApplicationController
77

88
def new
99
@categories = @project.resource_categories.sorted
10-
@category = @categories.first
1110
@issue = find_issue_if_present
11+
@type = %w(Asset Human).detect{|t| t == params[:type]}
1212

1313
query = RedmineResourceManager::ResourceItemsQuery.new(
14-
project: @project, category_id: @category.id, issue_id: params[:issue_id]
14+
project: @project, category_id: nil, issue_id: params[:issue_id],
15+
resource_class: @type.constantize
1516
)
1617

1718
@resource_items = query.scope

app/controllers/resource_items_controller.rb

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,34 @@ class ResourceItemsController < ApplicationController
44
before_action :find_project_by_project_id
55
before_action :authorize
66

7-
menu_item :resource_items
87

98
def index
10-
@resource_items = @project.resource_items
11-
.joins(:category)
12-
.order("#{ResourceCategory.table_name}.name ASC, #{ResourceItem.table_name} ASC")
9+
@resource_items = resource_class.where(project_id: @project.id)
10+
.includes(:category).references(:category)
11+
.order("#{ResourceCategory.table_name}.name ASC, #{ResourceItem.table_name}.name ASC")
1312
end
1413

1514
def edit
1615
@resource_item = find_resource_item
1716
end
1817

1918
def new
20-
@resource_item = ResourceItem.new resource_item_params
19+
@resource_item = resource_class.new resource_item_params
2120
end
2221

2322
def create
2423
r = RedmineResourceManager::SaveResourceItem.(
25-
resource_item_params, project: @project
24+
resource_item_params, project: @project, resource_class: resource_class
2625
)
2726
if r.item_saved?
28-
redirect_to params[:continue] ?
29-
new_project_resource_item_path(
27+
if params[:continue]
28+
redirect_to new_project_resource_item_path(
3029
@project,
3130
resource_item: { category_id: r.item.category_id }
32-
) :
33-
project_resource_items_path(@project)
31+
)
32+
else
33+
redirect_to_index
34+
end
3435
else
3536
@resource_item = r.item
3637
render 'new'
@@ -43,37 +44,46 @@ def update
4344
resource_item_params, item: @resource_item, project: @project
4445
)
4546
if r.item_saved?
46-
redirect_to project_resource_items_path @project
47+
redirect_to_index
4748
else
4849
render 'edit'
4950
end
5051
end
5152

5253
def destroy
5354
find_resource_item.destroy
54-
redirect_to project_resource_items_path @project
55+
redirect_to_index
5556
end
5657

5758
def autocomplete
5859
query = RedmineResourceManager::ResourceItemsQuery.new(
60+
resource_class: resource_class,
5961
project: @project,
6062
category_id: params[:category_id],
6163
query: params[:q],
62-
issue_id: params[:issue_id]
64+
issue_id: params[:issue_id],
6365
)
6466
@resource_items = query.scope
6567
@total = query.total
66-
render layout: false
68+
render 'resource_items/autocomplete', layout: false
6769
end
6870

6971
private
7072

73+
def resource_class
74+
if type = %w(Asset Human).detect{|t|t == params[:type]}
75+
type.constantize
76+
end
77+
end
78+
7179
def resource_item_params
72-
params[:resource_item].permit :name, :category_id if params[:resource_item]
80+
if parameters = params[:human] || params[:asset]
81+
parameters.permit :name, :category_id
82+
end
7383
end
7484

7585
def find_resource_item
76-
@project.resource_items.find params[:id]
86+
resource_class.where(project_id: @project.id).find params[:id]
7787
end
7888

7989
end

app/models/asset.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Asset < ResourceItem
2+
end
3+

app/models/human.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Human < ResourceItem
2+
end
3+

app/models/resource_item.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
class ResourceItem < ActiveRecord::Base
2+
belongs_to :project
23
belongs_to :category, class_name: 'ResourceCategory'
4+
35
has_many :issue_resource_items
46

5-
validates :category_id, presence: true
7+
validates :project_id, presence: true
8+
#validates :category_id, presence: true
69
validates :name, presence: true,
710
uniqueness: { case_sensitive: false, scope: :category_id }
811

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<%= title [l(:label_asset_resource_item_plural), project_asset_resource_items_path(@project)], @resource_item.name %>
2+
3+
<%= labelled_form_for @resource_item, url: project_asset_resource_item_path(@project, @resource_item), method: :patch do |f| %>
4+
<%= render partial: 'form', locals: { f: f } %>
5+
<p>
6+
<%= submit_tag l :button_save %>
7+
</p>
8+
<% end %>
9+
10+
11+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<div class="contextual">
2+
<% if User.current.allowed_to? :manage_resource_items, @project %>
3+
<%= link_to l(:label_asset_resource_item_new), new_project_asset_resource_item_path(@project), class: 'icon icon-add' %>
4+
<% end %>
5+
</div>
6+
7+
<h2><%= l :label_asset_resource_item_plural %></h2>
8+
9+
<% if @resource_items.any? %>
10+
<table class="list resource_items">
11+
<thead>
12+
<tr>
13+
<th><%= l :label_resource_item_category %></th>
14+
<th><%= l :label_resource_item_name %></th>
15+
<th></th>
16+
</tr>
17+
</thead>
18+
<tbody>
19+
<% for i in @resource_items %>
20+
<tr>
21+
<td class="category"><%= i.category&.name %>
22+
<td class="name"><%= link_to i.name, edit_project_asset_resource_item_path(@project, i) %></td>
23+
<td><%= delete_link project_asset_resource_item_path(@project, i) %></td>
24+
</tr>
25+
<% end %>
26+
</tbody>
27+
</table>
28+
<% else %>
29+
<p class="nodata"><%= l :label_no_data %></p>
30+
<% end %>
31+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<%= title [l(:label_asset_resource_item_plural), project_asset_resource_items_path(@project)], l(:label_asset_resource_item_new) %>
2+
3+
<%= labelled_form_for @resource_item, url: project_asset_resource_items_path(@project) do |f| %>
4+
<%= render partial: 'resource_items/form', locals: { f: f } %>
5+
<p>
6+
<%= submit_tag l :button_create %>
7+
<%= submit_tag l(:button_create_and_continue), name: 'continue' %>
8+
</p>
9+
<% end %>
10+
11+

0 commit comments

Comments
 (0)