@page "/admin/tax-filings" @attribute [Authorize] @using TaxBaik.Application.Services @inject TaxFilingService FilingService @inject ClientService ClientService @inject ISnackbar Snackbar 신고 일정 관리
Tax Schedule 신고 일정 고객별 세금 신고 마감일을 관리하고 완료 처리합니다.
일정 추가
@if (showAddForm) { 새 신고 일정 @foreach (var t in TaxFilingService.FilingTypes) { @t } 저장 취소 } @code { private List pending = []; private List filed = []; private List overdue = []; private bool showAddForm; private Domain.Entities.Client? selectedClient; private string newFilingType = ""; private DateTime? newDueDate = DateTime.Today.AddDays(30); private string newMemo = ""; protected override async Task OnInitializedAsync() => await Reload(); private async Task Reload() { var all = (await FilingService.GetUpcomingAsync(365)).ToList(); // Also get filed ones by fetching all pending = all.Where(x => x.Status == "pending").ToList(); filed = all.Where(x => x.Status == "filed").ToList(); overdue = all.Where(x => x.Status == "overdue").ToList(); } private async Task> SearchClients(string value) { var (items, _) = await ClientService.GetPagedAsync(1, 20, search: value); return items; } private async Task AddFiling() { try { if (selectedClient == null) { Snackbar.Add("고객을 선택하세요.", Severity.Warning); return; } var filing = new Domain.Entities.TaxFiling { ClientId = selectedClient.Id, FilingType = newFilingType, DueDate = newDueDate?.ToUniversalTime() ?? DateTime.UtcNow, Status = "pending", Memo = string.IsNullOrWhiteSpace(newMemo) ? null : newMemo }; await FilingService.CreateAsync(filing); showAddForm = false; Snackbar.Add("신고 일정이 추가되었습니다.", Severity.Success); await Reload(); } catch (ValidationException ex) { Snackbar.Add(ex.Message, Severity.Error); } } }