mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-24 03:00:12 +01:00
#300: Referential integrity maintained when deleting todos which are part in a dependency relationship
This commit is contained in:
parent
06e4bd4412
commit
c8b442cc41
2 changed files with 22 additions and 7 deletions
|
|
@ -77,7 +77,8 @@ class TodosController < ApplicationController
|
|||
@todo.tag_with(tag_list)
|
||||
@todo.tags.reload
|
||||
end
|
||||
|
||||
|
||||
# TODO: Check if we can reload cache here instead of saving twice
|
||||
unless predecessor_list.blank?
|
||||
@todo.add_predecessor_list(predecessor_list)
|
||||
unless @todo.uncompleted_predecessors.empty? || @todo.state == 'project_hidden'
|
||||
|
|
@ -348,16 +349,30 @@ class TodosController < ApplicationController
|
|||
@context_id = @todo.context_id
|
||||
@project_id = @todo.project_id
|
||||
|
||||
# activate successors if they only depend on this todo
|
||||
activated_successor_count = 0
|
||||
@todo.pending_successors.each do |successor|
|
||||
successor.uncompleted_predecessors.delete(@todo)
|
||||
if successor.uncompleted_predecessors.empty?
|
||||
successor.activate!
|
||||
activated_successor_count += 1
|
||||
end
|
||||
end
|
||||
|
||||
@saved = @todo.destroy
|
||||
|
||||
# check if this todo has a related recurring_todo. If so, create next todo
|
||||
@new_recurring_todo = check_for_next_todo(@todo) if @saved
|
||||
|
||||
|
||||
respond_to do |format|
|
||||
|
||||
format.html do
|
||||
if @saved
|
||||
notify :notice, "Successfully deleted next action", 2.0
|
||||
message = "Successfully deleted next action"
|
||||
if activated_successor_count > 0
|
||||
message += " activated #{pluralize(activated_successor_count, 'pending action')}"
|
||||
end
|
||||
notify :notice, message, 2.0
|
||||
redirect_to :action => 'index'
|
||||
else
|
||||
notify :error, "Failed to delete the action", 2.0
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@ class Todo < ActiveRecord::Base
|
|||
|
||||
has_many :predecessor_dependencies, :foreign_key => 'predecessor_id', :class_name => 'Dependency', :dependent => :destroy
|
||||
has_many :successor_dependencies, :foreign_key => 'successor_id', :class_name => 'Dependency', :dependent => :destroy
|
||||
has_many :predecessors, :through => :successor_dependencies, :dependent => :destroy
|
||||
has_many :successors, :through => :predecessor_dependencies, :dependent => :destroy
|
||||
has_many :predecessors, :through => :successor_dependencies
|
||||
has_many :successors, :through => :predecessor_dependencies
|
||||
has_many :uncompleted_predecessors, :through => :successor_dependencies,
|
||||
:source => :predecessor, :conditions => ['NOT (state = ?)', 'completed'], :dependent => :destroy
|
||||
:source => :predecessor, :conditions => ['NOT (state = ?)', 'completed']
|
||||
has_many :pending_successors, :through => :predecessor_dependencies,
|
||||
:source => :successor, :conditions => ['state = ?', 'pending'], :dependent => :destroy
|
||||
:source => :successor, :conditions => ['state = ?', 'pending']
|
||||
|
||||
|
||||
named_scope :active, :conditions => { :state => 'active' }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue