Files
tracksteel_app/src/hooks/useEstoqueCRUD.tsx
T

293 lines
7.6 KiB
TypeScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { supabase } from '@/integrations/supabase/client';
import { toast } from 'sonner';
// Interfaces
export interface UnidadeMedida {
id: string;
nome: string;
abreviacao: string;
descricao?: string;
ativo: boolean;
}
export interface LocalizacaoEstoque {
id: string;
nome: string;
codigo?: string;
descricao?: string;
ativo: boolean;
}
export interface QualidadeAco {
id: string;
nome: string;
norma?: string;
descricao?: string;
propriedades?: any;
ativo: boolean;
}
// Hooks para Unidades de Medida
export const useUnidadesMedida = () => {
return useQuery({
queryKey: ['unidades-medida'],
queryFn: async () => {
const { data, error } = await supabase
.from('unidades_medida')
.select('*')
.eq('ativo', true)
.order('nome');
if (error) throw error;
return data as UnidadeMedida[];
},
});
};
export const useCriarUnidadeMedida = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (data: Omit<UnidadeMedida, 'id'>) => {
const { data: result, error } = await supabase
.from('unidades_medida')
.insert(data)
.select()
.single();
if (error) throw error;
return result;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['unidades-medida'] });
toast.success('Unidade de medida criada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao criar unidade de medida: ' + error.message);
},
});
};
export const useAtualizarUnidadeMedida = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({ id, ...data }: UnidadeMedida) => {
const { data: result, error } = await supabase
.from('unidades_medida')
.update(data)
.eq('id', id)
.select()
.single();
if (error) throw error;
return result;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['unidades-medida'] });
toast.success('Unidade de medida atualizada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao atualizar unidade de medida: ' + error.message);
},
});
};
export const useExcluirUnidadeMedida = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (id: string) => {
const { error } = await supabase
.from('unidades_medida')
.update({ ativo: false })
.eq('id', id);
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['unidades-medida'] });
toast.success('Unidade de medida desativada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao desativar unidade de medida: ' + error.message);
},
});
};
// Hooks para Localizações
export const useLocalizacoesEstoque = () => {
return useQuery({
queryKey: ['localizacoes-estoque'],
queryFn: async () => {
const { data, error } = await supabase
.from('localizacoes_estoque')
.select('*')
.eq('ativo', true)
.order('nome');
if (error) throw error;
return data as LocalizacaoEstoque[];
},
});
};
export const useCriarLocalizacao = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (data: Omit<LocalizacaoEstoque, 'id'>) => {
const { data: result, error } = await supabase
.from('localizacoes_estoque')
.insert(data)
.select()
.single();
if (error) throw error;
return result;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['localizacoes-estoque'] });
toast.success('Localização criada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao criar localização: ' + error.message);
},
});
};
export const useAtualizarLocalizacao = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({ id, ...data }: LocalizacaoEstoque) => {
const { data: result, error } = await supabase
.from('localizacoes_estoque')
.update(data)
.eq('id', id)
.select()
.single();
if (error) throw error;
return result;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['localizacoes-estoque'] });
toast.success('Localização atualizada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao atualizar localização: ' + error.message);
},
});
};
export const useExcluirLocalizacao = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (id: string) => {
const { error } = await supabase
.from('localizacoes_estoque')
.update({ ativo: false })
.eq('id', id);
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['localizacoes-estoque'] });
toast.success('Localização desativada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao desativar localização: ' + error.message);
},
});
};
// Hooks para Qualidade do Aço
export const useQualidadesAco = () => {
return useQuery({
queryKey: ['qualidades-aco'],
queryFn: async () => {
const { data, error } = await supabase
.from('qualidades_aco')
.select('*')
.eq('ativo', true)
.order('nome');
if (error) throw error;
return data as QualidadeAco[];
},
});
};
export const useCriarQualidadeAco = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (data: Omit<QualidadeAco, 'id'>) => {
const { data: result, error } = await supabase
.from('qualidades_aco')
.insert(data)
.select()
.single();
if (error) throw error;
return result;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['qualidades-aco'] });
toast.success('Qualidade de aço criada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao criar qualidade de aço: ' + error.message);
},
});
};
export const useAtualizarQualidadeAco = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({ id, ...data }: QualidadeAco) => {
const { data: result, error } = await supabase
.from('qualidades_aco')
.update(data)
.eq('id', id)
.select()
.single();
if (error) throw error;
return result;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['qualidades-aco'] });
toast.success('Qualidade de aço atualizada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao atualizar qualidade de aço: ' + error.message);
},
});
};
export const useExcluirQualidadeAco = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (id: string) => {
const { error } = await supabase
.from('qualidades_aco')
.update({ ativo: false })
.eq('id', id);
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['qualidades-aco'] });
toast.success('Qualidade de aço desativada com sucesso!');
},
onError: (error: any) => {
toast.error('Erro ao desativar qualidade de aço: ' + error.message);
},
});
};