48 lines
1.6 KiB
PL/PgSQL
48 lines
1.6 KiB
PL/PgSQL
|
|
-- Primeiro, vamos alterar a tabela tasks para remover a restrição de chave estrangeira com ficha_tecnica_contratos
|
|
-- e tornar of_number apenas um campo de texto para vinculação
|
|
ALTER TABLE public.tasks DROP CONSTRAINT IF EXISTS tasks_of_number_fkey;
|
|
|
|
-- Vamos ajustar a coluna of_number para permitir valores que podem não existir em ficha_tecnica_contratos
|
|
-- (caso o usuário digite um número de OF que ainda não foi cadastrado)
|
|
ALTER TABLE public.tasks ALTER COLUMN of_number DROP NOT NULL;
|
|
ALTER TABLE public.tasks ALTER COLUMN of_number SET NOT NULL;
|
|
|
|
-- Vamos criar um índice para melhorar a performance de busca por OF
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_of_number ON public.tasks(of_number);
|
|
|
|
-- Vamos também criar um índice para o task_ref para buscas rápidas
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_task_ref ON public.tasks(task_ref);
|
|
|
|
-- Vamos atualizar a função de geração de referência para um formato mais claro
|
|
CREATE OR REPLACE FUNCTION public.generate_task_ref()
|
|
RETURNS TEXT
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
next_num INTEGER;
|
|
task_ref TEXT;
|
|
BEGIN
|
|
SELECT COALESCE(MAX(CAST(SUBSTRING(task_ref FROM 'T-(\d+)') AS INTEGER)), 0) + 1
|
|
INTO next_num
|
|
FROM public.tasks
|
|
WHERE task_ref ~ '^T-\d+$';
|
|
|
|
task_ref := 'T-' || LPAD(next_num::TEXT, 4, '0');
|
|
RETURN task_ref;
|
|
END;
|
|
$$;
|
|
|
|
-- Vamos atualizar a função trigger para usar o novo formato
|
|
CREATE OR REPLACE FUNCTION public.handle_task_ref()
|
|
RETURNS TRIGGER
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
IF NEW.task_ref IS NULL OR NEW.task_ref = '' OR NEW.task_ref = 'TEMP' THEN
|
|
NEW.task_ref := public.generate_task_ref();
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|