78 lines
2.0 KiB
PL/PgSQL
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$; |