backlog 0.36.2 → 0.37.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (250) hide show
  1. data/Gemfile +16 -4
  2. data/Gemfile.lock +130 -0
  3. data/History.txt +17 -0
  4. data/README.txt +0 -2
  5. data/Rakefile +17 -7
  6. data/app/controllers/absences_controller.rb +1 -2
  7. data/app/controllers/application_controller.rb +13 -14
  8. data/app/controllers/application_controller.rb.rails2 +186 -0
  9. data/app/controllers/estimates_controller.rb +1 -1
  10. data/app/controllers/groups_controller.rb +3 -1
  11. data/app/controllers/periods_controller.rb +61 -50
  12. data/app/controllers/{backlogs_controller.rb → projects_controller.rb} +35 -35
  13. data/app/controllers/search_controller.rb +2 -2
  14. data/app/controllers/tasks_controller.rb +11 -11
  15. data/app/controllers/user_controller.rb +6 -4
  16. data/app/controllers/welcome_controller.rb +4 -4
  17. data/app/controllers/work_locks_controller.rb +2 -2
  18. data/app/controllers/works_controller.rb +31 -31
  19. data/app/helpers/application_helper.rb +2 -2
  20. data/app/helpers/application_helper.rb.rails2 +118 -0
  21. data/app/helpers/periods_helper.rb +3 -3
  22. data/app/helpers/{backlogs_helper.rb → projects_helper.rb} +5 -5
  23. data/app/helpers/user_helper.rb +2 -2
  24. data/app/{models → mailers}/user_notify.rb +1 -0
  25. data/app/models/absence.rb +2 -2
  26. data/{lib → app/models}/clock.rb +0 -0
  27. data/app/models/estimate.rb +2 -2
  28. data/app/models/party.rb +1 -2
  29. data/app/models/period.rb +17 -18
  30. data/app/models/{backlog.rb → project.rb} +2 -2
  31. data/app/models/sidebar.rb +2 -2
  32. data/app/models/task.rb +28 -28
  33. data/app/models/user.rb +5 -4
  34. data/app/models/work.rb +29 -23
  35. data/app/models/work_lock_nagger.rb +1 -1
  36. data/app/models/works_report_filter.rb +4 -4
  37. data/app/views/customers/_name_list.rhtml +1 -1
  38. data/app/views/layouts/_headers.rhtml +2 -1
  39. data/app/views/layouts/_left_top.rhtml +32 -29
  40. data/app/views/layouts/_shortcuts.rhtml +15 -9
  41. data/app/views/layouts/_shortcuts_js.rhtml +4 -4
  42. data/app/views/layouts/mwrt002.html.erb +44 -0
  43. data/app/views/periods/_burn_down_chart.rhtml +1 -1
  44. data/app/views/periods/_show_active.rhtml +3 -3
  45. data/app/views/periods/_title.rhtml +1 -1
  46. data/app/views/{backlogs → projects}/_buttons.rhtml +4 -4
  47. data/app/views/projects/_form.rhtml +44 -0
  48. data/app/views/projects/_name_list.rhtml +5 -0
  49. data/app/views/projects/edit.rhtml +14 -0
  50. data/app/views/{backlogs → projects}/finish_task.rjs +0 -0
  51. data/app/views/projects/list.rhtml +16 -0
  52. data/app/views/{backlogs → projects}/move_task_to_period.rjs +0 -0
  53. data/app/views/{backlogs → projects}/new.rhtml +1 -1
  54. data/app/views/{backlogs → projects}/reopen_task.rjs +0 -0
  55. data/app/views/{backlogs → projects}/show.rhtml +6 -6
  56. data/app/views/search/results.rhtml +3 -3
  57. data/app/views/tasks/_backlog_header.rhtml +4 -4
  58. data/app/views/tasks/_completed.rhtml +2 -2
  59. data/app/views/tasks/_form.rhtml +13 -13
  60. data/app/views/tasks/_task.rhtml +10 -10
  61. data/app/views/tasks/edit.rhtml +1 -1
  62. data/app/views/tasks/list.rhtml +3 -3
  63. data/app/views/tasks/list_started.rhtml +4 -4
  64. data/app/views/tasks/start_work.rjs +1 -1
  65. data/app/views/user/login.rhtml +1 -1
  66. data/app/views/user/signup.rhtml +1 -1
  67. data/app/views/user/welcome.rhtml +1 -1
  68. data/app/views/works/_description_list.rhtml +1 -1
  69. data/app/views/works/_form.rhtml +5 -5
  70. data/app/views/works/_new_row.rhtml +8 -8
  71. data/app/views/works/_row.rhtml +1 -1
  72. data/app/views/works/_task_id_list.rhtml +1 -1
  73. data/app/views/works/daily_work_sheet.rhtml +1 -1
  74. data/app/views/works/list.rhtml +5 -5
  75. data/app/views/works/list_excel.rhtml +2 -2
  76. data/app/views/works/timeliste.rhtml +14 -14
  77. data/app/views/works/weekly_work_sheet.rhtml +5 -5
  78. data/app/views/works/weekly_work_sheet_details.rhtml +5 -5
  79. data/backlog.gemspec +44 -0
  80. data/bin/backlog +5 -1
  81. data/config.ru +4 -0
  82. data/config/application.rb +10 -0
  83. data/config/boot.rb +12 -116
  84. data/config/database.yml +3 -6
  85. data/config/database.yml~ +17 -0
  86. data/config/environment.rb +28 -49
  87. data/config/environments/development.rb +24 -20
  88. data/config/environments/development.rb.rails2 +26 -0
  89. data/config/environments/production.rb +26 -22
  90. data/config/environments/test.rb +20 -15
  91. data/config/environments/user_environment.rb +1 -1
  92. data/config/initializers/backtrace_silencers.rb +7 -0
  93. data/config/initializers/inflections.rb +10 -0
  94. data/config/initializers/jdbc.rb +1 -1
  95. data/config/initializers/mime_types.rb +5 -0
  96. data/config/initializers/secret_token.rb +7 -0
  97. data/config/initializers/session_store.rb +8 -0
  98. data/config/locales/en.yml +22 -11
  99. data/config/locales/no.yml +1 -0
  100. data/config/routes.rb +4 -5
  101. data/cruise_build.sh +6 -2
  102. data/db/migrate/004_add_period.rb +22 -22
  103. data/db/migrate/015_add_user_option.rb +5 -19
  104. data/db/migrate/017_increase_backlog_name_limit.rb +10 -0
  105. data/db/migrate/021_create_work_accounts.rb +0 -2
  106. data/db/migrate/20101006092700_rename_backlogs_to_projects.rb +22 -0
  107. data/db/migrate/20101006092700_rename_backlogs_to_projects.rb~ +22 -0
  108. data/db/schema.rb +27 -30
  109. data/db/seeds.rb +7 -0
  110. data/lib/array_helper.rb +0 -8
  111. data/lib/class_table_inheritance.rb +8 -7
  112. data/lib/tasks/backup.rake +3 -3
  113. data/lib/tasks/jdbc.rake +2 -2
  114. data/lib/version_from_history.rb +1 -1
  115. data/public/404.html +23 -7
  116. data/public/422.html +26 -0
  117. data/public/500.html +23 -6
  118. data/public/images/rails.png +0 -0
  119. data/public/javascripts/controls.js +5 -3
  120. data/public/javascripts/dragdrop.js +7 -6
  121. data/public/javascripts/effects.js +8 -13
  122. data/public/javascripts/prototype.js +3381 -1700
  123. data/public/javascripts/rails.js +175 -0
  124. data/public/robots.txt +5 -1
  125. data/script/rails +6 -0
  126. data/test/client/login.rb +0 -2
  127. data/test/client/login_test.rb +1 -1
  128. data/test/client/setup.rb +25 -24
  129. data/test/fixtures/{backlogs.yml → projects.yml} +2 -2
  130. data/test/fixtures/tasks.yml +9 -9
  131. data/test/fixtures/work_lock_subscriptions.yml +2 -2
  132. data/test/fixtures/works.yml +7 -7
  133. data/test/functional/periods_controller_test.rb +1 -1
  134. data/test/functional/{backlogs_controller_test.rb → projects_controller_test.rb} +22 -21
  135. data/test/functional/search_controller_test.rb +1 -1
  136. data/test/functional/tasks_controller_test.rb +17 -17
  137. data/test/functional/user_controller_test.rb +16 -21
  138. data/test/functional/welcome_controller_test.rb +4 -3
  139. data/test/functional/works_controller_test.rb +5 -5
  140. data/test/integration/user_system_test.rb +1 -1
  141. data/test/mocks/test/clock.rb +1 -1
  142. data/test/performance/browsing_test.rb +9 -0
  143. data/test/performance/common.rb +1 -1
  144. data/test/test_helper.rb +23 -6
  145. data/test/test_helper.rb~ +121 -0
  146. data/test/unit/user_test.rb +3 -3
  147. data/test/unit/work_test.rb +7 -7
  148. data/vendor/plugins/assert_cookie/lib/assert_cookie.rb +0 -2
  149. data/vendor/plugins/{foreign_key_migrations → dynamic_form}/MIT-LICENSE +1 -1
  150. data/vendor/plugins/dynamic_form/README +13 -0
  151. data/vendor/plugins/dynamic_form/Rakefile +10 -0
  152. data/vendor/plugins/dynamic_form/dynamic_form.gemspec +12 -0
  153. data/vendor/plugins/dynamic_form/init.rb +1 -0
  154. data/vendor/plugins/dynamic_form/lib/action_view/helpers/dynamic_form.rb +300 -0
  155. data/vendor/plugins/dynamic_form/lib/action_view/locale/en.yml +8 -0
  156. data/vendor/plugins/dynamic_form/lib/dynamic_form.rb +5 -0
  157. data/vendor/plugins/dynamic_form/test/dynamic_form_i18n_test.rb +42 -0
  158. data/vendor/plugins/dynamic_form/test/dynamic_form_test.rb +370 -0
  159. data/vendor/plugins/dynamic_form/test/test_helper.rb +9 -0
  160. data/vendor/plugins/prototype_legacy_helper/lib/prototype_legacy_helper.rb +432 -0
  161. data/vendor/plugins/prototype_legacy_helper/test/test_prototype_helper.rb +297 -0
  162. data/vendor/plugins/rails_time/test/debug.log +1 -0
  163. data/vendor/plugins/{redhillonrails_core → verification}/MIT-LICENSE +1 -1
  164. data/vendor/plugins/verification/README +34 -0
  165. data/vendor/plugins/verification/Rakefile +22 -0
  166. data/vendor/plugins/verification/init.rb +3 -0
  167. data/vendor/plugins/verification/lib/action_controller/verification.rb +132 -0
  168. data/vendor/plugins/verification/test/test_helper.rb +18 -0
  169. data/vendor/plugins/verification/test/verification_test.rb +270 -0
  170. data/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +1 -1
  171. metadata +115 -134
  172. data/Gemfile~ +0 -4
  173. data/History.txt~ +0 -961
  174. data/LICENSE_LOCALIZATION +0 -20
  175. data/README_LOCALIZATION +0 -61
  176. data/README_RAILS +0 -180
  177. data/app/views/backlogs/_form.rhtml +0 -44
  178. data/app/views/backlogs/_name_list.rhtml +0 -5
  179. data/app/views/backlogs/edit.rhtml +0 -14
  180. data/app/views/backlogs/list.rhtml +0 -16
  181. data/app/views/layouts/mwrt002.rhtml +0 -43
  182. data/config/initializers/mongrel.rb +0 -83
  183. data/config/preinitializer.rb +0 -20
  184. data/config/warble.rb~ +0 -84
  185. data/db/migrate/017_insert_datek_projects.rb +0 -98
  186. data/lib/change_column_null_migration_fix.rb +0 -15
  187. data/no_test.rb~ +0 -6
  188. data/public/dispatch.cgi +0 -10
  189. data/public/dispatch.fcgi +0 -24
  190. data/public/dispatch.rb +0 -10
  191. data/script/about +0 -3
  192. data/script/breakpointer +0 -3
  193. data/script/console +0 -3
  194. data/script/dbconsole +0 -3
  195. data/script/destroy +0 -3
  196. data/script/generate +0 -3
  197. data/script/performance/benchmarker +0 -3
  198. data/script/performance/profiler +0 -3
  199. data/script/plugin +0 -3
  200. data/script/process/inspector +0 -3
  201. data/script/process/reaper +0 -3
  202. data/script/process/spawner +0 -3
  203. data/script/runner +0 -3
  204. data/script/server +0 -3
  205. data/test/client/login.rb~ +0 -33
  206. data/test/mocks/test/user_notify.rb +0 -16
  207. data/vendor/plugins/foreign_key_migrations/CHANGELOG +0 -103
  208. data/vendor/plugins/foreign_key_migrations/README +0 -87
  209. data/vendor/plugins/foreign_key_migrations/about.yml +0 -5
  210. data/vendor/plugins/foreign_key_migrations/init.rb +0 -1
  211. data/vendor/plugins/foreign_key_migrations/install.rb +0 -1
  212. data/vendor/plugins/foreign_key_migrations/lib/foreign_key_migrations.rb +0 -3
  213. data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/base.rb +0 -22
  214. data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/abstract_adapter.rb +0 -22
  215. data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/table_definition.rb +0 -28
  216. data/vendor/plugins/lightwindow_helper/README +0 -33
  217. data/vendor/plugins/lightwindow_helper/assets/images/ajax-loading.gif +0 -0
  218. data/vendor/plugins/lightwindow_helper/assets/images/arrow-down.gif +0 -0
  219. data/vendor/plugins/lightwindow_helper/assets/images/arrow-up.gif +0 -0
  220. data/vendor/plugins/lightwindow_helper/assets/images/black-70.png +0 -0
  221. data/vendor/plugins/lightwindow_helper/assets/images/black.png +0 -0
  222. data/vendor/plugins/lightwindow_helper/assets/images/nextlabel.gif +0 -0
  223. data/vendor/plugins/lightwindow_helper/assets/images/prevlabel.gif +0 -0
  224. data/vendor/plugins/lightwindow_helper/assets/javascripts/lightwindow.js +0 -1921
  225. data/vendor/plugins/lightwindow_helper/assets/stylesheets/lightwindow.css +0 -376
  226. data/vendor/plugins/lightwindow_helper/init.rb +0 -1
  227. data/vendor/plugins/lightwindow_helper/install.rb +0 -7
  228. data/vendor/plugins/lightwindow_helper/lib/lightwindow_helper.rb +0 -31
  229. data/vendor/plugins/redhillonrails_core/CHANGELOG +0 -150
  230. data/vendor/plugins/redhillonrails_core/README +0 -124
  231. data/vendor/plugins/redhillonrails_core/init.rb +0 -19
  232. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/base.rb +0 -54
  233. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/abstract_adapter.rb +0 -31
  234. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/column.rb +0 -21
  235. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/foreign_key_definition.rb +0 -26
  236. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/index_definition.rb +0 -11
  237. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_adapter.rb +0 -74
  238. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_column.rb +0 -8
  239. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/postgresql_adapter.rb +0 -99
  240. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/schema_statements.rb +0 -16
  241. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/sqlite3_adapter.rb +0 -9
  242. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/table_definition.rb +0 -27
  243. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema.rb +0 -27
  244. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema_dumper.rb +0 -47
  245. data/vendor/plugins/transactional_migrations/CHANGELOG +0 -9
  246. data/vendor/plugins/transactional_migrations/MIT-LICENSE +0 -20
  247. data/vendor/plugins/transactional_migrations/README +0 -15
  248. data/vendor/plugins/transactional_migrations/about.yml +0 -5
  249. data/vendor/plugins/transactional_migrations/init.rb +0 -1
  250. data/vendor/plugins/transactional_migrations/lib/red_hill_consulting/transactional_migrations/active_record/migration.rb +0 -19
@@ -1,7 +1,7 @@
1
1
  class EstimatesController < ApplicationController
2
2
  helper :tasks
3
3
 
4
- verify :method => :post, :redirect_to => ''
4
+ verify :method => :post, :redirect_to => '/'
5
5
 
6
6
  def create
7
7
  @success, flash[:notice] = do_create
@@ -45,7 +45,9 @@ class GroupsController < ApplicationController
45
45
  end
46
46
 
47
47
  def destroy
48
- Group.find(params[:id]).destroy
48
+ group = Group.find(params[:id])
49
+ group.users.delete_all
50
+ group.destroy
49
51
  redirect_to :action => 'list'
50
52
  end
51
53
 
@@ -1,22 +1,22 @@
1
1
  class PeriodsController < ApplicationController
2
2
  skip_before_filter :populate_layout, :only => [:index, :show_no_layout, :destroy, :burn_down_chart_thumbnail, :burn_down_chart]
3
3
  skip_before_filter :authenticate_user, :only => [:burn_down_chart, :burn_down_chart_thumbnail, :burn_down_chart_large]
4
-
4
+
5
5
  def index
6
- active_periods = Period.find(:all).select {|period| period.active?(true)}
7
- my_active_periods = active_periods.select {|period| period.party.includes?(current_user)}
6
+ active_periods = Period.find(:all).select { |period| period.active?(true) }
7
+ my_active_periods = active_periods.select { |period| period.party.includes?(current_user) }
8
8
  unless my_active_periods.empty?
9
- most_urgent_period = my_active_periods.sort_by {|p| p.required_speed}.last
9
+ most_urgent_period = my_active_periods.sort_by { |p| p.required_speed }.last
10
10
  else
11
- most_urgent_period = active_periods.sort_by {|p| p.required_speed}.last
11
+ most_urgent_period = active_periods.sort_by { |p| p.required_speed }.last
12
12
  end
13
13
  flash.keep
14
14
  redirect_to :action => 'show', :id => most_urgent_period
15
15
  end
16
-
16
+
17
17
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
18
- verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :action => :index }
19
-
18
+ verify :method => :post, :only => [:destroy, :create, :update], :redirect_to => {:action => :index}
19
+
20
20
  def show
21
21
  if params[:task_id]
22
22
  @selected_task = Task.find(params[:task_id])
@@ -24,7 +24,7 @@ class PeriodsController < ApplicationController
24
24
  if @selected_task
25
25
  @period = @selected_task.period
26
26
  if @period.nil?
27
- redirect_to :controller => 'backlogs', :action => :show, :id => @selected_task.backlog.id
27
+ redirect_to :controller => 'projects', :action => :show, :id => @selected_task.project.id
28
28
  return
29
29
  end
30
30
  elsif params[:id] && @period = Period.find_by_id(params[:id])
@@ -41,27 +41,27 @@ class PeriodsController < ApplicationController
41
41
  @show_only_grabbed_tasks = session['show_only_grabbed_tasks'] == 'true'
42
42
  load_tasks(@period)
43
43
  end
44
-
44
+
45
45
  def show_no_layout
46
46
  show
47
47
  render :partial => 'show_active', :layout => false, :locals => {:i => 0}
48
48
  end
49
-
49
+
50
50
  def new
51
51
  @period = Period.new
52
52
  if params[:period] && params[:period][:party_id]
53
53
  @period.party_id = params[:period][:party_id]
54
- previous = @period.party.periods.last
54
+ previous = @period.party.periods.last
55
55
  if previous
56
56
  @period.start_on = previous.end_on + 1
57
- @period.end_on = previous.end_on + (1 + (previous.end_on - previous.start_on))
57
+ @period.end_on = previous.end_on + (1 + (previous.end_on - previous.start_on))
58
58
  else
59
59
  @period.start_on = Date.today
60
60
  end
61
61
  end
62
62
  @parties = Party.find(:all)
63
63
  end
64
-
64
+
65
65
  def create
66
66
  @period = Period.new(params[:period])
67
67
  if @period.save
@@ -72,11 +72,11 @@ class PeriodsController < ApplicationController
72
72
  render :action => 'new'
73
73
  end
74
74
  end
75
-
75
+
76
76
  def edit
77
77
  @period = Period.find(params[:id])
78
78
  end
79
-
79
+
80
80
  def update
81
81
  @period = Period.find(params[:id])
82
82
  if @period.update_attributes(params[:period])
@@ -86,36 +86,40 @@ class PeriodsController < ApplicationController
86
86
  render :action => 'edit'
87
87
  end
88
88
  end
89
-
89
+
90
90
  def destroy
91
91
  Period.find(params[:id]).destroy
92
92
  flash[:notice] = 'Period was successfully deleted.'
93
93
  redirect_to :action => 'index'
94
94
  end
95
-
95
+
96
96
  def burn_down_chart_thumbnail
97
97
  send_burn_down_chart Chart::THUMBNAIL
98
98
  end
99
-
99
+
100
100
  def burn_down_chart
101
101
  send_burn_down_chart Chart::NORMAL
102
102
  end
103
-
103
+
104
104
  def burn_down_chart_large
105
105
  send_burn_down_chart Chart::LARGE
106
106
  end
107
-
107
+
108
108
  def list_work
109
109
  if @period = Period.find_by_id(params[:id])
110
- @works = @period.tasks.map {|t| t.works}.flatten.sort_by {|w| [w.completed_at || Time.now.midnight, w.started_on, w.start_time]}
111
- def @works.page_count; size / 25; end
110
+ @works = @period.tasks.map { |t| t.works }.flatten.sort_by { |w| [w.completed_at || Time.now.midnight, w.started_on, w.start_time] }
111
+
112
+ def @works.page_count;
113
+ size / 25;
114
+ end
115
+
112
116
  render :template => '/works/list'
113
117
  else
114
118
  flash[:notice] = "You need to provide a period ID"
115
119
  redirect_to ''
116
120
  end
117
121
  end
118
-
122
+
119
123
  def make_link
120
124
  if params[:id].to_i > 0
121
125
  render :partial => 'link', :layout => false, :locals => {:period => Period.find(params[:id])}
@@ -123,7 +127,7 @@ class PeriodsController < ApplicationController
123
127
  render :text => ''
124
128
  end
125
129
  end
126
-
130
+
127
131
  def move_task_to_period
128
132
  params[:id] = $1 if params[:id] =~ /^task_(\d*)/
129
133
  @task = Task.find(params[:id])
@@ -139,42 +143,49 @@ class PeriodsController < ApplicationController
139
143
  redirect_to :action => :show, :id => @task.period, :task_id => @task.id, :layout => false
140
144
  end
141
145
  else
142
- rjs_detour_to :action => :new, :period => {:party_id => @task.period.party_id}, :layout => false
146
+ if @task.period
147
+ rjs_detour_to :action => :new, :period => {:party_id => @task.period.party_id}, :layout => false
148
+ else
149
+ rjs_redirect_to :controller => :tasks, :action => :edit, :id => @task.id, :layout => false
150
+ end
143
151
  end
144
152
  else
145
153
  redirect_to :action => :show, :id => @task.period, :task_id => @task.id, :layout => false
146
154
  end
147
155
  end
148
-
156
+
149
157
  def move_task_to_next_period
150
158
  @task = Task.find(params[:id])
151
- next_period = @task.period.lower_item
152
- next_period = next_period.lower_item while next_period && next_period.passed?
153
- params[:period_id] = next_period && next_period.id
159
+ if @task.period
160
+ next_period = @task.period.lower_item
161
+ next_period = next_period.lower_item while next_period && next_period.passed?
162
+ params[:period_id] = next_period && next_period.id
163
+ end
154
164
  move_task_to_period
155
165
  end
156
-
166
+
157
167
  def finish_task
158
168
  @task = Task.find(params[:id])
159
169
  @task.finish(Task::COMPLETED, true)
160
170
  load_tasks(@task.period)
161
171
  end
162
-
172
+
163
173
  def abort_task
164
174
  @task = Task.find params[:id]
165
175
  @task.abort
166
176
  load_tasks(@task.period)
167
177
  render :action => :finish_task, :layout => false
168
178
  end
169
-
179
+
170
180
  def reopen_task
171
181
  @task = Task.find(params[:id])
172
182
  @task.reopen
173
183
  @task.reload
174
184
  finished_count = Task.count(:conditions => ['period_id = ? AND finished_at IS NOT NULL', @task.period_id])
175
185
  @last_finished = finished_count == 0
186
+ load_tasks(@task.period)
176
187
  end
177
-
188
+
178
189
  def update_task_estimate
179
190
  if params[:id]
180
191
  @task = Task.find_by_id(params[:id])
@@ -184,7 +195,7 @@ class PeriodsController < ApplicationController
184
195
  @task.estimate(params[:estimate][:todo])
185
196
  @period = @task.period
186
197
  @success, flash[:notice] = true, 'Estimate updated'
187
- rescue ArgumentError => e
198
+ rescue ArgumentError => e
188
199
  @success, flash[:notice] = false, "Estimate was not numeric"
189
200
  end
190
201
  if @task.finished?
@@ -201,31 +212,31 @@ class PeriodsController < ApplicationController
201
212
  return false, 'Task id is missing.'
202
213
  end
203
214
  end
204
-
215
+
205
216
  def order
206
- if params.keys.find {|k| k =~ /active_tasks_(.*)/}
207
- period_id = $1
208
- ids = params["active_tasks_#{period_id}"]
209
- tasks = ids.select {|id| not id.empty?}
210
- tasks.each_with_index do |id,idx|
211
- task = Task.find(id)
212
- task.insert_at(idx + 1)
213
- task.save!
214
- end
217
+ if params.keys.find { |k| k =~ /active_tasks_(.*)/ }
218
+ period_id = $1
219
+ ids = params["active_tasks_#{period_id}"]
220
+ tasks = ids.select { |id| not id.empty? }
221
+ tasks.each_with_index do |id, idx|
222
+ task = Task.find(id)
223
+ task.insert_at(idx + 1)
224
+ task.save!
225
+ end
215
226
  end
216
227
  end
217
228
 
218
229
  private
219
-
230
+
220
231
  def send_burn_down_chart(size)
221
232
  period = Period.find(params[:id])
222
- g = period.burn_down_graph(size)
233
+ g = period.burn_down_graph(size)
223
234
  send_data(g, :disposition => 'inline', :type => 'image/png', :filename => "burn_down_chart.png")
224
235
  end
225
-
236
+
226
237
  def load_tasks(period)
227
- @tasks = period.open_tasks
238
+ @tasks = period.open_tasks
228
239
  @completed_tasks = period.completed_tasks.reverse
229
240
  end
230
-
241
+
231
242
  end
@@ -1,9 +1,8 @@
1
- class BacklogsController < ApplicationController
1
+ class ProjectsController < ApplicationController
2
2
  skip_before_filter :populate_layout, :only => [:index, :burn_down_chart, :burn_down_chart_thumbnail, :destroy]
3
3
 
4
4
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
5
- verify :method => :post, :only => [ :destroy, :create, :update ],
6
- :redirect_to => { :action => :index }
5
+ verify :method => :post, :only => [ :destroy, :create, :update ], :redirect_to => { :action => :index }
7
6
 
8
7
  def index
9
8
  flash.keep
@@ -11,30 +10,30 @@ class BacklogsController < ApplicationController
11
10
  redirect_to :controller => 'tasks', :action => :list_started
12
11
  return
13
12
  end
14
- if Backlog.count == 0
13
+ if Project.count == 0
15
14
  redirect_to :action => :new
16
15
  return
17
16
  end
18
- most_urgent_backlog = Backlog.find(:first, :order => :id)
19
- redirect_to :action => :show, :id => most_urgent_backlog.id
17
+ most_urgent_project = Project.find(:first, :order => :id)
18
+ redirect_to :action => :show, :id => most_urgent_project.id
20
19
  end
21
20
 
22
21
  def list
23
- @backlogs = Backlog.find(:all, :order => 'name')
22
+ @projects = Project.find(:all, :order => 'name')
24
23
  end
25
24
 
26
25
  def show
27
26
  if params[:id]
28
- @backlog = Backlog.find(params[:id])
27
+ @project = Project.find(params[:id])
29
28
  end
30
- unless @backlog
31
- @backlog = Backlog.find(:first)
32
- unless @backlog
33
- redirect_to :controller => 'backlogs', :action => :new
29
+ unless @project
30
+ @project = Project.find(:first)
31
+ unless @project
32
+ redirect_to :controller => 'projects', :action => :new
34
33
  return
35
34
  end
36
35
  end
37
- load_tasks(@backlog)
36
+ load_tasks(@project)
38
37
  end
39
38
 
40
39
  def show_no_layout
@@ -43,21 +42,21 @@ class BacklogsController < ApplicationController
43
42
  end
44
43
 
45
44
  def new
46
- @backlog = Backlog.new
45
+ @project = Project.new
47
46
  end
48
47
 
49
48
  def create
50
- @backlog = Backlog.new(params[:backlog])
51
- if @backlog.save
52
- flash[:notice] = 'Backlog was successfully created.'
53
- redirect_to :action => :show, :id => @backlog
49
+ @project = Project.new(params[:project])
50
+ if @project.save
51
+ flash[:notice] = 'Project was successfully created.'
52
+ redirect_to :action => :show, :id => @project
54
53
  else
55
54
  render :action => 'new'
56
55
  end
57
56
  end
58
57
 
59
58
  def edit
60
- @backlog = Backlog.find(params[:id])
59
+ @project = Project.find(params[:id])
61
60
  end
62
61
 
63
62
  def edit_no_layout
@@ -66,18 +65,20 @@ class BacklogsController < ApplicationController
66
65
  end
67
66
 
68
67
  def update
69
- @backlog = Backlog.find(params[:id])
70
- if @backlog.update_attributes(params[:backlog])
71
- flash[:notice] = 'Backlog was successfully updated.'
72
- back_or_redirect_to :action => :show, :id => @backlog
68
+ @project = Project.find(params[:id])
69
+ if @project.update_attributes(params[:project])
70
+ flash[:notice] = 'Project was successfully updated.'
71
+ back_or_redirect_to :action => :show, :id => @project
73
72
  else
74
73
  render :action => 'edit'
75
74
  end
76
75
  end
77
76
 
78
77
  def destroy
79
- Backlog.find(params[:id]).destroy
80
- flash[:notice] = 'Backlog was successfully deleted.'
78
+ project = Project.find(params[:id])
79
+ project.work_lock_subscribers.delete_all
80
+ project.destroy
81
+ flash[:notice] = 'Project was successfully deleted.'
81
82
  redirect_to :action => 'index'
82
83
  end
83
84
 
@@ -94,7 +95,7 @@ class BacklogsController < ApplicationController
94
95
  @success, flash[:notice] = false, "Estimate was not numeric"
95
96
  end
96
97
  if @task.finished?
97
- load_tasks(@task.backlog)
98
+ load_tasks(@task.project)
98
99
  render :action => 'finish_task', :layout => false
99
100
  else
100
101
  render :template => '/tasks/update_estimate', :layout => false
@@ -111,13 +112,13 @@ class BacklogsController < ApplicationController
111
112
  def finish_task
112
113
  @task = Task.find(params[:id])
113
114
  @task.finish(Task::COMPLETED, true)
114
- load_tasks(@task.backlog)
115
+ load_tasks(@task.project)
115
116
  end
116
117
 
117
118
  def abort_task
118
119
  @task = Task.find params[:id]
119
120
  @task.abort
120
- load_tasks(@task.backlog)
121
+ load_tasks(@task.project)
121
122
  render :action => :finish_task, :layout => false
122
123
  end
123
124
 
@@ -129,7 +130,7 @@ class BacklogsController < ApplicationController
129
130
  if period && period.active_or_future?
130
131
  next_task = @task.higher_item ? @task.higher_item : @task.lower_item ? @task.lower_item : @task
131
132
  @task.move_to_period period
132
- load_tasks(@task.backlog)
133
+ load_tasks(@task.project)
133
134
  render :action => :move_task_to_period, :layout => false
134
135
  else
135
136
  rjs_detour_to :controller => 'periods', :action => :new, :period => {:party_id => @task.period.party_id}, :layout => false
@@ -153,7 +154,7 @@ class BacklogsController < ApplicationController
153
154
 
154
155
  def reopen_task
155
156
  @task = Task.find(params[:id]).reopen
156
- load_tasks(@task.backlog)
157
+ load_tasks(@task.project)
157
158
  end
158
159
 
159
160
  def order
@@ -174,12 +175,11 @@ class BacklogsController < ApplicationController
174
175
 
175
176
  private
176
177
 
177
- def load_tasks(backlog)
178
- unplanned_tasks = backlog.tasks.select {|t| t.period.nil? && t.finished_at.nil?}.sort_by {|t| t.position}
179
- planned_tasks = backlog.tasks.select {|t| t.period && t.finished_at.nil?}.sort_by {|t| [t.period.end_on, t.position]}
178
+ def load_tasks(project)
179
+ unplanned_tasks = project.tasks.select {|t| t.period.nil? && t.finished_at.nil?}.sort_by {|t| t.position}
180
+ planned_tasks = project.tasks.select {|t| t.period && t.finished_at.nil?}.sort_by {|t| [t.period.end_on, t.position.to_i]}
180
181
  @tasks = planned_tasks + unplanned_tasks
181
- @completed_tasks = backlog.tasks.select {|t| t.finished_at}.sort {|t1, t2| t2.finished_at <=> t1.finished_at}
182
-
182
+ @completed_tasks = project.tasks.select {|t| t.finished_at}.sort {|t1, t2| t2.finished_at <=> t1.finished_at}
183
183
  end
184
184
 
185
185
  end
@@ -3,11 +3,11 @@ class SearchController < ApplicationController
3
3
  def results
4
4
  if params[:q]
5
5
  @search = params[:q]
6
- @backlogs = Backlog.find(:all, :conditions => ["lower(name) LIKE ?", "%#{@search.downcase}%"])
6
+ @projects = Project.find(:all, :conditions => ["lower(name) LIKE ?", "%#{@search.downcase}%"])
7
7
  @tasks = Task.find(:all, :conditions => ["lower(description) LIKE ? OR lower(notes) LIKE ?", "%#{@search.downcase}%", "%#{@search.downcase}%"])
8
8
  @works = Work.find(:all, :conditions => ["lower(description) LIKE ? OR lower(notes) LIKE ?", "%#{@search.downcase}%", "%#{@search.downcase}%"])
9
9
  else
10
- @backlogs = []
10
+ @projects = []
11
11
  @tasks = []
12
12
  @works = []
13
13
  end