"use client"; import Link from 'next/link'; import { Calendar, DollarSign, TrendingUp, FileText } from 'lucide-react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import { Project, ProjectStatus } from '@/types/project'; interface ProjectCardProps { project: Project; } // Función para generar iniciales function getInitials(name: string): string { return name .split(' ') .map(word => word[0]) .join('') .toUpperCase() .slice(0, 2); } // Componente para el badge de estado con estilos directos function StatusBadge({ status }: { status: ProjectStatus }) { if (status === '0') { return ( Borrador ); } if (status === '1') { return ( Abierto ); } if (status === '2') { return ( Cerrado ); } // Fallback return ( Desconocido ); } export default function ProjectCard({ project }: ProjectCardProps) { const initials = getInitials(project.name); return ( {initials} {project.name} {project.ref} {/* Description */} {project.description && ( Descripción {project.description} )} {/* Progress Bar */} Progreso {project.progress}% {/* Budget Info */} Presupuesto €{project.budget.toLocaleString('es-ES', { minimumFractionDigits: 0, maximumFractionDigits: 0 })} Estimado €{project.spent.toLocaleString('es-ES', { minimumFractionDigits: 0, maximumFractionDigits: 0 })} {/* Footer Info */} {new Date(project.startDate).toLocaleDateString('es-ES', { day: '2-digit', month: 'short', year: 'numeric' })} {new Date(project.endDate).toLocaleDateString('es-ES', { day: '2-digit', month: 'short', year: 'numeric' })} {/* Cliente */} {project.client !== 'Sin cliente' && ( Cliente: {project.client} )} ); }
{project.description}
€{project.budget.toLocaleString('es-ES', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}
€{project.spent.toLocaleString('es-ES', { minimumFractionDigits: 0, maximumFractionDigits: 0 })}