Files
tracksteel_app/supabase/migrations/20250706124800-8a5d68a8-1e09-4241-9f56-fb3fe02dcf1f.sql

44 lines
1.3 KiB
PL/PgSQL

-- Adicionar colunas necessárias na tabela diario_obra_rdo
ALTER TABLE public.diario_obra_rdo
ADD COLUMN numero_rdo TEXT,
ADD COLUMN usuario_nome TEXT;
-- Função para gerar numeração automática do RDO
CREATE OR REPLACE FUNCTION generate_rdo_number(of_number_param TEXT)
RETURNS TEXT AS $$
DECLARE
next_num INTEGER;
new_rdo_number TEXT;
of_digits TEXT;
BEGIN
-- Extrair apenas os dígitos da OF
of_digits := regexp_replace(of_number_param, '[^0-9]', '', 'g');
-- Buscar próximo número sequencial para esta OF
SELECT COALESCE(MAX(CAST(SUBSTRING(numero_rdo FROM '\-(\d+)$') AS INTEGER)), 0) + 1
INTO next_num
FROM public.diario_obra_rdo
WHERE of_number = of_number_param AND numero_rdo IS NOT NULL;
-- Gerar número do RDO no formato RDO[digits]-[seq]
new_rdo_number := 'RDO' || of_digits || '-' || LPAD(next_num::TEXT, 2, '0');
RETURN new_rdo_number;
END;
$$ LANGUAGE plpgsql;
-- Trigger para gerar automaticamente o número do RDO
CREATE OR REPLACE FUNCTION handle_rdo_number()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.numero_rdo IS NULL OR NEW.numero_rdo = '' THEN
NEW.numero_rdo := generate_rdo_number(NEW.of_number);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_generate_rdo_number
BEFORE INSERT ON public.diario_obra_rdo
FOR EACH ROW EXECUTE FUNCTION handle_rdo_number();