コード例 #1
0
        /// <summary>
        /// 대시보드 테이블을 업데이트한다.
        /// </summary>
        public FormTable UpdateFormTable(Guid formId, IFormTableUpdatable fields)
        {
            using (var repo = new FormTableRepository())
            {
                var formTable = repo.SelectFormTable(formId);
                if (formTable == null)
                {
                    throw new ObjectNotFoundException($"업데이트 할 대상 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\"");
                }

                List <UpdatedField> updated = null;
                formTable.Update(fields, out updated);

                if (repo.UpdateFormTable(formTable))
                {
                    logger.Info($"대시보드 정보가 업데이트 되었습니다. 대시보드: \"{formTable.Name}\""
                                + $"\r\n\r\n"
                                + $"updated: {UpdatedField.Print(updated)}"
                                + $"\r\n\r\n"
                                + $"{formTable}");

                    return(formTable);
                }

                return(null);
            }
        }
コード例 #2
0
 /// <summary>
 /// 대시보드 테이블 정보를 반환한다,
 /// </summary>
 public FormTable GetFormTable(Guid formId)
 {
     using (var repo = new FormTableRepository())
     {
         return(repo.SelectFormTable(formId));
     }
 }
コード例 #3
0
        /// <summary>
        /// 대시보드 테이블 html 양식을 업데이트한다.
        /// </summary>
        public FormHtmlTemplate UpdateFormHtmlTemplate(Guid formId, Guid templateId, IFormHtmlTemplateUpdatable fields)
        {
            using (var repo = new FormTableRepository())
            {
                var template = repo.SelectFormHtmlTemplate(formId, templateId);
                if (template == null)
                {
                    throw new ObjectNotFoundException($"업데이트 할 대상 대시보드 양식을 찾을 수 없습니다.\r\n양식 ID: \"{templateId}\"");
                }

                List <UpdatedField> updated = null;
                template.Update(fields, out updated);

                if (repo.UpdateFormHtmlTemplate(template))
                {
                    logger.Info($"대시보드 양식이 업데이트 되었습니다. 대시보드: \"{template.FormName}\""
                                + $"\r\n\r\n"
                                + $"updated: {UpdatedField.Print(updated)}"
                                + $"\r\n\r\n"
                                + $"{template}");

                    return(template);
                }

                return(null);
            }
        }
コード例 #4
0
 /// <summary>
 /// 대시보드 테이블 업무 영역을 반환한다.
 /// </summary>
 public FormTableSection GetFormTableSection(Guid formId, Guid formSectionId)
 {
     using (var repo = new FormTableRepository())
     {
         return(repo.SelectFormTableSection(formId, formSectionId));
     }
 }
コード例 #5
0
 /// <summary>
 /// 대시보드 테이블 html 양식 정보를 반환한다.
 /// </summary>
 public FormHtmlTemplate GetFormHtmlTemplate(Guid formId, Guid templateId)
 {
     using (var repo = new FormTableRepository())
     {
         return(repo.SelectFormHtmlTemplate(formId, templateId));
     }
 }
コード例 #6
0
        /// <summary>
        /// 대시보드 테이블 업무 영역을 업데이트한다. (필드만 업데이트한다.)
        /// </summary>
        public FormTableSection UpdateFormTableSectionFields(Guid formId, Guid formSectionId, IFormTableSectionUpdatable fields)
        {
            using (var repo = new FormTableRepository())
            {
                var formSection = repo.SelectFormTableSection(formId, formSectionId);
                if (formSection == null)
                {
                    throw new ObjectNotFoundException($"업데이트 할 대상 업무 영역을 찾을 수 없습니다.\r\n업무 영역 ID: \"{formSectionId}\"");
                }

                List <UpdatedField> updated = null;
                formSection.Update(fields, out updated);

                repo.BeginTransaction();

                try
                {
                    if (repo.UpdateFormTableSection(formSection, CurrentUser.UserId))
                    {
                        repo.InsertFormTableSectionGroupMembers(formId, formSectionId, fields.FileSourceUploaders, DateTimeOffset.Now);
                        repo.UpdateDateFileTemplate(formSection.FileTemplate);
                        repo.CommitTransaction();

                        logger.Info($"업무영이 업데이트 되었습니다. 업무영역: \"{formSection.FormSectionName}\""
                                    + $"\r\n\r\n"
                                    + $"updated: {UpdatedField.Print(updated)}"
                                    + $"\r\n\r\n"
                                    + $"{formSection}");

                        return(formSection);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"업무영역 필드 업데이트 중 알 수 없는 오류가 발생하였습니다.  업무영역: '{formSection.FormName}/{formSection.FormSectionName}'"
                                 + $"\r\n\r\n"
                                 + $"{formSection}");

                    try
                    {
                        repo.RollBackTransaction();
                    }
                    catch (Exception rex)
                    {
                        logger.Fatal(ex, $"업무영역 필드 업데이트 함수에서 롤백 실행중 치명적인 에러가 발생했습니다.  업무영역: '{formSection.FormName}/{formSection.FormSectionName}'"
                                     + $"\r\n\r\n"
                                     + $"{formSection}");

                        ExceptionDispatchInfo.Capture(rex).Throw();
                        // not reached
                    }

                    ExceptionDispatchInfo.Capture(ex).Throw();
                    return(null); // not reached
                }

                return(null);
            }
        }
コード例 #7
0
        /// <summary>
        /// 대시보드 테이블 업무 영역을 추가한다.
        /// </summary>
        public bool AddFormTableSection(FormTableSection formSection, IEnumerable <string> fileSourceUploaders)
        {
            using (var repo = new FormTableRepository())
            {
                repo.BeginTransaction();

                try
                {
                    if (repo.InsertFormTableSection(formSection))
                    {
                        repo.InsertFormTableSectionGroupMembers(formSection.FormId, formSection.FormSectionId, fileSourceUploaders, formSection.CreatedDate);

                        if (formSection.FileTemplate != null)
                        {
                            repo.InsertDateFileTemplate(formSection.FileTemplate);
                        }
                        else
                        {
                            logger.Warn($"업무영역 정보로부터 파일 템플릿 정보를 찾을 수 없습니다. 업무영역: \"{formSection.FormSectionName}\""
                                        + $"\r\n\r\n"
                                        + $"{formSection}");
                        }

                        repo.CommitTransaction();

                        logger.Info($"새 업무영역을 추가하였습니다. 업무영역: \"{formSection.FormSectionName}\""
                                    + $"\r\n\r\n"
                                    + $"{formSection}");

                        return(true);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"업무영역 추가 중 알 수 없는 오류가 발생하였습니다. 업무영역: \"{formSection.FormName}/{formSection.FormSectionName}\""
                                 + $"\r\n\r\n"
                                 + $"{formSection}");

                    try
                    {
                        repo.RollBackTransaction();
                    }
                    catch (Exception rex)
                    {
                        logger.Fatal(ex, $"업무영역 추가 함수에서 롤백 실행중 치명적인 에러가 발생했습니다. 업무영역: \"{formSection.FormName}/{formSection.FormSectionName}\""
                                     + $"\r\n\r\n"
                                     + $"{formSection}");

                        ExceptionDispatchInfo.Capture(rex).Throw();
                        // not reached
                    }

                    ExceptionDispatchInfo.Capture(ex).Throw();
                    return(false); // not reached
                }

                return(false);
            }
        }
コード例 #8
0
 /// <summary>
 /// 대시보드 테이블 html 양식 리스트를 반환한다.
 /// </summary>
 public FormHtmlTemplate[] GetFormHtmlTemplateList()
 {
     using (var repo = new FormTableRepository())
     {
         return(repo.SelectFormHtmlTemplateList()
                .ToArray());
     }
 }
コード例 #9
0
        /// <summary>
        /// 대시보드 테이블을 추가한다.
        /// </summary>
        public bool AddFormTable(FormTable formTable)
        {
            using (var repo = new FormTableRepository())
            {
                if (!formTable.HasHtmlTemplate)
                {
                    throw new ArgumentNullException($"대시보드에 해당하는 HTML양식을 찾을 수 없습니다. 대시보드: {formTable.Name}"
                                                    + $"\r\n"
                                                    + $"대시보드 ID: {formTable.FormId}");
                }

                repo.BeginTransaction();

                try
                {
                    if (repo.InsertFormTable(formTable))
                    {
                        if (repo.InsertFormHtmlTemplate(formTable.HtmlTemplate))
                        {
                            repo.CommitTransaction();

                            logger.Info($"새 대시보드를 추가하였습니다. 대시보드: \"{formTable.Name}\""
                                        + $"\r\n\r\n"
                                        + $"{formTable}");

                            return(true);
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"대시보드 추가 중 알 수 없는 오류가 발생하였습니다. 대시보드: \"{formTable.Name}\""
                                 + $"\r\n\r\n"
                                 + $"{formTable}");

                    try
                    {
                        repo.RollBackTransaction();
                    }
                    catch (Exception rex)
                    {
                        logger.Fatal(ex, $"대시보드 추가 함수에서 롤백 실행중 치명적인 에러가 발생했습니다. 대시보드: \"{formTable.Name}\""
                                     + $"\r\n\r\n"
                                     + $"{formTable}");

                        ExceptionDispatchInfo.Capture(rex).Throw();
                        // not reached
                    }

                    ExceptionDispatchInfo.Capture(ex).Throw();
                    return(false); // not reached
                }

                return(false);
            }
        }
コード例 #10
0
        /// <summary>
        /// 페이징 처리 된 대시보드 테이블 리스트를 반환한다,
        /// </summary>
        public PagedModel <FormTable> GetFormTablePagedList(PagingOption option)
        {
            option.ThrowIfNull(nameof(option));
            option.Validate();

            using (var repo = new FormTableRepository())
            {
                return(repo.SelectFormTablePagedList(option));
            }
        }
コード例 #11
0
        /// <summary>
        /// 대시보드의 특정 날짜 데이터 파일을 모두 확인 처리 한다.
        /// </summary>
        private bool ConfirmFormTableDataInternal(DashboardRepository repo, FormTable form, DateTimeOffset sourceDate)
        {
            // 날짜 범위에 해당하는 데이터를 모두 조회하기 위해 날짜 계산
            var dateRange = form.GetDateRangeByUploadInterval(sourceDate);

            var list = repo.SelectDataFileSourceListBySourceDateRange(form.FormId, dateRange.BeginDate, dateRange.EndDate)
                       .Where(o => !o.IsConfirmed)
                       .ToList();

            if (list.Any())
            {
                Guid htmlTemplateId = form.HtmlTemplateId;

                // 1. 대시보드 양식 html 사본을 생성한다.
                if (AppSettings.AppSetting <bool>("FormHtmlTemplate.CopyIfConfirmed"))
                {
                    htmlTemplateId = Guid.NewGuid();

                    using (var formRepo = new FormTableRepository())
                    {
                        var htmlTemplate = FormHtmlTemplate.CopyFrom(form.HtmlTemplate, htmlTemplateId);
                        formRepo.InsertFormHtmlTemplate(htmlTemplate);

                        logger.Info($"대상 대시보드의 양식이 사본 처리되었습니다. 대시보드: \"{form.Name}\""
                                    + $"\r\n\r\n"
                                    + $"대시보드 정보:"
                                    + $"{form}"
                                    + $"\r\n\r\n"
                                    + $"이전 양식 정보:"
                                    + $"{form.HtmlTemplate}"
                                    + $"\r\n\r\n"
                                    + $"신규 양식 정보:"
                                    + $"{htmlTemplate}");
                    }
                }

                // 2. 데이터 파일 소스 컨펌 처리
                foreach (var fileSource in list)
                {
                    repo.UpdateDataFileSourceAsConfirmed(form.FormId, fileSource.FileSourceId, htmlTemplateId, CurrentUser.UserId, DateTimeOffset.Now, fileSource.SourceDate);
                }

                logger.Info($"대상 대시보드의 실적 데이터 파일들을 확인 처리했습니다. 대시보드: \"{form.Name}\", 실적 기준일: \"{sourceDate.ToString("yyyy-MM-dd")}\""
                            + $"\r\n\r\n"
                            + $"대상 데이터 파일({list.Count}개): [\r\n"
                            + string.Join("\r\n", list.Select(o => "\t" + o.ToString()))
                            + $"\r\n"
                            + $"]");

                return(true);
            }

            return(false);
        }
コード例 #12
0
        /// <summary>
        /// 대시보드 테이블 리스트를 반환한다,
        /// </summary>
        public FormTable[] GetFormTableList()
        {
            using (var repo = new FormTableRepository())
            {
                string queryUserId = null;
                if (!CurrentUser.HasPermission(UserPermission.DataReview))
                {
                    queryUserId = CurrentUser.UserId;
                }

                return(repo.SelectFormTableList(queryUserId)
                       .ToArray());
            }
        }
コード例 #13
0
        /// <summary>
        /// 대시보드 테이블 html 양식을 추가한다.
        /// </summary>
        public bool AddFormHtmlTemplate(FormHtmlTemplate template)
        {
            using (var repo = new FormTableRepository())
            {
                if (repo.InsertFormHtmlTemplate(template))
                {
                    logger.Info($"새 대시보드 테이블 양식을 추가하였습니다. 대시보드: \"{template.FormName}\""
                                + $"\r\n\r\n"
                                + $"{template}");

                    return(true);
                }

                return(false);
            }
        }
コード例 #14
0
        /// <summary>
        /// 대시보드 테이블 업무 영역을 반환한다.
        /// </summary>
        /// <param name="date">값이 있는 경우, 해당 날짜의 데이터 파일 소스 정보를 반환</param>
        public FormTableSection[] GetFormTableSectionList(Guid?formId = null, DateTimeOffset?date = null)
        {
            using (var repo = new FormTableRepository())
            {
                string queryUserId = null;
                if (!CurrentUser.HasPermission(UserPermission.DataReview))
                {
                    queryUserId = CurrentUser.UserId;
                }

                List <DataDateRange> dateRangeList = null;

                if (date != null)
                {
                    dateRangeList = GetDateRangeByUploadInterval(date.Value, true).ToList();
                }

                return(repo.SelectFormTableSectionList(formId, queryUserId, dateRangeList).ToArray());
            }
        }
コード例 #15
0
        /// <summary>
        /// 대시보드 테이블 업무 영역을 삭제한다.
        /// </summary>
        public bool DeleteFormTableSection(Guid formId, Guid formSectionId)
        {
            using (var repo = new FormTableRepository())
            {
                var formSection = repo.SelectFormTableSection(formId, formSectionId);
                if (formSection == null)
                {
                    throw new ObjectNotFoundException($"삭제 할 대상 업무 영역을 찾을 수 없습니다.\r\n업무영역 ID: \"{formSectionId}\"");
                }

                if (repo.DeleteFormTableSection(formId, formSectionId, CurrentUser.UserId, DateTimeOffset.Now))
                {
                    logger.Info($"업무영역을 삭제하였습니다. 업무영역: {formSection.FormSectionName}"
                                + $"\r\n\r\n"
                                + $"{formSection}");

                    return(true);
                }

                return(false);
            }
        }
コード例 #16
0
        /// <summary>
        /// 대시보드 테이블을 삭제한다.
        /// </summary>
        public bool DeleteFormTable(Guid formId)
        {
            using (var repo = new FormTableRepository())
            {
                var formTable = repo.SelectFormTable(formId);
                if (formTable == null)
                {
                    throw new ObjectNotFoundException($"삭제 할 대상 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\"");
                }

                if (repo.DeleteFormTable(formId, CurrentUser.UserId, DateTimeOffset.Now))
                {
                    logger.Info($"대시보드를 삭제하였습니다. 대시보드: \"{formTable.Name}\""
                                + $"\r\n\r\n"
                                + $"{formTable}");

                    return(true);
                }

                return(false);
            }
        }
コード例 #17
0
        /// <summary>
        /// 대상 대시보드의 양식 HTML을 사본처리한다.
        /// </summary>
        public FormHtmlTemplate CopyFormHtmlTemplate(Guid formId, Guid templateId)
        {
            var newTemplateId = Guid.NewGuid();

            using (var repo = new FormTableRepository())
            {
                var form = repo.SelectFormTable(formId);
                if (form == null || form.IsDeleted)
                {
                    throw new ObjectNotFoundException($"사본 처리 할 대시보드를 찾을 수 없습니다.\r\n대시보드 ID: \"{formId}\"");
                }

                var old = repo.SelectFormHtmlTemplate(formId, templateId);
                if (old == null)
                {
                    throw new ObjectNotFoundException($"사본 처리 할 대시보드 양식을 찾을 수 없습니다.\r\n양식 ID: \"{templateId}\"");
                }

                repo.BeginTransaction();

                try
                {
                    // 1. 새 HTML 사본 레코드를 DB에 추가
                    var htmlTemplate = FormHtmlTemplate.CopyFrom(old, newTemplateId);
                    if (repo.InsertFormHtmlTemplate(htmlTemplate))
                    {
                        // 2. 대시보드가 참조하고 있는 HTML 양식 ID를 업데이트
                        form.HtmlTemplateId = newTemplateId;
                        form.HtmlTemplate   = htmlTemplate;
                        repo.UpdateFormTable(form);

                        repo.CommitTransaction();

                        logger.Info($"대시보드 양식이 사본 처리되었습니다. 대시보드: \"{old.FormName}\""
                                    + $"\r\n새 양식 ID: \"{newTemplateId}\", 사본 처리된 양식 ID: \"{templateId}\""
                                    + $"\r\n\r\n"
                                    + $"새 양식 정보: \r\n"
                                    + $"{htmlTemplate}");

                        return(htmlTemplate);
                    }

                    throw new InvalidOperationException($"대상 대시보드의 새 양식을 DB에 등록하지 못했습니다.\r\n대시보드: \"{form.Name}({formId})\""
                                                        + $"\r\n새 양식 ID: \"{newTemplateId}\", 사본 처리된 양식 ID: \"{templateId}\"");
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"대시보드 양식을 사본 처리하는 도중 알 수 없는 오류가 발생하였습니다. 대시보드: \"{form.Name}({formId})\"");

                    try
                    {
                        repo.RollBackTransaction();
                    }
                    catch (Exception rex)
                    {
                        logger.Fatal(ex, $"대시보드 양식을 사본 처리하는 함수에서 롤백 실행 중 치명적인 에러가 발생했습니다. 대시보드: \"{form.Name}({formId})\"");

                        ExceptionDispatchInfo.Capture(rex).Throw();
                        // not reached
                    }

                    ExceptionDispatchInfo.Capture(ex).Throw();
                    return(null); // not reached
                }
            }
        }
コード例 #18
0
        /// <summary>
        /// 대시보드 테이블 업무 영역을 업데이트한다.
        /// </summary>
        public FormTableSection UpdateFormTableSection(FormTableSection formSection, IEnumerable <string> fileSourceUploaders)
        {
            formSection.ThrowIfNull(nameof(formSection));

            using (var repo = new FormTableRepository())
            {
                var old = repo.SelectFormTableSection(formSection.FormId, formSection.FormSectionId);
                if (old == null)
                {
                    throw new ObjectNotFoundException($"업데이트될 업무영역을 찾을 수 없습니다. 업무영역: \"{formSection.FormSectionName}\""
                                                      + $"\r\n"
                                                      + $"업무영역 ID: {formSection.FileSourceId}");
                }

                repo.BeginTransaction();

                try
                {
                    var diff = old.Diff(formSection);

                    if (repo.UpdateFormTableSection(formSection, CurrentUser.UserId))
                    {
                        repo.InsertFormTableSectionGroupMembers(formSection.FormId, formSection.FormSectionId, fileSourceUploaders, DateTimeOffset.Now);

                        if (old.FileTemplateId != formSection.FileTemplateId)
                        {
                            repo.InsertDateFileTemplate(formSection.FileTemplate);
                        }
                        else
                        {
                            repo.UpdateDateFileTemplate(formSection.FileTemplate);
                        }

                        repo.CommitTransaction();

                        logger.Info($"업무영역이 업데이트 되었습니다. 업무영역: \"{formSection.FormSectionName}\""
                                    + $"\r\n\r\n"
                                    + $"updated: {UpdatedField.Print(diff)}"
                                    + $"\r\n\r\n"
                                    + $"{formSection}");

                        return(formSection);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error(ex, $"업무영역 업데이트 중 확인 중 알 수 없는 오류가 발생하였습니다. 업무영역: \"{formSection.FormName}/{formSection.FormSectionName}\""
                                 + $"\r\n\r\n"
                                 + $"{formSection}");

                    try
                    {
                        repo.RollBackTransaction();
                    }
                    catch (Exception rex)
                    {
                        logger.Fatal(ex, $"업무영역 업데이트 함수에서 롤백 실행중 치명적인 에러가 발생했습니다. 업무영역: \"{formSection.FormName}/{formSection.FormSectionName}\""
                                     + $"\r\n\r\n"
                                     + $"{formSection}");

                        ExceptionDispatchInfo.Capture(rex).Throw();
                        // not reached
                    }

                    ExceptionDispatchInfo.Capture(ex).Throw();
                    return(null); // not reached
                }

                return(null);
            }
        }