Files
tracksteel_app/supabase/migrations/20250713164656-6c357996-fcf1-4a3c-b015-b35d57105553.sql

78 lines
2.0 KiB
PL/PgSQL

-- Função para reverter OF de entregue para concluída (apenas admin)
CREATE OR REPLACE FUNCTION reverter_of_entregue_para_concluida(of_concluida_id uuid)
RETURNS void
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
BEGIN
-- Verificar se o usuário é admin
IF NOT has_role(auth.uid(), 'admin'::app_role) THEN
RAISE EXCEPTION 'Apenas administradores podem reverter OFs entregues';
END IF;
-- Atualizar status para 'concluida'
UPDATE ofs_concluidas
SET
status_detalhado = 'concluida',
data_arquivamento = NULL,
arquivado_por = NULL
WHERE id = of_concluida_id AND status_detalhado = 'entregue';
IF NOT FOUND THEN
RAISE EXCEPTION 'OF entregue não encontrada';
END IF;
END;
$function$;
-- Função para reverter OF de concluída para ativa (apenas admin)
CREATE OR REPLACE FUNCTION reverter_of_concluida_para_ativa(of_concluida_id uuid)
RETURNS void
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
DECLARE
of_record ofs_concluidas%ROWTYPE;
BEGIN
-- Verificar se o usuário é admin
IF NOT has_role(auth.uid(), 'admin'::app_role) THEN
RAISE EXCEPTION 'Apenas administradores podem reverter OFs concluídas';
END IF;
-- Buscar dados da OF concluída
SELECT * INTO of_record
FROM ofs_concluidas
WHERE id = of_concluida_id AND status_detalhado = 'concluida';
IF NOT FOUND THEN
RAISE EXCEPTION 'OF concluída não encontrada';
END IF;
-- Inserir de volta na tabela ordens_fabricacao como ativa
INSERT INTO ordens_fabricacao (
num_of,
descritivo,
peso_total,
data_abertura,
data_prazo,
criterio_qualidade,
tratamento_final,
local_uf,
user_id,
status
) VALUES (
of_record.num_of,
of_record.descritivo,
of_record.peso_total,
of_record.data_abertura,
of_record.data_prazo,
of_record.criterio_qualidade,
of_record.tratamento_final,
of_record.local_uf,
of_record.user_id,
'ativa'
);
-- Remover da tabela ofs_concluidas
DELETE FROM ofs_concluidas WHERE id = of_concluida_id;
END;
$function$;