fix(db): resolve PostgREST PGRST201 foreign key ambiguities across all hooks and components
This commit is contained in:
@@ -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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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 já 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`;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 || []),
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|||||||
Reference in New Issue
Block a user