backlog 0.10.7 → 0.10.8

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 CHANGED
@@ -1,3 +1,12 @@
1
+ == 0.10.8 2007-09-27
2
+
3
+ === Fixes
4
+
5
+ * Always make startup link in /etc/init.d even if it exists already
6
+ * Reduced output in the "backlog setup_unix" command to avoid clutter.
7
+ * Daily Time Sheet now allows adding work records. Edit still not working.
8
+ * Filtered work records in daily work sheet to only show records for the current user.
9
+
1
10
  == 0.10.7 2007-09-26
2
11
 
3
12
  === Fixes
@@ -36,11 +36,14 @@ class WorksController < ApplicationController
36
36
  backlog = Backlog.find_by_name(params[:work].delete(:backlog_name))
37
37
  description = params[:work][:task_description]
38
38
  task = Task.find_by_backlog_id_and_description(backlog.id, description)
39
- params[:work][:task_id] = Task.find_by_backlog_id_and_description(backlog.id, params[:work].delete(:task_description))
39
+ params[:work][:task_id] = task.id
40
+ params[:work].delete(:task_description)
40
41
  end
41
42
  convert_hours_param
43
+ convert_start_time_param
42
44
  @work = Work.new(params[:work])
43
45
  @work.completed_at = Time.now unless @work.completed_at
46
+ @work.user_id = current_user.id
44
47
  if @work.save!
45
48
  flash[:notice] = 'Work was successfully created.'
46
49
  else
@@ -88,10 +91,7 @@ class WorksController < ApplicationController
88
91
  def daily_work_sheet
89
92
  @date = (params[:id] && Date.parse(params[:id])) || Date.today
90
93
  @periods = []
91
- @works = Work.find(:all,
92
- :conditions => "started_at < '#{@date+1}' AND completed_at >= '#{@date}'",
93
- :order => 'completed_at'
94
- )
94
+ @works = Work.find_work_for_day @date
95
95
  @started_works = Task.find_started
96
96
  render :layout => 'wide'
97
97
  end
@@ -120,8 +120,14 @@ class WorksController < ApplicationController
120
120
  end
121
121
 
122
122
  def auto_complete_for_work_task_description
123
- @tasks = Task.find(:all,
124
- :conditions => [ 'finished_at IS NULL AND LOWER(description) LIKE ?',
123
+ if backlog_name = params[:backlog_name]
124
+ if backlog = Backlog.find_by_name(backlog_name)
125
+ backlog_clause = " AND backlog_id = #{backlog.id}"
126
+ end
127
+ end
128
+
129
+ @tasks = Task.find(:all,
130
+ :conditions => [ "finished_at IS NULL AND LOWER(description) LIKE ?#{backlog_clause}",
125
131
  '%' + params[:work][:task_description].downcase + '%' ],
126
132
  :order => 'description ASC',
127
133
  :limit => 16)
@@ -134,7 +140,7 @@ class WorksController < ApplicationController
134
140
  if params[:work] && params[:work][:started_at_time]
135
141
  new_hour = params[:work][:started_at_time][0..1]
136
142
  new_minutes = params[:work][:started_at_time][3..4]
137
- if @work.started?
143
+ if @work && @work.started?
138
144
  t = @work.started_at
139
145
  else
140
146
  t = Time.now
data/app/models/work.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  class Work < ActiveRecord::Base
2
2
  extend UserSystem
3
3
  include UserSystem
4
-
4
+
5
5
  belongs_to :task
6
6
  belongs_to :user
7
7
 
@@ -9,7 +9,7 @@ class Work < ActiveRecord::Base
9
9
  validates_associated :task
10
10
  validates_presence_of :started_at
11
11
  validates_presence_of :user_id, :if => :validate_user?
12
-
12
+
13
13
  def validate_user?
14
14
  task.enable_users?
15
15
  end
@@ -51,11 +51,11 @@ class Work < ActiveRecord::Base
51
51
  totals_per_backlog = {}
52
52
  Backlog.find(:all).each do |backlog|
53
53
  totals_per_backlog[backlog.id] = [[], []]
54
- (0..6).each do |day|
54
+ (0..6).each do |day|
55
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)) }
56
56
  invoice_works_for_day = works_for_day.select {|work| work.invoice? }
57
57
  internal_works_for_day = works_for_day.select {|work| !work.invoice? }
58
-
58
+
59
59
  invoice_day_total = invoice_works_for_day.reduce(BigDecimal('0')){|total, work| total += work.hours}
60
60
  internal_day_total = internal_works_for_day.reduce(BigDecimal('0')){|total, work| total += work.hours}
61
61
  totals_per_backlog[backlog.id][0] << invoice_day_total
@@ -68,6 +68,11 @@ class Work < ActiveRecord::Base
68
68
  totals_per_backlog
69
69
  end
70
70
 
71
+ def self.find_work_for_day date
72
+ Work.find(:all, :conditions => "started_at < '#{date+1}' AND completed_at >= '#{date}' AND user_id = #{current_user.id}",
73
+ :order => 'completed_at')
74
+ end
75
+
71
76
  def started?
72
77
  completed_at.nil?
73
78
  end
@@ -22,7 +22,7 @@
22
22
  <% end %>
23
23
  <th><%=l :done %></th>
24
24
  </tr>
25
-
25
+
26
26
  <% day_total = 0 %>
27
27
  <% for @work in @works %>
28
28
  <% day_total += @work.hours if @work %>
@@ -43,19 +43,19 @@
43
43
  <% if track_times %>
44
44
  <td align="right">
45
45
  <form>
46
- <%=text_field :work, :started_at, :value => (@work.started_at.strftime('%H:%M')), :class => 'task_time' %>
46
+ <%=text_field :work, :started_at_time, :value => (@work.started_at.strftime('%H:%M')), :class => 'task_time' %>
47
47
  </form>
48
48
  </td>
49
49
  <td align="right">
50
50
  <form>
51
- <%=text_field :work, :completed_at, :value => (@work.completed_at.strftime('%H:%M')), :class => 'task_time' %>
51
+ <%=text_field :work, :completed_at_time, :value => (@work.completed_at.strftime('%H:%M')), :class => 'task_time' %>
52
52
  <%=image_button_to('arrow_right.png', l(:calculate), :controller => 'periods', :action => :show, :id => @work.task.period) %>
53
53
  </form>
54
54
  </td>
55
55
  <% end %>
56
56
  <td align="right">
57
57
  <form>
58
- <%=text_field :work, :hours, :value => '%.2f' % @work.hours, :class => 'task_hours' %>
58
+ <%=text_field :work, :hours_time, :value => t(@work.hours), :class => 'task_hours' %>
59
59
  </form>
60
60
  </td>
61
61
  </tr>
@@ -63,29 +63,29 @@
63
63
  </table>
64
64
 
65
65
 
66
-
67
- <% form_tag :action => 'create' do %>
66
+ <% form_tag :controller => 'works', :action => 'create' do %>
67
+ <%=submit_tag('checkmark', :value => l(:save), :sstyle => 'display: none')%>
68
68
  <%=hidden_field :work, :completed_at, :value => Time.now %>
69
69
  <table sstyle="width: 100%" border="0">
70
70
  <tr>
71
71
  <td width="22"/>
72
72
  <td>
73
- <%=text_field_with_auto_complete :work, :backlog_name, {:value => '', :size => 16} %>
73
+ <%=text_field_with_auto_complete :work, :backlog_name, {:value => '', :size => 16}, {} %>
74
74
  </td>
75
75
  <td>
76
- <%=text_field_with_auto_complete :work, :task_description, {:value => '', :size => 16, :class => :task_description} %>
76
+ <%=text_field_with_auto_complete :work, :task_description, {:value => '', :size => 16, :class => :task_description, :onfocus => "work_task_description_auto_completer.url = '#{url_for(:action => :auto_complete_for_work_task_description)}?backlog_name=' + $('work_backlog_name').value"}, :url => url_for({:action => :auto_complete_for_work_task_description, :backlog_name => "' + $('work_backlog_name').value + '", :escape => false}) %>
77
77
  </td>
78
78
  <% if track_times %>
79
79
  <td align="right">
80
- <%=text_field :work, :started_at, :value => @work.started_at.strftime('%H:%M'), :class => 'task_time' %>
80
+ <%=text_field :work, :started_at_time, :value => @work.started_at.strftime('%H:%M'), :class => 'task_time' %>
81
81
  </td>
82
82
  <td align="right">
83
- <%=text_field :work, :completed_at, :class => 'task_time', :value => @work.completed_at.strftime('%H:%M') %>
84
- <%=image_button_to('arrow_right.png', l(:calculate), :controller => 'periods', :action => :show) %>
83
+ <%=text_field :work, :completed_at_time, :class => 'task_time', :value => @work.completed_at.strftime('%H:%M') %>
84
+ <%=image_button_to('arrow_right.png', l(:calculate), :controller => 'backlogs', :action => :show) %>
85
85
  </td>
86
86
  <% end %>
87
87
  <td align="right">
88
- <%=text_field :work, :hours, :class => 'task_hours' %>
88
+ <%=text_field :work, :hours_time, :value => t(@work.hours), :class => 'task_hours' %>
89
89
  </td>
90
90
  </tr>
91
91
  <tr>
@@ -114,9 +114,7 @@
114
114
 
115
115
  <script type="text/JavaScript">
116
116
  //<!--
117
- form = document.forms[document.forms.length - 1];
118
- element = form.elements[form.elements.length - 5]
119
- element.focus();
120
- element.select();
117
+ $('work_backlog_name').focus();
118
+ $('work_backlog_name').select();
121
119
  //-->
122
120
  </script>
data/bin/backlog CHANGED
@@ -54,14 +54,14 @@ when 'status'
54
54
  when 'setup_unix'
55
55
  current_user = `whoami`
56
56
  users = `su - postgres -c "echo '\\du' | psql template1"`
57
- puts users
58
57
  unless users =~ /root/
58
+ puts users
59
59
  createuser_command = `which createuser`.chomp
60
60
  puts `su - postgres -c "#{createuser_command} -dAR #{current_user}"`
61
61
  end
62
62
  dbs = `su - postgres -c "echo '\\l' | psql template1"`
63
- puts dbs
64
63
  unless dbs =~ /#{APPLICATION}_production/
64
+ puts dbs
65
65
  createdb_command = `which createdb`.chomp
66
66
  puts `su - postgres -c "#{createdb_command} #{APPLICATION}_production"`
67
67
  end
@@ -72,6 +72,7 @@ when 'setup_unix'
72
72
  # TODO: provide startup information based on launchd in OS X versions >= 10.4
73
73
  if File.directory? '/etc/init.d'
74
74
  startup_app = "/etc/init.d/#{APPLICATION}"
75
+ File.delete startup_app if File.exists? startup_app
75
76
  `ln -s #{Config::CONFIG['bindir']}/#{APPLICATION} #{startup_app}` unless File.exists? startup_app
76
77
  end
77
78
  FileUtils.cp "#{INSTALL_DIR}/etc/#{APPLICATION}.conf", config_file unless File.exists? config_file
@@ -1,7 +1,10 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'user_system'
2
3
 
3
4
  class WorkTest < Test::Unit::TestCase
4
- fixtures :works
5
+ include UserSystem
6
+
7
+ fixtures :users, :groups_users, :works
5
8
 
6
9
  def test_work_totals_for_week
7
10
  work_totals = Work.work_totals_for_week(24, 1000001)
@@ -18,4 +21,19 @@ class WorkTest < Test::Unit::TestCase
18
21
  assert_equal 0, work_totals[1][1][5]
19
22
  assert_equal 0, work_totals[1][1][6]
20
23
  end
24
+
25
+ def test_find_work_for_day
26
+ Thread.current[:user] = users(:tesla)
27
+ assert_equal 1, Work.find_work_for_day(Date.parse('2007-06-12')).size
28
+ end
29
+
30
+ private
31
+
32
+ # TODO (uwe): This method should be removed
33
+ # It is here only because ClassTableInheritanceInRails broke reading fixtures by name
34
+ def users(login)
35
+ super(login)
36
+ end
37
+
38
+
21
39
  end
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.10.7
7
- date: 2007-09-26 00:00:00 +02:00
6
+ version: 0.10.8
7
+ date: 2007-09-27 00:00:00 +02:00
8
8
  summary: Application to aid collecting, processing, organizing, reviewing and doing tasks.
9
9
  require_paths:
10
10
  - lib