import React, { useState, useEffect } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Label } from '@/components/ui/label'; import { supabase } from '@/integrations/supabase/client'; import { useToast } from '@/hooks/use-toast'; const STATUS_OPTIONS = [ "open", "in_progress", "resolved", "closed" ]; const normalizeCollectionStatus = (status) => status === 'resolved' ? 'closed' : status; function CollectionDialog({ open, onOpenChange, collection, onSuccess }) { const { toast } = useToast(); const db = supabase; const [associations, setAssociations] = useState([]); const [owners, setOwners] = useState([]); const [units, setUnits] = useState([]); const [formData, setFormData] = useState({ association_id: '', owner_id: '', unit_id: '', notes: '', status: 'open', last_notice_date: '', amount_owed: '' }); const [loading, setLoading] = useState(false); useEffect(() => { const fetchAssociations = async () => { const { data, error } = await db.from('associations').select('id, name').eq('status', 'active').order('name'); if (!error) setAssociations(data || []); }; if (open) fetchAssociations(); }, [open]); useEffect(() => { if (formData.association_id) { const fetchOwnersAndUnits = async () => { const [ownersRes, unitsRes] = await Promise.all([ db.from('owners').select('id, first_name, last_name').eq('association_id', formData.association_id).eq('status', 'active').order('last_name'), db.from('units').select('id, unit_number, address').eq('association_id', formData.association_id).order('unit_number'), ]); if (!ownersRes.error) setOwners(ownersRes.data || []); if (!unitsRes.error) setUnits(unitsRes.data || []); }; fetchOwnersAndUnits(); } else { setOwners([]); setUnits([]); } }, [formData.association_id]); useEffect(() => { if (collection) { setFormData({ association_id: collection.association_id || '', owner_id: collection.owner_id || '', unit_id: collection.unit_id || '', notes: collection.notes || '', status: collection.status || 'open', last_notice_date: collection.last_notice_date || '', amount_owed: collection.amount_owed || '' }); } else { setFormData({ association_id: '', owner_id: '', unit_id: '', notes: '', status: 'open', last_notice_date: '', amount_owed: '' }); } }, [collection, open]); const handleSubmit = async (e) => { e.preventDefault(); setLoading(true); if (!formData.association_id) { toast({ variant: 'destructive', title: 'Missing Field', description: 'Please select an association.' }); setLoading(false); return; } const dataToSubmit = { ...formData, status: normalizeCollectionStatus(formData.status), last_notice_date: formData.last_notice_date || null, amount_owed: formData.amount_owed || 0, owner_id: formData.owner_id || null, unit_id: formData.unit_id || null, }; const { error } = collection ? await db.from('collections').update(dataToSubmit).eq('id', collection.id) : await db.from('collections').insert([dataToSubmit]); if (!error) { toast({ title: collection ? 'Collection Updated' : 'Collection Created', description: `Collection has been successfully ${collection ? 'updated' : 'created'}.`, }); onSuccess(); onOpenChange(false); } else { toast({ variant: 'destructive', title: 'Error', description: error.message }); } setLoading(false); }; return ( {collection ? 'Edit Collection' : 'Add New Collection'}
setFormData({ ...formData, last_notice_date: e.target.value })} className="w-full mt-1 px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-teal-500 focus:border-transparent" />
setFormData({ ...formData, amount_owed: e.target.value })} className="w-full mt-1 px-3 py-2 border border-slate-300 rounded-lg focus:ring-2 focus:ring-teal-500 focus:border-transparent" />