+
+
Reimbursement
+
Manage your reimbursement requests
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/dashboard/reimbursement/ReimbursementForm.tsx b/src/components/dashboard/reimbursement/ReimbursementForm.tsx
new file mode 100644
index 0000000..3bf016a
--- /dev/null
+++ b/src/components/dashboard/reimbursement/ReimbursementForm.tsx
@@ -0,0 +1,437 @@
+import React, { useState, useCallback } from 'react';
+import { Icon } from '@iconify/react';
+import FilePreview from '../universal/FilePreview';
+import { FileManager } from '../../../scripts/pocketbase/FileManager';
+import { Authentication } from '../../../scripts/pocketbase/Authentication';
+import { Update } from '../../../scripts/pocketbase/Update';
+
+interface ExpenseItem {
+ description: string;
+ amount: number;
+ category: string;
+}
+
+interface ReimbursementRequest {
+ id?: string;
+ title: string;
+ total_amount: number;
+ date_of_purchase: string;
+ payment_method: string;
+ status: 'draft' | 'submitted' | 'under_review' | 'approved' | 'rejected' | 'paid';
+ expense_items: ExpenseItem[];
+ receipts: string[];
+ submitted_by?: string;
+}
+
+const EXPENSE_CATEGORIES = [
+ 'Travel',
+ 'Meals',
+ 'Supplies',
+ 'Equipment',
+ 'Software',
+ 'Event Expenses',
+ 'Other'
+];
+
+const PAYMENT_METHODS = [
+ 'Personal Credit Card',
+ 'Personal Debit Card',
+ 'Cash',
+ 'Personal Check',
+ 'Other'
+];
+
+const MAX_REIMBURSEMENT_AMOUNT = 1000; // Maximum amount in dollars
+
+export default function ReimbursementForm() {
+ const [request, setRequest] = useState
({
+ title: '',
+ total_amount: 0,
+ date_of_purchase: new Date().toISOString().split('T')[0],
+ payment_method: '',
+ status: 'draft',
+ expense_items: [{ description: '', amount: 0, category: '' }],
+ receipts: []
+ });
+
+ const [selectedFiles, setSelectedFiles] = useState