/// <summary> /// 記録日をキーとしてログ情報を取得 /// </summary> /// <param name="recordedOn">記録日</param> /// <returns>取得結果(該当情報が存在しない場合はnullを返却)</returns> internal LogData SelectByRecordedOn(string recordedOn) { LogData result = null; var startIndex = 0; using (var database = new MyLogDatabase(Constants.DatabaseFile())) { database.Open(); // ヘッダ情報を取得 var logId = 0L; var headerEntity = new LogEntity(database); using (var recset = headerEntity.SelectByRecordedOn(recordedOn)) { if (!recset.Read()) { return(result); } logId = recset.GetInt(LogEntity.Cols.Id); } result = new LogData { Id = logId, RecordedOn = recordedOn, LogList = new ObservableCollection <LogDetailData>() }; // カテゴリ情報を取得 var categories = new Dictionary <long, string>(); var categoryEntity = new CategoryEntity(database); using (var recset = categoryEntity.SelectVisible()) { while (recset.Read()) { categories.Add(recset.GetLong(CategoryEntity.Cols.Id), recset.GetString(CategoryEntity.Cols.Name)); } } // 明細情報を取得 var detailEntity = new LogDetailEntity(database); using (var recset = detailEntity.SelectByLogHId(logId)) { var currentCategory = -1L; while (recset.Read()) { var detail = new LogDetailData { Id = recset.GetLong(LogDetailEntity.Cols.Id), LogId = recset.GetLong(LogDetailEntity.Cols.LogId), CategoryId = recset.GetLong(LogDetailEntity.Cols.CategoryId), Priority = recset.GetInt(LogDetailEntity.Cols.Priority), Result = (ResultState)recset.GetInt(LogDetailEntity.Cols.Result), Todo = recset.GetString(LogDetailEntity.Cols.Todo), PlanStart = recset.GetString(LogDetailEntity.Cols.PlanStart), PlanEnd = recset.GetString(LogDetailEntity.Cols.PlanEnd), PlanTime = recset.GetInt(LogDetailEntity.Cols.PlanTime).ToString(), ActualStart = recset.GetString(LogDetailEntity.Cols.ActualStart), ActualEnd = recset.GetString(LogDetailEntity.Cols.ActualEnd), ActualTime = recset.GetInt(LogDetailEntity.Cols.ActualTime).ToString(), Memo = recset.GetString(LogDetailEntity.Cols.Memo) }; detail.Priority = recset.GetInt(LogDetailEntity.Cols.Priority); detail.IsCategory = false; if (currentCategory != detail.CategoryId) { for (var i = startIndex; i < categories.Count; i++) { var categoryId = categories.ElementAt(i).Key; var category = new LogDetailData { IsCategory = true, CategoryId = categoryId, CategoryName = categories[categoryId] }; result.LogList.Add(category); if (categoryId == detail.CategoryId) { currentCategory = categoryId; startIndex = i + 1; break; } currentCategory = categoryId; } } result.LogList.Add(detail); } startIndex = -1; for (var i = 0; i < categories.Count; i++) { if (currentCategory == categories.ElementAt((int)i).Key) { startIndex = i; break; } } for (var i = startIndex + 1; i < categories.Count; i++) { var categoryId = categories.ElementAt(i).Key; if (currentCategory < categoryId) { var category = new LogDetailData { IsCategory = true, CategoryId = categoryId, CategoryName = categories[categoryId] }; result.LogList.Add(category); } } } } return(result); }