From 124b3b4dfcf9db5bec1e66ca360ecc71ddcbcbf0 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Thu, 2 Jul 2026 10:57:14 +0900 Subject: [PATCH] feat(admin): normalize combo and holiday policies --- .../BusinessDayCalculatorTests.cs | 1 + .../Pages/Announcements/AnnouncementEdit.razor | 12 +++++------- .../Admin/Pages/Clients/ClientDetail.razor | 9 ++------- .../Admin/Pages/Clients/ClientList.razor | 6 +----- .../Admin/Pages/ConsultingActivities.razor | 10 ++-------- .../Admin/Shared/BusinessDayCalculator.cs | 13 ++++++++++++- ..._SeedConsultingAndAnnouncementCommonCodes.sql | 16 ++++++++++++++++ docs/COMMON_CODE_POLICY.md | 2 ++ 8 files changed, 41 insertions(+), 28 deletions(-) create mode 100644 db/migrations/V030__SeedConsultingAndAnnouncementCommonCodes.sql diff --git a/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs b/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs index 14ac179..712acee 100644 --- a/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs +++ b/TaxBaik.Application.Tests/BusinessDayCalculatorTests.cs @@ -10,6 +10,7 @@ public class BusinessDayCalculatorTests [InlineData(2026, 8, 15, 2026, 8, 20)] [InlineData(2026, 9, 24, 2026, 9, 29)] [InlineData(2026, 10, 3, 2026, 10, 8)] + [InlineData(2027, 2, 6, 2027, 2, 10)] public void GetEffectiveDueDate_SkipsWeekendHolidayAndSubstituteHoliday( int dueYear, int dueMonth, int dueDay, int expectedYear, int expectedMonth, int expectedDay) diff --git a/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor b/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor index 319dece..a97cb9b 100644 --- a/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor +++ b/TaxBaik.Web/Components/Admin/Pages/Announcements/AnnouncementEdit.razor @@ -3,6 +3,7 @@ @attribute [Authorize] @using TaxBaik.Application.DTOs @using TaxBaik.Web.Services +@using TaxBaik.Web.Components.Admin.Shared @inject IAnnouncementBrowserClient AnnouncementClient @inject NavigationManager Navigation @inject ISnackbar Snackbar @@ -37,13 +38,10 @@ - - 일반 (파란색) - 배너 (주황색) — 중요 이벤트 - 긴급 (빨간색) — 마감 임박 - + diff --git a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor index 7b31648..95c1612 100644 --- a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor +++ b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientDetail.razor @@ -2,6 +2,7 @@ @attribute [Authorize] @using TaxBaik.Web.Services @using TaxBaik.Web.Services.AdminClients +@using TaxBaik.Web.Components.Admin.Shared @inject IClientBrowserClient ClientClient @inject IConsultingActivityBrowserClient ConsultingClient @inject NavigationManager Navigation @@ -103,12 +104,7 @@ - - @foreach (var t in serviceTypes) - { - @t - } - + consultations = []; - private static readonly string[] serviceTypes = ["기장대리", "세무조정", "양도세", "증여세", "상속세", "부가세", "종소세", "기타"]; private static readonly string[] results = ["", "상담완료", "추가자료 요청", "견적발송", "계약전환", "보류"]; private bool showAddForm; diff --git a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor index 6b68762..ea4b39d 100644 --- a/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor +++ b/TaxBaik.Web/Components/Admin/Pages/Clients/ClientList.razor @@ -28,11 +28,7 @@ Immediate="false" OnKeyUp="@OnSearchKeyUp" /> - - 전체 - 활성 - 비활성 - + 검색 diff --git a/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor b/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor index bb5cb62..f74dcfd 100644 --- a/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor +++ b/TaxBaik.Web/Components/Admin/Pages/ConsultingActivities.razor @@ -1,5 +1,6 @@ @page "/admin/consulting-activities" @using TaxBaik.Web.Services.AdminClients +@using TaxBaik.Web.Components.Admin.Shared @inject IConsultingActivityBrowserClient ActivityClient @inject IClientBrowserClient ClientClient @inject ISnackbar Snackbar @@ -103,14 +104,7 @@ @GetClientDisplayName(client) } - - 방문 상담 - 전화 상담 - 세무조사 대응 미팅 - 카카오톡 상담 - 이메일 자료 접수 - 기타 - + diff --git a/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs b/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs index 087c9c7..07b508c 100644 --- a/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs +++ b/TaxBaik.Web/Components/Admin/Shared/BusinessDayCalculator.cs @@ -24,7 +24,18 @@ public static class BusinessDayCalculator new(new DateOnly(2026, 9, 24), new DateOnly(2026, 9, 26)), new(new DateOnly(2026, 10, 3), new DateOnly(2026, 10, 5)), new(new DateOnly(2026, 10, 9), new DateOnly(2026, 10, 9)), - new(new DateOnly(2026, 12, 25), new DateOnly(2026, 12, 25)) + new(new DateOnly(2026, 12, 25), new DateOnly(2026, 12, 25)), + new(new DateOnly(2027, 1, 1), new DateOnly(2027, 1, 1)), + new(new DateOnly(2027, 2, 6), new DateOnly(2027, 2, 9)), + new(new DateOnly(2027, 3, 1), new DateOnly(2027, 3, 2)), + new(new DateOnly(2027, 5, 5), new DateOnly(2027, 5, 5)), + new(new DateOnly(2027, 5, 13), new DateOnly(2027, 5, 13)), + new(new DateOnly(2027, 6, 6), new DateOnly(2027, 6, 6)), + new(new DateOnly(2027, 8, 15), new DateOnly(2027, 8, 16)), + new(new DateOnly(2027, 9, 14), new DateOnly(2027, 9, 16)), + new(new DateOnly(2027, 10, 3), new DateOnly(2027, 10, 4)), + new(new DateOnly(2027, 10, 9), new DateOnly(2027, 10, 11)), + new(new DateOnly(2027, 12, 25), new DateOnly(2027, 12, 26)) }; private static readonly HashSet HolidayDates = BuildHolidayDates(); diff --git a/db/migrations/V030__SeedConsultingAndAnnouncementCommonCodes.sql b/db/migrations/V030__SeedConsultingAndAnnouncementCommonCodes.sql new file mode 100644 index 0000000..8a8d76a --- /dev/null +++ b/db/migrations/V030__SeedConsultingAndAnnouncementCommonCodes.sql @@ -0,0 +1,16 @@ +-- Additional common codes for admin combo policy normalization. +INSERT INTO common_codes (code_group, code_value, code_name, sort_order) VALUES +('CONSULTING_ACTIVITY_TYPE', '방문상담', '방문 상담', 10), +('CONSULTING_ACTIVITY_TYPE', '전화상담', '전화 상담', 20), +('CONSULTING_ACTIVITY_TYPE', '세무조사대응미팅', '세무조사 대응 미팅', 30), +('CONSULTING_ACTIVITY_TYPE', '카카오톡상담', '카카오톡 상담', 40), +('CONSULTING_ACTIVITY_TYPE', '이메일자료접수', '이메일 자료 접수', 50), +('CONSULTING_ACTIVITY_TYPE', '기타', '기타', 60), + +('ANNOUNCEMENT_DISPLAY_TYPE', 'info', '일반', 10), +('ANNOUNCEMENT_DISPLAY_TYPE', 'banner', '배너', 20), +('ANNOUNCEMENT_DISPLAY_TYPE', 'urgent', '긴급', 30) +ON CONFLICT (code_group, code_value) DO UPDATE +SET code_name = EXCLUDED.code_name, + sort_order = EXCLUDED.sort_order, + is_active = TRUE; diff --git a/docs/COMMON_CODE_POLICY.md b/docs/COMMON_CODE_POLICY.md index 22619f3..ac992ce 100644 --- a/docs/COMMON_CODE_POLICY.md +++ b/docs/COMMON_CODE_POLICY.md @@ -22,6 +22,8 @@ - `INQUIRY_SERVICE_TYPE` - `INQUIRY_STATUS` +- `CONSULTING_ACTIVITY_TYPE` +- `ANNOUNCEMENT_DISPLAY_TYPE` - `CLIENT_STATUS` - `CLIENT_SERVICE_TYPE` - `CLIENT_TAX_TYPE`