Files
tracksteel_app/src/hooks/useMateriaisEstoque.tsx
T

81 lines
2.0 KiB
TypeScript

import { useQuery } from '@tanstack/react-query';
import { supabase } from '@/integrations/supabase/client';
export interface MaterialEstoque {
id: string;
descricao: string;
unidade: string;
tipo_material_id?: string;
tipo_material_nome?: string;
codigo: string;
quantidade_disponivel?: number;
peso_unitario?: number;
valor_unitario?: number;
}
export const useMateriaisEstoque = (filters?: {
tipo?: string;
busca?: string;
}) => {
const { data: materiais = [], isLoading } = useQuery({
queryKey: ['materiais-estoque', filters],
queryFn: async () => {
let query = supabase
.from('estoque_materiais')
.select(`
id,
descricao,
unidade,
tipo_material_id,
codigo,
quantidade_disponivel,
peso_unitario,
valor_unitario,
tipos_materia_prima!tipo_material_id(nome)
`)
.order('descricao');
if (filters?.tipo) {
// Buscar IDs dos tipos de material pelo nome
const { data: tiposData } = await supabase
.from('tipos_materia_prima')
.select('id')
.eq('nome', filters.tipo);
if (tiposData && tiposData.length > 0) {
query = query.eq('tipo_material_id', tiposData[0].id);
}
}
if (filters?.busca) {
query = query.ilike('descricao', `%${filters.busca}%`);
}
const { data, error } = await query;
if (error) {
console.error('Erro ao buscar materiais:', error);
throw error;
}
return (data || []).map(item => ({
id: item.id,
descricao: item.descricao,
unidade: item.unidade,
tipo_material_id: item.tipo_material_id,
tipo_material_nome: item.tipos_materia_prima?.nome || 'N/A',
codigo: item.codigo,
quantidade_disponivel: item.quantidade_disponivel,
peso_unitario: item.peso_unitario,
valor_unitario: item.valor_unitario
})) as MaterialEstoque[];
},
});
return {
materiais,
isLoading,
};
};