import React, { useEffect, useState } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Calendar } from "@/components/ui/calendar"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { CalendarIcon } from "lucide-react"; import { format } from "date-fns"; import { cn } from "@/lib/utils"; import { useSupabaseEmployeeData } from "@/hooks/useSupabaseEmployeeData"; import { useToast } from "@/hooks/use-toast"; import { Currency } from "@/lib/currency"; import { useAuth } from "@/hooks/useAuth"; interface AdminDataEntryModalProps { isOpen: boolean; onClose: () => void; onDataUpdate: () => void; } export const AdminDataEntryModal = ({ isOpen, onClose, onDataUpdate }: AdminDataEntryModalProps) => { const { employees, addTransaction } = useSupabaseEmployeeData(); const { user } = useAuth(); const { toast } = useToast(); const isEmployee = user?.role === 'employee'; const lockedEmployeeId = isEmployee ? employees.find(e => e.emp_id === user?.empId || e.email === user?.email)?.id : undefined; const [selectedEmployeeId, setSelectedEmployeeId] = useState(''); const [collectionAmount, setCollectionAmount] = useState(''); const [depositAmount, setDepositAmount] = useState(''); const [currency, setCurrency] = useState('USD'); const [selectedDate, setSelectedDate] = useState(new Date()); const [loading, setLoading] = useState(false); useEffect(() => { if (isEmployee && lockedEmployeeId) { setSelectedEmployeeId(lockedEmployeeId); } }, [isEmployee, lockedEmployeeId, isOpen]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedEmployeeId) { toast({ title: "Error", description: "Please select an employee", variant: "destructive" }); return; } const collection = parseFloat(collectionAmount) || 0; const deposit = parseFloat(depositAmount) || 0; if (collection === 0 && deposit === 0) { toast({ title: "Error", description: "Please enter at least one amount (collection or deposit)", variant: "destructive" }); return; } setLoading(true); try { await addTransaction(selectedEmployeeId, { transaction_date: format(selectedDate, 'yyyy-MM-dd'), collection_amount: collection, deposit_amount: deposit, currency, }); toast({ title: "Success", description: "Transaction added successfully", }); // Reset form setSelectedEmployeeId(''); setCollectionAmount(''); setDepositAmount(''); setCurrency('USD'); setSelectedDate(new Date()); onDataUpdate(); } catch (error) { toast({ title: "Error", description: "Failed to add transaction. Please try again.", variant: "destructive" }); } finally { setLoading(false); } }; const handleClose = () => { setSelectedEmployeeId(''); setCollectionAmount(''); setDepositAmount(''); setCurrency('USD'); setSelectedDate(new Date()); onClose(); }; return ( {isEmployee ? "Submit Transaction" : "Insert Employee Data"}
{isEmployee && !lockedEmployeeId && (

Your account is not linked to an employee record. Ask an admin to set your Employee ID.

)}
date && setSelectedDate(date)} initialFocus className="pointer-events-auto" />
setCollectionAmount(e.target.value)} className="text-right" step={currency === 'USD' ? '0.01' : '1'} min="0" disabled={loading} />
setDepositAmount(e.target.value)} className="text-right" step={currency === 'USD' ? '0.01' : '1'} min="0" disabled={loading} />
); };