backlog 0.14.4 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,24 @@
1
+ == 0.15.0 2007-11-28
2
+
3
+ === Features
4
+
5
+ * Expanded search to include the "notes" field of tasks.
6
+ * Added unformatted viewing of notes for a task.
7
+ * Made using sprints an option for backlogs. Default is not to use sprints to enable simple usage of the Backlog application.
8
+ Existing backlogs have the option set even if no sprints have been started, for backwards compatibility.
9
+ * Added link from task line to task editing view.
10
+
11
+ === Fixes
12
+
13
+ * Ordered work records by end date in list view.
14
+ * Fixed wrong redirect when moving an unplanned task to a sprint.
15
+ * Fixed bug when editing a finished task leads to reopening it.
16
+ * Fixed cosmetic errors in finishing and reopening tasks.
17
+ * Fixed error when tracking time done, but not start and stop times.
18
+ * Removed unnecessary icon for showing a backlog when already showing the backlog.
19
+ * Fixed missing border around icons in backlog view.
20
+ * Fixed cosmetics on task lines.
21
+
1
22
  == 0.14.4 2007-11-27
2
23
 
3
24
  === Features
@@ -148,7 +148,7 @@ class BacklogsController < ApplicationController
148
148
  params[:period_id] = next_period && next_period.id
149
149
  move_task_to_period
150
150
  else
151
- rjs_redirect_to :action => :edit, :id => @task
151
+ rjs_redirect_to :controller => 'tasks', :action => :edit, :id => @task
152
152
  end
153
153
  end
154
154
 
@@ -140,14 +140,10 @@ class PeriodsController < ApplicationController
140
140
 
141
141
  def move_task_to_next_period
142
142
  @task = Task.find(params[:id])
143
- if @task.period
144
- next_period = @task.period.lower_item
145
- next_period = next_period.lower_item while next_period && next_period.passed?
146
- params[:period_id] = next_period && next_period.id
147
- move_task_to_period
148
- else
149
- rjs_redirect_to :action => :edit, :id => @task
150
- end
143
+ next_period = @task.period.lower_item
144
+ next_period = next_period.lower_item while next_period && next_period.passed?
145
+ params[:period_id] = next_period && next_period.id
146
+ move_task_to_period
151
147
  end
152
148
 
153
149
  def finish_task
@@ -1,9 +1,10 @@
1
1
  class SearchController < ApplicationController
2
+
2
3
  def results
3
4
  if params[:q]
4
5
  @search = params[:q]
5
6
  @backlogs = Backlog.find(:all, :conditions => ["lower(name) LIKE ?", "%#{@search.downcase}%"])
6
- @tasks = Task.find(:all, :conditions => ["lower(description) LIKE ?", "%#{@search.downcase}%"])
7
+ @tasks = Task.find(:all, :conditions => ["lower(description) LIKE ? OR lower(notes) LIKE ?", "%#{@search.downcase}%", "%#{@search.downcase}%"])
7
8
  else
8
9
  @backlogs = []
9
10
  @tasks = []
@@ -1,7 +1,7 @@
1
1
  class TasksController < ApplicationController
2
2
  skip_before_filter :populate_layout, :except => [:edit, :list_started, :move_down, :move_to_bottom, :move_to_top, :move_up, :new, :specify]
3
3
 
4
- verify :method => :post, :except => [ :new, :show, :edit, :list_started, :move_to_next_period],
4
+ verify :method => :post, :except => [ :new, :show, :edit, :list_started, :move_to_next_period, :notes],
5
5
  :redirect_to => { :controller => 'backlogs' }
6
6
 
7
7
  def list_started
@@ -109,6 +109,9 @@ class TasksController < ApplicationController
109
109
  else
110
110
  if @task.finished_at
111
111
  @task.reopen
112
+ flash[:notice] += 'Task was reopened.'
113
+ populate_layout
114
+ render :action => 'edit'
112
115
  else
113
116
  if @task.period
114
117
  back_or_redirect_to :controller => 'periods', :action => :show, :id => @task.period, :task => @task.id
@@ -260,6 +263,9 @@ class TasksController < ApplicationController
260
263
  render :text => task.description
261
264
  end
262
265
 
263
- private
266
+ def notes
267
+ @task = Task.find(params[:id])
268
+ render :layout => 'wide'
269
+ end
264
270
 
265
271
  end
@@ -17,7 +17,7 @@ class WorksController < ApplicationController
17
17
 
18
18
  def list
19
19
  @period = params[:id] && Period.find(params[:id])
20
- @work_pages, @works = paginate :works, :per_page => 20
20
+ @work_pages, @works = paginate :works, :order => 'completed_at', :per_page => 20
21
21
  end
22
22
 
23
23
  def show
@@ -14,7 +14,9 @@ module BacklogsHelper
14
14
  end
15
15
 
16
16
  def add_finished_task(page)
17
- not_first = @completed_tasks.find {|t| t.id != @task.id && t.period_id == @task.period_id}
17
+ tasks_in_period = @completed_tasks.select {|t| t.period_id == @task.period_id}
18
+ work_done = ! tasks_in_period.find {|t| t.total_done != 0}.nil?
19
+ not_first = tasks_in_period.size > 1
18
20
  if not_first
19
21
  page.select("#completed_tasks_#{@task.period_id} tr").first.remove
20
22
  page.select("#completed_tasks_#{@task.period_id} tr").first.remove
@@ -25,7 +27,7 @@ module BacklogsHelper
25
27
  page.insert_html :top, "completed_tasks_#{@task.period_id}", :partial => '/tasks/task', :locals => {:active => false, :hidden => true, :highlight_task => false}
26
28
  page.visual_effect :appear, "task_#{@task.id}"
27
29
 
28
- page.insert_html :top, "completed_tasks_#{@task.period_id}", :partial => '/tasks/fields_header', :locals => {:backlog => @task.backlog, :active => false}
30
+ page.insert_html :top, "completed_tasks_#{@task.period_id}", :partial => '/tasks/fields_header', :locals => {:backlog => @task.backlog, :active => false, :work_done => work_done}
29
31
  page.insert_html :top, "completed_tasks_#{@task.period_id}", :partial => '/tasks/period_header', :locals => {:period => @task.period}
30
32
  end
31
33
 
@@ -39,17 +41,18 @@ module BacklogsHelper
39
41
  end
40
42
 
41
43
  def add_active_task(page)
42
- first_in_period = @tasks.find{|t| t.id != @task.id && t.period_id == @task.period_id}.nil?
44
+ tasks_in_period = @tasks.select{|t| t.period_id == @task.period_id}
45
+ first_in_period = tasks_in_period.size == 1
43
46
  if first_in_period
44
47
  page.insert_html :top, :active_tasks, %Q{<table id="active_tasks_#{@task.period_id}" class="input" style="width: 100%;"/>}
45
48
  else
46
- page.select('#active_tasks_#{@task.period_id} tr').first.remove
47
- page.select('#active_tasks_#{@task.period_id} tr').first.remove
49
+ page.select("#active_tasks_#{@task.period_id} tr").first.remove
50
+ page.select("#active_tasks_#{@task.period_id} tr").first.remove
48
51
  end
49
52
 
50
53
  page.insert_html(:top, "active_tasks_#{@task.period_id}", render(:partial => "/tasks/task", :locals => { :task => @task, :i => 1, :active => true, :highlight_task => false, :update => :spotlight, :hidden => true }))
51
54
 
52
- fields_header = render(:partial => '/tasks/fields_header', :locals => { :backlog => @task.backlog, :active => true } )
55
+ fields_header = render(:partial => '/tasks/fields_header', :locals => { :backlog => @task.backlog, :active => true, :track_times => tasks_in_period.find {|t|t.period && t.period.active?} } )
53
56
  page.insert_html :top, "active_tasks_#{@task.period_id}", fields_header
54
57
  page.insert_html :top, "active_tasks_#{@task.period_id}", render(:partial => "/tasks/period_header", :locals => {:period => @task.period})
55
58
 
@@ -45,15 +45,18 @@ module PeriodsHelper
45
45
  end
46
46
 
47
47
  def add_finished_task(page)
48
+ work_done = ! @completed_tasks.find {|t| t.total_done != 0}.nil?
48
49
  first_finished = @completed_tasks.find {|t| t.id != @task.id}.nil?
49
50
  unless first_finished
50
51
  page.select("#completed_tasks_#{@task.period_id} tr").first.remove
52
+ else
53
+ page.insert_html :top, "completed_tasks", "<table id=\"completed_tasks_#{@task.period_id}\" class=\"input\" />"
51
54
  end
52
55
 
53
56
  page.insert_html :top, "completed_tasks_#{@task.period_id}", :partial => '/tasks/task', :locals => {:active => false, :hidden => true, :highlight_task => false}
54
57
  page.visual_effect :appear, "task_#{@task.id}"
55
58
 
56
- page.insert_html :top, "completed_tasks_#{@task.period_id}", :partial => '/tasks/fields_header', :locals => {:backlog => @task.backlog, :active => false}
59
+ page.insert_html :top, "completed_tasks_#{@task.period_id}", :partial => '/tasks/fields_header', :locals => {:backlog => @task.backlog, :active => false, :work_done => work_done}
57
60
  end
58
61
 
59
62
  def update_burn_down_chart(page)
@@ -7,7 +7,7 @@ class Work < ActiveRecord::Base
7
7
  belongs_to :work_account
8
8
 
9
9
  validates_associated :task
10
- validates_presence_of :started_at
10
+ validates_presence_of :started_at, :if => :track_times?
11
11
  validates_presence_of :work_account
12
12
 
13
13
  def validate
@@ -20,7 +20,7 @@ class Work < ActiveRecord::Base
20
20
  end
21
21
 
22
22
  def track_times?
23
- task && task.backlog && task.backlog.track_times?
23
+ work_account.track_times?
24
24
  end
25
25
 
26
26
  # Return an array with an array of works per day:
@@ -1,4 +1,3 @@
1
1
  <%=image_link_to 'arrow_up.png', l(:backlogs), :action => :list %>
2
- <%=image_detour_to('clipboard.png', l(:edit), :controller => 'backlogs', :action => :edit, :id => @backlog)%>
3
- <%=image_detour_to('clipboard.png', l(:show), :controller => 'backlogs', :action => :show, :id => @backlog)%>
2
+ <%=image_detour_to('clipboard.png', l(:edit), :controller => 'backlogs', :action => :edit, :id => @backlog) unless controller.action_name == 'edit' %>
4
3
  <%=detour_to(image_tag(url_for("add.png"), :alt => l(:add_task), :title => l(:add_task), :class => 'image-submit'), :controller => 'tasks', :action => 'new', :task => {:backlog_id => @backlog.id} ) %>
@@ -4,6 +4,8 @@
4
4
  <%= text_field 'backlog', 'name', :maxlength => 64 %>
5
5
  </p>
6
6
 
7
+ <h3>Options</h3>
8
+
7
9
  <p>
8
10
  <%= check_box 'backlog', 'track_todo' %>
9
11
  <label for="backlog_track_todo"><%=l :track_todo%></label>
@@ -14,6 +16,11 @@
14
16
  <label for="backlog_enable_subtasks"><%=l :enable_subtasks%></label>
15
17
  </p>
16
18
 
19
+ <p>
20
+ <%= check_box 'backlog', 'enable_periods' %>
21
+ <label for="backlog_enable_periods"><%=l :enable_periods%></label>
22
+ </p>
23
+
17
24
  <p>
18
25
  <%= check_box 'backlog', 'enable_customer' %>
19
26
  <label for="backlog_enable_customer"><%=l :enable_customer%></label>
@@ -1,5 +1,33 @@
1
- <% @page_title = @backlog.name %>
2
-
1
+ <%@page_title = @backlog.name %>
2
+ <div id="spotlight">
3
+ <div class="btitle">
4
+ <%=render :partial => 'buttons' %><h4><%=l :tasks %></h4>
5
+ </div>
6
+ <div id="active_tasks"<%=' style="display: none;"' unless @tasks and not @tasks.empty? %>>
7
+ <%#=render :partial => '/tasks/backlog_header', :locals => {:backlog => @backlog, :track_times => @tasks.find {|t|t.period && t.period.active?}} %>
8
+ <%i = 0 %>
9
+ <%for period in @tasks.map {|t| t.period}.uniq %>
10
+ <% tasks_in_period = @tasks.select {|t| t.period_id == (period && period.id)} %>
11
+ <% work_done = !tasks_in_period.find{|t| t.total_done > 0}.nil? %>
12
+ <table id="active_tasks_<%=period ? period.id : '' %>">
13
+ <%=render :partial => '/tasks/period_header', :locals => {:period => period} %>
14
+ <%=render :partial => '/tasks/fields_header', :locals => {:backlog => @backlog, :active => true, :track_times => tasks_in_period.find {|t|t.period && t.period.active?}, :work_done => work_done} %>
15
+ <%for @task in tasks_in_period %>
16
+ <%=render :partial => '/tasks/task/', :locals => {:task => @task, :i => i += 1, :active => true, :highlight_task => false, :update => :maincontent, :hidden => false} %>
17
+ <%end %>
18
+ </table>
19
+ <%end %>
20
+ </div>
21
+ <p id="no_tasks_message"<%=' style="display: none;"' if @tasks and not @tasks.empty? %>>
22
+ <%=l :no_pending_tasks_in_backlog %>
23
+ </p>
24
+ <%=back_or_link_to(l(:back)) %>
25
+ </div>
3
26
  <div id="maincontent">
4
- <%=render :partial => 'tasks', :locals => {:tasks => @tasks}%>
27
+ <div class="mainblock">
28
+ <div class="btitle">
29
+ <h4><%=l(:completed_tasks) %></h4>
30
+ </div>
31
+ <%=render :partial => '/tasks/completed', :locals => {:i => 1} %>
32
+ </div>
5
33
  </div>
@@ -40,8 +40,8 @@ function handleEvent(field, event, id) {
40
40
  <% current_backlog = task.backlog %>
41
41
  <table class="input" style="width: 100%;">
42
42
  <%= '<tr><td>&nbsp;</td></tr>' if false && current_backlog %>
43
- <%=render :partial => '/tasks/backlog_header', :locals => { :backlog => task.backlog, :track_times => @tasks.find {|t|t.period && t.period.active?} } %>
44
- <%=render :partial => '/tasks/fields_header', :locals => { :backlog => task.backlog, :active => true, :track_times => @tasks.find {|t|t.period && t.period.active?} } %>
43
+ <%=render :partial => '/tasks/backlog_header', :locals => { :backlog => task.backlog, :track_times => current_backlog.track_done? && @tasks.find {|t|t.period && t.period.active?} } %>
44
+ <%=render :partial => '/tasks/fields_header', :locals => { :backlog => task.backlog, :active => true, :track_times => @tasks.find {|t|t.period && t.period.active?}, :work_done => @tasks.find {|t|t.backlog_id == current_backlog.id && t.total_done > 0} } %>
45
45
  <% end -%>
46
46
  <%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => true, :highlight_task => task == @selected_task, :update => :spotlight, :hidden => false } %>
47
47
  <% i += 1 %>
@@ -1,8 +1,10 @@
1
1
  <div id="completed_tasks">
2
2
  <% @completed_tasks.map {|t| t.period}.uniq.each do |period| %>
3
3
  <table id="completed_tasks_<%=period ? period.id : ''%>" class="input">
4
+ <% tasks_in_period = @completed_tasks.select {|t| t.period == period} %>
5
+ <% work_done = !tasks_in_period.find{|t| t.total_done != 0}.nil? %>
4
6
  <%=render :partial => '/tasks/period_header', :locals => {:period => period} unless @completed_tasks.map(&:period).uniq.size == 1 %>
5
- <%=render :partial => '/tasks/fields_header', :locals => {:backlog => @backlog, :active => false, :track_times => false} %>
7
+ <%=render :partial => '/tasks/fields_header', :locals => {:backlog => @backlog, :active => false, :track_times => false, :work_done => work_done} %>
6
8
  <% @completed_tasks.select {|t| t.period == period}.each do |task| %>
7
9
  <%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => false, :highlight_task => task == @selected_task, :hidden => false } %>
8
10
  <% i += 1 %>
@@ -2,8 +2,8 @@
2
2
  <th/>
3
3
  <th align="center"><%=active ? '#' : l(:resolution_abr)%></th>
4
4
  <th><%=l :task %></th>
5
- <th><%=l :start if active && backlog.work_account && backlog.work_account.track_times? %></th>
5
+ <th><%=l :start if active && backlog.track_times? %></th>
6
6
  <th/>
7
- <th><%=l :done if not backlog or backlog.track_done? %></th>
7
+ <th><%=l :done if (active && backlog.track_done?) || work_done %></th>
8
8
  <th width="*"><%=l :todo if active && backlog.track_todo? %></th>
9
9
  </tr>
@@ -14,6 +14,7 @@
14
14
  </p>
15
15
 
16
16
 
17
+ <% if @task.backlog && @task.backlog.enable_periods? %>
17
18
  <p><label for="task_period_id"><%=l :period%></label><br/>
18
19
  <%= select 'task', 'period_id', [['', '']] + @periods.map{|p| [p.name, p.id]}, {},
19
20
  :onchange => remote_function(:update => 'period_link',
@@ -23,13 +24,17 @@
23
24
  </span>
24
25
  <%=detour_to l(:new_period), :controller => 'periods', :action => :new %>
25
26
  </p>
26
-
27
+ <% end %>
27
28
 
28
29
 
29
30
  <% if @task.backlog %>
30
31
 
31
32
  <p><label for="task_description"><%=l :task%></label><br/>
32
- <%= text_field 'task', 'description', :size => 64, :maxlength => 80 %></p>
33
+ <% if @task.active? -%>
34
+ <%=text_field 'task', 'description', :size => 64, :maxlength => 80 %></p>
35
+ <% else -%>
36
+ <%=@task.description -%>
37
+ <% end -%>
33
38
 
34
39
  <% if @task.enable_customer? %>
35
40
  <p><label for="task_customer"><%=l :customer%></label><br/>
@@ -52,7 +57,9 @@
52
57
  <% end %>
53
58
 
54
59
  <p><label for="task_notes"><%=l :notes%></label><br/>
55
- <%= text_area 'task', 'notes', :cols => '72', :rows => 16 %></p>
60
+ <%=text_area 'task', 'notes', :cols => '72', :rows => 16 %>
61
+ <%=if @task.notes and not @task.notes.empty? then image_link_to 'view_fullscreen.png', l(:view_fullscreen), :controller => 'tasks', :action => :notes, :id => @task end%>
62
+ </p>
56
63
 
57
64
  <p><label for="task_file"><%=l :files%></label><br/>
58
65
  <%=@task.task_files.map do |task_file|
@@ -9,17 +9,13 @@
9
9
  </td>
10
10
  <td align="left" valign="top" width="1" nowrap="true">
11
11
  <%= ("&nbsp;" * @task.depth * 4) if @task.depth > 0 %>
12
- <%=detour_to @task.position.to_s, :controller => 'tasks', :action => :edit, :id => @task.id if @task.position || @task.depth == 0 %>
12
+ <%=@task.position if @task.position || @task.depth == 0 %>
13
13
  <%= resolution_image(@task.resolution) if @task.finished_at %>
14
14
  <%= "-" if @task.children.size > 0 %>
15
15
  </td>
16
16
  <td>
17
17
  <div id="task_<%=@task.id%>_description"<%=' class="tasks" onmouseover="this.style.border=\'1px solid black\'" onmouseout="this.style.border=\'1px solid transparent\'"' if active && (@task.period.nil? || @task.period.active_or_future?) && (not @task.work_started?) %>>
18
- <% if @task.active? -%>
19
- <%=in_place_editor_field(:task, :description, {:id => "#{@task.id}_description", :tabindex => i}, :url => url_for(:controller => 'tasks', :action => "set_task_description", :id => @task)) %>
20
- <% else -%>
21
- <%=@task.description -%>
22
- <% end -%>
18
+ <%=detour_to h(@task.description), :controller => 'tasks', :action => :edit, :id => @task.id if @task.position || @task.depth == 0 %>
23
19
  </div>
24
20
  </td>
25
21
  <td align="right" nowrap="true" width="1">
@@ -29,7 +25,7 @@
29
25
  <% if @task.work_started? -%>
30
26
  <%=f.text_field 'started_at_time', :id => "work_#{@task.started_work.id}_started_at_time", :tabindex => i+1, :value => @task.started_work.started_at.strftime('%H:%M'),
31
27
  :class => :task_time, :maxlength => 5 %>
32
- <% elsif @task.track_times? && @task.period && @task.period.active? %>
28
+ <% elsif @task.track_times? && (@task.period_id.nil? || @task.period.active?) %>
33
29
  <%=image_link_to_remote 'hammer.png', l(:start_work), {:controller => 'tasks', :action => :start_work, :id => @task.id}, nil, true %>
34
30
  <% end -%>
35
31
  <% end %>
@@ -42,13 +38,13 @@
42
38
  <% end -%>
43
39
  <% end -%>
44
40
  </td>
45
- <td align="<%=@task.loggable? ? 'center' : 'left'%>" nowrap="true" width="1">
46
- <% if @task.track_done? %>
41
+ <td align="<%=active && @task.loggable? && @task.track_done? ? 'left' : 'right'%>" nowrap="true" width="1">
42
+ <% if @task.track_done? || @task.total_done != 0 %>
47
43
  <% if @task.loggable? || @task.finished_at -%>
48
44
  <% form_tag({:controller => 'works', :action => (@task.work_started? ? :edit : :create), :id => @task.started_work}) do %>
49
- <%= hidden_field('work', 'task_id', :value => @task.id)%>
50
- <%= submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
51
- <% unless @task.track_times? || @task.work_started? || @task.finished_at -%>
45
+ <%=hidden_field('work', 'task_id', :value => @task.id)%>
46
+ <%=submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
47
+ <% unless !@task.track_done? || @task.track_times? || @task.work_started? || @task.finished_at -%>
52
48
  <%=text_field 'work', 'hours', :tabindex => i+1, :id => "#{@task.id}_done",
53
49
  :class => :task_hours, :maxlength => 4,
54
50
  :ondblclick => "form.elements[1].style.display = 'inline';this.style.display = 'none'" -%>
@@ -74,12 +70,12 @@
74
70
  <% end -%>
75
71
  <% end -%>
76
72
  </td>
77
- <td align="right" nowrap="true" width="54">
73
+ <td align="right" nowrap="true">
78
74
  <% form_tag({:controller => 'tasks', :action => 'update', :id => @task}) do %>
79
75
  <% if @task.active? %>
80
76
  <% if @task.loggable? %>
81
77
  <% unless @task.work_started? %>
82
- <%=image_link_to_remote('arrow_right.png', l(:move_to_next_period), {:action => :move_task_to_next_period, :id => @task}, nil, true)%>
78
+ <%=image_link_to_remote('arrow_right.png', l(:move_to_next_period), {:action => :move_task_to_next_period, :id => @task}, nil, true) if @task.backlog.enable_periods? || @task.period_id%>
83
79
  <%=image_link_to_remote('ernes_stop.png', l(:abort), {:action => :abort_task, :id => @task}, nil, true)%>
84
80
  <% end %>
85
81
  <% end %>
@@ -0,0 +1,8 @@
1
+ <div id="spotlight">
2
+ <% @page_title = "#{l :notes} #{l :task} ##{@task.id}" %>
3
+
4
+ <pre style="text-align: left;">
5
+ <%=h @task.notes %>
6
+ </pre>
7
+
8
+ </div>
@@ -0,0 +1,10 @@
1
+ class AddSprintOption < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :backlogs, :enable_periods, :boolean
4
+ execute("UPDATE backlogs SET enable_periods = TRUE")
5
+ end
6
+
7
+ def self.down
8
+ remove_column :backlogs, :enable_periods
9
+ end
10
+ end
@@ -2,7 +2,7 @@
2
2
  # migrations feature of ActiveRecord to incrementally modify your database, and
3
3
  # then regenerate this schema definition.
4
4
 
5
- ActiveRecord::Schema.define(:version => 23) do
5
+ ActiveRecord::Schema.define(:version => 24) do
6
6
 
7
7
  create_table "backlogs", :force => true do |t|
8
8
  t.column "name", :string, :limit => 64, :null => false
@@ -12,6 +12,7 @@ ActiveRecord::Schema.define(:version => 23) do
12
12
  t.column "enable_users", :boolean
13
13
  t.column "work_account_id", :integer
14
14
  t.column "customer_id", :integer
15
+ t.column "enable_periods", :boolean
15
16
  end
16
17
 
17
18
  create_table "configurations", :force => true do |t|
@@ -27,6 +27,7 @@ edit: Edit
27
27
  editing: Editing
28
28
  enable_customer: Enable customer
29
29
  enable_invoicing: Enable invoicing
30
+ enable_periods: Enable Sprints
30
31
  enable_subtasks: Enable Subtasks
31
32
  enable_users: Enable users
32
33
  end_on: End on
@@ -55,7 +56,8 @@ move_to_top: Move task to top of list
55
56
  moved: Moved
56
57
  name: Name
57
58
  new_backlog: Start new backlog
58
- new_group: Start new group
59
+ new_customer: Add new customer
60
+ new_group: Form new group
59
61
  new_period: Add new sprint
60
62
  new_task: Add new task
61
63
  new_work: Add new work record
@@ -104,6 +106,7 @@ tuesday: Tuesday
104
106
  unplanned_tasks: Unplanned tasks
105
107
  up: Up
106
108
  user: User
109
+ view_fullscreen: View fullscreen
107
110
  wednesday: Wednesday
108
111
  week: Week
109
112
  weekly_work_sheet: Weekly work sheet
@@ -27,6 +27,7 @@ edit: Rediger
27
27
  editing: Redigerer
28
28
  enable_customer: Tillat kunder
29
29
  enable_invoicing: Tillat fakturering
30
+ enable_periods: Tillat sprinter
30
31
  enable_subtasks: Tillat underoppgaver
31
32
  enable_users: Tillat brukere
32
33
  end_on: Avslutt på
@@ -55,6 +56,7 @@ move_to_top: Flytt oppgaven til toppen av listen
55
56
  moved: Flyttet
56
57
  name: Navn
57
58
  new_backlog: Start ny oppgaveliste
59
+ new_customer: Legg til ny kunde
58
60
  new_group: Start ny gruppe
59
61
  new_period: Start ny periode
60
62
  new_task: Legg til ny oppgave
@@ -103,6 +105,7 @@ tuesday: Tirsdag
103
105
  unplanned_tasks: Ikke planlagte oppgaver
104
106
  up: Opp
105
107
  user: Bruker
108
+ view_fullscreen: Vis fullskjerm
106
109
  wednesday: Onsdag
107
110
  week: Uke
108
111
  weekly_work_sheet: Timeoversikt for uke
@@ -6,6 +6,7 @@
6
6
  period_id: 2
7
7
  description: first task
8
8
  position: 1
9
+ notes: hullo
9
10
  - another:
10
11
  id: 2
11
12
  created_at: 2007-06-12
@@ -5,14 +5,20 @@ require 'search_controller'
5
5
  class SearchController; def rescue_action(e) raise e end; end
6
6
 
7
7
  class SearchControllerTest < Test::Unit::TestCase
8
+ main_scenario
9
+
8
10
  def setup
9
11
  @controller = SearchController.new
10
12
  @request = ActionController::TestRequest.new
11
13
  @response = ActionController::TestResponse.new
14
+ @request.session[:user_id] = 1000001
12
15
  end
13
16
 
14
- # Replace this with your real tests.
15
- def test_truth
16
- assert true
17
+ def test_notes
18
+ post :results, :q => 'hullo'
19
+ assert_not_nil assigns(:backlogs)
20
+ assert_not_nil assigns(:tasks)
21
+ assert_equal 1, assigns(:tasks).size
22
+ assert_equal tasks(:first).id, assigns(:tasks).first.id
17
23
  end
18
24
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: backlog
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.14.4
7
- date: 2007-11-27 00:00:00 +01:00
6
+ version: 0.15.0
7
+ date: 2007-11-28 00:00:00 +01:00
8
8
  summary: Application to aid collecting, processing, organizing, reviewing and doing tasks.
9
9
  require_paths:
10
10
  - lib
@@ -44,6 +44,7 @@ files:
44
44
  - public/images/hammer.png
45
45
  - public/images/arrow_right.svg
46
46
  - public/images/arrow_down.png
47
+ - public/images/view_fullscreen.png
47
48
  - public/images/eraser_org.png
48
49
  - public/images/period.png
49
50
  - public/images/rmagick.gif
@@ -146,6 +147,7 @@ files:
146
147
  - db/migrate/022_remove_track_done_flag.rb
147
148
  - db/migrate/005_add_field_work_started_at.rb
148
149
  - db/migrate/006_works_data_fix.rb
150
+ - db/migrate/024_add_sprint_option.rb
149
151
  - db/test.db
150
152
  - db/schema.rb
151
153
  - test
@@ -434,7 +436,6 @@ files:
434
436
  - app/views/backlogs/_form.rhtml
435
437
  - app/views/backlogs/new.rhtml
436
438
  - app/views/backlogs/edit.rhtml
437
- - app/views/backlogs/_tasks.rhtml
438
439
  - app/views/backlogs/reopen_task.rjs
439
440
  - app/views/estimates
440
441
  - app/views/groups
@@ -466,6 +467,7 @@ files:
466
467
  - app/views/tasks/edit.rhtml
467
468
  - app/views/tasks/list_started.rhtml
468
469
  - app/views/tasks/_task.rhtml
470
+ - app/views/tasks/notes.rhtml
469
471
  - app/views/customers
470
472
  - app/views/customers/list.rhtml
471
473
  - app/views/customers/show.rhtml
@@ -1,33 +0,0 @@
1
- <div class="mainblock">
2
- <div class="btitle">
3
- <%=render :partial => 'buttons'%>
4
- <h4><%=l :tasks%></h4>
5
- </div>
6
-
7
- <div id="active_tasks"<%=' style="display: none;"' unless @tasks and not @tasks.empty?%>>
8
- <%#=render :partial => '/tasks/backlog_header', :locals => {:backlog => @backlog, :track_times => tasks.find {|t|t.period && t.period.active?}} %>
9
- <% i = 0 %>
10
- <% for period in @tasks.map {|t| t.period}.uniq %>
11
- <table id="active_tasks_<%=period ? period.id : 'unplanned' %>">
12
- <%=render :partial => '/tasks/period_header', :locals => {:period => period} %>
13
- <%=render :partial => '/tasks/fields_header', :locals => {:backlog => @backlog, :active => true, :track_times => tasks.find {|t|t.period && t.period.active?}} %>
14
- <% for @task in @tasks.select {|t| t.period_id == (period && period.id)} %>
15
- <%=render :partial => '/tasks/task/', :locals => {:task => @task, :i => i += 1, :active => true, :highlight_task => false, :update => :maincontent, :hidden => false} %>
16
- <% end %>
17
- </table>
18
- <% end %>
19
- </div>
20
-
21
- <p id="no_tasks_message"<%=' style="display: none;"' if @tasks and not @tasks.empty?%>><%=l :no_pending_tasks_in_backlog%></p>
22
-
23
- <%=back_or_link_to(l(:back)) %>
24
- </div>
25
-
26
- <div class="mainblock">
27
- <div class="btitle">
28
- <h4><%=l(:completed_tasks) %></h4>
29
- </div>
30
-
31
- <%=render :partial => '/tasks/completed', :locals => {:i => 1} %>
32
- </div>
33
-