Logged in as makepeace

move_as_copy.patch

Deger Rongde, 01/21/2009 02:42 PM

Download (4.1 KB)

 
app/models/issue.rb (working copy)
98 98
    end
99 99
    return true
100 100
  end
101
  
101
   # Move an issue to a new project and tracker
102
  def move_to_return_issue(new_project, new_tracker = nil,is_copy = nill)
103
    transaction do
104
      if new_project && project_id != new_project.id
105
        # delete issue relations
106
        unless Setting.cross_project_issue_relations?
107
          self.relations_from.clear
108
          self.relations_to.clear
109
        end
110
        # issue is moved to another project
111
        # reassign to the category with same name if any
112
        new_category = category.nil? ? nil : new_project.issue_categories.find_by_name(category.name)
113
        self.category = new_category
114
        self.fixed_version = nil
115
        self.project = new_project
116
      end
117
      if new_tracker
118
        self.tracker = new_tracker
119
      end
120
      if(is_copy)
121
        new_issue=self.clone
122
        new_issue.id=nil
123
        if new_issue.save
124
          # Manually update project_id on related time entries
125
          TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id})
126
          return new_issue
127
        else
128
          rollback_db_transaction
129
        end
130
      else
131
        if save
132
          # Manually update project_id on related time entries
133
          TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id})
134
        else
135
          rollback_db_transaction
136
        end
137
      end
138
     
139
    end
140
    return self
141
  end
142 102
  def priority_id=(pid)
143 103
    self.priority = nil
144 104
    write_attribute(:priority_id, pid)
app/controllers/issues_controller.rb (working copy)
269 269
    @trackers = @target_project.trackers
270 270
    if request.post?
271 271
      new_tracker = params[:new_tracker_id].blank? ? nil : @target_project.trackers.find_by_id(params[:new_tracker_id])
272
      unsaved_issue_ids = []
273
      @issues.each do |issue|
274
        issue.init_journal(User.current)
275
        unsaved_issue_ids << issue.id unless issue.move_to(@target_project, new_tracker)
276
      end
277
      if unsaved_issue_ids.empty?
278
        flash[:notice] = l(:notice_successful_update) unless @issues.empty?
272
      is_copy=params["is_copy"]
273
      if(@issues.size>1)
274
        unsaved_issue_ids = []
275
        @issues.each do |issue|
276
          issue.init_journal(User.current)
277
          unsaved_issue_ids << issue.id unless issue.move_to(@target_project, new_tracker,is_copy)
278
        end
279
        if unsaved_issue_ids.empty?
280
          flash[:notice] = l(:notice_successful_update) unless @issues.empty?
281
        else
282
          flash[:error] = l(:notice_failed_to_save_issues, unsaved_issue_ids.size, @issues.size, '#' + unsaved_issue_ids.join(', #'))
283
        end
284
        redirect_to :controller => 'issues', :action => 'index', :project_id => @target_project
285 279
      else
280
        flash[:error] = l(:notice_failed_to_save_issues, unsaved_issue_ids.size, @issues.size, '#' + unsaved_issue_ids.join(', #'))
286
        issue=@issues[0].move_to_return_issue(@target_project, new_tracker,is_copy)
287
        redirect_to :controller => 'issues', :action => 'show', :id => issue
288 281
      end
282
      redirect_to :controller => 'issues', :action => 'index', :project_id => @project
289 283
      return
290 284
    end
291 285
    render :layout => false if request.xhr?
app/views/issues/move.rhtml (working copy)
16 16

  
17 17
<p><label for="new_tracker_id"><%=l(:field_tracker)%> :</label>
18 18
<%= select_tag "new_tracker_id", "<option value=\"\">#{l(:label_no_change_option)}</option>" + options_from_collection_for_select(@trackers, "id", "name") %></p>
19
<p><label for="is_copy">Move a Copy? </label>
20
<%=check_box_tag("is_copy", '1', 0, :id => "is_copy") + hidden_field_tag("is_copy", '0')%>
21
</p>
22 19
</div>
23 20

  
24 21
<%= submit_tag l(:button_move) %>