コード例 #1
0
        public TSummaryModelDto BuildSummaryModel(DateTime?startDate, DateTime endDate)
        {
            Debug.Assert(!startDate.HasValue || startDate.Value.Kind != DateTimeKind.Utc, "Start Date should not be UTC!");
            Debug.Assert(endDate.Kind != DateTimeKind.Utc, "End Date should not be UTC!");

            var model = new TSummaryModelDto
            {
                Projects = _db.TProjects.Where(p => p.TUserID == mContext.TUserID).ToList().Select(p => Mapper.Map <TProjectDto>(p)).ToList()
            };

            var           taskToProject = model.Projects.SelectMany(p => p.TTasks.Select(t => new KeyValuePair <int, int>(t.TTaskID, t.TProjectID))).ToDictionary(t => t.Key, p => p.Value);
            List <TEntry> entries       = GetEntries(startDate, endDate, 0, 0);

            foreach (var taskEntry in entries.GroupBy(e => e.TTaskID))
            {
                if (taskToProject.ContainsKey(taskEntry.Key))
                {
                    var projectDto = model.Projects.SingleOrDefault(p => p.TProjectID == taskToProject[taskEntry.Key]);
                    if (projectDto != null)
                    {
                        var taskDto = projectDto.TTasks.SingleOrDefault(t => t.TTaskID == taskEntry.Key);
                        if (taskDto != null)
                        {
                            var report = new TracktorReport(startDate, endDate);
                            foreach (var entry in taskEntry)
                            {
                                var totalContrib = BucketEntry(entry, report);
                                if (!entry.EndDate.HasValue)
                                {
                                    taskDto.InProgress    = true;
                                    projectDto.InProgress = true;
                                    model.InProgress      = true;
                                }
                            }
                            taskDto.Contrib = report.GetContrib();
                        }
                    }
                }
            }

            return(model);
        }