import React, { useState, useEffect } from 'react'; import { Package, Plus, Edit, Trash2, Calendar, CheckCircle, AlertCircle, Clock, BarChart3, TrendingUp, Euro, Settings } from 'lucide-react'; // Import complex components import WhatIfPlanner from '../../components/ui/WhatIfPlanner'; import DemandHeatmap from '../../components/ui/DemandHeatmap'; 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; } interface OrdersPageProps { view?: string; } const OrdersPage: React.FC = ({ view = 'incoming' }) => { const [orders, setOrders] = useState([]); const [isLoading, setIsLoading] = useState(true); const [showNewOrder, setShowNewOrder] = useState(false); const [activeTab, setActiveTab] = useState<'orders' | 'analytics' | 'forecasting' | 'suppliers'>('orders'); // 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 ; } }; // Sample data for complex components const orderDemandHeatmapData = [ { weekStart: '2024-11-04', days: [ { date: '2024-11-04', demand: 180, isToday: true, products: [ { name: 'Harina de trigo', demand: 50, confidence: 'high' as const }, { name: 'Levadura fresca', demand: 2, confidence: 'high' as const }, { name: 'Mantequilla', demand: 5, confidence: 'medium' as const }, { name: 'Vasos café', demand: 1000, confidence: 'medium' as const }, ] }, { date: '2024-11-05', demand: 165, isForecast: true }, { date: '2024-11-06', demand: 195, isForecast: true }, { date: '2024-11-07', demand: 220, isForecast: true }, { date: '2024-11-08', demand: 185, isForecast: true }, { date: '2024-11-09', demand: 250, isForecast: true }, { date: '2024-11-10', demand: 160, isForecast: true } ] } ]; const baselineSupplyData = { totalDemand: 180, totalRevenue: 420, products: [ { name: 'Harina de trigo', demand: 50, price: 0.85 }, { name: 'Levadura fresca', demand: 2, price: 3.20 }, { name: 'Mantequilla', demand: 5, price: 4.20 }, { name: 'Leche entera', demand: 20, price: 0.95 }, { name: 'Vasos café', demand: 1000, price: 0.08 }, ] }; const filteredOrders = orders.filter(order => { if (activeTab === 'orders') return true; return false; }); 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

{/* Enhanced Tabs */}
{[ { id: 'orders', label: 'Gestión de Pedidos', icon: Package, count: orders.length }, { id: 'analytics', label: 'Análisis', icon: BarChart3 }, { id: 'forecasting', label: 'Simulaciones', icon: TrendingUp }, { id: 'suppliers', label: 'Proveedores', icon: Settings } ].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.

{/* Tab Content */} {activeTab === 'orders' && ( <> {/* 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 === 'orders' ? 'Aún no has creado ningún pedido' : 'No hay datos disponibles para esta sección' }

)} {/* 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

)} {/* Analytics Tab */} {activeTab === 'analytics' && (
{ console.log('Selected date:', date); }} /> {/* Cost Analysis Chart */}

Análisis de Costos

Ahorro Mensual
€124.50
vs mes anterior
Gasto Promedio
€289.95
por pedido
Eficiencia
94.2%
predicción IA

Gráfico de tendencias de costos

Próximamente disponible

)} {/* Forecasting/Simulations Tab */} {activeTab === 'forecasting' && (
{ console.log('Scenario run:', scenario, result); }} />
)} {/* Suppliers Tab */} {activeTab === 'suppliers' && (
{/* Suppliers Management */}

Gestión de Proveedores

{[ { name: 'Harinas Castellana', category: 'Ingredientes', rating: 4.8, reliability: 98, nextDelivery: '2024-11-05', status: 'active' }, { name: 'Distribuciones Madrid', category: 'Consumibles', rating: 4.5, reliability: 95, nextDelivery: '2024-11-04', status: 'active' }, { name: 'Lácteos Frescos SA', category: 'Ingredientes', rating: 4.9, reliability: 99, nextDelivery: '2024-11-03', status: 'active' } ].map((supplier, index) => (

{supplier.name}

{supplier.status === 'active' ? 'Activo' : 'Inactivo'}
Categoría: {supplier.category}
Calificación: ⭐ {supplier.rating}/5
Confiabilidad: {supplier.reliability}%
Próxima entrega: {new Date(supplier.nextDelivery).toLocaleDateString('es-ES')}
))}
)} {/* 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;