diff --git a/APP/src/app/core/models/permission.model.ts b/APP/src/app/core/models/permission.model.ts index 982c539..2f9ac40 100644 --- a/APP/src/app/core/models/permission.model.ts +++ b/APP/src/app/core/models/permission.model.ts @@ -24,6 +24,7 @@ export const PermissionModules = { OfferingSessions: 'OfferingSessions', Ministries: 'Ministries', FinanceDashboard: 'FinanceDashboard', + Form990Report: 'Form990Report', MonthlyStatements: 'MonthlyStatements', ChurchProfile: 'ChurchProfile', Disbursements: 'Disbursements', diff --git a/APP/src/app/features/expense/components/expense-form-dialog/expense-form-dialog.component.ts b/APP/src/app/features/expense/components/expense-form-dialog/expense-form-dialog.component.ts index f7440e5..7cb1bc4 100644 --- a/APP/src/app/features/expense/components/expense-form-dialog/expense-form-dialog.component.ts +++ b/APP/src/app/features/expense/components/expense-form-dialog/expense-form-dialog.component.ts @@ -146,6 +146,7 @@ export class ExpenseFormDialogComponent implements OnInit { checkNumber: this.mode === 'vendor' ? (this.form.checkNumber || null) : null, expenseDate, notes: null, + functionalClass: null, }; // The request and receipt are snapshotted here, so resetting the form right // after emitting is safe even though the parent saves asynchronously. diff --git a/APP/src/app/features/expense/models/expense.model.ts b/APP/src/app/features/expense/models/expense.model.ts index f02c6c7..0a9ce2c 100644 --- a/APP/src/app/features/expense/models/expense.model.ts +++ b/APP/src/app/features/expense/models/expense.model.ts @@ -1,5 +1,6 @@ export type ExpenseType = 'VendorPayment' | 'StaffReimbursement'; export type ExpenseStatus = 'Draft' | 'PendingApproval' | 'Approved' | 'Paid' | 'Rejected'; +export type FunctionalClass = 'Program' | 'ManagementGeneral' | 'Fundraising'; export interface PagedResult { items: T[]; totalCount: number; page: number; pageSize: number; totalPages: number; @@ -7,8 +8,8 @@ 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; } -export interface ExpenseCategoryGroupDto { id: number; name_en: string; name_zh: string | null; sortOrder: number; isActive: boolean; subCategories: ExpenseSubCategoryDto[]; 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; } export interface UpdateExpenseGroupRequest extends CreateExpenseGroupRequest { isActive: boolean; } export interface CreateExpenseSubCategoryRequest { groupId: number; name_en: string; name_zh: string | null; sortOrder: number; } @@ -19,7 +20,7 @@ export interface ExpenseListItemDto { ministryId: number; ministryName: string; categoryGroupId: number; categoryGroupName: string; subCategoryId: number; subCategoryName: string; vendorName: string | null; memberId: number | null; memberName: string | null; expenseDate: string; hasReceipt: boolean; - checkNumber: string | null; + checkNumber: string | null; functionalClass: FunctionalClass | null; } export interface ExpenseDto extends ExpenseListItemDto { notes: string | null; reviewNotes: string | null; @@ -28,7 +29,7 @@ export interface ExpenseDto extends ExpenseListItemDto { export interface CreateExpenseRequest { type: ExpenseType; ministryId: number; categoryGroupId: number; subCategoryId: number; amount: number; description: string; vendorName: string | null; memberId: number | null; - checkNumber: string | null; expenseDate: string; notes: string | null; + checkNumber: string | null; expenseDate: string; notes: string | null; functionalClass: FunctionalClass | null; } export type UpdateExpenseRequest = CreateExpenseRequest; export interface RejectExpenseRequest { reviewNotes: string | null; }