+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
new file mode 100644
index 0000000..afef898
--- /dev/null
+++ b/APP/src/app/features/expense/components/expense-form-dialog/expense-form-dialog.component.ts
@@ -0,0 +1,110 @@
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+import { InputsModule } from '@progress/kendo-angular-inputs';
+import { ButtonsModule } from '@progress/kendo-angular-buttons';
+import { DialogsModule } from '@progress/kendo-angular-dialog';
+import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
+import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
+import { MinistryApiService } from '../../services/ministry-api.service';
+import { ExpenseCategoryApiService } from '../../services/expense-category-api.service';
+import { MemberApiService } from '../../../members/services/member-api.service';
+import { MemberListItemDto, memberDisplayName } from '../../../members/models/member.model';
+import {
+ MinistryDto, ExpenseCategoryGroupDto, ExpenseSubCategoryDto, ExpenseType, CreateExpenseRequest,
+} from '../../models/expense.model';
+
+export interface ExpenseFormResult { request: CreateExpenseRequest; receipt: File | null; }
+
+/** Flattened member item with a single displayName field for the dropdown. */
+interface MemberOption { id: number; displayName: string; }
+
+@Component({
+ selector: 'app-expense-form-dialog',
+ standalone: true,
+ imports: [CommonModule, FormsModule, InputsModule, ButtonsModule, DialogsModule, DropDownsModule, DateInputsModule],
+ templateUrl: './expense-form-dialog.component.html',
+})
+export class ExpenseFormDialogComponent implements OnInit {
+ @Input() mode: 'vendor' | 'reimbursement' = 'reimbursement';
+ @Input() allowMemberPick = false;
+ @Input() title = 'New Expense';
+ @Output() save = new EventEmitter