/// <summary> /// テンプレート情報を全件取得する。 /// </summary> /// <returns>テンプレート情報</returns> internal ObservableCollection <TemplateData> Select() { var result = new ObservableCollection <TemplateData>(); using (var database = new MyLogDatabase(Constants.DatabaseFile())) { database.Open(); // カテゴリ情報を取得 var categoryEntity = new CategoryEntity(database); var categories = new Dictionary <long, string>(); using (var recset = categoryEntity.SelectVisible()) { while (recset.Read()) { categories.Add(recset.GetLong(CategoryEntity.Cols.Id), recset.GetString(CategoryEntity.Cols.Name)); } } var headerEntity = new TemplateEntity(database); var detailEntity = new TemplateDetailEntity(database); using (var recset = headerEntity.Select()) { while (recset.Read()) { // ヘッダ情報を取得 var templateData = new TemplateData { Id = recset.GetLong(TemplateEntity.Cols.Id), Name = recset.GetString(TemplateEntity.Cols.Name), Sun = recset.GetBool(TemplateEntity.Cols.Sun), Mon = recset.GetBool(TemplateEntity.Cols.Mon), Tue = recset.GetBool(TemplateEntity.Cols.Tue), Wed = recset.GetBool(TemplateEntity.Cols.Wed), Thu = recset.GetBool(TemplateEntity.Cols.Thu), Fri = recset.GetBool(TemplateEntity.Cols.Fri), Sat = recset.GetBool(TemplateEntity.Cols.Sat), LogList = new ObservableCollection <TemplateDetailData>() }; // 明細情報を取得 SelectDetailByTemplateId(templateData.LogList, detailEntity, templateData.Id, categories); result.Add(templateData); } } } return(result); }
/// <summary> /// テンプレート情報を更新する /// </summary> /// <param name="data">更新情報</param> /// <param name="isNew">true:新規、false:更新</param> /// <remarks>新規のケースもあるのでdelete → insertで処理を行う</remarks> internal void Update(TemplateData data, bool isNew) { using (var database = new MyLogDatabase(Constants.DatabaseFile())) { try { database.Open(); database.BeginTrans(); var headerEntity = new TemplateEntity(database); var detailEntity = new TemplateDetailEntity(database); // テンプレート情報(ヘッダ) headerEntity.Set(data); long id = data.Id; if (isNew) { id = headerEntity.Insert(); } else { headerEntity.Update(); } // テンプレート情報(明細) if (!isNew) { detailEntity.DeleteByTemplateId(id); } foreach (var detail in data.LogList) { if (detail.IsCategory) { continue; } detailEntity.Set(detail, id); detailEntity.Insert(); } database.CommitTrans(); } catch (Exception ex) { database.RollbackTrans(); throw ex; } } }
/// <summary> /// テンプレートからログを作成する。 /// </summary> /// <param name="templateId">テンプレートID</param> /// /// <param name="recordedOn">日付</param> /// <returns></returns> internal LogData CreateLogByTemplateId(long templateId, string recordedOn) { using (var database = new MyLogDatabase(Constants.DatabaseFile())) { database.Open(); try { database.BeginTrans(); var logEntity = new LogEntity(database) { RecordedOn = recordedOn }; var id = logEntity.Insert(); var templateDetailEntity = new TemplateDetailEntity(database); templateDetailEntity.InsertToLog(templateId, id); database.CommitTrans(); } catch (Exception ex) { database.RollbackTrans(); throw ex; } } return(this.SelectByRecordedOn(recordedOn)); }
/// <summary> /// テンプレート情報(明細)を取得 /// </summary> /// <param name="detailList">明細情報のリスト</param> /// <param name="entity">エンティティ</param> /// <param name="id">id</param> /// <param name="categories">カテゴリ情報</param> private void SelectDetailByTemplateId(ObservableCollection <TemplateDetailData> detailList, TemplateDetailEntity entity, long id, Dictionary <long, string> categories) { var startIndex = 0; using (var recset = entity.SelectByTemplateId(id)) { var currentCategory = -1L; while (recset.Read()) { var detail = new TemplateDetailData { CategoryId = recset.GetLong(LogDetailEntity.Cols.CategoryId), Priority = recset.GetInt(LogDetailEntity.Cols.Priority), 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(), }; detail.IsCategory = false; if (currentCategory != detail.CategoryId) { for (var i = startIndex; i < categories.Count; i++) { var categoryId = categories.ElementAt(i).Key; var category = new TemplateDetailData { IsCategory = true, CategoryId = categoryId, CategoryName = categories[categoryId] }; detailList.Add(category); if (categoryId == detail.CategoryId) { startIndex = i + 1; currentCategory = categoryId; break; } currentCategory = categoryId; } } detailList.Add(detail); } startIndex = -1; for (var i = 0; i < categories.Count; i++) { if (currentCategory == categories.ElementAt(i).Key) { startIndex = i; break; } } for (var i = startIndex + 1; i < categories.Count; i++) { var categoryId = categories.ElementAt((int)i).Key; var category = new TemplateDetailData { IsCategory = true, CategoryId = categoryId, CategoryName = categories[categoryId] }; detailList.Add(category); } } }