import React, { useState } from 'react'; import { StandardPageLayout } from '@/components/layout/StandardPageLayout'; import { StandardCard } from '@/components/layout/StandardCard'; import { Button } from '@/components/ui/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Warehouse, BarChart3, TrendingUp, Package, Download, Upload, AlertTriangle } from 'lucide-react'; import { EstoqueDashboard } from '@/components/estoque/EstoqueDashboard'; import { EstoqueTable } from '@/components/estoque/EstoqueTable'; import { MovimentacaoEstoqueSimplificada } from '@/components/estoque/MovimentacaoEstoqueSimplificada'; import { EstoqueReports } from '@/components/estoque/EstoqueReports'; import { EmpenhosMaterialSimplificado } from '@/components/estoque/EmpenhosMaterialSimplificado'; import { EstoqueCSVImportModal } from '@/components/estoque/EstoqueCSVImportModal'; import { useEstoque } from '@/hooks/useEstoqueSimplificado'; import { usePermissionControl } from '@/hooks/usePermissionControl'; import { generateCSV, downloadCSV } from '@/utils/csvUtils'; import { toast } from 'sonner'; const Estoque = () => { const [activeTab, setActiveTab] = useState('estoque'); const [isImportModalOpen, setIsImportModalOpen] = useState(false); const { canImportExport } = usePermissionControl(); const { materiais, loading } = useEstoque(); const handleExportCSV = () => { if (materiais.length === 0) { toast.error('Nenhum material disponível para exportar'); return; } const headers = [ 'codigo', 'descricao', 'tipo_material', 'unidade', 'quantidade_total', 'quantidade_disponivel', 'quantidade_empenhada', 'quantidade_minima', 'quantidade_maxima', 'peso_unitario', 'valor_unitario', 'lote_atual', 'fornecedor', 'localizacao', 'status', 'observacoes' ]; const csvData = materiais.map(material => ({ codigo: material.codigo, descricao: material.descricao, tipo_material: material.tipos_materia_prima?.nome || '', unidade: material.unidade, quantidade_total: material.quantidade_total, quantidade_disponivel: material.quantidade_disponivel, quantidade_empenhada: material.quantidade_empenhada, quantidade_minima: material.quantidade_minima, quantidade_maxima: material.quantidade_maxima || '', peso_unitario: material.peso_unitario, valor_unitario: material.valor_unitario || '', lote_atual: material.lote_atual || '', fornecedor: material.fornecedor || '', localizacao: material.localizacao || '', status: material.status, observacoes: material.observacoes || '' })); const csvContent = generateCSV(csvData, headers); const fileName = `estoque_materiais_${new Date().toISOString().split('T')[0]}.csv`; downloadCSV(csvContent, fileName); toast.success(`${materiais.length} materiais exportados com sucesso!`); }; const renderActions = () => { const actions = []; if (canImportExport()) { actions.push( ); actions.push( ); } return actions.length > 0 ? (
{actions}
) : null; }; return ( <> Estoque Dashboard Movimentação Empenhos Relatórios setIsImportModalOpen(false)} /> ); }; export default Estoque;