Project

General

Profile

Feature #1847 ยป move_as_copy.diff

Ewan Makepeace, 2009-01-28 05:34

View differences:

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

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