backlog 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +9 -0
- data/Rakefile +1 -1
- data/app/controllers/application.rb +6 -5
- data/app/controllers/groups_controller.rb +2 -1
- data/app/controllers/periods_controller.rb +3 -4
- data/app/controllers/tasks_controller.rb +5 -2
- data/app/controllers/user_controller.rb +5 -5
- data/app/controllers/works_controller.rb +1 -2
- data/app/helpers/application_helper.rb +3 -2
- data/app/models/group.rb +6 -0
- data/app/models/party.rb +5 -0
- data/app/models/task.rb +18 -8
- data/app/models/user.rb +4 -0
- data/app/models/work.rb +4 -4
- data/app/views/backlogs/edit.rhtml +1 -2
- data/app/views/groups/edit.rhtml +17 -1
- data/app/views/groups/new.rhtml +3 -4
- data/app/views/layouts/mwrt002.rhtml +1 -1
- data/app/views/periods/_form.rhtml +4 -4
- data/app/views/periods/_show_active.rhtml +2 -2
- data/app/views/periods/_title.rhtml +3 -1
- data/app/views/periods/new.rhtml +2 -3
- data/app/views/tasks/_backlog_header.rhtml +4 -2
- data/app/views/tasks/_form.rhtml +4 -3
- data/app/views/tasks/_task.rhtml +19 -22
- data/app/views/tasks/edit.rhtml +2 -0
- data/app/views/tasks/list_started.rhtml +2 -1
- data/app/views/user/_edit.rhtml +3 -2
- data/app/views/user/_password.rhtml +4 -4
- data/app/views/user/edit.rhtml +29 -5
- data/app/views/works/_form.rhtml +5 -5
- data/app/views/works/weekly_work_sheet.rhtml +2 -2
- data/config/database.yml +1 -1
- data/lang/en.yaml +4 -0
- data/lang/no.yaml +5 -1
- data/lib/class_table_inheritance.rb +1 -1
- data/lib/user_system.rb +22 -12
- data/public/images/group.png +0 -0
- data/public/images/{person.png → user.png} +0 -0
- data/test/functional/tasks_controller_test.rb +19 -1
- data/test/functional/user_controller_test.rb +1 -1
- metadata +5 -3
data/History.txt
CHANGED
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ require 'tasks/rails'
|
|
11
11
|
|
12
12
|
require 'hoe'
|
13
13
|
|
14
|
-
Hoe.new("backlog", '0.
|
14
|
+
Hoe.new("backlog", '0.2.0') do |p|
|
15
15
|
p.rubyforge_name = "backlog"
|
16
16
|
p.description = p.paragraphs_of('README.txt', 0..-1).join("\n\n")
|
17
17
|
p.remote_rdoc_dir = '' # Release to root
|
@@ -12,8 +12,8 @@ class ApplicationController < ActionController::Base
|
|
12
12
|
layout :determine_layout
|
13
13
|
helper :user
|
14
14
|
before_filter :store_detour_from_params
|
15
|
-
before_filter :populate_layout
|
16
15
|
before_filter :authenticate_user
|
16
|
+
before_filter :populate_layout
|
17
17
|
|
18
18
|
def self.in_place_edit_for(object, attribute, options = {})
|
19
19
|
define_method("set_#{object}_#{attribute}") do
|
@@ -73,8 +73,8 @@ class ApplicationController < ActionController::Base
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def store_detour_from_params
|
76
|
-
if params[:
|
77
|
-
store_detour(
|
76
|
+
if params[:detour]
|
77
|
+
store_detour(params[:detour])
|
78
78
|
end
|
79
79
|
if params[:return_from_detour] && session[:detours]
|
80
80
|
pop_detour
|
@@ -107,6 +107,7 @@ class ApplicationController < ActionController::Base
|
|
107
107
|
{:key => 'Alt-N', :function => :new_task, :options => {:controller => 'tasks', :action => 'new', :period_id => (@period ? @period.id : (@backlog && @backlog.periods.first ? @backlog.periods.first.id : nil))}},
|
108
108
|
{:key => 'Alt-Shift-N', :function => :new_period, :options => {:controller => 'periods', :action => 'new'}},
|
109
109
|
{:key => 'Alt-Ctrl-N', :function => :new_backlog, :options => {:controller => 'backlogs', :action => 'new'}},
|
110
|
+
{:key => 'Alt-Ctrl-G', :function => :new_group, :options => {:controller => 'groups', :action => :new}},
|
110
111
|
{:key => "Alt-#{l :up}", :function => :up},
|
111
112
|
{:key => "Alt-#{l :down}", :function => :down},
|
112
113
|
{:key => "Alt-Shift-#{l :left}", :function => :move_to_top},
|
@@ -122,7 +123,7 @@ class ApplicationController < ActionController::Base
|
|
122
123
|
populate_shortcuts
|
123
124
|
|
124
125
|
# TODO (uwe): This does not scale!
|
125
|
-
periods = Period.find(:all).select {|period| period.active_or_future?(true)}
|
126
|
+
periods = Period.find(:all).select {|period| period.active_or_future?(true) && period.party.includes?(user)}
|
126
127
|
|
127
128
|
@sidebars = periods.sort_by {|p| p.required_speed}.reverse.map do |period|
|
128
129
|
content = '<ul>'
|
@@ -147,7 +148,7 @@ class ApplicationController < ActionController::Base
|
|
147
148
|
started_tasks = Task.find_started(user)
|
148
149
|
if not started_tasks.empty?
|
149
150
|
links = started_tasks.map do |task|
|
150
|
-
"<li><a href=\"#{url_for :controller => '
|
151
|
+
"<li><a href=\"#{url_for :controller => 'tasks', :action => :list_started, :id => task.id}\">#{task.description}</a></li>"
|
151
152
|
end
|
152
153
|
@sidebars.unshift({ :title => l(:started_tasks),
|
153
154
|
:options => {:controller => 'tasks', :action => :list_started},
|
@@ -20,7 +20,7 @@ class GroupsController < ApplicationController
|
|
20
20
|
@group = Group.new(params[:group])
|
21
21
|
if @group.save
|
22
22
|
flash[:notice] = 'Group was successfully created.'
|
23
|
-
|
23
|
+
back_or_redirect_to :action => 'list'
|
24
24
|
else
|
25
25
|
render :action => 'new'
|
26
26
|
end
|
@@ -30,6 +30,7 @@ class GroupsController < ApplicationController
|
|
30
30
|
@group = Group.find(params[:id])
|
31
31
|
@users = User.find(:all)
|
32
32
|
@members = @group.users.to_s
|
33
|
+
@groups = Group.find(:all, :order => 'name')
|
33
34
|
end
|
34
35
|
|
35
36
|
def update
|
@@ -37,8 +37,8 @@ class PeriodsController < ApplicationController
|
|
37
37
|
|
38
38
|
def new
|
39
39
|
@period = Period.new
|
40
|
-
if params[:party_id]
|
41
|
-
@period.party_id = params[:party_id]
|
40
|
+
if params[:period] && params[:period][:party_id]
|
41
|
+
@period.party_id = params[:period][:party_id]
|
42
42
|
previous = @period.party.periods.last
|
43
43
|
if previous
|
44
44
|
@period.start_on = previous.end_on + 1
|
@@ -46,9 +46,8 @@ class PeriodsController < ApplicationController
|
|
46
46
|
else
|
47
47
|
@period.start_on = Date.today
|
48
48
|
end
|
49
|
-
else
|
50
|
-
@parties = Party.find(:all)
|
51
49
|
end
|
50
|
+
@parties = Party.find(:all)
|
52
51
|
end
|
53
52
|
|
54
53
|
def create
|
@@ -7,10 +7,12 @@ class TasksController < ApplicationController
|
|
7
7
|
|
8
8
|
def list_started
|
9
9
|
@tasks = Task.find_started(user)
|
10
|
+
@selected_task = Task.find_by_id(params[:id])
|
10
11
|
back_or_redirect_to :controller => nil, :action => nil if @tasks.empty?
|
11
12
|
end
|
12
13
|
|
13
14
|
def new
|
15
|
+
redirect_to params if request.post?
|
14
16
|
@task = Task.new params[:task]
|
15
17
|
@task.backlog_id ||= @task.period && @task.period.most_frequent_backlog
|
16
18
|
@backlogs = Backlog.find(:all, :order => 'name')
|
@@ -36,6 +38,7 @@ class TasksController < ApplicationController
|
|
36
38
|
def edit
|
37
39
|
@task = Task.find(params[:id])
|
38
40
|
@periods = Period.find_active_or_future
|
41
|
+
@backlogs = Backlog.find(:all, :order => 'name')
|
39
42
|
end
|
40
43
|
|
41
44
|
def update
|
@@ -126,7 +129,7 @@ class TasksController < ApplicationController
|
|
126
129
|
back_or_redirect_to :controller => 'periods', :action => :show_nolayout, :id => next_task.period, :task_id => next_task.id
|
127
130
|
end
|
128
131
|
else
|
129
|
-
detour_to :controller => 'periods', :action => :new, :party_id => task.period.party_id, :layout => with_layout && determine_layout
|
132
|
+
detour_to :controller => 'periods', :action => :new, :period => {:party_id => task.period.party_id}, :layout => with_layout && determine_layout
|
130
133
|
end
|
131
134
|
else
|
132
135
|
redirect_to :controller => 'periods', :action => :show, :id => task.period, :task_id => task.id, :layout => with_layout && determine_layout
|
@@ -167,7 +170,7 @@ class TasksController < ApplicationController
|
|
167
170
|
def end_work
|
168
171
|
@task = Task.find(params[:id])
|
169
172
|
next_quarter = Time.next_quarter
|
170
|
-
if started_work = @task.started_work
|
173
|
+
if started_work = @task.started_work
|
171
174
|
redirect_to({
|
172
175
|
:controller => 'works',
|
173
176
|
:action => :edit,
|
@@ -12,8 +12,7 @@ class UserController < ApplicationController
|
|
12
12
|
@user = User.new(params['user'])
|
13
13
|
user = User.authenticate(params['user']['login'], params['user']['password'])
|
14
14
|
if user
|
15
|
-
|
16
|
-
session[:user_id] = user.id
|
15
|
+
self.current_user = user
|
17
16
|
flash['notice'] = 'Login succeeded'
|
18
17
|
back_or_redirect_to :controller => 'backlogs', :action => :index
|
19
18
|
else
|
@@ -46,7 +45,7 @@ class UserController < ApplicationController
|
|
46
45
|
|
47
46
|
def logout
|
48
47
|
session[:user_id] = nil
|
49
|
-
|
48
|
+
self.current_user = nil
|
50
49
|
cookies.delete :autologin
|
51
50
|
redirect_to :action => 'login'
|
52
51
|
end
|
@@ -130,7 +129,7 @@ class UserController < ApplicationController
|
|
130
129
|
end
|
131
130
|
|
132
131
|
def delete
|
133
|
-
@user =
|
132
|
+
@user = current_user || User.find_by_id( session[:user_id] )
|
134
133
|
begin
|
135
134
|
@user.update_attribute( :deleted, true )
|
136
135
|
logout
|
@@ -166,7 +165,8 @@ class UserController < ApplicationController
|
|
166
165
|
|
167
166
|
# Generate a template user for certain actions on get
|
168
167
|
def generate_filled_in
|
169
|
-
@user =
|
168
|
+
@user = User.find_by_id(params[:id]) || current_user || User.find_by_id(session[:user_id])
|
169
|
+
@groups = Group.find(:all, :order => 'name')
|
170
170
|
case request.method
|
171
171
|
when :get
|
172
172
|
render
|
@@ -57,8 +57,6 @@ class WorksController < ApplicationController
|
|
57
57
|
def update
|
58
58
|
@work = Work.find(params[:id])
|
59
59
|
|
60
|
-
@work.task.estimates.new(params[:estimate]).save! if params[:estimate]
|
61
|
-
|
62
60
|
convert_start_time_param
|
63
61
|
convert_hours_param
|
64
62
|
if @work.update_attributes(params[:work])
|
@@ -67,6 +65,7 @@ class WorksController < ApplicationController
|
|
67
65
|
else
|
68
66
|
render :action => 'edit'
|
69
67
|
end
|
68
|
+
@work.task.estimates.new(params[:estimate]).save! if params[:estimate]
|
70
69
|
end
|
71
70
|
|
72
71
|
def destroy
|
@@ -11,8 +11,9 @@ module ApplicationHelper
|
|
11
11
|
:onclick => "form.action='#{url_for(options)}'"
|
12
12
|
end
|
13
13
|
|
14
|
-
def detour_to(title, options)
|
15
|
-
link_to title, options.update({:
|
14
|
+
def detour_to(title, options, html_options = nil)
|
15
|
+
#link_to title, options.update({:detour => {:controller => @controller.controller_name, :action => @controller.action_name, :id => params[:id]}}), html_options
|
16
|
+
link_to title, options.update({:detour => params.reject {|k, v| [:detour, :return_from_detour].include? k.to_sym}}), html_options
|
16
17
|
end
|
17
18
|
|
18
19
|
def image_detour_to(image_source, title, image_options, options )
|
data/app/models/group.rb
CHANGED
data/app/models/party.rb
CHANGED
data/app/models/task.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
class Task < ActiveRecord::Base
|
2
|
+
include UserSystem
|
3
|
+
|
2
4
|
COMPLETED = 'COMPLETED'
|
3
5
|
POSTPONED = 'POSTPONED'
|
4
6
|
MOVED = 'MOVED'
|
@@ -132,7 +134,7 @@ class Task < ActiveRecord::Base
|
|
132
134
|
end
|
133
135
|
|
134
136
|
def finish(resolution, save_work, user)
|
135
|
-
unless finished_at || work_started?
|
137
|
+
unless finished_at || work_started?
|
136
138
|
remove_from_list
|
137
139
|
self.finished_at = Time.now
|
138
140
|
self.resolution = resolution
|
@@ -152,7 +154,7 @@ class Task < ActiveRecord::Base
|
|
152
154
|
end
|
153
155
|
|
154
156
|
def active?
|
155
|
-
finished_at.nil? || active_children?
|
157
|
+
finished_at.nil? || work_started? || active_children?
|
156
158
|
end
|
157
159
|
|
158
160
|
def active_children?
|
@@ -201,10 +203,18 @@ class Task < ActiveRecord::Base
|
|
201
203
|
root_task.backlog.enable_subtasks?
|
202
204
|
end
|
203
205
|
|
206
|
+
def enable_users?
|
207
|
+
root_task.backlog.enable_users?
|
208
|
+
end
|
209
|
+
|
204
210
|
def enable_customer?
|
205
211
|
root_task.backlog.enable_customer?
|
206
212
|
end
|
207
213
|
|
214
|
+
def enable_invoicing?
|
215
|
+
root_task.backlog.enable_invoicing?
|
216
|
+
end
|
217
|
+
|
208
218
|
alias_method :old_period, :period
|
209
219
|
def period
|
210
220
|
old_period || root_task.old_period
|
@@ -250,7 +260,7 @@ class Task < ActiveRecord::Base
|
|
250
260
|
end
|
251
261
|
|
252
262
|
def start_work(user)
|
253
|
-
return if work_started?
|
263
|
+
return if work_started?
|
254
264
|
open(user)
|
255
265
|
new_work = works.new
|
256
266
|
new_work.started_at = Time.previous_quarter
|
@@ -277,14 +287,14 @@ class Task < ActiveRecord::Base
|
|
277
287
|
finish(Task::ABORTED, false, user)
|
278
288
|
end
|
279
289
|
|
280
|
-
def work_started?
|
281
|
-
!started_work
|
290
|
+
def work_started?
|
291
|
+
!started_work.nil?
|
282
292
|
end
|
283
293
|
|
284
|
-
def started_work
|
294
|
+
def started_work
|
285
295
|
started_works = works.select {|work| work.completed_at.nil?}
|
286
|
-
if
|
287
|
-
started_by_user = started_works.select {|work| work.user ==
|
296
|
+
if current_user
|
297
|
+
started_by_user = started_works.select {|work| work.user == current_user}.last
|
288
298
|
return started_by_user if started_by_user
|
289
299
|
end
|
290
300
|
started_works.select {|work| work.user.nil?}.last
|
data/app/models/user.rb
CHANGED
data/app/models/work.rb
CHANGED
@@ -2,12 +2,12 @@ class Work < ActiveRecord::Base
|
|
2
2
|
belongs_to :task
|
3
3
|
belongs_to :user
|
4
4
|
|
5
|
-
|
5
|
+
validates_presence_of :task_id
|
6
6
|
validates_presence_of :started_at
|
7
|
-
|
7
|
+
validates_presence_of :user_id, :if => :validate_user?
|
8
8
|
|
9
9
|
def validate_user?
|
10
|
-
task.
|
10
|
+
task.enable_users?
|
11
11
|
end
|
12
12
|
|
13
13
|
def track_times?
|
@@ -27,7 +27,7 @@ class Work < ActiveRecord::Base
|
|
27
27
|
works = find(:all, :conditions => "completed_at BETWEEN '#{first.to_time.iso8601}' AND '#{last.to_time.iso8601}'", :order => 'completed_at')
|
28
28
|
length = 0
|
29
29
|
works_per_day = (0..6).map do |day|
|
30
|
-
works_for_day = works.select {|work| work.completed_at.to_date == (first + day) && (!work.task.
|
30
|
+
works_for_day = works.select {|work| work.completed_at.to_date == (first + day) && (!work.task.enable_users? || (user && work.user_id == user.id)) }
|
31
31
|
length = [length, works_for_day.length].max
|
32
32
|
works_for_day
|
33
33
|
end
|
@@ -4,7 +4,6 @@
|
|
4
4
|
<% form_tag :action => 'update', :id => @backlog do %>
|
5
5
|
<%= render :partial => 'form' %>
|
6
6
|
<%= submit_tag l(:save) %>
|
7
|
+
<%= back_or_link_to l(:back), :action => 'show', :id => @backlog %>
|
7
8
|
<% end %>
|
8
|
-
|
9
|
-
<%= back_or_link_to l(:back), :action => 'show', :id => @backlog %>
|
10
9
|
</div>
|
data/app/views/groups/edit.rhtml
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
<table>
|
17
17
|
<% for @user in @users %>
|
18
18
|
<tr>
|
19
|
-
<td><%=h
|
19
|
+
<td><%=link_to h(@user.name), :controller => 'user', :action => :edit, :id => @user %></td>
|
20
20
|
<td>
|
21
21
|
<% form_for :group, @group, :url => {:action => :set_member, :id => @group, :user_id => @user.id} do %>
|
22
22
|
<%=check_box_tag :value, true, @group.users.include?(@user), :onchange => "form.submit()" %></td>
|
@@ -29,3 +29,19 @@
|
|
29
29
|
|
30
30
|
</div>
|
31
31
|
|
32
|
+
<div id="rfeature">
|
33
|
+
<div class="btitle">
|
34
|
+
<h4><%=l :groups %></h4>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<table>
|
38
|
+
<% for @group in @groups %>
|
39
|
+
<tr>
|
40
|
+
<td>
|
41
|
+
<%=link_to @group.name, :action => :edit, :id => @group%>
|
42
|
+
</tr>
|
43
|
+
<% end %>
|
44
|
+
</table>
|
45
|
+
|
46
|
+
</div>
|
47
|
+
|
data/app/views/groups/new.rhtml
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
|
1
|
+
<% @page_title = l :new_group %>
|
2
2
|
|
3
3
|
<% form_tag :action => 'create' do %>
|
4
4
|
<%= render :partial => 'form' %>
|
5
|
-
<%= submit_tag
|
5
|
+
<%= submit_tag l(:save) %>
|
6
|
+
<%= back_or_link_to l(:back), :action => 'list' %>
|
6
7
|
<% end %>
|
7
|
-
|
8
|
-
<%= link_to 'Back', :action => 'list' %>
|
@@ -54,7 +54,7 @@ function handlePageEvent(event) {
|
|
54
54
|
<table>
|
55
55
|
<% @shortcuts.each_with_index do |shortcut, index| %>
|
56
56
|
<% if shortcut[:options] %>
|
57
|
-
<tr><td valign="top"><%= shortcut[:key]%></td><td><%=
|
57
|
+
<tr><td valign="top"><%= shortcut[:key]%></td><td><%=detour_to l(shortcut[:function]), shortcut[:options], :id => shortcut[:function], :tabindex => index+100 %></td></tr>
|
58
58
|
<% else %>
|
59
59
|
<tr><td valign="top"><%= shortcut[:key]%></td><td><%=l shortcut[:function] %></td></tr>
|
60
60
|
<% end %>
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<%= error_messages_for 'period' %>
|
2
2
|
|
3
3
|
<!--[form:period]-->
|
4
|
-
<% if @period.
|
4
|
+
<% if @period.new_record? %>
|
5
|
+
<p><label for="period_party_id"><%=l :group%>/<%=l :user%></label><br/>
|
6
|
+
<%= select 'period', 'party_id', [['', '']] + @parties.map{|party| [party.name, party.id]}, {}, :onchange => "form.action = '#{url_for :action => :new}'; form.submit();" %></p>
|
7
|
+
<% else %>
|
5
8
|
<p><label for="period_party_id"><%=l @period.party.class.name.downcase.to_s%></label>:
|
6
9
|
<%= hidden_field 'period', 'party_id' %><%=detour_to h(@period.party.name), :controller => @period.party.type.name.downcase.pluralize, :action => :edit, :id => @period.party%></p>
|
7
|
-
<% else %>
|
8
|
-
<p><label for="period_party_id"><%=l :group%>/<%=l :user%></label><br/>
|
9
|
-
<%= select 'period', 'party_id', @parties.map{|party| [party.name, party.id]} %></p>
|
10
10
|
<% end %>
|
11
11
|
|
12
12
|
<%= hidden_field 'period', 'position' %>
|
@@ -31,7 +31,7 @@ function handleEvent(field, event, id) {
|
|
31
31
|
//-->
|
32
32
|
</script>
|
33
33
|
|
34
|
-
<% if @tasks and not @tasks.empty
|
34
|
+
<% if @tasks and not @tasks.empty?%>
|
35
35
|
<table class="input">
|
36
36
|
<% current_backlog = nil %>
|
37
37
|
<% for task in @tasks %>
|
@@ -40,7 +40,7 @@ function handleEvent(field, event, id) {
|
|
40
40
|
<%=render :partial => '/tasks/backlog_header', :locals => { :backlog => task.backlog } %>
|
41
41
|
<% current_backlog = task.backlog %>
|
42
42
|
<% end %>
|
43
|
-
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => true } %>
|
43
|
+
<%=render :partial => '/tasks/task', :locals => { :task => task, :i => i, :active => true, :highlight => task == @selected_task } %>
|
44
44
|
<% i += 1 %>
|
45
45
|
<% end %>
|
46
46
|
</table>
|
@@ -2,7 +2,9 @@
|
|
2
2
|
<%= render :partial => '/works/buttons'%>
|
3
3
|
<%=if @period.lower_item then link_to(image_tag(url_for("arrow_right.png"), :alt => "#{l :next} #{l :period}", :title => "#{l :next} #{l :period}", :class => 'image-submit'), :controller => 'periods', :action => :show, :id => @period.lower_item) end%>
|
4
4
|
<%=link_to(image_tag(url_for("period.png"), :alt => l(:period), :title => l(:period), :class => 'image-submit'), :controller => 'periods', :action => :edit, :id => @period) %>
|
5
|
-
|
5
|
+
|
6
|
+
<%=detour_to(image_tag(url_for(@period.party.to_sym.to_s + ".png"), :alt => l(@period.party.to_sym), :title => l(@period.party.to_sym), :class => 'image-submit'), :controller => @period.party.to_sym.to_s, :action => :edit, :id => @period.party) %>
|
7
|
+
|
6
8
|
<%=if @period.higher_item then link_to(image_tag(url_for("arrow_left.png"), :alt => "#{l :previous} #{l :period}", :title => "#{l :previous} #{l :period}", :class => 'image-submit'), :controller => 'periods', :action => :show, :id => @period.higher_item) end%>
|
7
9
|
<%=unless @period.passed? then link_to(image_tag(url_for("add.png"), :alt => l(:add_task), :title => l(:add_task), :class => 'image-submit'), :controller => 'tasks', :action => 'new', :task => {:period_id => (@period ? @period.id : (@backlog && @backlog.periods.first ? @backlog.periods.first.id : nil))} ) end %>
|
8
10
|
<h4><%=h @period.name %> (<%=@period.start_on%> - <%=@period.end_on%>)</h4>
|
data/app/views/periods/new.rhtml
CHANGED
@@ -3,8 +3,7 @@
|
|
3
3
|
|
4
4
|
<% form_tag :action => 'create' do %>
|
5
5
|
<%= render :partial => 'form' %>
|
6
|
-
<%= submit_tag
|
6
|
+
<%= submit_tag l(:save) %>
|
7
|
+
<%= back_or_link_to l(:back), :action => 'list' %>
|
7
8
|
<% end %>
|
8
|
-
|
9
|
-
<%= back_or_link_to l(:back), :action => 'list' %>
|
10
9
|
</div>
|
@@ -1,14 +1,16 @@
|
|
1
1
|
<% @backlog = backlog %>
|
2
|
+
|
2
3
|
<tr valign="top">
|
3
4
|
<td>
|
4
5
|
<%= image_detour_to('add.png', l(:new_task), nil, :controller => 'tasks', :action => :new, :task => {:backlog_id => @backlog.id, :period_id => @period.id})%>
|
5
6
|
</td>
|
6
|
-
<td colspan="
|
7
|
+
<td colspan="4" valign="top">
|
7
8
|
<h5>
|
8
9
|
<%=h backlog.name %>
|
9
10
|
<%=image_detour_to("clipboard.png", l(:backlog), nil, :controller => 'backlogs', :action => :edit, :id => @backlog) %>
|
10
11
|
</h5>
|
11
12
|
</td>
|
13
|
+
<td width="*"/>
|
12
14
|
</tr>
|
13
15
|
<tr>
|
14
16
|
<th/>
|
@@ -18,5 +20,5 @@
|
|
18
20
|
<% if @period.track_work? -%>
|
19
21
|
<th><%=l :done %></th>
|
20
22
|
<% end %>
|
21
|
-
<th><% if @backlog.track_todo?
|
23
|
+
<th width="*"><% l :todo if @backlog.track_todo? %></th>
|
22
24
|
</tr>
|
data/app/views/tasks/_form.rhtml
CHANGED
@@ -16,10 +16,11 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
<p><label for="task_period_id"><%=l :period%></label><br/>
|
19
|
-
<%= select 'task', 'period_id', [['', '']] + @periods.map{|p| [p.name, p.id]} %>
|
19
|
+
<%= select 'task', 'period_id', [['', '']] + @periods.map{|p| [p.name, p.id]}, {}, :onchange => "form.action = '#{url_for}'; form.submit();" %>
|
20
20
|
<% if @task.period %>
|
21
|
-
<%=image_detour_to('
|
21
|
+
<%=image_detour_to(@task.period.party.to_sym.to_s + '.png', "#{l(@task.period.party.to_sym)} #{@task.period.party.name}", nil, :controller => @task.period.party.to_s, :action => :edit, :id => @task.period.party) %>
|
22
22
|
<% end %>
|
23
|
+
<%=detour_to l(:new_period), :controller => 'periods', :action => :new %>
|
23
24
|
</p>
|
24
25
|
|
25
26
|
|
@@ -44,5 +45,5 @@
|
|
44
45
|
|
45
46
|
|
46
47
|
<script type="text/JavaScript">
|
47
|
-
document.forms[0].elements[1].focus();
|
48
|
+
document.forms[0].elements[<%=@task.backlog.nil? ? 0 : @task.period.nil? ? 1 : 2%>].focus();
|
48
49
|
</script>
|
data/app/views/tasks/_task.rhtml
CHANGED
@@ -1,19 +1,16 @@
|
|
1
1
|
<% @task = task %>
|
2
|
-
<tr valign="top"
|
3
|
-
<td>
|
2
|
+
<tr valign="top" <%= 'style="background-color: yellow"' if highlight %>>
|
3
|
+
<td width="1">
|
4
4
|
<% if @task.enable_subtasks? && @task.period.active_or_future? && active %>
|
5
5
|
<% form_tag({:controller => 'tasks', :action => :specify, :id => @task}) do %>
|
6
6
|
<%= image_button_to('add.png', l(:specify), :controller => 'tasks', :action => :specify, :id => @task.id)%>
|
7
7
|
<% end %>
|
8
8
|
<% end %>
|
9
9
|
</td>
|
10
|
-
<td align="left" valign="top">
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
<%= l @task.resolution.downcase if @task.finished_at %>
|
15
|
-
<%= "-" if @task.children.size > 0 %>
|
16
|
-
<% end %>
|
10
|
+
<td align="left" valign="top" width="1" nowrap="true">
|
11
|
+
<%= (" " * @task.depth * 4) if @task.depth > 0 %>
|
12
|
+
<%= l(@task.resolution.downcase) if @task.finished_at %>
|
13
|
+
<%= "-" if @task.children.size > 0 %>
|
17
14
|
</td>
|
18
15
|
<td id="<%=@task.id%>" <%if active && @task.period.active_or_future?%>class="tasks" style=cursor:move;"<%end%>>
|
19
16
|
<% if @task.active? -%>
|
@@ -22,12 +19,12 @@
|
|
22
19
|
<%= @task.description -%>
|
23
20
|
<% end -%>
|
24
21
|
</td>
|
25
|
-
<td align="right" nowrap="true">
|
26
|
-
<% if @task.loggable? -%>
|
27
|
-
<% form_tag({:controller => 'works', :action => 'update', :id => @task.started_work
|
22
|
+
<td align="right" nowrap="true" width="1">
|
23
|
+
<% if active && @task.loggable? -%>
|
24
|
+
<% form_tag({:controller => 'works', :action => 'update', :id => @task.started_work}) do %>
|
28
25
|
<%= submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
|
29
|
-
<% if @task.work_started?
|
30
|
-
<%= text_field 'work', 'started_at_time', :tabindex => i+1, :value => @task.started_work
|
26
|
+
<% if @task.work_started? -%>
|
27
|
+
<%= text_field 'work', 'started_at_time', :tabindex => i+1, :value => @task.started_work.started_at.strftime('%H:%M'),
|
31
28
|
:class => :task_time, :maxlength => 5, :onkeypress => "handleEvent(this, event, #{@task.id})" %>
|
32
29
|
<%= image_button_to('ernes_stop.png', l(:end_work), :controller => 'tasks', :action => :end_work, :id => @task.id) %>
|
33
30
|
<% elsif @task.track_times? && @task.period.active? %>
|
@@ -37,12 +34,12 @@
|
|
37
34
|
<% end -%>
|
38
35
|
</td>
|
39
36
|
<% if @task.track_done? %>
|
40
|
-
<td align="<%=@task.loggable? ? 'center' : 'left'%>" nowrap="true">
|
37
|
+
<td align="<%=@task.loggable? ? 'center' : 'left'%>" nowrap="true" width="1">
|
41
38
|
<% if @task.loggable? || @task.finished_at -%>
|
42
|
-
<% form_tag({:controller => 'works', :action => (@task.work_started?
|
39
|
+
<% form_tag({:controller => 'works', :action => (@task.work_started? ? :edit : :create), :id => @task.started_work}) do %>
|
43
40
|
<%= hidden_field('work', 'task_id', :value => @task.id)%>
|
44
41
|
<%= submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
|
45
|
-
<% unless @task.track_times? || @task.work_started?
|
42
|
+
<% unless @task.track_times? || @task.work_started? || @task.finished_at -%>
|
46
43
|
<%= text_field 'work', 'hours', :tabindex => i+1, :id => "#{@task.id}_done",
|
47
44
|
:class => :task_hours, :maxlength => 4, :onkeypress => "handleEvent(this, event, #{@task.id})",
|
48
45
|
:ondblclick => "form.elements[1].style.display = 'inline';this.style.display = 'none'" -%>
|
@@ -52,8 +49,8 @@
|
|
52
49
|
<% end -%>
|
53
50
|
</td>
|
54
51
|
<% end -%>
|
55
|
-
<td nowrap="true">
|
56
|
-
<% if @task.loggable? -%>
|
52
|
+
<td nowrap="true" width="1">
|
53
|
+
<% if active && @task.loggable? -%>
|
57
54
|
<% form_tag({:controller => 'estimates', :action => 'create', :id => @task}) do %>
|
58
55
|
<%= submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
|
59
56
|
<% if @task.track_todo? %>
|
@@ -63,17 +60,17 @@
|
|
63
60
|
<%= @task.todo %>
|
64
61
|
<% end %>
|
65
62
|
<% end -%>
|
66
|
-
<% if (not @task.track_times?) && !@task.work_started?
|
63
|
+
<% if (not @task.track_times?) && !@task.work_started? && @task.period.active? %>
|
67
64
|
<%= image_button_to('checkmark.png', l(:complete), :controller => 'tasks', :action => :finish, :id => @task)%>
|
68
65
|
<% end -%>
|
69
66
|
<% end -%>
|
70
67
|
<% end -%>
|
71
68
|
</td>
|
72
|
-
<td align="right" nowrap="true" width="
|
69
|
+
<td align="right" nowrap="true" width="1">
|
73
70
|
<% form_tag({:controller => 'tasks', :action => 'update', :id => @task}) do %>
|
74
71
|
<% if @task.active? %>
|
75
72
|
<% if @task.loggable? %>
|
76
|
-
<% unless @task.work_started?
|
73
|
+
<% unless @task.work_started? %>
|
77
74
|
<%= image_button_to('arrow_right.png', l(:move_to_next_period), :controller => 'tasks', :action => :move_to_next_period, :id => @task)%>
|
78
75
|
<%= image_button_to('ernes_stop.png', l(:abort), :controller => 'tasks', :action => :abort, :id => @task)%>
|
79
76
|
<% end %>
|
data/app/views/tasks/edit.rhtml
CHANGED
@@ -38,6 +38,7 @@ function handleEvent(field, event, id) {
|
|
38
38
|
<% if @tasks %>
|
39
39
|
<table class="input">
|
40
40
|
<tr>
|
41
|
+
<th/>
|
41
42
|
<th align="center">#</th>
|
42
43
|
<th><%=l :task %></th>
|
43
44
|
<th><%=l :start %></th>
|
@@ -46,7 +47,7 @@ function handleEvent(field, event, id) {
|
|
46
47
|
</tr>
|
47
48
|
<% i = 0 %>
|
48
49
|
<% for task in @tasks %>
|
49
|
-
<%=render :partial => 'task', :locals => { :task => task, :i => i, :active => true } %>
|
50
|
+
<%=render :partial => 'task', :locals => { :task => task, :i => i, :active => true, :highlight => task == @selected_task } %>
|
50
51
|
<% i += 1 %>
|
51
52
|
<% end %>
|
52
53
|
</table>
|
data/app/views/user/_edit.rhtml
CHANGED
@@ -21,8 +21,9 @@
|
|
21
21
|
</tr>
|
22
22
|
<% if submit %>
|
23
23
|
<tr>
|
24
|
-
<td>
|
25
|
-
<%= submit_tag user.new_record? ? 'signup' :
|
24
|
+
<td colspan="2">
|
25
|
+
<%= submit_tag user.new_record? ? 'signup' : l(:save), :class => 'two_columns' %>
|
26
|
+
<%= back_or_link_to l(:back), :action => 'list' %>
|
26
27
|
</td>
|
27
28
|
</tr>
|
28
29
|
<% end %>
|
@@ -4,16 +4,16 @@
|
|
4
4
|
<table>
|
5
5
|
<tr class="two_columns">
|
6
6
|
<td class="prompt"><label>Password:</label></td>
|
7
|
-
<td class="value"><%= password_field 'user', 'password', :size =>
|
7
|
+
<td class="value"><%= password_field 'user', 'password', :size => 16 %></td>
|
8
8
|
</tr>
|
9
9
|
<tr class="two_columns">
|
10
10
|
<td class="prompt"><label>Password confirmation:</label></td>
|
11
|
-
<td class="value"><%= password_field 'user', 'password_confirmation', :size =>
|
11
|
+
<td class="value"><%= password_field 'user', 'password_confirmation', :size => 16 %></td>
|
12
12
|
</tr>
|
13
13
|
<% if submit %>
|
14
14
|
<tr>
|
15
|
-
<td>
|
16
|
-
<%= submit_tag
|
15
|
+
<td colspan="2">
|
16
|
+
<%= submit_tag l(:change_password) %>
|
17
17
|
</td>
|
18
18
|
</tr>
|
19
19
|
<% end %>
|
data/app/views/user/edit.rhtml
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
-
<div title="<%= title_helper %>" class="form">
|
2
|
-
|
1
|
+
<div id="spotlight" title="<%= title_helper %>" class="form">
|
2
|
+
<% @page_title = "#{l :editing} #{l :user}" %>
|
3
3
|
|
4
4
|
<%= start_form_tag_helper %>
|
5
5
|
<%= render_partial 'edit', :user => @user, :submit => true %>
|
6
6
|
</form>
|
7
|
-
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div id="rfeature">
|
10
|
+
<div class="btitle">
|
11
|
+
<h4><%=l :password %></h4>
|
12
|
+
</div>
|
13
|
+
|
8
14
|
<%= start_form_tag_helper %>
|
9
15
|
<%= render_partial 'password', :submit => true %>
|
10
16
|
</form>
|
@@ -12,8 +18,26 @@
|
|
12
18
|
<%= start_form_tag_helper %>
|
13
19
|
<div class="user_delete">
|
14
20
|
<%= hidden_field 'user', 'form', :value => 'delete' %>
|
15
|
-
<%= submit_tag
|
21
|
+
<%= submit_tag l(:delete) %>
|
16
22
|
</div>
|
17
23
|
</form>
|
18
24
|
</div>
|
19
|
-
</div>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<div id="lfeature">
|
28
|
+
<div class="btitle">
|
29
|
+
<h4><%=l :groups %></h4>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<table>
|
33
|
+
<% for @group in @groups %>
|
34
|
+
<tr>
|
35
|
+
<td><%=link_to h(@group.name), :controller => 'groups', :action => :edit, :id => @group %></td>
|
36
|
+
<td>
|
37
|
+
<% form_for :group, @group, :url => {:controller => 'groups', :action => :set_member, :id => @group, :user_id => @user.id} do %>
|
38
|
+
<%=check_box_tag :value, true, @group.users.include?(@user), :onchange => "form.submit()" %></td>
|
39
|
+
<% end %>
|
40
|
+
</tr>
|
41
|
+
<% end %>
|
42
|
+
</table>
|
43
|
+
</div>
|
data/app/views/works/_form.rhtml
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
<%= select 'work', 'task_id', @tasks.map{|task| [task.description, task.id]} %></p>
|
11
11
|
<% end %>
|
12
12
|
|
13
|
-
<% if @work.task.nil? || @work.task.
|
13
|
+
<% if @work.task.nil? || @work.task.track_times?%>
|
14
14
|
<p><label for="work_started_at"><%=l :started_at%></label><br/>
|
15
15
|
<%= text_field 'work', 'started_at', :size => 16, :value => @work.started_at ? @work.started_at.strftime('%Y-%m-%d %H:%M') : nil %>
|
16
16
|
<button id="trigger1">...</button>
|
@@ -50,23 +50,23 @@
|
|
50
50
|
</p>
|
51
51
|
<% end %>
|
52
52
|
|
53
|
-
<% if @work.task.nil? || @work.task.
|
53
|
+
<% if @work.task.nil? || @work.task.enable_users? %>
|
54
54
|
<p><label for="work_user_id"><%=l :user%></label><br/>
|
55
55
|
<%= select 'work', 'user_id', @users.map{|user| [user.login, user.id]} %></p>
|
56
56
|
<% end %>
|
57
57
|
|
58
|
-
<% if @work.task.nil? || @work.task.
|
58
|
+
<% if @work.task.nil? || @work.task.track_done?%>
|
59
59
|
<p style="float: left;"><label for="work_hours"><%=l :hours%></label><br/>
|
60
60
|
<%= text_field 'work', 'hours_time', :class => :task_hours, :value => t(@work.hours) %></p>
|
61
61
|
<% end %>
|
62
62
|
|
63
|
-
<% if @work.task.nil? || @work.task.
|
63
|
+
<% if @work.task.nil? || @work.task.enable_invoicing? %>
|
64
64
|
<p style="float: left;"><br/><%= check_box 'work', 'invoice' %><label for="work_invoice"><%=l :invoice%>?</label></p>
|
65
65
|
<% end %>
|
66
66
|
|
67
67
|
<br clear="all"/>
|
68
68
|
|
69
|
-
<% if @work.task.nil? || @work.task.
|
69
|
+
<% if @work.task.nil? || @work.task.track_todo?%>
|
70
70
|
<p><label for="estimate_todo"><%=l :todo%></label><br/>
|
71
71
|
<%= text_field 'estimate', 'todo', :class => :task_hours %>
|
72
72
|
<%= image_tag('checkmark.png', :onclick => "document.forms[0].elements['estimate_todo'].value='0'", :style => 'vertical-align: bottom; height: 24px; float: none')%>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<% @page_title = l(:weekly_work_sheet) + (@period ? " for #{@period}" : '') + (user? ? " for #{user.login}" : '')%>
|
2
2
|
|
3
3
|
<div id="spotlight">
|
4
|
-
<% track_times = @rows.find {|r| r.find {|w| w && w.task.
|
5
|
-
<% invoicing = @rows.find {|r| r.find {|w| w && w.task.
|
4
|
+
<% track_times = @rows.find {|r| r.find {|w| w && w.task.track_times?}} %>
|
5
|
+
<% invoicing = @rows.find {|r| r.find {|w| w && w.task.enable_invoicing?}} %>
|
6
6
|
<% columns = 2 + (track_times ? 2 : 0) + (invoicing ? 1 : 0) %>
|
7
7
|
|
8
8
|
<h1>Work for week <%=@week%><%=user? ? " for #{user.login}" : ''%></h1>
|
data/config/database.yml
CHANGED
data/lang/en.yaml
CHANGED
@@ -8,6 +8,7 @@ back: Back
|
|
8
8
|
backlog: Backlog
|
9
9
|
backlog_description: Task list with ordering and status tracking
|
10
10
|
burn_down_chart: Burn Down Chart
|
11
|
+
change_password: Change Password
|
11
12
|
complete: Complete
|
12
13
|
completed: Completed
|
13
14
|
completed_at: Ended at
|
@@ -27,6 +28,7 @@ end_work: Stop
|
|
27
28
|
estimate: Estimate
|
28
29
|
friday: Friday
|
29
30
|
group: Group
|
31
|
+
groups: Groups
|
30
32
|
home: Home
|
31
33
|
hours: Hours
|
32
34
|
invoice: Invoice
|
@@ -43,11 +45,13 @@ move_to_next_period: Move task to next period
|
|
43
45
|
move_to_top: Move task to top of list
|
44
46
|
name: Name
|
45
47
|
new_backlog: Start new backlog
|
48
|
+
new_group: Start new group
|
46
49
|
new_period: Add new period
|
47
50
|
new_task: Add new task
|
48
51
|
new_work: Add new work record
|
49
52
|
next: Next
|
50
53
|
no_pending_tasks: There are no pending tasks in this period.
|
54
|
+
password: Password
|
51
55
|
period: Period
|
52
56
|
position: Position
|
53
57
|
postponed: Postponed
|
data/lang/no.yaml
CHANGED
@@ -8,6 +8,7 @@ back: Tilbake
|
|
8
8
|
backlog: Oppgaveliste
|
9
9
|
backlog_description: Oppgaveliste med sortering og statussporing
|
10
10
|
burn_down_chart: Fremdriftsgraf
|
11
|
+
change_password: Bytt Passord
|
11
12
|
complete: Fullfør
|
12
13
|
completed: Fullført
|
13
14
|
completed_at: Stop tid
|
@@ -27,6 +28,7 @@ end_work: Stopp
|
|
27
28
|
estimate: Estimat
|
28
29
|
friday: Fredag
|
29
30
|
group: Gruppe
|
31
|
+
groups: Grupper
|
30
32
|
home: Hjem
|
31
33
|
hours: Timer
|
32
34
|
invoice: Fakturerbart
|
@@ -39,15 +41,17 @@ main_backlog: Hovedliste
|
|
39
41
|
members: Medlemmer
|
40
42
|
monday: Mandag
|
41
43
|
move_to_bottom: Flytt oppgaven til slutten av listen
|
42
|
-
move_to_next_period: Flytt oppgaven til
|
44
|
+
move_to_next_period: Flytt oppgaven til neste periode
|
43
45
|
move_to_top: Flytt oppgaven til toppen av listen
|
44
46
|
name: Navn
|
45
47
|
new_backlog: Start ny oppgaveliste
|
48
|
+
new_group: Start ny gruppe
|
46
49
|
new_period: Start ny periode
|
47
50
|
new_task: Legg til ny oppgave
|
48
51
|
new_work: Registrer arbeid
|
49
52
|
next: Neste
|
50
53
|
no_pending_tasks: Det er ingen ventende oppgaver i denne perioden.
|
54
|
+
password: Passord
|
51
55
|
period: Periode
|
52
56
|
position: Posisjon
|
53
57
|
postponed: Utsatt
|
data/lib/user_system.rb
CHANGED
@@ -7,7 +7,12 @@ module UserSystem
|
|
7
7
|
# before_filter :authenticate_user
|
8
8
|
#
|
9
9
|
def authenticate_user
|
10
|
-
|
10
|
+
if authenticated_user = authenticated_user?
|
11
|
+
self.current_user = authenticated_user
|
12
|
+
return true
|
13
|
+
end
|
14
|
+
session[:user_id] = nil
|
15
|
+
Thread.current[:user] = nil
|
11
16
|
store_detour_from_params
|
12
17
|
access_denied
|
13
18
|
return false
|
@@ -33,9 +38,9 @@ module UserSystem
|
|
33
38
|
|
34
39
|
def authenticated_user?
|
35
40
|
if session[:user_id]
|
36
|
-
|
37
|
-
return
|
38
|
-
session[:user_id]
|
41
|
+
current_user = User.find_by_id(session[:user_id])
|
42
|
+
return current_user if current_user
|
43
|
+
session[:user_id] = nil
|
39
44
|
end
|
40
45
|
|
41
46
|
if cookie = cookies[:autologin]
|
@@ -47,11 +52,8 @@ module UserSystem
|
|
47
52
|
else
|
48
53
|
raise "Unknown cookie class: #{cookie.class}"
|
49
54
|
end
|
50
|
-
|
51
|
-
if
|
52
|
-
session[:user_id] = @current_user.id
|
53
|
-
return true
|
54
|
-
end
|
55
|
+
cookie_user = User.authenticate(cookie_value, '')
|
56
|
+
return cookie_user if cookie_user
|
55
57
|
end
|
56
58
|
|
57
59
|
# If not, is the user being authenticated by a token (created by signup/forgot password actions)?
|
@@ -59,12 +61,20 @@ module UserSystem
|
|
59
61
|
id = params['user']['id']
|
60
62
|
key = params['key']
|
61
63
|
if id and key
|
62
|
-
|
63
|
-
session[:user_id] = @current_user ? @current_user.id : nil
|
64
|
-
return true if not @current_user.nil?
|
64
|
+
return current_user if current_user = User.authenticate_by_token(id, key)
|
65
65
|
end
|
66
66
|
|
67
67
|
# Everything failed
|
68
68
|
return false
|
69
69
|
end
|
70
|
+
|
71
|
+
def current_user
|
72
|
+
Thread.current[:user]
|
73
|
+
end
|
74
|
+
|
75
|
+
def current_user= user
|
76
|
+
session[:user_id] = user && user.id
|
77
|
+
Thread.current[:user] = user
|
78
|
+
end
|
79
|
+
|
70
80
|
end
|
Binary file
|
File without changes
|
@@ -24,6 +24,24 @@ class TasksControllerTest < Test::Unit::TestCase
|
|
24
24
|
assert_redirected_to :controller => 'backlogs'
|
25
25
|
end
|
26
26
|
|
27
|
+
def test_list_started
|
28
|
+
get :list_started, :id => '1'
|
29
|
+
assert_response :success
|
30
|
+
assert_template 'list_started'
|
31
|
+
|
32
|
+
assert_not_nil assigns(:tasks)
|
33
|
+
assert_not_nil assigns(:selected_task)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_list_started_no_selected_task
|
37
|
+
get :list_started
|
38
|
+
assert_response :success
|
39
|
+
assert_template 'list_started'
|
40
|
+
|
41
|
+
assert_not_nil assigns(:tasks)
|
42
|
+
assert_nil assigns(:selected_task)
|
43
|
+
end
|
44
|
+
|
27
45
|
def test_new
|
28
46
|
get :new
|
29
47
|
|
@@ -100,7 +118,7 @@ class TasksControllerTest < Test::Unit::TestCase
|
|
100
118
|
assert_response :redirect
|
101
119
|
assert_redirected_to :controller => 'periods',
|
102
120
|
:action => :new,
|
103
|
-
:party_id => 1
|
121
|
+
:period => {:party_id => 1}
|
104
122
|
|
105
123
|
after = Task.find(2)
|
106
124
|
assert_equal 2, before.period_id
|
@@ -241,7 +241,7 @@ class UserControllerTest < Test::Unit::TestCase
|
|
241
241
|
|
242
242
|
def assert_logged_in( user )
|
243
243
|
assert_equal user.id, @request.session[:user_id]
|
244
|
-
assert_equal user,
|
244
|
+
assert_equal user, Thread.current[:user]
|
245
245
|
end
|
246
246
|
|
247
247
|
def assert_not_logged_in
|
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-07-
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2007-07-31 00:00:00 +02:00
|
8
8
|
summary: The author was too lazy to write a summary
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -44,13 +44,13 @@ files:
|
|
44
44
|
- public/images/arrow_right.svg
|
45
45
|
- public/images/arrow_down.png
|
46
46
|
- public/images/eraser_org.png
|
47
|
-
- public/images/person.png
|
48
47
|
- public/images/period.png
|
49
48
|
- public/images/arrow_right.png
|
50
49
|
- public/images/construction_hammer_jon__01.svg
|
51
50
|
- public/images/arrow_down.svg
|
52
51
|
- public/images/checkmark_org.png
|
53
52
|
- public/images/pagebak.jpg
|
53
|
+
- public/images/group.png
|
54
54
|
- public/images/tabella_architetto_franc_01.svg
|
55
55
|
- public/images/header.jpg
|
56
56
|
- public/images/rails.png
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- public/images/blank.jpg
|
63
63
|
- public/images/period_org.png
|
64
64
|
- public/images/arrow07_4.png
|
65
|
+
- public/images/user.png
|
65
66
|
- public/images/arrow07_2.png
|
66
67
|
- public/images/appunti_architetto_franc_01.svg
|
67
68
|
- public/images/eraser.png
|
@@ -225,6 +226,7 @@ files:
|
|
225
226
|
- config/environments/datek_production.rb
|
226
227
|
- LICENSE_LOCALIZATION
|
227
228
|
- README.txt
|
229
|
+
- doc
|
228
230
|
- Manifest.txt
|
229
231
|
- vendor
|
230
232
|
- vendor/plugins
|