description('Total de órdenes de producción') ->descriptionIcon('heroicon-o-clipboard-document-list') ->color('primary'); $byState = OrdenProduccion::selectRaw('estado, count(*) as cnt')->groupBy('estado')->pluck('cnt', 'estado')->toArray(); $stats[] = Stat::make('En corte', $byState['en_corte'] ?? 0) ->color('warning'); $stats[] = Stat::make('En confección', $byState['en_confeccion'] ?? 0) ->color('info'); $stats[] = Stat::make('En tintorería', $byState['en_tintoreria'] ?? 0) ->color('primary'); $stats[] = Stat::make('En acabados', $byState['en_acabados'] ?? 0) ->color('secondary'); $stats[] = Stat::make('Finalizadas', $byState['finalizada'] ?? 0) ->color('success'); $metros = Tela::sum('metros_disponibles'); $stats[] = Stat::make('Metros disponibles', number_format($metros, 2) . ' m') ->description('Total metros disponibles en stock') ->descriptionIcon('heroicon-o-archive-box'); $atrasadas = OrdenProduccion::where('fecha_entrega_estimada', '<', now()->toDateString()) ->where('estado', '!=', 'finalizada') ->count(); $stats[] = Stat::make('Órdenes atrasadas', $atrasadas) ->color($atrasadas > 0 ? 'danger' : 'success') ->description('OPs con fecha de entrega vencida'); return $stats; } catch (\Exception $e) { return [ Stat::make('KPIs', 'Error') ->description('Revisar logs') ->color('danger'), ]; } } protected function getColumns(): int { return 6; } }