From d8e6f3ed6111df4b7ce7a0e11b86adf8207dac5d Mon Sep 17 00:00:00 2001 From: Chris Chen Date: Thu, 25 Jun 2026 17:50:12 -0700 Subject: [PATCH] feat(1099): add 1099 box dropdowns to category admin page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirror the 990-line dropdown in both the group and subcategory edit dialogs: add form1099BoxId to the frontend group/subcategory DTOs and request interfaces, load boxes via a new getForm1099Boxes() method on ExpenseCategoryApiService (same label pattern as getForm990Lines: "boxCode — name_en / name_zh"), wire form1099BoxId into all open/edit/save paths, and render a side-by-side "1099 Box / 1099 框" Kendo DropdownList with [valuePrimitive]="true" and "— none —" default. Co-Authored-By: Claude Opus 4.8 --- .../features/expense/models/expense.model.ts | 10 +++++---- .../expense-categories-page.component.html | 22 +++++++++++++++++-- .../expense-categories-page.component.ts | 19 +++++++++------- .../services/expense-category-api.service.ts | 6 +++++ 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/APP/src/app/features/expense/models/expense.model.ts b/APP/src/app/features/expense/models/expense.model.ts index 48cc39d..a0136ed 100644 --- a/APP/src/app/features/expense/models/expense.model.ts +++ b/APP/src/app/features/expense/models/expense.model.ts @@ -8,11 +8,11 @@ export interface PagedResult { export interface MinistryDto { id: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; label?: string; } -export interface ExpenseSubCategoryDto { id: number; groupId: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; label?: string; form990LineId: number | null; form990LineCode: string | null; } -export interface ExpenseCategoryGroupDto { id: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; subCategories: ExpenseSubCategoryDto[]; label?: string; form990LineId: number | null; form990LineCode: string | null; } -export interface CreateExpenseGroupRequest { name_en: string; name_zh: string | null; sortOrder: number; form990LineId: number | null; } +export interface ExpenseSubCategoryDto { id: number; groupId: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; label?: string; form990LineId: number | null; form990LineCode: string | null; form1099BoxId: number | null; form1099BoxCode: string | null; } +export interface ExpenseCategoryGroupDto { id: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; subCategories: ExpenseSubCategoryDto[]; label?: string; form990LineId: number | null; form990LineCode: string | null; form1099BoxId: number | null; form1099BoxCode: string | null; } +export interface CreateExpenseGroupRequest { name_en: string; name_zh: string | null; sortOrder: number; form990LineId: number | null; form1099BoxId: number | null; } export interface UpdateExpenseGroupRequest extends CreateExpenseGroupRequest { isActive: boolean; } -export interface CreateExpenseSubCategoryRequest { groupId: number; name_en: string; name_zh: string | null; sortOrder: number; form990LineId: number | null; } +export interface CreateExpenseSubCategoryRequest { groupId: number; name_en: string; name_zh: string | null; sortOrder: number; form990LineId: number | null; form1099BoxId: number | null; } export interface UpdateExpenseSubCategoryRequest extends CreateExpenseSubCategoryRequest { isActive: boolean; } export interface ExpenseLineItemDto { @@ -28,6 +28,7 @@ export interface ExpenseListItemDto { expenseDate: string; hasReceipt: boolean; checkNumber: string | null; reviewedByName: string | null; reviewedAt: string | null; reviewNotes: string | null; + payeeId: number | null; } export interface ExpenseDto extends ExpenseListItemDto { notes: string | null; @@ -70,6 +71,7 @@ export interface CreateExpenseRequest { type: ExpenseType; ministryId: number; lines: ExpenseLineInput[]; description: string; vendorName: string | null; memberId: number | null; checkNumber: string | null; expenseDate: string; notes: string | null; + payeeId: number | null; } export type UpdateExpenseRequest = CreateExpenseRequest; export interface RejectExpenseRequest { reviewNotes: string | null; } diff --git a/APP/src/app/features/expense/pages/expense-categories-page/expense-categories-page.component.html b/APP/src/app/features/expense/pages/expense-categories-page/expense-categories-page.component.html index 458050b..d89e260 100644 --- a/APP/src/app/features/expense/pages/expense-categories-page/expense-categories-page.component.html +++ b/APP/src/app/features/expense/pages/expense-categories-page/expense-categories-page.component.html @@ -91,7 +91,7 @@ Sort order - -