Commit 46c033fc27f792e34561435b8309b94fc42d6a3a

Authored by MoisesMachado
1 parent f7d6dd22

ActionItem371: user can now create tasks for its friends

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2407 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/controllers/my_profile/tasks_controller.rb
@@ -26,9 +26,18 @@ class TasksController < MyProfileController @@ -26,9 +26,18 @@ class TasksController < MyProfileController
26 @ticket = Ticket.new(params[:ticket]) 26 @ticket = Ticket.new(params[:ticket])
27 @ticket.requestor = profile 27 @ticket.requestor = profile
28 if request.post? 28 if request.post?
29 - @ticket.save!  
30 - redirect_to :action => 'index' 29 + if @ticket.save
  30 + redirect_to :action => 'index'
  31 + end
31 end 32 end
32 end 33 end
33 34
  35 + def list_requested
  36 + @tasks = Task.find_all_by_requestor_id(profile.id)
  37 + end
  38 +
  39 + def ticket_details
  40 + @ticket = Ticket.find(:first, :conditions => ['(requestor_id = ? or target_id = ?) and id = ?', profile.id, profile.id, params[:id]])
  41 + end
  42 +
34 end 43 end
app/models/task.rb
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 class Task < ActiveRecord::Base 12 class Task < ActiveRecord::Base
13 13
14 module Status 14 module Status
  15 + include GetText
15 # the status of tasks just created 16 # the status of tasks just created
16 ACTIVE = 1 17 ACTIVE = 1
17 18
@@ -20,6 +21,10 @@ class Task &lt; ActiveRecord::Base @@ -20,6 +21,10 @@ class Task &lt; ActiveRecord::Base
20 21
21 # the status os a task that was successfully finished 22 # the status os a task that was successfully finished
22 FINISHED = 3 23 FINISHED = 3
  24 +
  25 + def self.names
  26 + [nil, N_('Active'), N_('Cancelled'), N_('Finished')]
  27 + end
23 end 28 end
24 29
25 belongs_to :requestor, :class_name => 'Person', :foreign_key => :requestor_id 30 belongs_to :requestor, :class_name => 'Person', :foreign_key => :requestor_id
app/models/ticket.rb
1 class Ticket < Task 1 class Ticket < Task
2 -  
3 - serialize :data, Hash  
4 -  
5 - def data  
6 - self[:data] ||= {}  
7 - end  
8 -  
9 - def title  
10 - data[:title]  
11 - end  
12 -  
13 - def title= value  
14 - data[:title] = value  
15 - end  
16 -  
17 - def description  
18 - data[:description]  
19 - end  
20 -  
21 - def description= value  
22 - data[:description] = value  
23 - end  
24 - 2 + acts_as_having_settings :field => :data
  3 + settings_items :title, :description, :closing_statment
25 end 4 end
app/views/tasks/_ticket.rhtml 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +<h2><%= _('Processing ticket: %s') % task.title %></h2>
  2 +
  3 +<%= task.description %>
  4 +
  5 +<% form_for('task', task, :url => { :action => 'close', :id => task.id}) do |f| %>
  6 +
  7 + <%= labelled_form_field(_('Closing statment'), f.text_area(:closing_statment) ) %>
  8 +
  9 + <div>
  10 + <%= radio_button_tag(:decision, 'finish', true) %>
  11 + <%= _('OK') %>
  12 + </div>
  13 + <div>
  14 + <%= radio_button_tag(:decision, 'cancel', false) %>
  15 + <%= _('Cancel') %>
  16 + </div>
  17 +
  18 + <% button_bar do %>
  19 + <%= submit_button(:ok, _('OK')) %>
  20 + <% end %>
  21 +
  22 +<% end %>
app/views/tasks/index.rhtml
@@ -14,5 +14,7 @@ @@ -14,5 +14,7 @@
14 14
15 <% button_bar do %> 15 <% button_bar do %>
16 <%= button(:edit, _('View processed tasks'), :action => 'processed') %> 16 <%= button(:edit, _('View processed tasks'), :action => 'processed') %>
  17 + <%= button(:edit, _('View my requested tasks'), :action => 'list_requested') %>
  18 + <%= button(:new, _('Create task'), :action => 'new') %>
17 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> 19 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
18 <% end %> 20 <% end %>
app/views/tasks/list_requested.rhtml 0 → 100644
@@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
  1 +<%= _('Tasks that I requested') %>
  2 +
  3 +<ul>
  4 + <% @tasks.each do |task| %>
  5 + <li>
  6 + <strong><%= task.respond_to?(:title) ? link_to( task.title, :action => 'ticket_details', :id => task.id) : task.description %></strong><br/>
  7 + <small>
  8 + <%= _('Created:') + ' ' + show_date(task.created_at) %>
  9 + &nbsp; &#151; &nbsp;
  10 + <%= _('Status:') + ' ' + task.status.to_s %>
  11 + </small>
  12 + </li>
  13 + <% end %>
  14 +</ul>
  15 +
  16 +<% button_bar do %>
  17 + <%= button :back, _('Back'), :action => 'index' %>
  18 +<% end %>
app/views/tasks/new.rhtml
1 <% labelled_form_for :ticket, @ticket do |f| %> 1 <% labelled_form_for :ticket, @ticket do |f| %>
2 <%= f.text_field :title %> 2 <%= f.text_field :title %>
3 <%= display_form_field( _('Owner: '), f.select(:target_id, profile.friends.map{|p|[p.name, p.id]})) %> 3 <%= display_form_field( _('Owner: '), f.select(:target_id, profile.friends.map{|p|[p.name, p.id]})) %>
4 - <%= f.text_area :description %> 4 + <%= f.text_area :description %>
5 5
6 <% button_bar do %> 6 <% button_bar do %>
7 - <%= submit_button('save', _('Create')) %> 7 + <%= submit_button('save', _('Create'), :cancel => {:action => 'index'}) %>
8 <% end %> 8 <% end %>
9 <% end %> 9 <% end %>
app/views/tasks/ticket_details.rhtml 0 → 100644
@@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
  1 +<h2><%= _('Ticket: %s') % @ticket.title %></h2>
  2 +<p><small>
  3 + <%= _('Created at %s by %s') % [@ticket.created_at.to_date, link_to(@ticket.requestor.name, @ticket.requestor.url)] %><br/>
  4 + <%= _('Owner: %s') % link_to(@ticket.target.name, @ticket.target.url) %>
  5 +</small></p>
  6 +
  7 +<p><%= _('Status: %s') % gettext(Task::Status.names[@ticket.status]) %></p>
  8 +
  9 +<div>
  10 + <p><%= _('Description: %s') % @ticket.description %></p>
  11 +</div>
  12 +
  13 +<% if @ticket.closing_statment %>
  14 + <p><%= _('Closing statement: %s') % @ticket.closing_statment %></p>
  15 +<% end %>
  16 +
  17 +<% button_bar do %>
  18 + <%= button :back, _('Back'), :action => 'index' %>
  19 +<% end %>
test/functional/tasks_controller_test.rb
@@ -121,4 +121,10 @@ class TasksControllerTest &lt; Test::Unit::TestCase @@ -121,4 +121,10 @@ class TasksControllerTest &lt; Test::Unit::TestCase
121 assert_equal profile, assigns(:ticket).requestor 121 assert_equal profile, assigns(:ticket).requestor
122 end 122 end
123 123
  124 + should 'list tasks that this profile created' do
  125 + task = Ticket.create!(:title => 'test', :requestor => profile)
  126 + get :list_requested, :profile => profile.identifier
  127 +
  128 + assert_includes assigns(:tasks), task
  129 + end
124 end 130 end
test/unit/ticket_test.rb
@@ -8,4 +8,5 @@ class TicketTest &lt; ActiveSupport::TestCase @@ -8,4 +8,5 @@ class TicketTest &lt; ActiveSupport::TestCase
8 8
9 assert_equal({:test => 'test'}, t.data) 9 assert_equal({:test => 'test'}, t.data)
10 end 10 end
  11 +
11 end 12 end