backlog 0.33.0 → 0.33.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.
- 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
|