81 lines
2.0 KiB
TypeScript
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,
|
|
};
|
|
};
|