backlog 0.33.0 → 0.33.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +12 -0
- data/app/controllers/tasks_controller.rb +2 -2
- data/app/controllers/works_controller.rb +16 -7
- data/app/models/task.rb +1 -1
- data/app/views/tasks/_task.rhtml +2 -1
- data/app/views/tasks/edit.rhtml +1 -1
- data/app/views/works/list.rhtml +6 -4
- data/app/views/works/list_excel.rhtml +2 -2
- data/app/views/works/update_row.rjs +1 -1
- data/lang/en.yaml +2 -0
- data/lang/no.yaml +2 -0
- data/test/functional/works_controller_test.rb +2 -2
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 0.33.1 2008-05-28
|
2
|
+
|
3
|
+
=== Fixes
|
4
|
+
|
5
|
+
* Added Work Account column to the work report.
|
6
|
+
* Changed work report to list times with 2 decimals and be right-aligned.
|
7
|
+
* Fixed missing response when updating an existing row in the daily work sheet.
|
8
|
+
* Fixed wrong date in the works excel export.
|
9
|
+
* Fixed typo in the header of the works list and excel export.
|
10
|
+
* Fixed filtering on works list and excel export to use work record start date instead of completetion date.
|
11
|
+
* Fixed bug where a display of a weekly work sheet for a non-existing user would produce an application error.
|
12
|
+
|
1
13
|
== 0.33.0 2008-05-09
|
2
14
|
|
3
15
|
== Features
|
@@ -242,8 +242,8 @@ class TasksController < ApplicationController
|
|
242
242
|
'work[task_id]' => @task.id,
|
243
243
|
'work[started_on]' => started_work.started_on.to_s,
|
244
244
|
'work[start_time]' => started_work.start_time.to_s,
|
245
|
-
'work[completed_at]' => [next_quarter, started_work.started_on.at(started_work.start_time)].max.iso8601,
|
246
|
-
'work[hours]' => "%0.2f" % ((next_quarter - started_work.started_on.at(started_work.start_time)).to_f / 3600),
|
245
|
+
'work[completed_at]' => [next_quarter, started_work.started_on.at(started_work.start_time || TimeOfDay.new(0, 0))].max.iso8601,
|
246
|
+
'work[hours]' => "%0.2f" % ((next_quarter - started_work.started_on.at(started_work.start_time || TimeOfDay.new(0, 0))).to_f / 3600),
|
247
247
|
'estimate[todo]' => @task.todo
|
248
248
|
})
|
249
249
|
else
|
@@ -15,13 +15,13 @@ class WorksController < ApplicationController
|
|
15
15
|
:redirect_to => { :action => :list }
|
16
16
|
|
17
17
|
def list
|
18
|
-
work_account_name = (params[:work_account_id] && WorkAccount.find(params[:work_account_id]).name) ||
|
18
|
+
work_account_name = (params[:work_account_id] && WorkAccount.find(params[:work_account_id]).name) || l(:all_accounts)
|
19
19
|
@report_filter = WorksReportFilter.new(params[:report_filter])
|
20
20
|
@report_filter.title = "#{l :hours} for #{work_account_name} #{@report_filter.start_on && @report_filter.start_on.strftime('%Y-%m-%d - ')}#{@report_filter.end_on && @report_filter.end_on.strftime('%Y-%m-%d')}"
|
21
21
|
@period = params[:id] && Period.find(params[:id])
|
22
|
-
@works = Work.paginate :conditions => ["
|
23
|
-
|
24
|
-
|
22
|
+
@works = Work.paginate :conditions => ["started_on BETWEEN ? AND ? #{'AND work_account_id = ?' if @report_filter.work_account_id} #{@report_filter.invoice.nil? ? '' : 'AND invoice = ?'} #{@report_filter.user_id.nil? ? '' : 'AND user_id = ?'}", @report_filter.start_on, @report_filter.end_on, @report_filter.work_account_id, @report_filter.invoice, @report_filter.user_id].compact,
|
23
|
+
:page => params[:page], :per_page => @report_filter.page_size,
|
24
|
+
:order => 'started_on, start_time, completed_at'
|
25
25
|
@work_accounts = WorkAccount.find(:all, :order => :name)
|
26
26
|
@users = User.find(:all, :order => 'first_name, last_name')
|
27
27
|
if params[:export] == 'excel'
|
@@ -198,7 +198,16 @@ class WorksController < ApplicationController
|
|
198
198
|
@date = (params[:id] && Date.parse(params[:id])) || Date.today
|
199
199
|
@year = @date.year
|
200
200
|
@week = @date.cweek
|
201
|
-
|
201
|
+
if params[:user_id]
|
202
|
+
@user = User.find_by_id(params[:user_id])
|
203
|
+
if @user.nil?
|
204
|
+
flash[:notice] = l(:cannot_find_user, params[:user_id])
|
205
|
+
back_or_redirect_to '/'
|
206
|
+
return
|
207
|
+
end
|
208
|
+
else
|
209
|
+
@user = current_user
|
210
|
+
end
|
202
211
|
@periods = []
|
203
212
|
@works = Work.find_work_for_day(@date, @user)
|
204
213
|
@customers = Customer.find(:all, :order => :name)
|
@@ -274,14 +283,14 @@ class WorksController < ApplicationController
|
|
274
283
|
if (search_id = params[:work][:task_id].to_i) > 0
|
275
284
|
@tasks += Task.find(:all,
|
276
285
|
:conditions => [ "id = ? OR id BETWEEN ? AND ?",
|
277
|
-
|
286
|
+
search_id, search_id * 10, ((search_id+1) * 10 -1) ],
|
278
287
|
:order => 'id',
|
279
288
|
:limit => 10)
|
280
289
|
end
|
281
290
|
|
282
291
|
|
283
292
|
@tasks += Task.find(:all,
|
284
|
-
|
293
|
+
:conditions => [ "finished_at IS NULL AND LOWER(description) LIKE ?",
|
285
294
|
'%' + params[:work][:task_id].downcase + '%' ],
|
286
295
|
:order => 'description ASC',
|
287
296
|
:limit => 10)
|
data/app/models/task.rb
CHANGED
@@ -404,7 +404,7 @@ class Task < ActiveRecord::Base
|
|
404
404
|
end
|
405
405
|
|
406
406
|
def started_work
|
407
|
-
started_works = works.select {|work| work.completed_at.nil?}
|
407
|
+
started_works = works.select {|work| work.start_time && work.completed_at.nil?}
|
408
408
|
if current_user
|
409
409
|
started_by_user = started_works.select {|work| work.user == current_user}.last
|
410
410
|
return started_by_user if started_by_user
|
data/app/views/tasks/_task.rhtml
CHANGED
@@ -28,11 +28,12 @@
|
|
28
28
|
|
29
29
|
<div style="float: right" style="border: 1px solid black">
|
30
30
|
<div class="task_start">
|
31
|
+
|
31
32
|
<% if active && @task.loggable? -%>
|
32
33
|
<% if @task.work_started? -%>
|
33
34
|
<% remote_form_for(:work, :url => {:controller => 'works', :action => 'update_time', :id => @task.started_work}) do |f| %>
|
34
35
|
<%=submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
|
35
|
-
<%=f.text_field 'start_time', :id => "work_#{@task.started_work.id}_start_time", :tabindex => i+1, :value => @task.started_work.start_time.strftime('%H:%M'),
|
36
|
+
<%=f.text_field 'start_time', :id => "work_#{@task.started_work.id}_start_time", :tabindex => i+1, :value => (@task.started_work.start_time ? @task.started_work.start_time.strftime('%H:%M') : ''),
|
36
37
|
:class => :task_time, :maxlength => 5 %>
|
37
38
|
<% end %>
|
38
39
|
<% elsif @task.track_times? && (@task.period_id.nil? || @task.period.active?) %>
|
data/app/views/tasks/edit.rhtml
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
<% if @task.work_started? -%>
|
32
32
|
<% remote_form_for(:work, :url => {:controller => 'works', :action => 'update_time', :id => @task.started_work}) do |f| %>
|
33
33
|
<%=submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
|
34
|
-
<%=l :started_at%> <%=f.text_field 'start_time', :id => "work_#{@task.started_work.id}_start_time", :value => @task.started_work.started_at.strftime('%H:%M'),
|
34
|
+
<%=l :started_at%> <%=f.text_field 'start_time', :id => "work_#{@task.started_work.id}_start_time", :value => @task.started_work.started_at ? @task.started_work.started_at.strftime('%H:%M') : '',
|
35
35
|
:class => :task_time, :maxlength => 5 %>
|
36
36
|
<% end %>
|
37
37
|
<% elsif @task.track_times? && (@task.period_id.nil? || @task.period.active?) %>
|
data/app/views/works/list.rhtml
CHANGED
@@ -101,6 +101,7 @@
|
|
101
101
|
<tr>
|
102
102
|
<th><%=l :user %></th>
|
103
103
|
<th><%=l :done %></th>
|
104
|
+
<th><%=l :work_account %></th>
|
104
105
|
<th><%=l :description %></th>
|
105
106
|
<th><%=l :invoice %></th>
|
106
107
|
<th><%=l :started_at %></th>
|
@@ -110,7 +111,8 @@
|
|
110
111
|
<% for work in @works %>
|
111
112
|
<tr>
|
112
113
|
<td valign="top"><%=work.user && work.user.login %></td>
|
113
|
-
<td valign="top"><%=work.hours %></td>
|
114
|
+
<td align="right" valign="top"><%='%.2f' % work.hours %></td>
|
115
|
+
<td valign="top"><%=work.work_account.name %></td>
|
114
116
|
<%if work.task
|
115
117
|
link = "Task: #{work.task.description} <br/>"
|
116
118
|
else
|
@@ -118,10 +120,10 @@
|
|
118
120
|
end
|
119
121
|
link += h(work.description)
|
120
122
|
%>
|
121
|
-
<td><%=
|
123
|
+
<td valign="top"><%=detour_to link, :controller => 'works', :action => 'daily_work_sheet', :id => work.started_on.strftime("%Y-%m-%d"), :user_id => work.user_id %></td>
|
122
124
|
<td><%=work.invoice ? l(:yes) : '' %></td>
|
123
|
-
<td><%=work.started_at && work.started_at.strftime('%Y-%m-%d %H:%M:%S') %></td>
|
124
|
-
<td valign="top"><%=work.completed_at && work.completed_at.strftime('%Y-%m-%d %H:%M:%S') %></td>
|
125
|
+
<td valign="top"><%=(work.started_at && work.started_at.strftime('%Y-%m-%d %H:%M:%S')) || work.started_on.strftime('%Y-%m-%d') %></td>
|
126
|
+
<td valign="top"><%=(work.completed_at && work.completed_at.strftime('%Y-%m-%d %H:%M:%S')) || work.started_on.strftime('%Y-%m-%d') %></td>
|
125
127
|
<tr>
|
126
128
|
<% end %>
|
127
129
|
<tr>
|
@@ -77,8 +77,8 @@
|
|
77
77
|
<Cell><Data ss:Type="String"><%=work.description %></Data></Cell>
|
78
78
|
<Cell><Data ss:Type="Number"><%=work.hours %></Data></Cell>
|
79
79
|
<Cell><Data ss:Type="String"><%=work.invoice? ? 'Ja' : 'Nei' %></Data></Cell>
|
80
|
-
<Cell ss:StyleID="DateTime"><Data ss:Type="Number"><%=BigDecimal((work.started_on - Date.new(1899, 12,
|
81
|
-
<Cell ss:StyleID="DateTime"><Data ss:Type="Number"><%=work.completed_at && (BigDecimal((work.completed_at.to_datetime - DateTime.parse('1899-12-
|
80
|
+
<Cell ss:StyleID="DateTime"><Data ss:Type="Number"><%=(BigDecimal((work.started_on - Date.new(1899, 12, 30)).to_s) + (work.start_time ? (BigDecimal(work.start_time.hour.to_s) + BigDecimal(work.start_time.minute.to_s)/60) / 24 : 0)).truncate(6) %></Data></Cell>
|
81
|
+
<Cell ss:StyleID="DateTime"><Data ss:Type="Number"><%=work.completed_at && (BigDecimal((work.completed_at.to_datetime - DateTime.parse('1899-12-30T00:00:00+02:00')).to_f.to_s))%></Data></Cell>
|
82
82
|
</Row>
|
83
83
|
<% end %>
|
84
84
|
|
data/lang/en.yaml
CHANGED
@@ -7,12 +7,14 @@ account: Account
|
|
7
7
|
active: Active
|
8
8
|
administration: Administration
|
9
9
|
all: All
|
10
|
+
all_accounts: all accounts
|
10
11
|
assigned_to: Assigned to
|
11
12
|
back: Back
|
12
13
|
backlog: Backlog
|
13
14
|
backlog_description: Task list with ordering and status tracking
|
14
15
|
backlogs: Backlogs
|
15
16
|
burn_down_chart: Burn Down Chart
|
17
|
+
cannot_find_user: Cannot find user %s
|
16
18
|
change_password: Change Password
|
17
19
|
complete: Complete
|
18
20
|
completed: Completed
|
data/lang/no.yaml
CHANGED
@@ -7,12 +7,14 @@ account: Konto
|
|
7
7
|
active: Aktiv
|
8
8
|
administration: Administrasjon
|
9
9
|
all: All
|
10
|
+
all_accounts: alle konti
|
10
11
|
assigned_to: Tilordnet
|
11
12
|
back: Tilbake
|
12
13
|
backlog: Oppgaveliste
|
13
14
|
backlog_description: Oppgaveliste med sortering og statussporing
|
14
15
|
backlogs: Oppgavelister
|
15
16
|
burn_down_chart: Fremdriftsgraf
|
17
|
+
cannot_find_user: Kan ikke finne bruker %s
|
16
18
|
change_password: Bytt Passord
|
17
19
|
complete: Fullfør
|
18
20
|
completed: Fullført
|
@@ -43,7 +43,7 @@ class WorksControllerTest < Test::Unit::TestCase
|
|
43
43
|
assert_template 'list'
|
44
44
|
|
45
45
|
assert_not_nil assigns(:works)
|
46
|
-
assert_equal
|
46
|
+
assert_equal 5, assigns(:works).size
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_list_excel
|
@@ -53,7 +53,7 @@ class WorksControllerTest < Test::Unit::TestCase
|
|
53
53
|
assert_template 'list_excel'
|
54
54
|
|
55
55
|
assert_not_nil assigns(:works)
|
56
|
-
assert_equal
|
56
|
+
assert_equal 5, assigns(:works).size
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_show
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backlog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.33.
|
4
|
+
version: 0.33.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uwe Kubosch
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-07-15 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|