Project

General

Profile

Defect #29622 » 29622.patch

Yuichi HARADA, 2021-12-07 09:16

View differences:

app/models/issue.rb
1679 1679
  end
1680 1680

  
1681 1681
  def after_project_change
1682
    # Update project_id on related time entries
1683
    TimeEntry.where({:issue_id => id}).update_all(["project_id = ?", project_id])
1682
    # Update project_id and activity_id on related time entries
1683
    activities = project.activities
1684
    time_entries.each do |time_entry|
1685
      curr_activity = time_entry.activity
1686
      curr_activity_id = (curr_activity.parent_id || curr_activity.id)
1687
      new_activity =
1688
        activities.detect do |activity|
1689
          activity.id == curr_activity_id || activity.parent_id == curr_activity_id
1690
        end
1691

  
1692
      time_entry.project = project
1693
      time_entry.activity = new_activity unless curr_activity == new_activity
1694
      unless time_entry.save
1695
        errors.add(
1696
          :base,
1697
          l(:error_move_of_time_entries_not_possible,
1698
            :id => "##{time_entry.id}",
1699
            :errors => time_entry.errors.full_messages.join(", "))
1700
        )
1701
        raise ActiveRecord::Rollback
1702
      end
1703
    end
1684 1704

  
1685 1705
    # Delete issue relations
1686 1706
    unless Setting.cross_project_issue_relations?
config/locales/en.yml
229 229
  error_no_tracker_allowed_for_new_issue_in_project: "The project doesn't have any trackers for which you can create an issue"
230 230
  error_no_projects_with_tracker_allowed_for_new_issue: "There are no projects with trackers for which you can create an issue"
231 231
  error_move_of_child_not_possible: "Subtask %{child} could not be moved to the new project: %{errors}"
232
  error_move_of_time_entries_not_possible: "Spent time %{id} could not be moved to the new project: %{errors}"
232 233
  error_cannot_reassign_time_entries_to_an_issue_about_to_be_deleted: "Spent time cannot be reassigned to an issue that is about to be deleted"
233 234
  warning_fields_cleared_on_bulk_edit: "Changes will result in the automatic deletion of values from one or more fields on the selected objects"
234 235
  error_exceeds_maximum_hours_per_day: "Cannot log more than %{max_hours} hours on the same day (%{logged_hours} hours have already been logged)"
test/unit/issue_test.rb
1550 1550
    issue.save!
1551 1551
  end
1552 1552

  
1553
  def test_after_project_change_should_update_project_and_activity_of_time_entries
1554
    time_entry = TimeEntry.find(3)
1555
    assert_equal [1, 9], [time_entry.project_id, time_entry.activity_id]
1556

  
1557
    activity = TimeEntryActivity.create!(:name => 'Design', :parent_id => 9, :project_id => 3)
1558
    issue = Issue.find(3)
1559
    issue.project = Project.find(3)
1560

  
1561
    assert issue.save
1562

  
1563
    time_entry.reload
1564
    assert_equal [3, activity.id], [time_entry.project_id, time_entry.activity_id]
1565
  end
1566

  
1567
  def test_after_project_change_should_not_update_project_and_activity_of_time_entries_when_activity_is_inactive
1568
    time_entry = TimeEntry.find(3)
1569
    assert_equal [1, 9], [time_entry.project_id, time_entry.activity_id]
1570

  
1571
    TimeEntryActivity.create!(:name => 'Design', :active => false, :parent_id => 9, :project_id => 3)
1572
    issue = Issue.find(3)
1573
    issue.project = Project.find(3)
1574

  
1575
    assert !issue.save
1576
    assert_match /\ASpent time #3 could not be moved to the new project:/, issue.errors.full_messages.first
1577

  
1578
    time_entry.reload
1579
    assert_equal [1, 9], [time_entry.project_id, time_entry.activity_id]
1580
  end
1581

  
1553 1582
  def test_adding_journal_should_update_timestamp
1554 1583
    issue = Issue.find(1)
1555 1584
    updated_on_was = issue.updated_on
(5-5/5)