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; }
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 = ""; }