in backend/plugins/zentao/tasks/task_convertor.go [44:141]
func ConvertTask(taskCtx plugin.SubTaskContext) errors.Error {
data := taskCtx.GetData().(*ZentaoTaskData)
db := taskCtx.GetDal()
storyIdGen := didgen.NewDomainIdGenerator(&models.ZentaoStory{})
//bugIdGen := didgen.NewDomainIdGenerator(&models.ZentaoBug{})
boardIdGen := didgen.NewDomainIdGenerator(&models.ZentaoProject{})
executionIdGen := didgen.NewDomainIdGenerator(&models.ZentaoExecution{})
taskIdGen := didgen.NewDomainIdGenerator(&models.ZentaoTask{})
accountIdGen := didgen.NewDomainIdGenerator(&models.ZentaoAccount{})
cursor, err := db.Cursor(
dal.From(&models.ZentaoTask{}),
dal.Where(`project = ? and connection_id = ?`, data.Options.ProjectId, data.Options.ConnectionId),
)
if err != nil {
return err
}
defer cursor.Close()
convertor, err := api.NewDataConverter(api.DataConverterArgs{
InputRowType: reflect.TypeOf(models.ZentaoTask{}),
Input: cursor,
RawDataSubTaskArgs: api.RawDataSubTaskArgs{
Ctx: taskCtx,
Options: data.Options,
Table: RAW_TASK_TABLE,
},
Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
toolEntity := inputRow.(*models.ZentaoTask)
domainEntity := &ticket.Issue{
DomainEntity: domainlayer.DomainEntity{
Id: taskIdGen.Generate(toolEntity.ConnectionId, toolEntity.ID),
},
IssueKey: strconv.FormatInt(toolEntity.ID, 10),
Title: toolEntity.Name,
Description: toolEntity.Description,
Type: toolEntity.StdType,
OriginalType: "task",
OriginalStatus: toolEntity.Status,
ResolutionDate: toolEntity.ClosedDate.ToNullableTime(),
CreatedDate: toolEntity.OpenedDate.ToNullableTime(),
UpdatedDate: toolEntity.LastEditedDate.ToNullableTime(),
Priority: getPriority(toolEntity.Pri),
CreatorName: toolEntity.OpenedByName,
AssigneeName: toolEntity.AssignedToName,
Url: toolEntity.Url,
OriginalProject: getOriginalProject(data),
Status: toolEntity.StdStatus,
OriginalEstimateMinutes: int64(toolEntity.Estimate) * 60,
TimeSpentMinutes: int64(toolEntity.Consumed) * 60,
}
domainEntity.TimeRemainingMinutes = domainEntity.OriginalEstimateMinutes - domainEntity.TimeSpentMinutes
if toolEntity.Parent != 0 {
domainEntity.ParentIssueId = storyIdGen.Generate(data.Options.ConnectionId, toolEntity.Parent)
}
if toolEntity.OpenedById != 0 {
domainEntity.CreatorId = accountIdGen.Generate(data.Options.ConnectionId, toolEntity.OpenedById)
}
if toolEntity.AssignedToId != 0 {
domainEntity.AssigneeId = accountIdGen.Generate(data.Options.ConnectionId, toolEntity.AssignedToId)
}
if toolEntity.ClosedDate != nil {
domainEntity.LeadTimeMinutes = int64(toolEntity.ClosedDate.ToNullableTime().Sub(toolEntity.OpenedDate.ToTime()).Minutes())
}
var results []interface{}
if domainEntity.AssigneeId != "" {
issueAssignee := &ticket.IssueAssignee{
IssueId: domainEntity.Id,
AssigneeId: domainEntity.AssigneeId,
AssigneeName: domainEntity.AssigneeName,
}
results = append(results, issueAssignee)
}
domainBoardIssue := &ticket.BoardIssue{
BoardId: boardIdGen.Generate(data.Options.ConnectionId, data.Options.ProjectId),
IssueId: domainEntity.Id,
}
// Parent < 0 means that this is a parent task, not a subtask, so we don't need to create a sprint issue
if toolEntity.Execution > 0 && toolEntity.Parent >= 0 {
sprintIssueTask := &ticket.SprintIssue{
SprintId: executionIdGen.Generate(toolEntity.ConnectionId, toolEntity.Execution),
IssueId: domainEntity.Id,
}
results = append(results, sprintIssueTask)
}
results = append(results, domainEntity, domainBoardIssue)
return results, nil
},
})
if err != nil {
return err
}
return convertor.Execute()
}