Пример #1
0
        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());
        }
Пример #2
0
        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);
        }
Пример #4
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);
        }
Пример #5
0
        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();
        }
Пример #6
0
        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));
        }
Пример #7
0
    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());
    }
Пример #8
0
        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;
        }
Пример #9
0
		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;
		}
Пример #10
0
        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);
                }
            }
        }