import React, { useState } from 'react'; import { Plus, Download, Clock, Users, AlertCircle, CheckCircle, Timer, ChefHat, Eye, Edit, Calendar, Zap } from 'lucide-react'; import { Button, Input, Card, Badge, StatsGrid } from '../../../../components/ui'; import { pagePresets } from '../../../../components/ui/Stats/StatsPresets'; import { PageHeader } from '../../../../components/layout'; import { ProductionSchedule, BatchTracker, QualityControl } from '../../../../components/domain/production'; const ProductionPage: React.FC = () => { const [activeTab, setActiveTab] = useState('schedule'); const [searchQuery, setSearchQuery] = useState(''); const [selectedOrder, setSelectedOrder] = useState(null); const [showForm, setShowForm] = useState(false); const mockProductionStats = { dailyTarget: 150, completed: 85, inProgress: 12, pending: 53, efficiency: 78, quality: 94, }; const mockProductionOrders = [ { id: '1', recipeName: 'Pan de Molde Integral', quantity: 20, status: 'in_progress', priority: 'high', assignedTo: 'Juan Panadero', startTime: '2024-01-26T06:00:00Z', estimatedCompletion: '2024-01-26T10:00:00Z', progress: 65, }, { id: '2', recipeName: 'Croissants de Mantequilla', quantity: 50, status: 'pending', priority: 'medium', assignedTo: 'María González', startTime: '2024-01-26T08:00:00Z', estimatedCompletion: '2024-01-26T12:00:00Z', progress: 0, }, { id: '3', recipeName: 'Baguettes Francesas', quantity: 30, status: 'completed', priority: 'medium', assignedTo: 'Carlos Ruiz', startTime: '2024-01-26T04:00:00Z', estimatedCompletion: '2024-01-26T08:00:00Z', progress: 100, }, { id: '4', recipeName: 'Tarta de Chocolate', quantity: 5, status: 'pending', priority: 'low', assignedTo: 'Ana Pastelera', startTime: '2024-01-26T10:00:00Z', estimatedCompletion: '2024-01-26T16:00:00Z', progress: 0, }, { id: '5', recipeName: 'Empanadas de Pollo', quantity: 40, status: 'in_progress', priority: 'high', assignedTo: 'Luis Hornero', startTime: '2024-01-26T07:00:00Z', estimatedCompletion: '2024-01-26T11:00:00Z', progress: 45, }, { id: '6', recipeName: 'Donuts Glaseados', quantity: 60, status: 'pending', priority: 'urgent', assignedTo: 'María González', startTime: '2024-01-26T12:00:00Z', estimatedCompletion: '2024-01-26T15:00:00Z', progress: 0, }, { id: '7', recipeName: 'Pan de Centeno', quantity: 25, status: 'completed', priority: 'medium', assignedTo: 'Juan Panadero', startTime: '2024-01-26T05:00:00Z', estimatedCompletion: '2024-01-26T09:00:00Z', progress: 100, }, { id: '8', recipeName: 'Muffins de Arándanos', quantity: 36, status: 'in_progress', priority: 'medium', assignedTo: 'Ana Pastelera', startTime: '2024-01-26T08:30:00Z', estimatedCompletion: '2024-01-26T12:30:00Z', progress: 70, }, ]; const getStatusBadge = (status: string) => { const statusConfig = { pending: { color: 'warning', text: 'Pendiente', icon: Clock }, in_progress: { color: 'info', text: 'En Proceso', icon: Timer }, completed: { color: 'success', text: 'Completado', icon: CheckCircle }, cancelled: { color: 'error', text: 'Cancelado', icon: AlertCircle }, }; const config = statusConfig[status as keyof typeof statusConfig]; const Icon = config?.icon; return ( } text={config?.text || status} /> ); }; const getPriorityBadge = (priority: string) => { const priorityConfig = { low: { color: 'outline', text: 'Baja' }, medium: { color: 'secondary', text: 'Media' }, high: { color: 'warning', text: 'Alta' }, urgent: { color: 'error', text: 'Urgente', icon: Zap }, }; const config = priorityConfig[priority as keyof typeof priorityConfig]; const Icon = config?.icon; return ( } text={config?.text || priority} /> ); }; const filteredOrders = mockProductionOrders.filter(order => { const matchesSearch = order.recipeName.toLowerCase().includes(searchQuery.toLowerCase()) || order.assignedTo.toLowerCase().includes(searchQuery.toLowerCase()) || order.id.toLowerCase().includes(searchQuery.toLowerCase()); return matchesSearch; }); return (
console.log('Export production orders') }, { id: "new", label: "Nueva Orden de Producción", variant: "primary" as const, icon: Plus, onClick: () => setShowForm(true) } ]} /> {/* Production Stats */} {/* Tabs Navigation */}
{/* Production Orders Tab */} {activeTab === 'schedule' && ( <> {/* Simplified Controls */}
setSearchQuery(e.target.value)} className="w-full" />
{/* Production Orders Grid */}
{filteredOrders.map((order) => (
{/* Header */}
{order.recipeName}
ID: {order.id}
{getStatusBadge(order.status)}
{/* Priority and Quantity */}
{getPriorityBadge(order.priority)}
{order.quantity}
unidades
{/* Assigned Worker */}
{order.assignedTo}
{/* Time Information */}
Inicio: {new Date(order.startTime).toLocaleTimeString('es-ES', { hour: '2-digit', minute: '2-digit' })}
Est. finalización: {new Date(order.estimatedCompletion).toLocaleTimeString('es-ES', { hour: '2-digit', minute: '2-digit' })}
{/* Progress Bar */}
Progreso {order.progress}%
50 ? 'bg-[var(--color-info)]' : order.progress > 0 ? 'bg-[var(--color-warning)]' : 'bg-[var(--bg-quaternary)]' }`} style={{ width: `${order.progress}%` }} />
{/* Actions */}
))}
{/* Empty State */} {filteredOrders.length === 0 && (

No se encontraron órdenes de producción

Intenta ajustar la búsqueda o crear una nueva orden de producción

)} )} {activeTab === 'batches' && ( )} {activeTab === 'quality' && ( )} {/* Production Order Form Modal - Placeholder */} {showForm && (

{selectedOrder ? 'Ver Orden de Producción' : 'Nueva Orden de Producción'}

{selectedOrder && (

{selectedOrder.recipeName}

Cantidad: {selectedOrder.quantity} unidades
Asignado a: {selectedOrder.assignedTo}
Estado: {selectedOrder.status}
Progreso: {selectedOrder.progress}%
Inicio: {new Date(selectedOrder.startTime).toLocaleString('es-ES')}
Finalización: {new Date(selectedOrder.estimatedCompletion).toLocaleString('es-ES')}
)}
)}
); }; export default ProductionPage;