Files
tracksteel_app/supabase/migrations/20250812201936_ee105edf-9627-49b0-a9d6-032c2836fbe9.sql

204 lines
7.8 KiB
PL/PgSQL

-- Primeiro vamos criar a tabela tipos_materia_prima se ela não existir
CREATE TABLE IF NOT EXISTS public.tipos_materia_prima (
id uuid NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
nome text NOT NULL,
descricao text,
ativo boolean DEFAULT true,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now()
);
-- Habilitar RLS
ALTER TABLE public.tipos_materia_prima ENABLE ROW LEVEL SECURITY;
-- Política para visualizar tipos
CREATE POLICY "Todos podem visualizar tipos_materia_prima"
ON public.tipos_materia_prima
FOR SELECT
USING (true);
-- Política para gerenciar tipos (apenas usuários autenticados)
CREATE POLICY "Usuários autenticados podem gerenciar tipos_materia_prima"
ON public.tipos_materia_prima
FOR ALL
USING (auth.uid() IS NOT NULL);
-- Adicionar alguns tipos padrão se a tabela estiver vazia
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Tubos diversos', 'Tubos redondos, quadrados, retangulares, etc'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Tubos diversos');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Embalagens', 'Embalagens e apoios de carga'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Embalagens');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Chapas', 'Chapas diversas'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Chapas');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Perfis Soldados', 'VS, CS, CVS, T, Caixão, etc'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Perfis Soldados');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Adesivos químicos', 'Colas, ampolas, chumbadores químicos, etc'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Adesivos químicos');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Perfis Laminados', 'W, HP, Chato, Redondo, L, quadrado'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Perfis Laminados');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Perfis Especiais', 'Perfis não usuais ou fora de catálogo'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Perfis Especiais');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Tintas e Solventes', 'Tintas, solventes'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Tintas e Solventes');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Insumos de Soldagem', 'Arames, eletrodos, fluxo, etc'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Insumos de Soldagem');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Chapas Lisas', 'Chapas Lisas'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Chapas Lisas');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Abrasivos', 'Granalhas, lixa, discos de desbastes, etc'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Abrasivos');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Insumos de fabrica', 'Gases, discos de corte, de desbaste, etc'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Insumos de fabrica');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Perfis Dobrados', 'L, U, UE, C'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Perfis Dobrados');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Chapas Dobradas', 'Calhas, rufos, ch.especiais'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Chapas Dobradas');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Fixadores em Geral', 'Parafusos, porcas, arruelas, barras roscadas, etc'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Fixadores em Geral');
INSERT INTO public.tipos_materia_prima (nome, descricao)
SELECT 'Insumos de Qualidade', 'Insumos utilizados para controle de qualidade'
WHERE NOT EXISTS (SELECT 1 FROM public.tipos_materia_prima WHERE nome = 'Insumos de Qualidade');
-- Atualizar a tabela estoque_materiais para referenciar a tabela tipos_materia_prima
-- Primeiro vamos adicionar a coluna tipo_material_nome se não existir
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'estoque_materiais' AND column_name = 'tipo_material_nome') THEN
ALTER TABLE public.estoque_materiais ADD COLUMN tipo_material_nome text;
END IF;
END $$;
-- Atualizar os materiais existentes com base nos nomes dos tipos
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Tubos diversos'
WHERE tipo_material_id = '3efd355f-4698-4728-95cd-456e912f68bf';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Embalagens'
WHERE tipo_material_id = '3e4bd7d2-ac4e-435f-aa77-432ef2b47ed3';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Chapas'
WHERE tipo_material_id = '3f636e44-dd43-412c-a6f7-d9a6f843b42c';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Perfis Soldados'
WHERE tipo_material_id = '624443d4-d4e4-45d6-ae6c-0b5d05f2b7f';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Adesivos químicos'
WHERE tipo_material_id = '662bdda2-461c-425a-ab68-a9b58303ffda';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Perfis Laminados'
WHERE tipo_material_id = '76cbb3b0-b518-4c64-870a-d3a49cc2754f';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Perfis Especiais'
WHERE tipo_material_id = '9b04fe9b-2db3-4804-b382-d721ec90ac6';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Tintas e Solventes'
WHERE tipo_material_id = '9f18138d-e34c-4b08-a962-e34f21d6e0b3';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Insumos de Soldagem'
WHERE tipo_material_id = 'acd60fde-7c2b-488f-97d3-75e832933649';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Chapas Lisas'
WHERE tipo_material_id = 'c44e3f53-3f4a-4f64-a19f-2d97d1cde50d';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Abrasivos'
WHERE tipo_material_id = 'cd96b8e3-e489-437b-983c-5604ca5b52e7';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Insumos de fabrica'
WHERE tipo_material_id = 'd2e9fe6d-fd41-49ce-b4cc-90877af1e4bc';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Perfis Dobrados'
WHERE tipo_material_id = 'dab105cf-e3ee-4630-a9ab-e36d24ff3540';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Chapas Dobradas'
WHERE tipo_material_id = 'e30b0e4c-4bcf-4303-85a6-51016798241e';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Fixadores em Geral'
WHERE tipo_material_id = 'e329cedb-2fc3-4dc5-8fd5-304234322720';
UPDATE public.estoque_materiais
SET tipo_material_nome = 'Insumos de Qualidade'
WHERE tipo_material_id = 'ffcfff58-a6d4-4ec2-baef-26e5bb1a0451';
-- Criar função para gerar número de tarefa automaticamente
CREATE OR REPLACE FUNCTION public.generate_task_ref()
RETURNS text
LANGUAGE plpgsql
AS $$
DECLARE
next_num INTEGER;
new_task_ref TEXT;
BEGIN
SELECT COALESCE(MAX(CAST(SUBSTRING(tasks.task_ref FROM 'T-(\d+)') AS INTEGER)), 0) + 1
INTO next_num
FROM public.tasks
WHERE tasks.task_ref ~ '^T-\d+$';
new_task_ref := 'T-' || LPAD(next_num::TEXT, 4, '0');
RETURN new_task_ref;
END;
$$;
-- Trigger para definir task_ref automaticamente
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;
$$;
-- Aplicar trigger na tabela tasks se não existir
DROP TRIGGER IF EXISTS set_task_ref ON public.tasks;
CREATE TRIGGER set_task_ref
BEFORE INSERT ON public.tasks
FOR EACH ROW
EXECUTE FUNCTION public.handle_task_ref();