backlog 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +17 -1
- data/app/controllers/estimates_controller.rb +36 -9
- data/app/controllers/tasks_controller.rb +19 -6
- data/app/controllers/work_accounts_controller.rb +1 -1
- data/app/helpers/application_helper.rb +6 -0
- data/app/models/task.rb +5 -0
- data/app/views/backlogs/_form.rhtml +5 -6
- data/app/views/backlogs/_tasks.rhtml +1 -1
- data/app/views/backlogs/edit.rhtml +3 -3
- data/app/views/estimates/create_ajax.rjs +11 -0
- data/app/views/periods/_burn_down_chart.rhtml +1 -1
- data/app/views/periods/_show_active.rhtml +8 -8
- data/app/views/tasks/_completed.rhtml +2 -2
- data/app/views/tasks/_task.rhtml +13 -14
- data/app/views/tasks/finish_ajax.rjs +25 -0
- data/app/views/tasks/reopen.rjs +26 -0
- data/app/views/tasks/start_work.rjs +2 -0
- data/app/views/work_accounts/_form.rhtml +5 -0
- data/app/views/work_accounts/edit.rhtml +10 -5
- data/public/images/work_account.png +0 -0
- data/test/functional/backlogs_controller_test.rb +1 -1
- data/test/functional/work_accounts_controller_test.rb +1 -1
- data/test/test_helper.rb +2 -0
- data/vendor/plugins/transactional_migrations/CHANGELOG +9 -0
- data/vendor/plugins/transactional_migrations/MIT-LICENSE +20 -0
- data/vendor/plugins/transactional_migrations/README +15 -0
- data/vendor/plugins/transactional_migrations/about.yml +5 -0
- data/vendor/plugins/transactional_migrations/init.rb +1 -0
- data/vendor/plugins/transactional_migrations/lib/red_hill_consulting/transactional_migrations/active_record/migration.rb +19 -0
- metadata +18 -2
data/History.txt
CHANGED
@@ -1,4 +1,20 @@
|
|
1
|
-
== 0.
|
1
|
+
== 0.12.0 2007-11-06
|
2
|
+
|
3
|
+
===Features
|
4
|
+
|
5
|
+
* Changed to use AJAX for small updates of tasks in the sprint view.
|
6
|
+
This to speed up the user experience.
|
7
|
+
Known bug: The position numbers are not updated yet.
|
8
|
+
* Added Transactional Migrations plugin to avoid partial migrations.
|
9
|
+
|
10
|
+
=== Fixes
|
11
|
+
|
12
|
+
* Changed to return from detour to work account edit view
|
13
|
+
* Moved editing of "Track Times" option from Backlog to Work Account
|
14
|
+
* Added link from backlog to corresponding work account.
|
15
|
+
* Made Edit Work Account view fit with layout.
|
16
|
+
|
17
|
+
== 0.11.0 2007-11-03
|
2
18
|
|
3
19
|
===Features
|
4
20
|
|
@@ -2,27 +2,54 @@ class EstimatesController < ApplicationController
|
|
2
2
|
verify :method => :post, :redirect_to => ''
|
3
3
|
|
4
4
|
def create
|
5
|
+
@success, @message = do_create
|
6
|
+
|
7
|
+
unless @success
|
8
|
+
@task.errors.add :estimate, @message
|
9
|
+
render :file => "public/500.html", :layout => true, :status => 500
|
10
|
+
return
|
11
|
+
end
|
12
|
+
|
13
|
+
flash[:notice] = @message
|
14
|
+
redirect_to :controller => 'periods', :action => :show, :id => @task.root_task.period, :task_id => @task.id
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_ajax
|
18
|
+
if @task = Task.find_by_id(params[:id])
|
19
|
+
@last_active = @task.lower_item.nil?
|
20
|
+
@last_active_in_backlog = @last_active || @task.lower_item.backlog != @task.backlog
|
21
|
+
finished_count = Task.count(:conditions => ['period_id = ? AND finished_at IS NOT NULL', @task.period_id])
|
22
|
+
@first_finished = finished_count == 0
|
23
|
+
end
|
24
|
+
@success, @message = do_create
|
25
|
+
# Only necessary since we have an unecessary complex update of estimates
|
26
|
+
@task.reload
|
27
|
+
if @task.finished?
|
28
|
+
render :template => '/tasks/finish_ajax', :layout => false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def do_create
|
5
35
|
if params[:id]
|
6
36
|
@task = Task.find(params[:id])
|
7
37
|
if params[:estimate] && params[:estimate][:todo]
|
8
38
|
begin
|
9
39
|
Float(params[:estimate][:todo])
|
10
40
|
@task.estimate(params[:estimate][:todo])
|
11
|
-
|
41
|
+
@period = @task.period
|
42
|
+
return true, 'Estimate updated'
|
12
43
|
rescue ArgumentError => e
|
13
|
-
|
14
|
-
render :file => "public/500.html", :layout => true, :status => 500
|
15
|
-
return
|
44
|
+
return false, "Estimate was not numeric"
|
16
45
|
end
|
17
|
-
redirect_to :controller => 'periods', :action => :show, :id => @task.root_task.period, :task_id => @task.id
|
18
46
|
else
|
19
|
-
|
20
|
-
render :file => "public/500.html", :layout => true, :status => 500
|
47
|
+
return false, "Estimate is missing."
|
21
48
|
end
|
22
49
|
else
|
23
50
|
@estimate = Estimate.new
|
24
|
-
|
25
|
-
render :file => "public/500.html", :layout => true, :status => 500
|
51
|
+
return false, 'Task id is missing.'
|
26
52
|
end
|
27
53
|
end
|
54
|
+
|
28
55
|
end
|
@@ -224,6 +224,16 @@ class TasksController < ApplicationController
|
|
224
224
|
back_or_redirect_to :controller => 'periods', :action => :show, :id => @task.period, :task_id => @task.id
|
225
225
|
end
|
226
226
|
|
227
|
+
def finish_ajax
|
228
|
+
@task = Task.find(params[:id])
|
229
|
+
lower_item = @task.lower_item
|
230
|
+
@last_active = @task.lower_item.nil?
|
231
|
+
@last_active_in_backlog = @last_active || @task.lower_item.backlog != @task.backlog
|
232
|
+
finished_count = Task.count(:conditions => ['period_id = ? AND finished_at IS NOT NULL', @task.period_id])
|
233
|
+
@first_finished = finished_count == 0
|
234
|
+
@task.finish(Task::COMPLETED, true)
|
235
|
+
end
|
236
|
+
|
227
237
|
def abort
|
228
238
|
task = Task.find params[:id]
|
229
239
|
task.abort
|
@@ -231,15 +241,18 @@ class TasksController < ApplicationController
|
|
231
241
|
end
|
232
242
|
|
233
243
|
def reopen
|
234
|
-
task = Task.find(params[:id])
|
235
|
-
task.reopen
|
236
|
-
|
244
|
+
@task = Task.find(params[:id])
|
245
|
+
@task.reopen
|
246
|
+
@task.reload
|
247
|
+
finished_count = Task.count(:conditions => ['period_id = ? AND finished_at IS NOT NULL', @task.period_id])
|
248
|
+
@last_finished = finished_count == 0
|
249
|
+
# back_or_redirect_to :controller => 'periods', :action => :show, :id => @task.period, :task => @task.id
|
237
250
|
end
|
238
251
|
|
239
252
|
def start_work
|
240
|
-
task = Task.find(params[:id])
|
241
|
-
task.start_work
|
242
|
-
back_or_redirect_to :controller => 'periods', :action => :show, :id => task.period, :task => task.id
|
253
|
+
@task = Task.find(params[:id])
|
254
|
+
@task.start_work
|
255
|
+
# back_or_redirect_to :controller => 'periods', :action => :show, :id => task.period, :task => task.id
|
243
256
|
end
|
244
257
|
|
245
258
|
def end_work
|
@@ -38,7 +38,7 @@ class WorkAccountsController < ApplicationController
|
|
38
38
|
@work_account = WorkAccount.find(params[:id])
|
39
39
|
if @work_account.update_attributes(params[:work_account])
|
40
40
|
flash[:notice] = 'WorkAccount was successfully updated.'
|
41
|
-
|
41
|
+
back_or_redirect_to :action => 'show', :id => @work_account
|
42
42
|
else
|
43
43
|
render :action => 'edit'
|
44
44
|
end
|
@@ -39,6 +39,12 @@ module ApplicationHelper
|
|
39
39
|
link_to image_tag(image_source, image_options), url_options, post ? {:method => :post} : nil
|
40
40
|
end
|
41
41
|
|
42
|
+
def image_link_to_remote(image_source, title, url_options, image_options = nil, post = false)
|
43
|
+
image_options ||= {:class => 'image-submit'}
|
44
|
+
image_options.update :alt => title, :title => title
|
45
|
+
link_to_remote image_tag(image_source, image_options), {:url => url_options}, post ? {:method => :post} : nil
|
46
|
+
end
|
47
|
+
|
42
48
|
def detour?
|
43
49
|
not session[:detours].nil?
|
44
50
|
end
|
data/app/models/task.rb
CHANGED
@@ -209,6 +209,10 @@ class Task < ActiveRecord::Base
|
|
209
209
|
def active_children?
|
210
210
|
children.detect {|child| child.active?}
|
211
211
|
end
|
212
|
+
|
213
|
+
def finished?
|
214
|
+
completed?
|
215
|
+
end
|
212
216
|
|
213
217
|
def completed?
|
214
218
|
finished_at || completed_children?
|
@@ -345,6 +349,7 @@ class Task < ActiveRecord::Base
|
|
345
349
|
new_work.user = current_user
|
346
350
|
new_work.work_account_id = work_account.id
|
347
351
|
new_work.save!
|
352
|
+
works << new_work
|
348
353
|
end
|
349
354
|
|
350
355
|
def works_with_children
|
@@ -15,11 +15,6 @@
|
|
15
15
|
<label for="backlog_track_done"><%=l :track_done%></label>
|
16
16
|
</p>
|
17
17
|
|
18
|
-
<p>
|
19
|
-
<%#= check_box 'backlog', 'track_times' %>
|
20
|
-
<label for="backlog_track_times"><%=l :track_times%></label>
|
21
|
-
</p>
|
22
|
-
|
23
18
|
<p>
|
24
19
|
<%= check_box 'backlog', 'enable_subtasks' %>
|
25
20
|
<label for="backlog_enable_subtasks"><%=l :enable_subtasks%></label>
|
@@ -37,7 +32,11 @@
|
|
37
32
|
|
38
33
|
<p>
|
39
34
|
<label for="backlog_work_account"><%=l :work_account%></label><br/>
|
40
|
-
<%=select 'backlog', '
|
35
|
+
<%=select 'backlog', 'work_account_id', @work_accounts.map {|wa| [wa.name, wa.id]}.sort %>
|
36
|
+
<% if @backlog.work_account %>
|
37
|
+
<%=image_detour_to('work_account.png', "#{l(:work_account)} #{@backlog.work_account.name}", {:controller => 'work_accounts', :action => :edit, :id => @backlog.work_account}, {:class => 'image-submit', :style => 'vertical-align: bottom'}) %>
|
38
|
+
<% end %>
|
39
|
+
<%=detour_to l(:new_work_account), :controller => 'work_accounts', :action => :new %>
|
41
40
|
</p>
|
42
41
|
|
43
42
|
<!--[eoform:task]-->
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<%= render :partial => '/tasks/fields_header', :locals => {:backlog => @backlog, :active => true, :track_times => tasks.find {|t|t.period && t.period.active?}} %>
|
15
15
|
<% current_period = @task.period %>
|
16
16
|
<% end %>
|
17
|
-
<%= render :partial => '/tasks/task/', :locals => {:task => @task, :i => i += 1, :active => true, :highlight_task => false, :update => :maincontent} %>
|
17
|
+
<%= render :partial => '/tasks/task/', :locals => {:task => @task, :i => i += 1, :active => true, :highlight_task => false, :update => :maincontent, :hidden => false} %>
|
18
18
|
<% end %>
|
19
19
|
</table>
|
20
20
|
<%=back_or_link_to(l(:back)) %>
|
@@ -7,8 +7,8 @@
|
|
7
7
|
</div>
|
8
8
|
|
9
9
|
<% form_tag :action => 'update', :id => @backlog do %>
|
10
|
-
<%=
|
11
|
-
<%=
|
12
|
-
<%=
|
10
|
+
<%=render :partial => 'form' %>
|
11
|
+
<%=submit_tag l(:save) %>
|
12
|
+
<%=back_or_link_to l(:back), :action => 'show', :id => @backlog %>
|
13
13
|
<% end %>
|
14
14
|
</div>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
page.replace_html :notice, @message
|
2
|
+
page.visual_effect(:appear, :notice)
|
3
|
+
if @success
|
4
|
+
if @task.completed?
|
5
|
+
page.visual_effect :fade, "task_#{@task.id}"
|
6
|
+
page.remove "task_#{@task.id}"
|
7
|
+
page.insert_html :bottom, :completed_tasks, :partial => '/tasks/task'
|
8
|
+
page.visual_effect :appear, "task_#{@task.id}"
|
9
|
+
end
|
10
|
+
page['burn_down_chart'].src = url_for(:controller => 'periods', :action => :burn_down_chart_thumbnail, :id => @task.period_id, :rnd => rand)
|
11
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<h4><%=l :burn_down_chart %></h4>
|
4
4
|
</div>
|
5
5
|
|
6
|
-
<%= link_to %Q{<img src="#{url_for(:controller => 'periods', :action => :burn_down_chart_thumbnail, :id => @period, :format => :png)}" alt="Burn down chart" />}, :action => :burn_down_chart, :id => @period, :format => :png %>
|
6
|
+
<%= link_to %Q{<img id="burn_down_chart" src="#{url_for(:controller => 'periods', :action => :burn_down_chart_thumbnail, :id => @period, :format => :png)}" alt="Burn down chart" />}, :controller => 'periods', :action => :burn_down_chart, :id => @period, :format => :png %>
|
7
7
|
|
8
8
|
|
9
9
|
</div>
|
@@ -9,7 +9,7 @@
|
|
9
9
|
//<!--
|
10
10
|
function handleEvent(field, event, id) {
|
11
11
|
if (event.keyCode == 13) {
|
12
|
-
field.form.submit();
|
12
|
+
// field.form.submit();
|
13
13
|
} else if (event.altKey && event.keyCode == 38) {
|
14
14
|
window.location = '<%=url_for(:controller => 'tasks', :action => :move_up)%>' + '/' + id;
|
15
15
|
} else if (event.altKey && event.keyCode == 40) {
|
@@ -31,23 +31,23 @@ function handleEvent(field, event, id) {
|
|
31
31
|
//-->
|
32
32
|
</script>
|
33
33
|
|
34
|
-
|
35
|
-
<table class="input"
|
34
|
+
|
35
|
+
<table id="active_tasks" class="input"<%=' style="display: none;"' unless @tasks and not @tasks.empty?%>>
|
36
36
|
<% current_backlog = nil %>
|
37
37
|
<% for task in @tasks %>
|
38
38
|
<% if task.backlog != current_backlog %>
|
39
39
|
<%= '<tr><td> </td></tr>' if current_backlog %>
|
40
40
|
<%=render :partial => '/tasks/backlog_header', :locals => { :backlog => task.backlog, :track_times => @tasks.find {|t|t.period && t.period.active?} } %>
|
41
|
-
<%=
|
41
|
+
<%=render :partial => '/tasks/fields_header', :locals => { :backlog => task.backlog, :active => true, :track_times => @tasks.find {|t|t.period && t.period.active?} } %>
|
42
42
|
<% current_backlog = task.backlog %>
|
43
43
|
<% end %>
|
44
|
-
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => true, :highlight_task => task == @selected_task, :update => :spotlight } %>
|
44
|
+
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => true, :highlight_task => task == @selected_task, :update => :spotlight, :hidden => false } %>
|
45
45
|
<% i += 1 %>
|
46
46
|
<% end %>
|
47
47
|
</table>
|
48
|
-
|
49
|
-
<p
|
50
|
-
|
48
|
+
|
49
|
+
<p id="no_tasks_message"<%=' style="display: none;"' if @tasks and not @tasks.empty?%>><%=l :no_pending_tasks%></p>
|
50
|
+
|
51
51
|
|
52
52
|
|
53
53
|
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<% current_period = nil %>
|
2
2
|
|
3
|
-
<table class="input">
|
3
|
+
<table id="completed_tasks" class="input">
|
4
4
|
<% for task in @completed_tasks %>
|
5
5
|
<% if task.period != current_period %>
|
6
6
|
<%= render :partial => '/tasks/period_header', :locals => {:period => task.period} unless @completed_tasks.map(&:period).uniq.size == 1 %>
|
7
7
|
<%= render :partial => '/tasks/fields_header', :locals => {:backlog => task.backlog, :active => false, :track_times => false} %>
|
8
8
|
<% current_period = task.period %>
|
9
9
|
<% end %>
|
10
|
-
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => false, :highlight_task => task == @selected_task } %>
|
10
|
+
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => false, :highlight_task => task == @selected_task, :hidden => false } %>
|
11
11
|
<% i += 1 %>
|
12
12
|
<% end %>
|
13
13
|
</table>
|
data/app/views/tasks/_task.rhtml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<% @task = task %>
|
2
|
-
<tr valign="top"
|
2
|
+
<tr id="task_<%=@task.id%>" valign="top"<%=' class="highlight"' if highlight_task %><%=' style="display: none"' if hidden %>>
|
3
3
|
<td width="1">
|
4
4
|
<% if @task.enable_subtasks? && active && (@task.period.nil? || @task.period.active_or_future?) %>
|
5
5
|
<% form_tag({:controller => 'tasks', :action => :specify, :id => @task}) do %>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<%= "-" if @task.children.size > 0 %>
|
15
15
|
</td>
|
16
16
|
<td>
|
17
|
-
<div
|
17
|
+
<div<%=' 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
18
|
<% if @task.active? -%>
|
19
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
20
|
<% else -%>
|
@@ -30,7 +30,7 @@
|
|
30
30
|
<%= text_field 'work', 'started_at_time', :tabindex => i+1, :value => @task.started_work.started_at.strftime('%H:%M'),
|
31
31
|
:class => :task_time, :maxlength => 5, :onkeypress => "handleEvent(this, event, #{@task.id})" %>
|
32
32
|
<% elsif @task.track_times? && @task.period && @task.period.active? %>
|
33
|
-
<%=
|
33
|
+
<%= image_link_to_remote 'hammer.png', l(:start_work), {:controller => 'tasks', :action => :start_work, :id => @task.id}, nil, true %>
|
34
34
|
<% end -%>
|
35
35
|
<% end %>
|
36
36
|
<% end -%>
|
@@ -49,7 +49,7 @@
|
|
49
49
|
<%= hidden_field('work', 'task_id', :value => @task.id)%>
|
50
50
|
<%= submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
|
51
51
|
<% unless @task.track_times? || @task.work_started? || @task.finished_at -%>
|
52
|
-
<%=
|
52
|
+
<%=text_field 'work', 'hours', :tabindex => i+1, :id => "#{@task.id}_done",
|
53
53
|
:class => :task_hours, :maxlength => 4, :onkeypress => "handleEvent(this, event, #{@task.id})",
|
54
54
|
:ondblclick => "form.elements[1].style.display = 'inline';this.style.display = 'none'" -%>
|
55
55
|
<% end -%>
|
@@ -60,17 +60,16 @@
|
|
60
60
|
</td>
|
61
61
|
<td nowrap="true" width="1">
|
62
62
|
<% if active && @task.loggable? -%>
|
63
|
-
<%
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
<% end %>
|
63
|
+
<% remote_form_for(:estimate, :url => {:controller => 'estimates', :action => :create_ajax, :id => @task}) do |f| -%>
|
64
|
+
<% if @task.track_todo? -%>
|
65
|
+
<% if @task.period.nil? || @task.period.active_or_future? -%>
|
66
|
+
<%=f.text_field :todo, :tabindex => i+2, :id => "#{@task.id}_todo", :value => @task.todo, :class => :task_hours, :maxlength => 4, :onkeypress => "handleEvent(this, event, #{@task.id})" %>
|
67
|
+
<% else -%>
|
68
|
+
<%=@task.todo %>
|
69
|
+
<% end -%>
|
71
70
|
<% end -%>
|
72
71
|
<% if (not @task.track_times?) && !@task.work_started? && (@task.period.nil? || @task.period.active?) %>
|
73
|
-
<%=
|
72
|
+
<%= image_link_to_remote('checkmark.png', l(:complete), {:controller => 'tasks', :action => :finish_ajax, :id => @task}, nil, true)%>
|
74
73
|
<% end -%>
|
75
74
|
<% end -%>
|
76
75
|
<% end -%>
|
@@ -85,7 +84,7 @@
|
|
85
84
|
<% end %>
|
86
85
|
<% end %>
|
87
86
|
<% elsif (@task.period.nil? || (not @task.period.passed?)) && @task.leaf? %>
|
88
|
-
<%=
|
87
|
+
<%=image_link_to_remote('eraser.png', l(:reopen), {:controller => 'tasks', :action => :reopen, :id => @task}, nil, true) %>
|
89
88
|
<% end -%>
|
90
89
|
<% end -%>
|
91
90
|
</td>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
page.replace_html :notice, @message
|
2
|
+
page.visual_effect(:appear, :notice)
|
3
|
+
|
4
|
+
page.visual_effect :fade, "task_#{@task.id}"
|
5
|
+
page.remove "task_#{@task.id}"
|
6
|
+
|
7
|
+
if @last_active_in_backlog
|
8
|
+
page.select('#active_tasks tr').first.remove
|
9
|
+
page.select('#active_tasks tr').first.remove
|
10
|
+
end
|
11
|
+
|
12
|
+
if @last_active
|
13
|
+
page.visual_effect :appear, "no_tasks_message"
|
14
|
+
end
|
15
|
+
|
16
|
+
unless @first_finished
|
17
|
+
page.select('#completed_tasks tr').first.remove
|
18
|
+
end
|
19
|
+
|
20
|
+
page.insert_html :top, :completed_tasks, :partial => '/tasks/task', :locals => {:active => false, :hidden => true, :highlight_task => false}
|
21
|
+
page.visual_effect :appear, "task_#{@task.id}"
|
22
|
+
|
23
|
+
page.insert_html :top, :completed_tasks, :partial => '/tasks/fields_header', :locals => {:backlog => @task.backlog, :active => false}
|
24
|
+
|
25
|
+
page['burn_down_chart'].src = url_for(:controller => 'periods', :action => :burn_down_chart_thumbnail, :id => @task.period_id, :rnd => rand)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
page.replace :notice, :partial => '/layouts/notice'
|
2
|
+
page.visual_effect(:appear, :notice)
|
3
|
+
|
4
|
+
if @task.lower_item && @task.lower_item.backlog == @task.backlog
|
5
|
+
page.select('#active_tasks tr').first.remove
|
6
|
+
page.select('#active_tasks tr').first.remove
|
7
|
+
end
|
8
|
+
|
9
|
+
page.visual_effect :fade, "task_#{@task.id}"
|
10
|
+
|
11
|
+
page.remove "task_#{@task.id}"
|
12
|
+
|
13
|
+
if @last_finished
|
14
|
+
page.select('#completed_tasks tr').first.remove
|
15
|
+
end
|
16
|
+
|
17
|
+
page.insert_html :top, :active_tasks, :partial => '/tasks/task', :locals => { :task => @task, :i => 1, :active => true, :highlight_task => false, :update => :spotlight, :hidden => true }
|
18
|
+
page[:no_tasks_message].hide
|
19
|
+
|
20
|
+
page.insert_html :top, :active_tasks, :partial => '/tasks/fields_header', :locals => {:backlog => @task.backlog}
|
21
|
+
page.insert_html :top, :active_tasks, :partial => '/tasks/backlog_header', :locals => {:backlog => @task.backlog}
|
22
|
+
page.visual_effect :blind_down, "active_tasks"
|
23
|
+
page.visual_effect :appear, "task_#{@task.id}"
|
24
|
+
|
25
|
+
page.visual_effect :appear, "task_#{@task.id}"
|
26
|
+
page['burn_down_chart'].src = url_for(:controller => 'periods', :action => :burn_down_chart_thumbnail, :id => @task.period_id, :rnd => rand)
|
@@ -4,6 +4,11 @@
|
|
4
4
|
<p><label for="work_account_name">Name</label><br/>
|
5
5
|
<%= text_field 'work_account', 'name' %></p>
|
6
6
|
|
7
|
+
<p>
|
8
|
+
<%=check_box :work_account, 'track_times' %>
|
9
|
+
<label for="work_account_track_times"><%=l :track_times%></label>
|
10
|
+
</p>
|
11
|
+
|
7
12
|
<p><label for="work_account_invoice_code">Invoice code</label><br/>
|
8
13
|
<%= text_field 'work_account', 'invoice_code' %></p>
|
9
14
|
<!--[eoform:work_account]-->
|
@@ -1,9 +1,14 @@
|
|
1
|
-
|
1
|
+
<% @page_title = "#{l(:editing)} #{l(:work_account)}" %>
|
2
|
+
|
3
|
+
<div id="spotlight">
|
4
|
+
<div class="btitle">
|
5
|
+
<h4><%=@work_account.name%></h4>
|
6
|
+
</div>
|
2
7
|
|
3
8
|
<% form_tag :action => 'update', :id => @work_account do %>
|
4
|
-
<%=
|
5
|
-
<%=
|
9
|
+
<%=render :partial => 'form' %>
|
10
|
+
<%=submit_tag l(:save) %>
|
11
|
+
<%=back_or_link_to l(:back), :action => 'show', :id => @backlog %>
|
6
12
|
<% end %>
|
7
13
|
|
8
|
-
|
9
|
-
<%= link_to 'Back', :action => 'list' %>
|
14
|
+
</div>
|
Binary file
|
@@ -5,7 +5,7 @@ require 'backlogs_controller'
|
|
5
5
|
class BacklogsController; def rescue_action(e) raise e end; end
|
6
6
|
|
7
7
|
class BacklogsControllerTest < Test::Unit::TestCase
|
8
|
-
fixtures
|
8
|
+
fixtures(*ALL)
|
9
9
|
|
10
10
|
def setup
|
11
11
|
@user_controller = UserController.new
|
@@ -5,7 +5,7 @@ require 'work_accounts_controller'
|
|
5
5
|
class WorkAccountsController; def rescue_action(e) raise e end; end
|
6
6
|
|
7
7
|
class WorkAccountsControllerTest < Test::Unit::TestCase
|
8
|
-
fixtures
|
8
|
+
fixtures(*ALL)
|
9
9
|
|
10
10
|
def setup
|
11
11
|
@controller = WorkAccountsController.new
|
data/test/test_helper.rb
CHANGED
@@ -4,6 +4,8 @@ require 'test_help'
|
|
4
4
|
require 'user_notify'
|
5
5
|
|
6
6
|
class Test::Unit::TestCase
|
7
|
+
ALL = [:parties, :users, :groups, :groups_users, :work_accounts, :backlogs, :periods, :tasks, :task_files, :works, :estimates]
|
8
|
+
|
7
9
|
# Transactional fixtures accelerate your tests by wrapping each test method
|
8
10
|
# in a transaction that's rolled back on completion. This ensures that the
|
9
11
|
# test database remains unchanged so your fixtures don't have to be reloaded
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2006 RedHill Consulting, Pty. Ltd.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,15 @@
|
|
1
|
+
= Transactional Migrations
|
2
|
+
|
3
|
+
Transactional Migrations is a plugin that ensures your migration scripts--both
|
4
|
+
up and down--run within a transaction. When used in conjunction with a
|
5
|
+
database that supports transactional Data Definition Language (DDL)--such as
|
6
|
+
PostgreSQL--this ensures that if any statement within your migration script
|
7
|
+
fails, the entire script is rolled-back.
|
8
|
+
|
9
|
+
Over and above installing the plugin, no further action is required for the
|
10
|
+
transactions to take effect.
|
11
|
+
|
12
|
+
=== License
|
13
|
+
|
14
|
+
This plugin is copyright 2006 by RedHill Consulting, Pty. Ltd. and is released
|
15
|
+
under the MIT license.
|
@@ -0,0 +1 @@
|
|
1
|
+
ActiveRecord::Migration.send(:include, RedHillConsulting::TransactionalMigrations::ActiveRecord::Migration)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module RedHillConsulting::TransactionalMigrations::ActiveRecord
|
2
|
+
module Migration
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def self.extended(base)
|
9
|
+
class << base
|
10
|
+
alias_method_chain :migrate, :transactional_migrations
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def migrate_with_transactional_migrations(direction)
|
15
|
+
ActiveRecord::Base.transaction { migrate_without_transactional_migrations(direction) }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
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.
|
7
|
-
date: 2007-11-
|
6
|
+
version: 0.12.0
|
7
|
+
date: 2007-11-06 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
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- public/images/arrow_right.png
|
51
51
|
- public/images/construction_hammer_jon__01.svg
|
52
52
|
- public/images/arrow_down.svg
|
53
|
+
- public/images/work_account.png
|
53
54
|
- public/images/checkmark_org.png
|
54
55
|
- public/images/rmagick_270.gif
|
55
56
|
- public/images/pagebak.jpg
|
@@ -271,6 +272,17 @@ files:
|
|
271
272
|
- cruise_config.rb
|
272
273
|
- vendor
|
273
274
|
- vendor/plugins
|
275
|
+
- vendor/plugins/transactional_migrations
|
276
|
+
- vendor/plugins/transactional_migrations/lib
|
277
|
+
- vendor/plugins/transactional_migrations/lib/red_hill_consulting
|
278
|
+
- vendor/plugins/transactional_migrations/lib/red_hill_consulting/transactional_migrations
|
279
|
+
- vendor/plugins/transactional_migrations/lib/red_hill_consulting/transactional_migrations/active_record
|
280
|
+
- vendor/plugins/transactional_migrations/lib/red_hill_consulting/transactional_migrations/active_record/migration.rb
|
281
|
+
- vendor/plugins/transactional_migrations/about.yml
|
282
|
+
- vendor/plugins/transactional_migrations/init.rb
|
283
|
+
- vendor/plugins/transactional_migrations/CHANGELOG
|
284
|
+
- vendor/plugins/transactional_migrations/MIT-LICENSE
|
285
|
+
- vendor/plugins/transactional_migrations/README
|
274
286
|
- vendor/plugins/goldspike
|
275
287
|
- vendor/plugins/goldspike/test
|
276
288
|
- vendor/plugins/goldspike/test/test_create_war.rb
|
@@ -423,6 +435,7 @@ files:
|
|
423
435
|
- app/views/backlogs/edit.rhtml
|
424
436
|
- app/views/backlogs/_tasks.rhtml
|
425
437
|
- app/views/estimates
|
438
|
+
- app/views/estimates/create_ajax.rjs
|
426
439
|
- app/views/groups
|
427
440
|
- app/views/groups/list.rhtml
|
428
441
|
- app/views/groups/_form.rhtml
|
@@ -441,13 +454,16 @@ files:
|
|
441
454
|
- app/views/tasks
|
442
455
|
- app/views/tasks/_backlog_header.rhtml
|
443
456
|
- app/views/tasks/list.rhtml
|
457
|
+
- app/views/tasks/finish_ajax.rjs
|
444
458
|
- app/views/tasks/_form.rhtml
|
445
459
|
- app/views/tasks/_period_header.rhtml
|
446
460
|
- app/views/tasks/new.rhtml
|
461
|
+
- app/views/tasks/start_work.rjs
|
447
462
|
- app/views/tasks/_fields_header.rhtml
|
448
463
|
- app/views/tasks/_completed.rhtml
|
449
464
|
- app/views/tasks/edit.rhtml
|
450
465
|
- app/views/tasks/list_started.rhtml
|
466
|
+
- app/views/tasks/reopen.rjs
|
451
467
|
- app/views/tasks/_task.rhtml
|
452
468
|
- app/views/works
|
453
469
|
- app/views/works/list.rhtml
|