feat: adicionar gestao de revisoes simples e criticas de pecas com integracao a apontamentos
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
-- ---------------------------------------------------------
|
||||
-- TRACKSTEEL ERP: TABELA DE REVISÕES DE PEÇAS POR OF
|
||||
-- ---------------------------------------------------------
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.revisoes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
of_number TEXT NOT NULL,
|
||||
peca_id UUID NOT NULL REFERENCES public.pecas(id) ON DELETE CASCADE,
|
||||
numero_revisao TEXT NOT NULL,
|
||||
tipo_revisao TEXT NOT NULL CHECK (tipo_revisao IN ('simples', 'critica')),
|
||||
descricao_motivo TEXT,
|
||||
observacoes TEXT,
|
||||
usuario_id TEXT,
|
||||
usuario_nome TEXT,
|
||||
usuario_email TEXT,
|
||||
data_revisao TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
dados_anteriores JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
dados_novos JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
campos_alterados TEXT[] NOT NULL DEFAULT '{}',
|
||||
afeta_apontamentos BOOLEAN NOT NULL DEFAULT false,
|
||||
impacto_processos JSONB DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Índices
|
||||
CREATE INDEX IF NOT EXISTS idx_revisoes_of_number ON public.revisoes(of_number);
|
||||
CREATE INDEX IF NOT EXISTS idx_revisoes_peca_id ON public.revisoes(peca_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_revisoes_data ON public.revisoes(data_revisao DESC);
|
||||
CREATE INDEX IF NOT EXISTS idx_revisoes_tipo ON public.revisoes(tipo_revisao);
|
||||
|
||||
-- Colunas auxiliares na tabela pecas
|
||||
ALTER TABLE public.pecas
|
||||
ADD COLUMN IF NOT EXISTS revisao_atual TEXT DEFAULT 'Rev 00',
|
||||
ADD COLUMN IF NOT EXISTS tem_revisao BOOLEAN DEFAULT false,
|
||||
ADD COLUMN IF NOT EXISTS qtd_revisoes INTEGER DEFAULT 0;
|
||||
|
||||
-- Trigger para sincronizar campos de revisão na tabela pecas
|
||||
CREATE OR REPLACE FUNCTION public.fn_sync_peca_revisoes()
|
||||
RETURNS TRIGGER AS $$
|
||||
DECLARE
|
||||
v_peca_id UUID;
|
||||
v_count INTEGER;
|
||||
v_last_rev TEXT;
|
||||
BEGIN
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
v_peca_id := OLD.peca_id;
|
||||
ELSE
|
||||
v_peca_id := NEW.peca_id;
|
||||
END IF;
|
||||
|
||||
SELECT count(*), COALESCE((SELECT numero_revisao FROM public.revisoes WHERE peca_id = v_peca_id ORDER BY data_revisao DESC, created_at DESC LIMIT 1), 'Rev 00')
|
||||
INTO v_count, v_last_rev
|
||||
FROM public.revisoes
|
||||
WHERE peca_id = v_peca_id;
|
||||
|
||||
UPDATE public.pecas
|
||||
SET tem_revisao = (v_count > 0),
|
||||
qtd_revisoes = v_count,
|
||||
revisao_atual = v_last_rev,
|
||||
updated_at = now()
|
||||
WHERE id = v_peca_id;
|
||||
|
||||
RETURN NULL;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_sync_peca_revisoes ON public.revisoes;
|
||||
CREATE TRIGGER trg_sync_peca_revisoes
|
||||
AFTER INSERT OR UPDATE OR DELETE ON public.revisoes
|
||||
FOR EACH ROW EXECUTE FUNCTION public.fn_sync_peca_revisoes();
|
||||
|
||||
-- Políticas RLS
|
||||
ALTER TABLE public.revisoes ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS "revisoes_select_policy" ON public.revisoes;
|
||||
CREATE POLICY "revisoes_select_policy" ON public.revisoes FOR SELECT USING (true);
|
||||
|
||||
DROP POLICY IF EXISTS "revisoes_insert_policy" ON public.revisoes;
|
||||
CREATE POLICY "revisoes_insert_policy" ON public.revisoes FOR INSERT WITH CHECK (true);
|
||||
|
||||
DROP POLICY IF EXISTS "revisoes_update_policy" ON public.revisoes;
|
||||
CREATE POLICY "revisoes_update_policy" ON public.revisoes FOR UPDATE USING (true) WITH CHECK (true);
|
||||
|
||||
DROP POLICY IF EXISTS "revisoes_delete_policy" ON public.revisoes;
|
||||
CREATE POLICY "revisoes_delete_policy" ON public.revisoes FOR DELETE USING (true);
|
||||
|
||||
GRANT ALL ON TABLE public.revisoes TO postgres, anon, authenticated, service_role;
|
||||
Reference in New Issue
Block a user