import React, { useEffect, useState } from 'react'; import api from '../../utils/api'; import { Card } from '../../components/ui/card'; import { Button } from '../../components/ui/button'; import { Badge } from '../../components/ui/badge'; import { Input } from '../../components/ui/input'; import { Label } from '../../components/ui/label'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select'; import { toast } from 'sonner'; import { DollarSign, Plus, Edit, Trash2, ExternalLink, TrendingUp } from 'lucide-react'; const AdminFinancials = () => { const [reports, setReports] = useState([]); const [loading, setLoading] = useState(true); const [dialogOpen, setDialogOpen] = useState(false); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const [selectedReport, setSelectedReport] = useState(null); const [reportToDelete, setReportToDelete] = useState(null); const [uploadedFile, setUploadedFile] = useState(null); const [formData, setFormData] = useState({ year: new Date().getFullYear(), title: '', document_url: '', document_type: 'google_drive' }); const [submitting, setSubmitting] = useState(false); useEffect(() => { fetchReports(); }, []); const fetchReports = async () => { try { const response = await api.get('/financials'); setReports(response.data); } catch (error) { toast.error('Failed to fetch financial reports'); } finally { setLoading(false); } }; const handleCreate = () => { setSelectedReport(null); setFormData({ year: new Date().getFullYear(), title: '', document_url: '', document_type: 'google_drive' }); setDialogOpen(true); }; const handleEdit = (report) => { setSelectedReport(report); setFormData({ year: report.year, title: report.title, document_url: report.document_url, document_type: report.document_type }); setDialogOpen(true); }; const handleDelete = (report) => { setReportToDelete(report); setDeleteDialogOpen(true); }; const handleSubmit = async (e) => { e.preventDefault(); setSubmitting(true); try { const formDataToSend = new FormData(); formDataToSend.append('year', formData.year); formDataToSend.append('title', formData.title); formDataToSend.append('document_type', formData.document_type); // Handle file upload or URL based on document_type if (formData.document_type === 'upload') { if (!uploadedFile && !selectedReport) { toast.error('Please select a file to upload'); setSubmitting(false); return; } if (uploadedFile) { formDataToSend.append('file', uploadedFile); } } else { formDataToSend.append('document_url', formData.document_url); } if (selectedReport) { await api.put(`/admin/financials/${selectedReport.id}`, formDataToSend); toast.success('Financial report updated successfully'); } else { await api.post('/admin/financials', formDataToSend); toast.success('Financial report created successfully'); } setDialogOpen(false); setUploadedFile(null); fetchReports(); } catch (error) { toast.error(error.response?.data?.detail || 'Failed to save financial report'); } finally { setSubmitting(false); } }; const confirmDelete = async () => { try { await api.delete(`/admin/financials/${reportToDelete.id}`); toast.success('Financial report deleted successfully'); setDeleteDialogOpen(false); fetchReports(); } catch (error) { toast.error('Failed to delete financial report'); } }; if (loading) { return (
Loading financial reports...
Manage annual financial reports
No financial reports yet