backlog 0.36.2 → 0.37.1

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.
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