backlog 0.14.2 → 0.14.3

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,19 @@
1
+ == 0.14.3 2007-11-20
2
+
3
+ === Features
4
+
5
+ * Speedup of Burn Down Charts.
6
+ * Added link to add new work account when recording work.
7
+
8
+ === Fixes
9
+
10
+ * Fixed bug for weekly work sheet with invoicing.
11
+ * Fixed bug in Edit Group view. The wrong burn down chart was shown.
12
+
13
+ === Internal
14
+
15
+ * Removed unused code for backlog charts.
16
+
1
17
  == 0.14.2 2007-11-19
2
18
 
3
19
  === Features
@@ -82,14 +82,6 @@ class BacklogsController < ApplicationController
82
82
  redirect_to :action => 'index'
83
83
  end
84
84
 
85
- def burn_down_chart_thumbnail
86
- send_burn_down_chart 270
87
- end
88
-
89
- def burn_down_chart
90
- send_burn_down_chart 640
91
- end
92
-
93
85
  def update_task_estimate
94
86
  if params[:id]
95
87
  @task = Task.find_by_id(params[:id])
@@ -175,42 +167,4 @@ class BacklogsController < ApplicationController
175
167
 
176
168
  end
177
169
 
178
- def send_burn_down_chart(size)
179
- backlog = Backlog.find(params[:id])
180
- g = Gruff::Line.new(size)
181
- g.theme_37signals
182
- g.title = "Burn Down Graph"
183
- g.font = '/usr/share/fonts/bitstream-vera/Vera.ttf'
184
- g.hide_dots = true
185
- g.colors = %w{blue green}
186
-
187
- dates = []
188
- backlog.periods.first.start_on.upto(backlog.periods.last.end_on) {|date| dates << date}
189
-
190
- g.data(l(:todo), get_todo_data(dates, backlog))
191
- g.data(l(:done), get_work_data(dates, backlog))
192
- g.minimum_value = 0
193
-
194
- labels = {0 => dates.first.to_s, dates.length-1 => dates.last.to_s}
195
- labels.merge({dates.index(Date.today) => Date.today.to_s}) if (dates.index(Date.today).to_f / dates.length) > 0.15
196
- g.labels = labels
197
-
198
- send_data(g.to_blob,
199
- :disposition => 'inline',
200
- :type => 'image/png',
201
- :filename => "burn_down_chart.png")
202
- end
203
-
204
- def get_todo_data(dates, backlog)
205
- dates.map do |date|
206
- backlog.get_estimate_data(date)
207
- end
208
- end
209
-
210
- def get_work_data(dates, backlog)
211
- dates.map do |date|
212
- backlog.get_work_data(date)
213
- end
214
- end
215
-
216
170
  end
@@ -18,7 +18,7 @@ class PartiesController < ApplicationController
18
18
 
19
19
  def send_burn_down_chart(size)
20
20
  party = Party.find(params[:id])
21
- if period = party.periods.select{|p| p.active?}.first || party.periods.last
21
+ if period = party.periods.to_a.find{|p| p.active?} || party.periods.last
22
22
  g = period.burn_down_graph(size)
23
23
  send_data(g,
24
24
  :disposition => 'inline',
@@ -23,22 +23,6 @@ class Backlog < ActiveRecord::Base
23
23
  tasks.map {|t| t.self_with_children}.flatten
24
24
  end
25
25
 
26
- def estimate_data(date)
27
- total = 0
28
- periods.each do |period|
29
- total += period.estimate_data(date)
30
- end
31
- total
32
- end
33
-
34
- def work_data(date)
35
- total = 0
36
- periods.each do |period|
37
- total += period.work_data(date)
38
- end
39
- total
40
- end
41
-
42
26
  def first_active_period
43
27
  t = active_tasks
44
28
  periods = t.map {|t| t.period}.compact.uniq
@@ -47,7 +31,7 @@ class Backlog < ActiveRecord::Base
47
31
  end
48
32
 
49
33
  def enable_invoicing?
50
- work_account && work_account.invoice_code && work_account.invoice_code.length > 0
34
+ work_account && work_account.enable_invoicing?
51
35
  end
52
36
 
53
37
  def track_done?
@@ -36,10 +36,10 @@
36
36
  </div>
37
37
 
38
38
  <table>
39
- <% for @group in @groups %>
39
+ <% for group in @groups %>
40
40
  <tr>
41
41
  <td>
42
- <%=link_to @group.name, :action => :edit, :id => @group%>
42
+ <%=link_to group.name, :action => :edit, :id => group%>
43
43
  </tr>
44
44
  <% end %>
45
45
  </table>
@@ -5,6 +5,7 @@
5
5
  <% if @work.work_account -%>
6
6
  <%=image_detour_to('work_account.png', "#{l(:work_account)} #{@work.work_account.name}", {:controller => 'work_accounts', :action => :edit, :id => @work.work_account}, {:class => 'image-submit', :style => 'vertical-align: bottom'}) %>
7
7
  <% end -%>
8
+ <%=detour_to l(:new_work_account), :controller => 'work_accounts', :action => :new %>
8
9
  </p>
9
10
 
10
11
  <p><%=l :task%>:<br/>
@@ -54,22 +54,22 @@ end %>]
54
54
  <% if @work %>
55
55
  <% day_totals[day] += @work.hours %>
56
56
  <% week_total += @work.hours %>
57
- <td>
58
- <%=image_detour_to('hammer.png', l(:edit), {:style => "float: right;"}, :controller => 'works', :action => :edit, :id => @work.id) %>
57
+ <td valign="top">
58
+ <%=image_detour_to('hammer.png', l(:edit), {:controller => 'works', :action => :edit, :id => @work.id}, {:style => "float: right;"}) %>
59
59
  <%=detour_to(h(@work.task.period.name), :controller => 'periods', :action => :show, :id => @work.task.period) if @work.task && @work.task.period %>
60
60
  <%=detour_to(h(@work.work_account.name), :controller => 'work_accounts', :action => :show, :id => @work.work_account_id) %>:
61
61
  <%=detour_to(h(@work.task.description), :controller => 'tasks', :action => :edit, :id => @work.task_id) if @work.task_id%>
62
62
  </td>
63
63
  <% if invoicing %>
64
- <td id="invoice_<%=@work.id%>">
65
- <%=check_box(:work, :invoice, :onchange => "new Ajax.Updater('invoice_#{@work}', '#{url_for(:action => :set_work_invoice, :id => @work)}' + '?value=' + this.checked);") if @work.task.invoicing? %>
64
+ <td id="invoice_<%=@work.id%>" valign="top">
65
+ <%=check_box(:work, :invoice, :onchange => "new Ajax.Updater('invoice_#{@work}', '#{url_for(:action => :set_work_invoice, :id => @work)}' + '?value=' + this.checked);") if @work.work_account.enable_invoicing? %>
66
66
  </td>
67
67
  <% end %>
68
68
  <% if track_times %>
69
- <td align="right"><%=in_place_editor_field(:work, :started_at_time, :class => :task_time) %></td>
70
- <td align="right"><%=in_place_editor_field(:work, :completed_at_time, :class => :task_time) %></td>
69
+ <td align="right" valign="top"><%=in_place_editor_field(:work, :started_at_time, :class => :task_time) %></td>
70
+ <td align="right" valign="top"><%=in_place_editor_field(:work, :completed_at_time, :class => :task_time) %></td>
71
71
  <% end %>
72
- <td align="right"><%=in_place_editor_field(:work, :hours, {}, :value => '%.2f' % @work.hours) %></td>
72
+ <td align="right" valign="top"><%=in_place_editor_field(:work, :hours, {}, :value => '%.2f' % @work.hours) %></td>
73
73
  <% else %>
74
74
  <td/>
75
75
  <% if invoicing %>
@@ -0,0 +1,13 @@
1
+ class AddIndicesForBurnDownChart < ActiveRecord::Migration
2
+ def self.up
3
+ add_index :tasks, :parent_id
4
+ add_index :estimates, [:task_id, :created_at]
5
+ add_index :works, [:task_id, :completed_at]
6
+ end
7
+
8
+ def self.down
9
+ remove_index :works, [:task_id, :completed_at]
10
+ remove_index :estimates, [:task_id, :created_at]
11
+ remove_index :tasks, :parent_id
12
+ end
13
+ end
data/db/schema.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  # migrations feature of ActiveRecord to incrementally modify your database, and
3
3
  # then regenerate this schema definition.
4
4
 
5
- ActiveRecord::Schema.define(:version => 22) do
5
+ ActiveRecord::Schema.define(:version => 23) do
6
6
 
7
7
  create_table "backlogs", :force => true do |t|
8
8
  t.column "name", :string, :limit => 64, :null => false
@@ -29,6 +29,8 @@ ActiveRecord::Schema.define(:version => 22) do
29
29
  t.column "user_id", :integer
30
30
  end
31
31
 
32
+ add_index "estimates", ["task_id", "created_at"], :name => "index_estimates_on_task_id_and_created_at"
33
+
32
34
  create_table "groups", :primary_key => "party_id", :force => true do |t|
33
35
  t.column "name", :string, :null => false
34
36
  end
@@ -74,6 +76,8 @@ ActiveRecord::Schema.define(:version => 22) do
74
76
  t.column "customer_id", :integer
75
77
  end
76
78
 
79
+ add_index "tasks", ["parent_id"], :name => "index_tasks_on_parent_id"
80
+
77
81
  create_table "users", :primary_key => "party_id", :force => true do |t|
78
82
  t.column "login", :string, :limit => 80, :null => false
79
83
  t.column "salted_password", :string, :limit => 40, :null => false
@@ -106,6 +110,8 @@ ActiveRecord::Schema.define(:version => 22) do
106
110
  t.column "description", :string
107
111
  end
108
112
 
113
+ add_index "works", ["task_id", "completed_at"], :name => "index_works_on_task_id_and_completed_at"
114
+
109
115
  add_foreign_key "backlogs", ["customer_id"], "customers", ["id"], :name => "backlogs_customer_id_fkey"
110
116
  add_foreign_key "backlogs", ["work_account_id"], "work_accounts", ["id"], :name => "backlogs_work_account_id_fkey"
111
117
 
data/lang/en.yaml CHANGED
@@ -59,6 +59,7 @@ new_group: Start new group
59
59
  new_period: Add new sprint
60
60
  new_task: Add new task
61
61
  new_work: Add new work record
62
+ new_work_account: Add new work account
62
63
  next: Next
63
64
  no_pending_tasks: There are no pending tasks in this sprint.
64
65
  no_pending_tasks_in_backlog: There are no pending tasks in this backlog.
data/lang/no.yaml CHANGED
@@ -59,6 +59,7 @@ new_group: Start ny gruppe
59
59
  new_period: Start ny periode
60
60
  new_task: Legg til ny oppgave
61
61
  new_work: Registrer arbeid
62
+ new_work_account: Legg til timeføringskonto
62
63
  next: Neste
63
64
  no_pending_tasks: Det er ingen ventende oppgaver i denne perioden.
64
65
  no_pending_tasks_in_backlog: Det er ingen ventende oppgaver i denne oppgavelisten.
@@ -5,6 +5,8 @@ require 'parties_controller'
5
5
  class PartiesController; def rescue_action(e) raise e end; end
6
6
 
7
7
  class PartiesControllerTest < Test::Unit::TestCase
8
+ main_scenario
9
+
8
10
  def setup
9
11
  @controller = PartiesController.new
10
12
  @request = ActionController::TestRequest.new
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.14.2
7
- date: 2007-11-19 00:00:00 +01:00
6
+ version: 0.14.3
7
+ date: 2007-11-22 00:00:00 +01:00
8
8
  summary: Application to aid collecting, processing, organizing, reviewing and doing tasks.
9
9
  require_paths:
10
10
  - lib
@@ -142,6 +142,7 @@ files:
142
142
  - db/migrate/021_create_work_accounts.rb
143
143
  - db/migrate/016_add_invoicable_flag.rb
144
144
  - db/migrate/018_create_groups.rb
145
+ - db/migrate/023_add_indices_for_burn_down_chart.rb
145
146
  - db/migrate/022_remove_track_done_flag.rb
146
147
  - db/migrate/005_add_field_work_started_at.rb
147
148
  - db/migrate/006_works_data_fix.rb