読者です 読者をやめる 読者になる 読者になる

redmineのチケットをcsvからインポートするプラグインの機能でチケットの親子関係をサポートさせたい。

redmine

新規にissueを作るときにチケットのIDは予測できないようなので、新規チケットに対して子チケットを付けるのは無理ぽそうだけど、既存のチケットの変更はこれで行けた。

--- importer_controller.rb.old	2011-10-17 19:46:24.000000000 +0900
+++ importer_controller.rb	2012-03-28 14:55:50.253440900 +0900
@@ -15,7 +15,7 @@

ISSUE_ATTRS = [:id, :subject, :assigned_to, :fixed_version,
:author, :description, :category, :priority, :tracker, :status,
- :start_date, :due_date, :done_ratio, :estimated_hours]
+ :parent_issue_id, :start_date, :due_date, :done_ratio, :estimated_hours]

def index
unless defined? FasterCSV
@@ -153,7 +153,8 @@
category = IssueCategory.find_by_project_id_and_name(project.id, category_name)
assigned_to = User.find_by_login(row[attrs_map["assigned_to"]])
fixed_version = Version.find_by_name(row[attrs_map["fixed_version"]])
- 
+ parent_issue_id = row[attrs_map["parent_issue_id"]]
+
# new issue or find exists one
issue = Issue.new
journal = nil
@@ -179,7 +180,7 @@
query.add_filter("status_id", "*", [1])
query.add_filter(unique_attr, "=", [row[unique_field]])

- issues = Issue.find :all, :conditions => query.statement, :limit => 2, :include => [ :assigned_to, :status, :tracker, :project, :priority, :category, :fixed_version ]
+ issues = Issue.find :all, :conditions => query.statement, :limit => 2, :include => [ :assigned_to, :status, :tracker, :project, :priority, :category, :fixed_version, :parent_issue_id ]
end

if issues.size > 1
@@ -243,6 +244,7 @@
issue.fixed_version_id = fixed_version != nil ? fixed_version.id : issue.fixed_version_id
issue.done_ratio = row[attrs_map["done_ratio"]] || issue.done_ratio
issue.estimated_hours = row[attrs_map["estimated_hours"]] || issue.estimated_hours
+ issue.parent_issue_id = parent_issue_id != nil ? parent_issue_id : issue.parent_issue_id

# custom fields
issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c|

既存のチケットに対して親チケットを設定、変更、親チケットを外す(チケット番号を0で設定)はOK.
ただ、選択項目で「translation missing: ja, field_parent_issue_id」になるのはカッコ悪いので直したいんだけど…