Exemplo n.º 1
0
        /// <summary>
        /// Iterates over list of time entries for a project to populate the
        /// hierarchical list.
        private TimeSpan AddProjectToList(TreeNode parent, TimeTrackerDataSet.ProjectsRow project)
        {
            TimeSpan entryTime, dayCumulative = new TimeSpan(), projectCumulative = new TimeSpan();
            TreeNode dayNode = null, entryNode;
            DateTime projectDay = DateTime.MinValue;

            foreach (TimeTrackerDataSet.TimeEntriesRow tRow in project.GetTimeEntriesRows())
            {
                // Ignore open entries
                if (tRow.IsEndTimeNull())
                {
                    continue;
                }

                // Scope for date range (not the most efficient...)
                if (tRow.StartTime.Date < startDateTimePicker.Value.Date ||
                    tRow.EndTime.Date > endDateTimePicker.Value.Date)
                {
                    continue;
                }

                // See if date has rolled over
                if (tRow.StartTime.Date > projectDay)
                {
                    if (dayNode != null)
                    {
                        dayNode.Text += FormatTimeSpan(dayCumulative);
                        dayCumulative = new TimeSpan();
                    }

                    projectDay = tRow.StartTime.Date;

                    dayNode = parent.Nodes.Add($"{projectDay:d} ");
                }

                entryTime = tRow.EndTime.Subtract(tRow.StartTime);

                // Add current time entry
                entryNode = dayNode.Nodes.Add($"{tRow.StartTime:t}-{tRow.EndTime:t} ");

                projectCumulative += entryTime;
                dayCumulative     += entryTime;

                entryNode.Text += FormatTimeSpan(entryTime);
            }

            // Last day must be updated
            if (dayNode != null)
            {
                dayNode.Text += FormatTimeSpan(dayCumulative);
            }

            return(projectCumulative);
        }