public void GetTimeEntriesByDateRange() { var startDate = DateTime.Now.AddMonths(-2); var endDate = DateTime.Now.AddMonths(-1); for (int i = 0; i < 3; i++) { var te = TimeEntryService.Add(new TimeEntry() { IsBillable = true, CreatedWith = "TogglAPI.Net", Duration = 900, Start = startDate.AddMonths(i).ToIsoDateStr(), WorkspaceId = DefaultWorkspaceId }); Assert.IsNotNull(te); } var rte = new TimeEntryParams { StartDate = startDate, EndDate = endDate }; Assert.AreEqual(2, TimeEntryService.List(rte).Count()); rte = new TimeEntryParams { StartDate = startDate, EndDate = DateTime.Now }; Assert.AreEqual(3, TimeEntryService.List(rte).Count()); }
private List <TimeEntry> RetrieveTime(DateTime date) { TimeEntryParams prams = new TimeEntryParams(); prams.StartDate = date.Date; prams.EndDate = date.Date.AddDays(1).AddTicks(-1); return(TimeEntryService.List(prams)); }
public void GetTimeEntriesByDateRange(DateTime from, DateTime to) { var rte = new TimeEntryParams(); rte.StartDate = from; rte.EndDate = to; var entries = timeEntrySrv.List(rte); Assert.GreaterOrEqual(entries.Count(), 0); }
List <ExtendedTimeEntry> GetEntries(DateTime from, DateTime to, long workspaceId) { var timeEntryParams = new TimeEntryParams { StartDate = from, EndDate = to, WorkspaceId = workspaceId }; List <ExtendedTimeEntry> entries = timeEntryService.List(timeEntryParams) .Where(x => x.WorkspaceId.Value == workspaceId) .Select(x => new ExtendedTimeEntry(x)).ToList(); foreach (var entry in entries) { foreach (var clientNameResolver in clientNameResolvers.OrderByDescending(x => x.Weight)) { if (entry.IsClientNameDefined == true) { break; } if (clientNameResolver.TryResolve(entry, out IClient client)) { entry.DefineClientName(client.Name); } } foreach (var projectNameResolver in projectNameResolvers.OrderByDescending(x => x.Weight)) { if (entry.IsProjectNameDefined == true) { break; } if (projectNameResolver.TryResolve(entry, out IProject project)) { entry.DefineProjectName(project.Name); } } foreach (var tagResolver in tagResolvers.OrderByDescending(x => x.Weight)) { // maybe break here in case we already have found tag? if (tagResolver.TryResolve(entry, out ITag tag)) { entry.AddTagName(tag.Name); } } } return(entries); }
static void Main(string[] args) { String apiKey = TogglToExcel.Properties.Resources.APIKey; var projectService = new Toggl.Services.ProjectService(apiKey); var timeService = new Toggl.Services.TimeEntryService(apiKey); var rte = new TimeEntryParams { StartDate = new DateTime(2015, 11, 9), EndDate = DateTime.Now }; var projectHash = GetProjectHash(timeService.List(rte), projectService.List()); WriteHashToConsole(projectHash); WriteToExcel(projectHash); End(); }
static void Backup(Options options) { var timeEntryService = new Toggl.Services.TimeEntryService(options.ApiKey); var prams = new TimeEntryParams { StartDate = options.StartDate, EndDate = options.EndDate, }; Console.WriteLine("Options"); Console.WriteLine(JsonConvert.SerializeObject(options, Formatting.Indented)); var output = new List <TimeEntry>(); var cont = true; while (cont) { List <TimeEntry> entries; try { entries = timeEntryService.List(prams); } catch (WebException e) { Console.WriteLine($"{e.Message}. Make sure your API key is correct"); return; } output.AddRange(entries); if (entries.Count == 1000) { Console.WriteLine("More than 1k"); TimeEntry lastEntry = entries.Last(); Console.WriteLine($"Last entry {lastEntry.Stop}"); var newdate = DateTime.Parse(lastEntry.Stop); prams.StartDate = newdate; } else { cont = false; } } var distinct = output.Distinct(new TimeEntryComparer()); Console.WriteLine($"Found {distinct.Count()} entires"); File.WriteAllText($"{Directory.GetCurrentDirectory()}/{options.OutputFileName}", JsonConvert.SerializeObject(distinct, Formatting.Indented)); }
public async Task <WorkLogEntry[]> GetEntriesAsync( DateTime startDate, DateTime endDate, ICollection <string> jiraProjectKeys, int roundMinutes ) { var timeEntryParams = new TimeEntryParams { StartDate = startDate, EndDate = endDate }; var togglTimeEntries = (await _timeEntryService.GetAllAsync(timeEntryParams)) .Where(w => !string.IsNullOrEmpty(w.Description) && w.Stop != null); return(togglTimeEntries .Select(t => ToWorkLogEntry(t, _options.Value.DescriptionTemplate, jiraProjectKeys, roundMinutes)) .WhereNotNull() .ToArray()); }
public virtual void Init() { WorkspaceService = new WorkspaceService(Constants.ApiToken); var workspaces = WorkspaceService.List(); ClientService = new ClientService(Constants.ApiToken); TaskService = new TaskService(Constants.ApiToken); TagService = new TagService(Constants.ApiToken); ProjectService = new ProjectService(Constants.ApiToken); UserService = new UserService(Constants.ApiToken); TimeEntryService = new TimeEntryService(Constants.ApiToken); ReportService = new ReportService(Constants.ApiToken); DashboardService = new DashboardService(Constants.ApiToken); foreach (var workspace in workspaces) { var projects = WorkspaceService.Projects(workspace.Id.Value); var tasks = WorkspaceService.Tasks(workspace.Id.Value); var tags = WorkspaceService.Tags(workspace.Id.Value); // TODO var users = WorkspaceService.Users(workspace.Id.Value); // TODO var clients = WorkspaceService.Clients(workspace.Id.Value); var rte = new TimeEntryParams { StartDate = DateTime.Now.AddYears(-1) }; var timeEntries = TimeEntryService.List(rte); Assert.IsTrue(TimeEntryService.DeleteIfAny(timeEntries.Select(te => te.Id.Value).ToArray())); Assert.IsTrue(ProjectService.DeleteIfAny(projects.Select(p => p.Id.Value).ToArray())); Assert.IsTrue(TaskService.DeleteIfAny(tasks.Select(t => t.Id.Value).ToArray())); Assert.IsTrue(ClientService.DeleteIfAny(clients.Select(c => c.Id.Value).ToArray())); Assert.IsFalse(WorkspaceService.Projects(workspace.Id.Value).Any()); Assert.IsFalse(WorkspaceService.Tasks(workspace.Id.Value).Any()); Assert.IsFalse(WorkspaceService.Clients(workspace.Id.Value).Any()); Assert.IsFalse(TimeEntryService.List(rte).Any()); } DefaultWorkspaceId = workspaces.First().Id.Value; }
public virtual void Init() { WorkspaceService = new WorkspaceService(Constants.ApiToken); var workspaces = WorkspaceService.List(); ClientService = new ClientService(Constants.ApiToken); TaskService = new TaskService(Constants.ApiToken); TagService = new TagService(Constants.ApiToken); ProjectService = new ProjectService(Constants.ApiToken); UserService = new UserService(Constants.ApiToken); TimeEntryService = new TimeEntryService(Constants.ApiToken); ReportService = new ReportService(Constants.ApiToken); foreach (var workspace in workspaces) { var projects = WorkspaceService.Projects(workspace.Id.Value); var tasks = WorkspaceService.Tasks(workspace.Id.Value); var tags = WorkspaceService.Tags(workspace.Id.Value); // TODO var users = WorkspaceService.Users(workspace.Id.Value); // TODO var clients = WorkspaceService.Clients(workspace.Id.Value); var rte = new TimeEntryParams { StartDate = DateTime.Now.AddYears(-1)}; var timeEntries = TimeEntryService.List(rte); Assert.IsTrue(TimeEntryService.DeleteIfAny(timeEntries.Select(te => te.Id.Value).ToArray())); Assert.IsTrue(ProjectService.DeleteIfAny(projects.Select(p => p.Id.Value).ToArray())); Assert.IsTrue(TaskService.DeleteIfAny(tasks.Select(t => t.Id.Value).ToArray())); Assert.IsTrue(ClientService.DeleteIfAny(clients.Select(c => c.Id.Value).ToArray())); Assert.IsFalse(WorkspaceService.Projects(workspace.Id.Value).Any()); Assert.IsFalse(WorkspaceService.Tasks(workspace.Id.Value).Any()); Assert.IsFalse(WorkspaceService.Clients(workspace.Id.Value).Any()); Assert.IsFalse(TimeEntryService.List(rte).Any()); } DefaultWorkspaceId = workspaces.First().Id.Value; }
public async Task PushTime(AppSetting settings, DateTime startDate, DateTime endDate) { //tra-74 if (settings == null) { throw new Exception("No Jira or Toggl credentials provided."); } this.VerifySetting(settings.JiraLogin, "JIRA login"); this.VerifySetting(settings.JiraPassword, "JIRA password"); this.VerifySetting(settings.JiraUrl, "JIRA URL"); this.VerifySetting(settings.TogglApiKey, "Toggl API Key"); var jira = Jira.CreateRestClient(settings.JiraUrl, settings.JiraLogin, settings.JiraPassword); var toggl = new TogglClient(settings.TogglApiKey); await Task.Run(async() => { var timeParams = new TimeEntryParams(); timeParams.StartDate = startDate.Date; timeParams.EndDate = endDate.Date; var entries = await toggl.TimeEntries.GetAllAsync(timeParams); foreach (var te in entries.Where(w => (w.TagNames == null || !w.TagNames.Contains(POSTED_TAG)) && !string.IsNullOrEmpty(w.Description))) { Debug.WriteLine(te.CreatedOn); Debug.WriteLine(te.UpdatedOn); Debug.WriteLine(te.Start); Debug.WriteLine(te.Stop); // have to manually convert DateTime to correct format for Toggl API (client library doesn't do it) te.UpdatedOn = DateTime.Parse(te.UpdatedOn).ToUniversalTime().ToString("o"); te.Start = DateTime.Parse(te.Start).ToUniversalTime().ToString("o"); te.Stop = DateTime.Parse(te.Stop).ToUniversalTime().ToString("o"); Debug.WriteLine(te.CreatedOn); Debug.WriteLine(te.UpdatedOn); Debug.WriteLine(te.Start); Debug.WriteLine(te.Stop); KeyValuePair <string, string> description = this.ParseDescription(te.Description); if (string.IsNullOrEmpty(description.Key)) { continue; } var issue = await jira.Issues.GetIssueAsync(description.Key); await issue.AddWorklogAsync(new Worklog(this.GetMinutes(te.Duration.GetValueOrDefault()), DateTime.Parse(te.Start), description.Value)); if (te.TagNames == null) { te.TagNames = new List <string>(); } te.TagNames.Add(POSTED_TAG); await toggl.TimeEntries.UpdateAsync(te); } }); //return Task.Run(() => // { // //Atlassian.Jira.Jira aa = new Atlassian.Jira.Jira("urlhere", "loginhere", "passwordhere"); // //var issue = aa.GetIssue("FLW6-2247"); // //issue.AddWorklog(new Atlassian.Jira.Worklog) // //var apiKey = "apikeyhere"; // //var t = new Toggl.Toggl(apiKey); // //var c = t.User.GetCurrent(); // //var timeSrv = new Toggl.Services.TimeEntryService(apiKey); // //var prams = new Toggl.QueryObjects.TimeEntryParams(); // //// there is an issue with the date ranges have // //// to step out of the range on the end. // //// To capture the end of the billing range day + 1 // //prams.StartDate = DateTime.Now.AddMonths(-1); // //prams.EndDate = DateTime.Now.AddMonths(1); // //var hours = timeSrv.List(prams) // // .Where(w => !string.IsNullOrEmpty(w.Description)).ToList(); // }); }
public void GetTasks(bool bSilent = false) { try { if (toggl != null) { var p = new TimeEntryParams(); p.StartDate = SelectedDate; p.EndDate = SelectedDate.AddDays(1); var e = toggl.TimeEntry.List(p); var d = new Dictionary <string, string>(); var pr = new List <long>(); foreach (var t in e) { if (t.Description != string.Empty && t.Description != null && !d.ContainsKey(t.Description) && t.Duration > 0) { string project = string.Empty; bool bChecked = false; foreach (var i in togglProjects) { if (i.Id == t.ProjectId) { project = i.Name; bChecked = i.IsChecked; break; } } if (bChecked) { d.Add(t.Description, project); } if (!pr.Contains(Convert.ToInt64(t.ProjectId))) { pr.Add(Convert.ToInt64(t.ProjectId)); } } } togglTasks = new List <TogglTask>(); foreach (var t in d) { togglTasks.Add(new TogglTask(t.Key, t.Value, e, this)); } togglTasks.Sort((c1, c2) => c1.Name.CompareTo(c2.Name)); foreach (var t in togglProjects.ToArray()) { if (!pr.Contains(Convert.ToInt64((t.Id)))) { togglProjects.Remove(t); } } GetTotalTime(); GetTotalTimeAdjusted(); OnPropertyChanged("TogglTasks"); OnPropertyChanged("TogglProjects"); } } catch (Exception ex) { if (!bSilent) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Warning); } } }