public static async Task <TimeEntry> CopyTimeEntry(HarvestApi.HarvestClient client, TimeEntry entryToCopy, decimal?hour, string notes = null) { return(await client.CreateTimeEntry( entryToCopy.Project.Id, entryToCopy.Task.Id, hour.HasValue?hour.Value : entryToCopy.Hours, notes != null?notes : entryToCopy.Notes)); }
public static async Task <InteractiveProjectAndTaskSelectionResult> SelectProjectAndTask( HarvestApi.HarvestClient client, HarvestApi.Model.User me) { var myProjects = await client.GetAllProjectsAssignment(me.Id); var allClients = myProjects.ProjectAssignments .Select(pa => pa.Client) .Distinct() .OrderBy(c => c.Name) .ToArray(); var selectedClient = SelectionHelper.Select(allClients, c => { Console.ForegroundColor = ConsoleColor.Red; Console.Write(c.Name); Console.ResetColor(); Console.WriteLine(); }); if (selectedClient == null) { Console.WriteLine("Aborting."); return(null); } var projects = myProjects.ProjectAssignments .Where(pa => pa.Client.Id == selectedClient.Id) .Select(pa => pa.Project) .Distinct() .OrderBy(p => p.Name) .ToArray(); var selectedProject = SelectionHelper.Select(projects, p => { Console.ForegroundColor = ConsoleColor.Blue; Console.Write(p.Name); Console.ResetColor(); Console.WriteLine(); }); if (selectedProject == null) { return(null); } var tasks = myProjects.ProjectAssignments .Where(pa => pa.Project.Id == selectedProject.Id) .SelectMany(pa => pa.TaskAssignments) .Distinct() .OrderBy(ta => ta.Task.Name) .ToArray(); var selectedTask = SelectionHelper.Select(tasks, t => { Console.ForegroundColor = ConsoleColor.Magenta; Console.Write(t.Task.Name); Console.ResetColor(); Console.WriteLine(); })?.Task; if (selectedTask == null) { Console.WriteLine("Aborting."); return(null); } return(new InteractiveProjectAndTaskSelectionResult(selectedProject.Id, selectedTask.Id)); }