feat(admin): normalize combo and holiday policies
TaxBaik CI/CD / build-and-deploy (push) Has been cancelled
TaxBaik CI/CD / build-and-deploy (push) Has been cancelled
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 @@
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" sm="6">
|
||||
<MudSelect @bind-Value="model.DisplayType"
|
||||
Label="유형"
|
||||
Variant="Variant.Outlined">
|
||||
<MudSelectItem Value="@("info")">일반 (파란색)</MudSelectItem>
|
||||
<MudSelectItem Value="@("banner")">배너 (주황색) — 중요 이벤트</MudSelectItem>
|
||||
<MudSelectItem Value="@("urgent")">긴급 (빨간색) — 마감 임박</MudSelectItem>
|
||||
</MudSelect>
|
||||
<CommonCodeSelect @bind-Value="model.DisplayType"
|
||||
Group="ANNOUNCEMENT_DISPLAY_TYPE"
|
||||
Label="유형"
|
||||
Class="mb-0" />
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" sm="6">
|
||||
|
||||
@@ -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 @@
|
||||
<MudDatePicker @bind-Date="newDate" Label="상담일" DateFormat="yyyy-MM-dd" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" sm="6">
|
||||
<MudSelect T="string" @bind-Value="newServiceType" Label="서비스 분야">
|
||||
@foreach (var t in serviceTypes)
|
||||
{
|
||||
<MudSelectItem Value="@t">@t</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<CommonCodeSelect @bind-Value="newServiceType" Group="CONSULTING_ACTIVITY_TYPE" Label="서비스 분야" Placeholder="선택" Clearable="true" />
|
||||
</MudItem>
|
||||
<MudItem xs="12">
|
||||
<MudTextField T="string" @bind-Value="newSummary" Label="상담 내용 *"
|
||||
@@ -183,7 +179,6 @@
|
||||
|
||||
private Domain.Entities.Client? client;
|
||||
private List<Domain.Entities.Consultation> consultations = [];
|
||||
private static readonly string[] serviceTypes = ["기장대리", "세무조정", "양도세", "증여세", "상속세", "부가세", "종소세", "기타"];
|
||||
private static readonly string[] results = ["", "상담완료", "추가자료 요청", "견적발송", "계약전환", "보류"];
|
||||
|
||||
private bool showAddForm;
|
||||
|
||||
@@ -28,11 +28,7 @@
|
||||
Immediate="false" OnKeyUp="@OnSearchKeyUp" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="3">
|
||||
<MudSelect @bind-Value="statusFilter" Label="상태" T="string">
|
||||
<MudSelectItem Value="@("")">전체</MudSelectItem>
|
||||
<MudSelectItem Value="@("active")">활성</MudSelectItem>
|
||||
<MudSelectItem Value="@("inactive")">비활성</MudSelectItem>
|
||||
</MudSelect>
|
||||
<CommonCodeSelect @bind-Value="statusFilter" Group="CLIENT_STATUS" Label="상태" Placeholder="전체" Clearable="true" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="2" Class="d-flex align-center">
|
||||
<MudButton Variant="Variant.Outlined" OnClick="@SearchAsync" FullWidth="true">검색</MudButton>
|
||||
|
||||
@@ -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 @@
|
||||
<MudSelectItem Value="@client.Id">@GetClientDisplayName(client)</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
<MudSelect T="string" @bind-Value="activityForm.ActivityType" Label="활동 유형" Variant="Variant.Outlined" FullWidth="true" Class="mb-4" Required="true">
|
||||
<MudSelectItem Value="@("방문 상담")">방문 상담</MudSelectItem>
|
||||
<MudSelectItem Value="@("전화 상담")">전화 상담</MudSelectItem>
|
||||
<MudSelectItem Value="@("세무조사 대응 미팅")">세무조사 대응 미팅</MudSelectItem>
|
||||
<MudSelectItem Value="@("카카오톡 상담")">카카오톡 상담</MudSelectItem>
|
||||
<MudSelectItem Value="@("이메일 자료 접수")">이메일 자료 접수</MudSelectItem>
|
||||
<MudSelectItem Value="@("기타")">기타</MudSelectItem>
|
||||
</MudSelect>
|
||||
<CommonCodeSelect @bind-Value="activityForm.ActivityType" Group="CONSULTING_ACTIVITY_TYPE" Label="활동 유형" Class="mb-4" Required="true" />
|
||||
<MudDatePicker @bind-Date="activityForm.ActivityDate" Label="활동일" Variant="Variant.Outlined" FullWidth="true" Class="mb-4" Required="true" />
|
||||
<MudTextField T="string" @bind-Value="activityForm.Description" Label="설명" Variant="Variant.Outlined" FullWidth="true" Lines="3" Class="mb-4" Required="true" />
|
||||
<MudDatePicker @bind-Date="activityForm.NextFollowupDate" Label="다음 팔로업일" Variant="Variant.Outlined" FullWidth="true" Class="mb-4" />
|
||||
|
||||
@@ -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<DateOnly> HolidayDates = BuildHolidayDates();
|
||||
|
||||
@@ -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;
|
||||
@@ -22,6 +22,8 @@
|
||||
|
||||
- `INQUIRY_SERVICE_TYPE`
|
||||
- `INQUIRY_STATUS`
|
||||
- `CONSULTING_ACTIVITY_TYPE`
|
||||
- `ANNOUNCEMENT_DISPLAY_TYPE`
|
||||
- `CLIENT_STATUS`
|
||||
- `CLIENT_SERVICE_TYPE`
|
||||
- `CLIENT_TAX_TYPE`
|
||||
|
||||
Reference in New Issue
Block a user