backlog 0.10.8 → 0.11.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.
Files changed (86) hide show
  1. data/History.txt +14 -0
  2. data/app/controllers/backlogs_controller.rb +2 -0
  3. data/app/controllers/work_accounts_controller.rb +51 -0
  4. data/app/controllers/works_controller.rb +72 -29
  5. data/app/helpers/application_helper.rb +1 -2
  6. data/app/helpers/work_accounts_helper.rb +2 -0
  7. data/app/models/backlog.rb +10 -3
  8. data/app/models/configuration.rb +2 -0
  9. data/app/models/customer.rb +2 -0
  10. data/app/models/task.rb +26 -5
  11. data/app/models/work.rb +18 -13
  12. data/app/models/work_account.rb +12 -0
  13. data/app/views/backlogs/_form.rhtml +5 -4
  14. data/app/views/layouts/_left_top.rhtml +1 -8
  15. data/app/views/layouts/_notice.rhtml +15 -0
  16. data/app/views/layouts/wide.rhtml +4 -10
  17. data/app/views/tasks/_fields_header.rhtml +1 -1
  18. data/app/views/work_accounts/_form.rhtml +10 -0
  19. data/app/views/work_accounts/_name_list.rhtml +5 -0
  20. data/app/views/work_accounts/edit.rhtml +9 -0
  21. data/app/views/work_accounts/list.rhtml +27 -0
  22. data/app/views/work_accounts/new.rhtml +8 -0
  23. data/app/views/work_accounts/show.rhtml +8 -0
  24. data/app/views/works/_description_list.rhtml +5 -0
  25. data/app/views/works/_form.rhtml +8 -2
  26. data/app/views/works/_row.rhtml +32 -0
  27. data/app/views/works/_row_field.rhtml +3 -0
  28. data/app/views/works/daily_work_sheet.rhtml +35 -59
  29. data/app/views/works/edit.rhtml +1 -1
  30. data/app/views/works/list.rhtml +1 -1
  31. data/app/views/works/timeliste.rhtml +3 -3
  32. data/app/views/works/update_row.rjs +6 -0
  33. data/app/views/works/weekly_work_sheet.rhtml +5 -5
  34. data/bin/backlog +4 -1
  35. data/bin/backlog_init.d +13 -0
  36. data/config/database.yml +0 -4
  37. data/config/environment.rb +1 -1
  38. data/db/backup/backlogs.yml +118 -0
  39. data/db/backup/estimates.yml +7371 -0
  40. data/db/backup/groups.yml +37 -0
  41. data/db/backup/parties.yml +2 -0
  42. data/db/backup/periods.yml +386 -0
  43. data/db/backup/task_files.yml +2 -0
  44. data/db/backup/tasks.yml +15770 -0
  45. data/db/backup/users.yml +209 -0
  46. data/db/backup/works.yml +6203 -0
  47. data/db/migrate/018_create_groups.rb +0 -1
  48. data/db/migrate/021_create_work_accounts.rb +113 -0
  49. data/db/schema.rb +35 -10
  50. data/lang/en.yaml +3 -0
  51. data/lang/no.yaml +3 -0
  52. data/lib/change_column_null_migration_fix.rb +13 -0
  53. data/nbproject/private/config.properties +0 -0
  54. data/nbproject/private/private.properties +1 -0
  55. data/nbproject/private/private.xml +4 -0
  56. data/nbproject/private/rake-t.txt +95 -0
  57. data/nbproject/project.properties +4 -0
  58. data/nbproject/project.xml +9 -0
  59. data/public/Frav/303/246rsskjema.xls +0 -0
  60. data/public/stylesheets/scaffold.css +74 -0
  61. data/test/fixtures/backlogs.yml +2 -0
  62. data/test/fixtures/configurations.yml +5 -0
  63. data/test/fixtures/customers.yml +7 -0
  64. data/test/fixtures/tasks.yml +1 -0
  65. data/test/fixtures/users.yml +3 -5
  66. data/test/fixtures/work_accounts.yml +7 -0
  67. data/test/fixtures/works.yml +11 -0
  68. data/test/functional/backlogs_controller_test.rb +1 -1
  69. data/test/functional/work_accounts_controller_test.rb +93 -0
  70. data/test/functional/works_controller_test.rb +6 -2
  71. data/test/integration/user_system_test.rb +1 -1
  72. data/test/performance/test.rb +4 -1
  73. data/test/unit/configuration_test.rb +10 -0
  74. data/test/unit/customer_test.rb +10 -0
  75. data/test/unit/estimate_test.rb +1 -1
  76. data/test/unit/group_test.rb +1 -1
  77. data/test/unit/period_test.rb +1 -1
  78. data/test/unit/task_file_test.rb +1 -1
  79. data/test/unit/task_test.rb +1 -1
  80. data/test/unit/work_account_test.rb +10 -0
  81. data/test/unit/work_test.rb +1 -1
  82. data/vendor/plugins/goldspike/lib/java_library.rb +5 -11
  83. data/vendor/plugins/goldspike/lib/run.rb +1 -2
  84. data/vendor/plugins/goldspike/lib/war_config.rb +7 -10
  85. metadata +50 -3
  86. data/app/views/tasks/_description_list.rhtml +0 -5
data/History.txt CHANGED
@@ -1,3 +1,17 @@
1
+ == 0.11.0 2007-10-26
2
+
3
+ ===Features
4
+
5
+ * Added work accounts, required for all work records.
6
+ * Allow work records to be entered without task reference.
7
+ * Improved the Daily Work Sheet slightly. STILL EXPERIMENTAL!
8
+
9
+ === Fixes
10
+
11
+ * Added init scripts on unix to start at boot.
12
+ * Now display validation errors on the Works form when editing.
13
+ * Locked the backlog application to Rails 1.2.4 since Rails 1.2.5 broke acts_as_list
14
+
1
15
  == 0.10.8 2007-09-27
2
16
 
3
17
  === Fixes
@@ -46,6 +46,7 @@ class BacklogsController < ApplicationController
46
46
 
47
47
  def new
48
48
  @backlog = Backlog.new
49
+ @work_accounts = WorkAccount.find(:all)
49
50
  end
50
51
 
51
52
  def create
@@ -60,6 +61,7 @@ class BacklogsController < ApplicationController
60
61
 
61
62
  def edit
62
63
  @backlog = Backlog.find(params[:id])
64
+ @work_accounts = WorkAccount.find(:all)
63
65
  end
64
66
 
65
67
  def edit_no_layout
@@ -0,0 +1,51 @@
1
+ class WorkAccountsController < ApplicationController
2
+ def index
3
+ list
4
+ render :action => 'list'
5
+ end
6
+
7
+ # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
8
+ verify :method => :post, :only => [ :destroy, :create, :update ],
9
+ :redirect_to => { :action => :list }
10
+
11
+ def list
12
+ @work_account_pages, @work_accounts = paginate :work_accounts, :per_page => 10
13
+ end
14
+
15
+ def show
16
+ @work_account = WorkAccount.find(params[:id])
17
+ end
18
+
19
+ def new
20
+ @work_account = WorkAccount.new
21
+ end
22
+
23
+ def create
24
+ @work_account = WorkAccount.new(params[:work_account])
25
+ if @work_account.save
26
+ flash[:notice] = 'WorkAccount was successfully created.'
27
+ redirect_to :action => 'list'
28
+ else
29
+ render :action => 'new'
30
+ end
31
+ end
32
+
33
+ def edit
34
+ @work_account = WorkAccount.find(params[:id])
35
+ end
36
+
37
+ def update
38
+ @work_account = WorkAccount.find(params[:id])
39
+ if @work_account.update_attributes(params[:work_account])
40
+ flash[:notice] = 'WorkAccount was successfully updated.'
41
+ redirect_to :action => 'show', :id => @work_account
42
+ else
43
+ render :action => 'edit'
44
+ end
45
+ end
46
+
47
+ def destroy
48
+ WorkAccount.find(params[:id]).destroy
49
+ redirect_to :action => 'list'
50
+ end
51
+ end
@@ -3,7 +3,8 @@ class WorksController < ApplicationController
3
3
  in_place_edit_for :work, :invoice
4
4
  in_place_edit_for :work, :started_at_time
5
5
  in_place_edit_for :work, :completed_at_time
6
- skip_before_filter :populate_layout, :only => [ :set_work_hours, :weekly_work_sheet, :weekly_work_sheet2, :timeliste ]
6
+ skip_before_filter :populate_layout, :only => [ :auto_complete_for_work_description, :daily_work_sheet, :set_work_hours, :timeliste, :weekly_work_sheet, :weekly_work_sheet2 ]
7
+ auto_complete_for :work, :description
7
8
 
8
9
  def index
9
10
  list
@@ -24,36 +25,47 @@ class WorksController < ApplicationController
24
25
  end
25
26
 
26
27
  def new
27
- @work = Work.new(params[:work])
28
- @work.user = user
29
- @estimate = Estimate.new(params[:estimate])
28
+ unless @work
29
+ @work = Work.new(params[:work])
30
+ @work.user = user
31
+ end
32
+ @estimate ||= Estimate.new(params[:estimate])
33
+ @work_accounts = WorkAccount.find(:all, :order => :name)
30
34
  @tasks = Task.find_open
31
35
  @users = User.find(:all)
32
36
  end
33
37
 
34
38
  def create
35
- if params[:work] && params[:work][:backlog_name] && params[:work][:task_description]
36
- backlog = Backlog.find_by_name(params[:work].delete(:backlog_name))
37
- description = params[:work][:task_description]
38
- task = Task.find_by_backlog_id_and_description(backlog.id, description)
39
- params[:work][:task_id] = task.id
40
- params[:work].delete(:task_description)
39
+ if params[:work]
40
+ backlog_name = params[:work].delete(:backlog_name)
41
+ task_description = params[:work].delete(:task_description)
42
+ if backlog_name && backlog_name.size > 0 && task_description && task_description.size > 0
43
+ backlog = Backlog.find_by_name(backlog_name)
44
+ task = backlog.tasks_with_children.find{|t| t.description == task_description}
45
+ params[:work][:task_id] = task.id
46
+ end
47
+ account_name = params[:work].delete(:work_account_name)
48
+ if account_name && account_name.size > 0
49
+ account = WorkAccount.find_by_name(account_name)
50
+ params[:work][:work_account_id] = account.id
51
+ end
41
52
  end
42
53
  convert_hours_param
43
54
  convert_start_time_param
44
55
  @work = Work.new(params[:work])
45
56
  @work.completed_at = Time.now unless @work.completed_at
46
57
  @work.user_id = current_user.id
47
- if @work.save!
58
+ if @work.save
48
59
  flash[:notice] = 'Work was successfully created.'
49
60
  else
61
+ new
50
62
  render :action => 'new'
51
63
  return
52
64
  end
53
65
 
54
- @work.task.estimates.create!(params[:estimate]) if params[:estimate]
66
+ @work.task.estimates.create!(params[:estimate]) if @work.task && params[:estimate]
55
67
 
56
- back_or_redirect_to :controller => 'periods', :action => 'show', :id => @work.task.period, :task_id => @work.task.id
68
+ back_or_redirect_to :controller => 'periods', :action => 'show', :id => @work.task && @work.task.period, :task_id => @work.task && @work.task.id
57
69
  end
58
70
 
59
71
  def edit
@@ -65,27 +77,48 @@ class WorksController < ApplicationController
65
77
  end
66
78
 
67
79
  def update
80
+ if update_work
81
+ back_or_redirect_to :controller => 'periods', :action => 'show', :id => @work.task.period, :task_id => @work.task.id
82
+ else
83
+ @task = @work.task
84
+ edit
85
+ render :action => 'edit'
86
+ end
87
+ end
88
+
89
+ def update_row
90
+ update_work
91
+ flash.discard
92
+ @field = params[:field] || 'started_at_time'
93
+ end
94
+
95
+ def update_work
68
96
  @work = Work.find(params[:id])
69
-
97
+ work = @work
70
98
  convert_start_time_param
71
99
  convert_hours_param
72
100
  if @work.update_attributes(params[:work])
73
101
  flash[:notice] = 'Work was successfully updated.'
74
- if params[:estimate].nil? || (@estimate = @work.task.estimates.create(params[:estimate])).errors.size == 0
75
- back_or_redirect_to :controller => 'periods', :action => 'show', :id => @work.task.period, :task_id => @work.task.id
76
- return
102
+ if @work.task
103
+ if params[:estimate]
104
+ if (@estimate = @work.task.estimates.create(params[:estimate])).errors.size == 0
105
+ return true
106
+ end
107
+ else
108
+ return true
109
+ end
110
+ else
111
+ return true
77
112
  end
78
113
  end
79
- @task = @work.task
80
- edit
81
- render :action => 'edit'
114
+ return false
82
115
  end
83
116
 
84
117
  def destroy
85
118
  work = Work.find(params[:id])
86
- period = work.task.period
119
+ period = work.task && work.task.period
87
120
  work.destroy
88
- redirect_to :controller => 'periods', :action => :list_work, :id => period
121
+ back_or_redirect_to :controller => 'periods', :action => :list_work, :id => period
89
122
  end
90
123
 
91
124
  def daily_work_sheet
@@ -93,6 +126,7 @@ class WorksController < ApplicationController
93
126
  @periods = []
94
127
  @works = Work.find_work_for_day @date
95
128
  @started_works = Task.find_started
129
+ @work = Work.new(:started_at => Time.now, :completed_at => Time.now)
96
130
  render :layout => 'wide'
97
131
  end
98
132
 
@@ -110,6 +144,15 @@ class WorksController < ApplicationController
110
144
  render :layout => false
111
145
  end
112
146
 
147
+ def auto_complete_for_work_work_account_name
148
+ @accounts = WorkAccount.find(:all,
149
+ :conditions => [ 'LOWER(name) LIKE ?',
150
+ '%' + params[:work][:work_account_name].downcase + '%' ],
151
+ :order => 'name ASC',
152
+ :limit => 16)
153
+ render :partial => '/work_accounts/name_list'
154
+ end
155
+
113
156
  def auto_complete_for_work_backlog_name
114
157
  @backlogs = Backlog.find(:all,
115
158
  :conditions => [ 'LOWER(name) LIKE ?',
@@ -121,17 +164,17 @@ class WorksController < ApplicationController
121
164
 
122
165
  def auto_complete_for_work_task_description
123
166
  if backlog_name = params[:backlog_name]
124
- if backlog = Backlog.find_by_name(backlog_name)
125
- backlog_clause = " AND backlog_id = #{backlog.id}"
167
+ if @backlog = Backlog.find_by_name(backlog_name)
168
+ @tasks = @backlog.tasks_with_children.select {|t| t.description.downcase =~ /#{params[:work][:task_description].downcase}/}
126
169
  end
127
170
  end
128
-
129
- @tasks = Task.find(:all,
130
- :conditions => [ "finished_at IS NULL AND LOWER(description) LIKE ?#{backlog_clause}",
131
- '%' + params[:work][:task_description].downcase + '%' ],
171
+ @tasks ||= Task.find(:all,
172
+ :conditions => [ "finished_at IS NULL AND LOWER(description) LIKE ?",
173
+ '%' + params[:work][:task_description].downcase + '%' ],
132
174
  :order => 'description ASC',
133
175
  :limit => 16)
134
- render :partial => '/tasks/description_list'
176
+
177
+ render :partial => 'description_list'
135
178
  end
136
179
 
137
180
  private
@@ -6,8 +6,7 @@ module ApplicationHelper
6
6
  include UrlForFix
7
7
 
8
8
  def image_button_to(image_source, title, options)
9
- html = ''
10
- html += image_submit_tag image_source, :class => 'image-submit', :alt => title, :title => title,
9
+ image_submit_tag image_source, :class => 'image-submit', :alt => title, :title => title,
11
10
  :id => "#{title}_#{options[:id]}", :name => title,
12
11
  :onclick => "form.action='#{url_for(options)}'"
13
12
  end
@@ -0,0 +1,2 @@
1
+ module WorkAccountsHelper
2
+ end
@@ -4,12 +4,11 @@ class Backlog < ActiveRecord::Base
4
4
  validates_uniqueness_of :name
5
5
  validates_inclusion_of :track_todo, :in => [true, false], :allow_nil => true, :message => ActiveRecord::Errors.default_error_messages[:blank]
6
6
  validates_inclusion_of :track_done, :in => [true, false], :allow_nil => true, :message => ActiveRecord::Errors.default_error_messages[:blank]
7
- validates_inclusion_of :track_times, :in => [true, false], :allow_nil => true, :message => ActiveRecord::Errors.default_error_messages[:blank]
8
7
  validates_inclusion_of :enable_subtasks, :in => [true, false], :allow_nil => false, :message => ActiveRecord::Errors.default_error_messages[:blank]
9
8
  validates_inclusion_of :enable_customer, :in => [true, false], :allow_nil => true, :message => ActiveRecord::Errors.default_error_messages[:blank]
10
9
  validates_inclusion_of :enable_users, :in => [true, false], :allow_nil => true, :message => ActiveRecord::Errors.default_error_messages[:blank]
11
- validates_length_of :invoice_code, :allow_nil => true, :maximum => 255
12
10
 
11
+ belongs_to :work_account
13
12
  has_many :tasks, :order => 'period_id, position', :dependent => :destroy
14
13
  has_many :unplanned_tasks, :class_name => 'Task', :conditions => 'period_id IS NULL', :order => 'position'
15
14
 
@@ -21,6 +20,10 @@ class Backlog < ActiveRecord::Base
21
20
  Task.find(:all, :conditions => "period_id = #{periods.first.id} AND (position IS NOT NULL OR finished_at >= '#{1.week.ago.iso8601}')", :order => "position, finished_at")
22
21
  end
23
22
 
23
+ def tasks_with_children
24
+ tasks.map {|t| t.self_with_children}.flatten
25
+ end
26
+
24
27
  def estimate_data(date)
25
28
  total = 0
26
29
  periods.each do |period|
@@ -45,7 +48,11 @@ class Backlog < ActiveRecord::Base
45
48
  end
46
49
 
47
50
  def enable_invoicing?
48
- !invoice_code.nil? && invoice_code.length > 0
51
+ work_account && work_account.invoice_code && work_account.invoice_code.length > 0
52
+ end
53
+
54
+ def track_times?
55
+ work_account && work_account.track_times?
49
56
  end
50
57
 
51
58
  end
@@ -0,0 +1,2 @@
1
+ class Configuration < ActiveRecord::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ class Customer < ActiveRecord::Base
2
+ end
data/app/models/task.rb CHANGED
@@ -10,6 +10,8 @@ class Task < ActiveRecord::Base
10
10
  belongs_to :backlog
11
11
  belongs_to :period
12
12
  belongs_to :ancestor_task, :class_name => 'Task', :foreign_key => 'previous_task_id'
13
+ belongs_to :customer
14
+ belongs_to :work_account
13
15
  has_many :descendant_tasks, :class_name => 'Task', :foreign_key => 'previous_task_id', :dependent => :destroy
14
16
  has_many :estimates, :order => 'created_at', :dependent => :destroy
15
17
  has_many :works, :order => 'completed_at', :dependent => :destroy
@@ -61,6 +63,10 @@ class Task < ActiveRecord::Base
61
63
  return "finished_at >= '#{1.week.ago.iso8601}'"
62
64
  end
63
65
 
66
+ def self_with_children
67
+ [self] << children.map {|t| t.self_with_children}.flatten
68
+ end
69
+
64
70
  def todo
65
71
  estimates.last ? estimates.last.todo : initial_estimate
66
72
  end
@@ -114,9 +120,8 @@ class Task < ActiveRecord::Base
114
120
  if finished_at
115
121
  self.finished_at = nil
116
122
  self.resolution = nil
123
+ self.position = nil
117
124
  insert_at 1
118
- self.position = 1
119
- self.save!
120
125
  estimate(initial_estimate)
121
126
  parent.open if parent
122
127
  end
@@ -160,9 +165,11 @@ class Task < ActiveRecord::Base
160
165
  new_task.period = new_period
161
166
  new_task.description = self.description
162
167
  new_task.initial_estimate = self.initial_estimate
163
- new_task.insert_at 1
164
- new_task.position = 1
168
+ new_task.position = nil
165
169
  new_task.save!
170
+ new_task.insert_at 1
171
+ # new_task.position = 1
172
+ # new_task.save!
166
173
  new_task.estimate(old_todo)
167
174
  end
168
175
  else
@@ -238,7 +245,7 @@ class Task < ActiveRecord::Base
238
245
  end
239
246
 
240
247
  def track_times?
241
- root_task.backlog.track_times?
248
+ work_account && work_account.track_times?
242
249
  end
243
250
 
244
251
  def track_todo?
@@ -266,6 +273,16 @@ class Task < ActiveRecord::Base
266
273
  old_period || root_task.old_period
267
274
  end
268
275
 
276
+ alias_method :old_backlog, :backlog
277
+ def backlog
278
+ old_backlog || root_task.old_backlog
279
+ end
280
+
281
+ alias_method :old_work_account, :work_account
282
+ def work_account
283
+ self.old_work_account || (parent ? parent.work_account : backlog.work_account)
284
+ end
285
+
269
286
  def depth
270
287
  root_task = self
271
288
  depth = 0
@@ -309,7 +326,10 @@ class Task < ActiveRecord::Base
309
326
  return if work_started?
310
327
  open
311
328
  new_work = works.new
329
+
330
+ # TODO (uwe): Only needed for rails 1.2.x branch. Remove when moving to 1.3 or 2.0.
312
331
  new_work.task = self
332
+
313
333
  new_work.started_at = Time.previous_quarter
314
334
  if works.size > 0
315
335
  if current_user
@@ -323,6 +343,7 @@ class Task < ActiveRecord::Base
323
343
  end
324
344
  end
325
345
  new_work.user = current_user
346
+ new_work.work_account_id = work_account.id
326
347
  new_work.save!
327
348
  end
328
349
 
data/app/models/work.rb CHANGED
@@ -4,18 +4,23 @@ class Work < ActiveRecord::Base
4
4
 
5
5
  belongs_to :task
6
6
  belongs_to :user
7
+ belongs_to :work_account
7
8
 
8
- validates_presence_of :task_id
9
9
  validates_associated :task
10
10
  validates_presence_of :started_at
11
- validates_presence_of :user_id, :if => :validate_user?
11
+ validates_presence_of :work_account
12
12
 
13
- def validate_user?
14
- task.enable_users?
13
+ def validate
14
+ errors.add(:work, "Work account is missing") unless work_account
15
+ end
16
+
17
+ alias_method :old_work_account, :work_account
18
+ def work_account
19
+ self.old_work_account || (task && task.work_account)
15
20
  end
16
21
 
17
22
  def track_times?
18
- task.backlog.track_times?
23
+ task && task.backlog && task.backlog.track_times?
19
24
  end
20
25
 
21
26
  # Return an array with an array of works per day:
@@ -48,24 +53,24 @@ class Work < ActiveRecord::Base
48
53
  first = Date.commercial(Date.today.year, week_no, 1)
49
54
  last = first + 7
50
55
  works = find(:all, :conditions => "completed_at IS NOT NULL AND started_at BETWEEN '#{first.to_time.iso8601}' AND '#{last.to_time.iso8601}'", :order => 'started_at')
51
- totals_per_backlog = {}
52
- Backlog.find(:all).each do |backlog|
53
- totals_per_backlog[backlog.id] = [[], []]
56
+ totals_per_work_account = {}
57
+ WorkAccount.find(:all).each do |work_account|
58
+ totals_per_work_account[work_account.id] = [[], []]
54
59
  (0..6).each do |day|
55
- works_for_day = works.select {|work| (work.task.backlog == backlog) && (work.started_at.to_date == (first + day)) && (work.user_id.nil? || (user && work.user_id == user.id)) }
60
+ works_for_day = works.select {|work| (work.work_account == work_account) && (work.started_at.to_date == (first + day)) && (work.user_id.nil? || (user && work.user_id == user.id)) }
56
61
  invoice_works_for_day = works_for_day.select {|work| work.invoice? }
57
62
  internal_works_for_day = works_for_day.select {|work| !work.invoice? }
58
63
 
59
64
  invoice_day_total = invoice_works_for_day.reduce(BigDecimal('0')){|total, work| total += work.hours}
60
65
  internal_day_total = internal_works_for_day.reduce(BigDecimal('0')){|total, work| total += work.hours}
61
- totals_per_backlog[backlog.id][0] << invoice_day_total
62
- totals_per_backlog[backlog.id][1] << internal_day_total
66
+ totals_per_work_account[work_account.id][0] << invoice_day_total
67
+ totals_per_work_account[work_account.id][1] << internal_day_total
63
68
  end
64
69
  end
65
- totals_per_backlog.reject! do |backlog_id, day_totals|
70
+ totals_per_work_account.reject! do |work_account_id, day_totals|
66
71
  !day_totals[0].find{|day_total| day_total > 0} && !day_totals[1].find{|day_total| day_total > 0}
67
72
  end
68
- totals_per_backlog
73
+ totals_per_work_account
69
74
  end
70
75
 
71
76
  def self.find_work_for_day date