import React, { useState, useEffect } from 'react'; import { Package, Plus, Edit, Trash2, Calendar, CheckCircle, AlertCircle, Clock } from 'lucide-react'; interface Order { id: string; supplier: string; items: OrderItem[]; orderDate: string; deliveryDate: string; status: 'pending' | 'confirmed' | 'delivered' | 'cancelled'; total: number; type: 'ingredients' | 'consumables'; } interface OrderItem { name: string; quantity: number; unit: string; price: number; suggested?: boolean; } const OrdersPage: React.FC = () => { const [orders, setOrders] = useState([]); const [isLoading, setIsLoading] = useState(true); const [showNewOrder, setShowNewOrder] = useState(false); const [activeTab, setActiveTab] = useState<'all' | 'pending' | 'delivered'>('all'); // Sample orders data const sampleOrders: Order[] = [ { id: '1', supplier: 'Harinas Castellana', items: [ { name: 'Harina de trigo', quantity: 50, unit: 'kg', price: 0.85, suggested: true }, { name: 'Levadura fresca', quantity: 2, unit: 'kg', price: 3.20 }, { name: 'Sal marina', quantity: 5, unit: 'kg', price: 1.10 } ], orderDate: '2024-11-03', deliveryDate: '2024-11-05', status: 'pending', total: 52.50, type: 'ingredients' }, { id: '2', supplier: 'Distribuciones Madrid', items: [ { name: 'Vasos de café 250ml', quantity: 1000, unit: 'unidades', price: 0.08 }, { name: 'Bolsas papel kraft', quantity: 500, unit: 'unidades', price: 0.12, suggested: true }, { name: 'Servilletas', quantity: 20, unit: 'paquetes', price: 2.50 } ], orderDate: '2024-11-02', deliveryDate: '2024-11-04', status: 'confirmed', total: 190.00, type: 'consumables' }, { id: '3', supplier: 'Lácteos Frescos SA', items: [ { name: 'Leche entera', quantity: 20, unit: 'litros', price: 0.95 }, { name: 'Mantequilla', quantity: 5, unit: 'kg', price: 4.20 }, { name: 'Nata para montar', quantity: 3, unit: 'litros', price: 2.80 } ], orderDate: '2024-11-01', deliveryDate: '2024-11-03', status: 'delivered', total: 47.40, type: 'ingredients' } ]; useEffect(() => { const loadOrders = async () => { setIsLoading(true); try { // Simulate API call await new Promise(resolve => setTimeout(resolve, 800)); setOrders(sampleOrders); } catch (error) { console.error('Error loading orders:', error); } finally { setIsLoading(false); } }; loadOrders(); }, []); const getStatusColor = (status: string) => { switch (status) { case 'pending': return 'bg-warning-100 text-warning-800 border-warning-200'; case 'confirmed': return 'bg-blue-100 text-blue-800 border-blue-200'; case 'delivered': return 'bg-success-100 text-success-800 border-success-200'; case 'cancelled': return 'bg-red-100 text-red-800 border-red-200'; default: return 'bg-gray-100 text-gray-800 border-gray-200'; } }; const getStatusLabel = (status: string) => { switch (status) { case 'pending': return 'Pendiente'; case 'confirmed': return 'Confirmado'; case 'delivered': return 'Entregado'; case 'cancelled': return 'Cancelado'; default: return status; } }; const getStatusIcon = (status: string) => { switch (status) { case 'pending': return ; case 'confirmed': return ; case 'delivered': return ; case 'cancelled': return ; default: return ; } }; const filteredOrders = orders.filter(order => { if (activeTab === 'all') return true; if (activeTab === 'pending') return order.status === 'pending' || order.status === 'confirmed'; if (activeTab === 'delivered') return order.status === 'delivered'; return true; }); const handleDeleteOrder = (orderId: string) => { setOrders(prev => prev.filter(order => order.id !== orderId)); }; if (isLoading) { return (
{[...Array(3)].map((_, i) => (
))}
); } return (
{/* Header */}

Gestión de Pedidos

Administra tus pedidos de ingredientes y consumibles

{/* Tabs */}
{[ { id: 'all', label: 'Todos', count: orders.length }, { id: 'pending', label: 'Pendientes', count: orders.filter(o => o.status === 'pending' || o.status === 'confirmed').length }, { id: 'delivered', label: 'Entregados', count: orders.filter(o => o.status === 'delivered').length } ].map((tab) => ( ))}
{/* AI Suggestions */}

Sugerencias Inteligentes de Pedidos

Harina de trigo: Stock bajo detectado. Recomendamos pedir 50kg para cubrir 2 semanas.

Bolsas de papel: Aumento del 15% en takeaway. Considera aumentar el pedido habitual.

Café en grano: Predicción de alta demanda por temperaturas bajas. +20% recomendado.

{/* Orders Grid */}
{filteredOrders.map((order) => (
{/* Order Header */}

{order.supplier}

{getStatusIcon(order.status)} {getStatusLabel(order.status)}
Entrega: {new Date(order.deliveryDate).toLocaleDateString('es-ES')}
{order.type === 'ingredients' ? 'Ingredientes' : 'Consumibles'} €{order.total.toFixed(2)}
{/* Order Items */}

Artículos ({order.items.length})

{order.items.map((item, index) => (
{item.name} {item.suggested && ( IA )}
{item.quantity} {item.unit} × €{item.price.toFixed(2)}
€{(item.quantity * item.price).toFixed(2)}
))}
{/* Order Actions */}
))}
{/* Empty State */} {filteredOrders.length === 0 && (

No hay pedidos

{activeTab === 'all' ? 'Aún no has creado ningún pedido' : `No hay pedidos ${activeTab === 'pending' ? 'pendientes' : 'entregados'}` }

)} {/* Quick Stats */}

Total Pedidos

{orders.length}

Pendientes

{orders.filter(o => o.status === 'pending' || o.status === 'confirmed').length}

Gasto Mensual

€{orders.reduce((sum, order) => sum + order.total, 0).toFixed(0)}

{/* Quick Actions */}

Acciones Rápidas

{/* New Order Modal Placeholder */} {showNewOrder && (

Nuevo Pedido

Esta funcionalidad estará disponible próximamente. PanIA analizará tus necesidades y creará pedidos automáticos basados en las predicciones de demanda.

)}
); }; export default OrdersPage;