Ejemplo n.º 1
0
 private void onTaskStart(Task task)
 {
     if (runningTask != null)
     {
         onTaskStop(runningTask);
     }
     runningTask         = task;
     runningFact         = new TaskWorkFact();
     runningFact.TaskId  = task.Id.Value;
     runningFact.StartAt = DateTime.Now;
     using (var db = new TimeLoggerContext()) {
         db.TaskWorkFacts.Add(runningFact);
         db.SaveChanges();
     }
     CurrentTaskLabel.Content = runningTask;
 }
Ejemplo n.º 2
0
 private void onTaskStop(Task task)
 {
     if (runningTask == null)
     {
         return;
     }
     runningFact.EndAt = DateTime.Now;
     runningFact.updateManhour();
     using (var db = new TimeLoggerContext()) {
         db.TaskWorkFacts.Attach(runningFact);
         db.Entry(runningFact).State = EntityState.Modified;
         db.SaveChanges();
     }
     runningFact = null;
     runningTask = null;
     CurrentTaskLabel.Content = "未割当";
 }
        private async System.Threading.Tasks.Task loadMonthlyData(DateTime targetYearMonth)
        {
            status.Content = "集計中...";
            await System.Threading.Tasks.Task.Run(() => {
                DateTime monthFrom = targetYearMonth.AddDays(-(targetYearMonth.Day - 1));
                DateTime monthTo   = monthFrom.AddMonths(1).AddMilliseconds(-1);

                Dictionary <DateTime, AttendanceLeave> attendanceLeaves;
                List <TaskWorkFact> taskWorkFacts;
                using (var db = new TimeLoggerContext()) {
                    attendanceLeaves = db.AttendanceLeaves.Where(a => a.TargetDate >= monthFrom && a.TargetDate <= monthTo).ToDictionary(a => a.TargetDate.Date);
                    // ↓DBで集計させるべき
                    taskWorkFacts = db.TaskWorkFacts.Where(f => f.StartAt >= monthFrom && f.StartAt <= monthTo).ToList();
                    var hoge      = from task in db.TaskWorkFacts
                                    where task.StartAt >= monthFrom &&
                                    task.StartAt <= monthTo
                                    select task;
                }
                var workFactByDate = new Dictionary <DateTime, List <TaskWorkFact> >();
                foreach (var workfact in taskWorkFacts)
                {
                    var date      = workfact.StartAt.Date;
                    var workFacts = workFactByDate.Get(date);
                    if (workFacts == null)
                    {
                        workFacts            = new List <TaskWorkFact>();
                        workFactByDate[date] = workFacts;
                    }
                    workFacts.Add(workfact);
                }
                var workFactSummary = new Dictionary <DateTime, Dictionary </*task id*/ long, TaskWorkFact> >();
                var taskIds         = new HashSet <long>();
                foreach (var workfacts in workFactByDate)
                {
                    var summaries = new Dictionary <long, TaskWorkFact>();
                    foreach (var workfact in workfacts.Value)
                    {
                        var summary = summaries.Get(workfact.TaskId);
                        if (summary == null)
                        {
                            summary                    = new TaskWorkFact();
                            summary.TaskId             = workfact.TaskId;
                            summaries[workfact.TaskId] = summary;
                        }
                        summary.Manhour += workfact.Manhour;
                        if (summary.Manhour > 0)
                        {
                            taskIds.Add(summary.TaskId);
                        }
                    }
                    workFactSummary[workfacts.Key] = summaries;
                }

                Dictionary <long, Task> tasks;
                using (var db = new TimeLoggerContext()) {
                    tasks = db.Tasks.Where(t => taskIds.Contains(t.Id.Value)).OrderBy(t => t.TaskCode).ToDictionary(t => t.Id.Value);
                }
                Dispatcher.Invoke(() => {
                    workFactGrid.Columns.Clear();
                    foreach (var task in tasks)
                    {
                        var column     = new DataGridTextColumn();
                        column.Header  = task.Value.ToString();
                        column.Binding = new Binding("Data[t" + task.Value.Id + "].Manhour");
                        workFactGrid.Columns.Add(column);
                    }
                });

                var attendanceGridSource = new List <AttendanceLeave>();
                var workFactGridSource   = new List <MonthlySummaryWorkFactModel>();
                for (var processDate = monthFrom; processDate <= monthTo; processDate = processDate.AddDays(1))
                {
                    var attendanceLeave = attendanceLeaves.Get(processDate);
                    if (attendanceLeave == null)
                    {
                        attendanceLeave            = new AttendanceLeave();
                        attendanceLeave.TargetDate = processDate;
                    }
                    attendanceGridSource.Add(attendanceLeave);

                    var workFacts = new Dictionary <String, TaskWorkFact>();
                    var summaries = workFactSummary.Get(processDate);
                    if (summaries != null)
                    {
                        foreach (var summary in summaries.Values)
                        {
                            workFacts["t" + summary.TaskId] = summary;
                        }
                    }
                    workFactGridSource.Add(MonthlySummaryWorkFactModel.of(workFacts));
                }
                Dispatcher.Invoke(() => {
                    attendanceGrid.ItemsSource = attendanceGridSource;
                    workFactGrid.ItemsSource   = workFactGridSource;
                });

                var totalManhour = new Dictionary </*taskId*/ long, /*manhour*/ decimal>();
                foreach (var workFact in taskWorkFacts)
                {
                    var taskId  = workFact.TaskId;
                    var manhour = workFact.Manhour;

                    if (totalManhour.ContainsKey(taskId))
                    {
                        manhour += totalManhour[taskId];
                    }
                    totalManhour[taskId] = manhour;
                }
                var totalManhourGridSource = new List <TotalManhourModel>();
                foreach (var item in totalManhour)
                {
                    var task           = tasks[item.Key];
                    var model          = new TotalManhourModel();
                    model.DisplayName  = task.ToString();
                    model.TotalManhour = item.Value;
                    totalManhourGridSource.Add(model);
                }
                totalManhourGridSource.Sort((o1, o2) => o1.DisplayName.CompareTo(o2.DisplayName));
                Dispatcher.Invoke(() => totalWorkFactGrid.ItemsSource = totalManhourGridSource);
            });

            status.Content = "";
        }