fix(db): resolve PostgREST PGRST201 foreign key ambiguities across all hooks and components

This commit is contained in:
2026-08-21 15:05:11 +00:00
parent 9f4873d93d
commit 4254566b36
6 changed files with 71 additions and 700 deletions
@@ -74,6 +74,61 @@ export const SeletorItensOtimizado: React.FC<SeletorItensOtimizadoProps> = ({
const { isAdmin } = useUserRole(); const { isAdmin } = useUserRole();
const { fetchComponentesPeca } = useComponentesPeca(); const { fetchComponentesPeca } = useComponentesPeca();
// Função para buscar apontamentos de uma peça específica
const buscarApontamentosPeca = useCallback(async (peca: ItemDisponivel) => {
setLoadingApontamentos(true);
try {
const { data, error } = await supabase
.from('apontamentos_producao')
.select(`
id,
quantidade_produzida,
data_apontamento,
created_at,
processo:processos_fabricacao!processo_id(nome, ordem),
peca:pecas!peca_id(marca, of_number)
`)
.eq('tipo_apontamento', 'peca')
.eq('peca_id', peca.id)
.order('created_at', { ascending: false });
if (error) {
console.error('Erro ao buscar apontamentos da peça:', error);
toast.error('Erro ao buscar apontamentos da peça');
return;
}
setApontamentosPeca(data || []);
} catch (error) {
console.error('Erro ao buscar apontamentos:', error);
toast.error('Erro ao buscar apontamentos');
} finally {
setLoadingApontamentos(false);
}
}, []);
// Função para abrir o modal administrativo
const handleAdminAction = useCallback(async (peca: ItemDisponivel) => {
setSelectedPecaForAdmin(peca);
setShowAdminModal(true);
await buscarApontamentosPeca(peca);
}, [buscarApontamentosPeca]);
// Função para forçar exclusão da peça da tela
const handleForceRemove = useCallback(async () => {
if (!selectedPecaForAdmin) return;
try {
toast.success(`Peça ${selectedPecaForAdmin.marca} foi removida da exibição`);
setShowAdminModal(false);
setSelectedPecaForAdmin(null);
setApontamentosPeca([]);
} catch (error) {
console.error('Erro ao remover peça:', error);
toast.error('Erro ao remover peça da exibição');
}
}, [selectedPecaForAdmin]);
const pecasOrdenadas = useMemo(() => { const pecasOrdenadas = useMemo(() => {
let pecasFiltradas = pecasDisponiveis; let pecasFiltradas = pecasDisponiveis;
if (filtroNumeroPeca) { if (filtroNumeroPeca) {
@@ -591,688 +646,4 @@ export const SeletorItensOtimizado: React.FC<SeletorItensOtimizadoProps> = ({
</Dialog> </Dialog>
</> </>
); );
};
// Função para buscar apontamentos de uma peça específica
const buscarApontamentosPeca = useCallback(async (peca: ItemDisponivel) => {
setLoadingApontamentos(true);
try {
const { data, error } = await supabase
.from('apontamentos_producao')
.select(`
id,
quantidade_produzida,
data_apontamento,
created_at,
processo:processos_fabricacao(nome, ordem),
peca:pecas(marca, of_number)
`)
.eq('tipo_apontamento', 'peca')
.eq('peca_id', peca.id)
.order('created_at', { ascending: false });
if (error) {
console.error('Erro ao buscar apontamentos da peça:', error);
toast.error('Erro ao buscar apontamentos da peça');
return;
}
setApontamentosPeca(data || []);
} catch (error) {
console.error('Erro ao buscar apontamentos:', error);
toast.error('Erro ao buscar apontamentos');
} finally {
setLoadingApontamentos(false);
}
}, []);
// Função para abrir o modal administrativo
const handleAdminAction = useCallback(async (peca: ItemDisponivel) => {
setSelectedPecaForAdmin(peca);
setShowAdminModal(true);
await buscarApontamentosPeca(peca);
}, [buscarApontamentosPeca]);
// Função para forçar exclusão da peça da tela
const handleForceRemove = useCallback(async () => {
if (!selectedPecaForAdmin) return;
try {
// Aqui você pode implementar a lógica específica para "excluir" a peça da exibição
// Por exemplo, marcar como processada ou adicionar a uma lista de exclusões
// Por enquanto, vamos apenas mostrar uma mensagem e fechar o modal
toast.success(`Peça ${selectedPecaForAdmin.marca} foi removida da exibição`);
// Fechar modal
setShowAdminModal(false);
setSelectedPecaForAdmin(null);
setApontamentosPeca([]);
// Aqui você poderia chamar uma função para atualizar a lista de peças disponíveis
// ou implementar a lógica específica do seu sistema
} catch (error) {
console.error('Erro ao remover peça:', error);
toast.error('Erro ao remover peça da exibição');
}
}, [selectedPecaForAdmin]);
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div>
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
Esta peça possui {apontamentosPeca.length} apontamento(s) registrado(s).
Forçar a exclusão irá removê-la da exibição atual, mas não afetará os dados salvos.
</p>
</div>
</div>
</div>
)}
{apontamentosPeca.length > 0 && (
<>
<div className="bg-orange-900/20 border border-orange-700 p-4 rounded-lg">
<div className="flex items-start gap-2">
<AlertTriangle className="h-5 w-5 text-orange-400 mt-0.5" />
<div className="space-y-2">
<h5 className="font-semibold text-orange-300">Atenção!</h5>
<p className="text-sm text-orange-200 mt-1">
{`${apontamentosPeca.length} apontamento(s) registrado(s) encontrado(s) para esta peça`}
</p>
</div>
</div>
</div>
</>
)}
`${apontamentosPeca.length} registered appointment(s) found for this piece`;
}
+3 -3
View File
@@ -86,9 +86,9 @@ export const useApontamentoDiarioChart = (periodo: PeriodoType) => {
data_apontamento, data_apontamento,
quantidade_produzida, quantidade_produzida,
tipo_apontamento, tipo_apontamento,
processo:processos_fabricacao(nome, ordem), processo:processos_fabricacao!processo_id(nome, ordem),
peca:pecas(peso_unitario), peca:pecas!peca_id(peso_unitario),
componente:componentes_peca(peso_unitario) componente:componentes_peca!componente_id(peso_unitario)
`) `)
.gte('data_apontamento', dataInicio) .gte('data_apontamento', dataInicio)
.lte('data_apontamento', dataFim) .lte('data_apontamento', dataFim)
+3 -3
View File
@@ -50,9 +50,9 @@ export const useAuditoriaInconsistencias = () => {
.from('apontamentos_producao') .from('apontamentos_producao')
.select(` .select(`
*, *,
processo:processos_fabricacao(nome, ordem), processo:processos_fabricacao!processo_id(nome, ordem),
peca:pecas(marca, etapa_fase, quantidade), peca:pecas!peca_id(marca, etapa_fase, quantidade),
componente:componentes_peca(marca_componente) componente:componentes_peca!componente_id(marca_componente)
`) `)
.eq('of_number', ofNumber) .eq('of_number', ofNumber)
.then(({ data }) => data || []), .then(({ data }) => data || []),
+2 -2
View File
@@ -64,8 +64,8 @@ export const useDashboardProducao = (ofNumber: string) => {
.from('apontamentos_producao') .from('apontamentos_producao')
.select(` .select(`
*, *,
peca:pecas(peso_unitario), peca:pecas!peca_id(peso_unitario),
processo:processos_fabricacao(nome, ordem) processo:processos_fabricacao!processo_id(nome, ordem)
`) `)
.eq('of_number', ofNumber); .eq('of_number', ofNumber);
+3 -3
View File
@@ -45,20 +45,20 @@ export const useRelatorioDiario = (selectedDate: string) => {
data_apontamento, data_apontamento,
created_at, created_at,
tipo_apontamento, tipo_apontamento,
peca:pecas( peca:pecas!peca_id(
id, id,
marca, marca,
descricao, descricao,
etapa_fase, etapa_fase,
peso_unitario peso_unitario
), ),
componente:componentes_peca( componente:componentes_peca!componente_id(
id, id,
marca_componente, marca_componente,
descricao, descricao,
peso_unitario peso_unitario
), ),
processo:processos_fabricacao( processo:processos_fabricacao!processo_id(
nome nome
) )
`) `)
@@ -41,8 +41,8 @@ export const useValidacaoSequencialProcessos = () => {
quantidade_produzida, quantidade_produzida,
processo_id, processo_id,
tipo_apontamento, tipo_apontamento,
peca:pecas(marca), peca:pecas!peca_id(marca),
processo:processos_fabricacao(ordem) processo:processos_fabricacao!processo_id(ordem)
`) `)
.eq('of_number', ofNumber) .eq('of_number', ofNumber)
.eq('tipo_apontamento', 'peca'); .eq('tipo_apontamento', 'peca');
@@ -54,8 +54,8 @@ export const useValidacaoSequencialProcessos = () => {
quantidade_produzida, quantidade_produzida,
processo_id, processo_id,
tipo_apontamento, tipo_apontamento,
componente:componentes_peca(marca_componente), componente:componentes_peca!componente_id(marca_componente),
processo:processos_fabricacao(ordem) processo:processos_fabricacao!processo_id(ordem)
`) `)
.eq('of_number', ofNumber) .eq('of_number', ofNumber)
.eq('tipo_apontamento', 'componente'); .eq('tipo_apontamento', 'componente');