Пример #1
0
        async Task AddTaskTreeRecursive(IDictionary <string, Core.API.Task> tasks, string parentPath, IList <string> pathTokens)
        {
            if (pathTokens.Count == 0)
            {
                return;
            }

            var name        = pathTokens.First();
            var currentPath = parentPath != null ? parentPath + "|" + name : name;

            if (!tasks.ContainsKey(currentPath))
            {
                var task = new Core.API.Task
                {
                    name             = name,
                    externalId       = currentPath,
                    parentExternalId = parentPath,
                    bookable         = false,
                };
                await TaskService.AddTask(task);

                tasks.Add(currentPath, task);
            }

            await AddTaskTreeRecursive(tasks, currentPath, pathTokens.Skip(1).ToList());
        }
Пример #2
0
        public override async Task Execute()
        {
            var tasks = await TaskService.GetTaskHierarchy();

            var taskDictionary = await TaskService.CreateExternalIdDictionary(tasks);

            Logger.LogInformation($"Found {tasks.Count} existing timr root tasks.");

            var csvEntries = ParseFile();

            Logger.LogInformation($"CSV contains {csvEntries.Count} entries.");

            var csvTasks = csvEntries.Select(entry =>
            {
                var asyncTask = Task.Run(async() =>
                {
                    var taskTokens       = entry.Task.Split("|");
                    var parentTaskTokens = taskTokens.SkipLast(1).ToList();
                    await AddTaskTreeRecursive(taskDictionary, null, parentTaskTokens);

                    Core.API.Task task;
                    if (taskDictionary.TryGetValue(entry.Task, out var existingTask))
                    {
                        task = existingTask.Clone();
                    }
                    else
                    {
                        task = new Core.API.Task
                        {
                            externalId = entry.Task,
                            billable   = true,
                            bookable   = true
                        };
                    }

                    task.name             = taskTokens.Last();
                    task.parentExternalId = String.Join("|", parentTaskTokens);
                    task.bookable         = entry.Bookable;
                    task.billable         = entry.Billable;
                    task.description      = entry.Description;
                    task.start            = entry.Start;
                    task.startSpecified   = entry.Start.HasValue;
                    task.end          = entry.End;
                    task.endSpecified = entry.End.HasValue;
                    task.customField1 = entry.CustomField1;
                    task.customField2 = entry.CustomField2;
                    task.customField3 = entry.CustomField3;

                    return(task);
                });
                asyncTask.Wait();
                return(asyncTask.Result);
            }).ToList();

            await TaskService.SynchronizeTasksByExternalId(taskDictionary, csvTasks, updateTasks : updateTasks);
        }