backlog 0.17.6 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,18 @@
1
- == 0.17.6 2008-01-17
1
+ == 0.18.0 2008-01-21
2
+
3
+ === Features
4
+
5
+ * Allowed users to associate themselves with a task by pressing the monkey icon.
6
+ Only activated if the "Enable users" option on Backlog is checked.
7
+ * Added recording of last change timestamp for tasks.
8
+ * Allowed switching of tasks when registering a work record.
9
+ * Added navigation for editing and creating tasks when registering a work record.
10
+
11
+ === Fixes
12
+
13
+ * Updated graphs in README.txt
14
+
15
+ == 0.17.6 2008-01-19
2
16
 
3
17
  === Features
4
18
 
data/README.txt CHANGED
@@ -90,8 +90,8 @@ The charts are normally not protected, so you can display the in slide shows etc
90
90
 
91
91
  Examples:
92
92
 
93
- http://backlog.kubosch.no/periods/burn_down_chart/55.png
94
- http://backlog.kubosch.no/parties/burn_down_chart/14.png
93
+ http://backlog.kubosch.no/periods/burn_down_chart/64.png
94
+ http://backlog.kubosch.no/parties/burn_down_chart/1.png
95
95
 
96
96
  ==== Chart thumbnails
97
97
 
@@ -99,8 +99,8 @@ You can get small versions of the burn down charts by appending "_thumbnail" to
99
99
 
100
100
  Examples:
101
101
 
102
- http://backlog.kubosch.no/periods/burn_down_chart_thumbnail/55.png
103
- http://backlog.kubosch.no/parties/burn_down_chart_thumbnail/14.png
102
+ http://backlog.kubosch.no/periods/burn_down_chart_thumbnail/64.png
103
+ http://backlog.kubosch.no/parties/burn_down_chart_thumbnail/1.png
104
104
 
105
105
  ==== Large charts
106
106
 
@@ -108,5 +108,5 @@ You can get large versions (1368x768) of the burn down charts by appending "_lar
108
108
 
109
109
  Examples:
110
110
 
111
- http://backlog.kubosch.no/periods/burn_down_chart_large/55.png
112
- http://backlog.kubosch.no/parties/burn_down_chart_large/14.png
111
+ http://backlog.kubosch.no/periods/burn_down_chart_large/64.png
112
+ http://backlog.kubosch.no/parties/burn_down_chart_large/1.png
@@ -147,6 +147,20 @@ class PeriodsController < ApplicationController
147
147
  move_task_to_period
148
148
  end
149
149
 
150
+ def grab_task
151
+ @task = Task.find(params[:id])
152
+ @task.grab
153
+ load_tasks(@task.period)
154
+ render :template => '/tasks/_update.rjs'
155
+ end
156
+
157
+ def release_task
158
+ @task = Task.find(params[:id])
159
+ @task.release
160
+ load_tasks(@task.period)
161
+ render :template => '/tasks/_update.rjs'
162
+ end
163
+
150
164
  def finish_task
151
165
  @task = Task.find(params[:id])
152
166
  @task.finish(Task::COMPLETED, true)
@@ -3,6 +3,7 @@ require 'url_for_fix'
3
3
 
4
4
  module ApplicationHelper
5
5
  include Localization
6
+ include UserSystem
6
7
  include UrlForFix
7
8
 
8
9
  def image_button_to(image_source, title, options)
@@ -104,4 +105,8 @@ module ApplicationHelper
104
105
  record(page, "new Insertion.#{position.to_s.capitalize}($$('#{selector}').first(), '#{escaped_content}')")
105
106
  end
106
107
 
108
+ def update_task(page)
109
+ page["task_#{@task.id}"].replace render(:partial => "/tasks/task", :locals => { :task => @task, :i => 1, :active => true, :highlight_task => false, :update => :spotlight, :hidden => false })
110
+ end
111
+
107
112
  end
@@ -18,7 +18,7 @@ module PeriodsHelper
18
18
  page.remove "completed_period_#{@task.period_id}"
19
19
  page.visual_effect :fade, :completed_tasks
20
20
  end
21
- end
21
+ end
22
22
 
23
23
  def add_active_task(page)
24
24
  page.insert_html(:top, "active_tasks_#{@task.period.id}", render(:partial => "/tasks/task", :locals => { :task => @task, :i => 1, :active => true, :highlight_task => false, :update => :spotlight, :hidden => true }))
@@ -16,6 +16,7 @@ class Task < ActiveRecord::Base
16
16
  has_many :estimates, :order => 'created_at', :dependent => :destroy
17
17
  has_many :works, :order => 'completed_at', :dependent => :destroy
18
18
  has_many :task_files, :dependent => :destroy
19
+ has_and_belongs_to_many :users
19
20
 
20
21
  acts_as_list :scope => '#{parent_id ? "parent_id = #{parent_id}" : period_id ? "period_id = #{period_id}" : "period_id IS NULL AND parent_id IS NULL AND backlog_id = #{backlog_id}"} AND finished_at IS NULL'
21
22
  acts_as_tree :order => 'position'
@@ -186,6 +187,14 @@ class Task < ActiveRecord::Base
186
187
  end
187
188
  end
188
189
 
190
+ def grab
191
+ self.users << current_user
192
+ end
193
+
194
+ def release
195
+ self.users.delete current_user
196
+ end
197
+
189
198
  def finish(resolution, save_work)
190
199
  unless finished_at || work_started?
191
200
  self.finished_at = Time.now
@@ -85,16 +85,21 @@
85
85
  <% if @task.active? -%>
86
86
  <% if @task.loggable? -%>
87
87
  <% unless @task.work_started? -%>
88
- <%# form_tag({:controller => 'tasks', :action => 'update', :id => @task}) do -%>
88
+ <% if @task.backlog.enable_users? %>
89
+ <% if @task.users.include?(current_user) %>
90
+ <%=image_link_to_remote('grab.png', l(:grab_task), {:action => :release_task, :id => @task}, nil, true)%>
91
+ <% else %>
92
+ <%=image_link_to_remote('grab_gray.png', l(:grab_task), {:action => :grab_task, :id => @task}, nil, true)%>
93
+ <% end %>
94
+ <% end %>
89
95
  <%=image_link_to_remote('arrow_right.png', l(:move_to_next_period), {:action => :move_task_to_next_period, :id => @task}, nil, true) if @task.backlog.enable_periods? || @task.period_id%>
90
96
  <%=image_link_to_remote('ernes_stop.png', l(:abort), {:action => :abort_task, :id => @task}, nil, true)%>
91
- <%# end -%>
92
97
  <% end -%>
93
98
  <% end -%>
94
99
  <% elsif (@task.period.nil? || (not @task.period.passed?)) && @task.leaf? -%>
95
- <% form_tag({:controller => 'tasks', :action => 'update', :id => @task}) do -%>
96
- <%=image_link_to_remote('eraser.png', l(:reopen), {:action => :reopen_task, :id => @task}, nil, true) %>
97
- <% end -%>
100
+ <% form_tag({:controller => 'tasks', :action => 'update', :id => @task}) do -%>
101
+ <%=image_link_to_remote('eraser.png', l(:reopen), {:action => :reopen_task, :id => @task}, nil, true) %>
102
+ <% end -%>
98
103
  <% end -%>
99
104
  </div>
100
105
  </div>
@@ -0,0 +1,2 @@
1
+ display_notice(page)
2
+ update_task(page)
@@ -9,12 +9,12 @@
9
9
  </p>
10
10
 
11
11
  <p><%=l :task%>:<br/>
12
+ <%=select 'work', 'task_id', [['', '']] + @tasks.map{|task| [task.description_with_parents, task.id]}.sort %>
12
13
  <% if @work.task %>
13
- <h4><%=link_to @work.task.description, :controller => 'tasks', :action => :edit, :id => @work.task.id %></h4></p>
14
- <%= hidden_field 'work', 'task_id' %>
15
- <% else %>
16
- <%= select 'work', 'task_id', [['', '']] + @tasks.map{|task| [task.description_with_parents, task.id]}.sort %></p>
14
+ <%=image_detour_to 'task.png', l(:edit_task), :controller => 'tasks', :action => :edit, :id => @work.task.id %>
17
15
  <% end %>
16
+ <%=detour_to l(:new_task), :controller => 'tasks', :action => :new %>
17
+ </p>
18
18
 
19
19
  <% if @work.task.nil? || @work.task.track_times?%>
20
20
  <p><label for="work_started_at"><%=l :started_at%></label><br/>
@@ -0,0 +1,14 @@
1
+ class AddUsersToTasks < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :tasks, :updated_at, :timestamp
4
+ create_table :tasks_users, :id => false do |t|
5
+ t.column :task_id, :integer, :null => false
6
+ t.column :user_id, :integer, :null => false, :references => [:users, :party_id]
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ drop_table :tasks_users
12
+ remove_column :tasks, :updated_at
13
+ end
14
+ end
@@ -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 => 25) do
5
+ ActiveRecord::Schema.define(:version => 26) do
6
6
 
7
7
  create_table "backlogs", :force => true do |t|
8
8
  t.column "name", :string, :limit => 64, :null => false
@@ -77,10 +77,16 @@ ActiveRecord::Schema.define(:version => 25) do
77
77
  t.column "customer_id", :integer
78
78
  t.column "created_by", :integer
79
79
  t.column "updated_by", :integer
80
+ t.column "updated_at", :datetime
80
81
  end
81
82
 
82
83
  add_index "tasks", ["parent_id"], :name => "index_tasks_on_parent_id"
83
84
 
85
+ create_table "tasks_users", :id => false, :force => true do |t|
86
+ t.column "task_id", :integer, :null => false
87
+ t.column "user_id", :integer, :null => false
88
+ end
89
+
84
90
  create_table "users", :primary_key => "party_id", :force => true do |t|
85
91
  t.column "login", :string, :limit => 80, :null => false
86
92
  t.column "salted_password", :string, :limit => 40, :null => false
@@ -139,6 +145,9 @@ ActiveRecord::Schema.define(:version => 25) do
139
145
  add_foreign_key "tasks", ["parent_id"], "tasks", ["id"], :name => "tasks_parent_id_fkey"
140
146
  add_foreign_key "tasks", ["period_id"], "periods", ["id"], :name => "tasks_period_id_fkey"
141
147
 
148
+ add_foreign_key "tasks_users", ["task_id"], "tasks", ["id"], :name => "tasks_users_task_id_fkey"
149
+ add_foreign_key "tasks_users", ["user_id"], "users", ["party_id"], :name => "tasks_users_user_id_fkey"
150
+
142
151
  add_foreign_key "users", ["party_id"], "parties", ["id"], :name => "users_party_id_fkey"
143
152
 
144
153
  add_foreign_key "works", ["work_account_id"], "work_accounts", ["id"], :name => "works_work_account_id_fkey"
Binary file
Binary file
@@ -22,7 +22,7 @@ table.input td {vertical-align: top; margin: 0; border: 0; padding: 0 1px;}
22
22
  .task_end_work {float: left; width: 2em}
23
23
  .task_done {float: left; width: 3.6em; text-align: right; padding: 1px}
24
24
  .task_todo {float: left; width: 4.3em; padding: 1px; text-align: center;}
25
- .task_buttons {float: left; width: 5em}
25
+ .task_buttons {float: left; width: 7em}
26
26
  .dragable-hover {background: yellow; border: 1px solid black;}
27
27
  .dropzone-hover {background: yellow; border: 1px solid black;}
28
28
  th.hours {text-align: right;}
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.17.6
4
+ version: 0.18.0
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-01-19 00:00:00 +01:00
12
+ date: 2008-01-22 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -90,6 +90,7 @@ files:
90
90
  - app/views/tasks/list.rhtml
91
91
  - app/views/tasks/start_work.rjs
92
92
  - app/views/tasks/_fields_header.rhtml
93
+ - app/views/tasks/_update.rjs
93
94
  - app/views/tasks/notes.rhtml
94
95
  - app/views/tasks/_completed.rhtml
95
96
  - app/views/tasks/_task.rhtml
@@ -461,6 +462,7 @@ files:
461
462
  - public/images/eraser.png
462
463
  - public/images/rails.png
463
464
  - public/images/pagebak.jpg
465
+ - public/images/task.png
464
466
  - public/images/period_org.png
465
467
  - public/images/arrow_up.png
466
468
  - public/images/rmagick_270.gif
@@ -468,6 +470,7 @@ files:
468
470
  - public/images/arrow_left.png
469
471
  - public/images/arrow_right.png
470
472
  - public/images/arrow_down.svg
473
+ - public/images/grab_gray.png
471
474
  - public/images/arrow07_4.png
472
475
  - public/images/checkmark.png
473
476
  - public/images/appunti_architetto_franc_01.svg
@@ -482,6 +485,7 @@ files:
482
485
  - public/images/arrow_left.svg
483
486
  - public/images/header.jpg
484
487
  - public/images/blank.jpg
488
+ - public/images/grab.png
485
489
  - public/images/question.svg
486
490
  - public/images/paper3.svg
487
491
  - public/images/clipboard.png
@@ -588,6 +592,7 @@ files:
588
592
  - db/migrate/011_login_sugar.rb
589
593
  - db/migrate/004_add_period.rb
590
594
  - db/migrate/008_add_backlog_options.rb
595
+ - db/migrate/026_add_users_to_tasks.rb
591
596
  - db/migrate/020_create_task_files.rb
592
597
  - db/migrate/015_add_user_option.rb
593
598
  - db/migrate/019_remove_unique_index_for_period_position.rb