Files
tracksteel_app/supabase/migrations/20250713163848-dac140f9-85b3-4fc5-9cc2-f37f25d417f0.sql

95 lines
2.4 KiB
PL/PgSQL

-- Adicionar campo status_detalhado à tabela ofs_concluidas para diferenciar entre concluídas e entregues
ALTER TABLE public.ofs_concluidas
ADD COLUMN status_detalhado text DEFAULT 'concluida';
-- Atualizar registros existentes
UPDATE public.ofs_concluidas
SET status_detalhado = 'concluida'
WHERE status_detalhado IS NULL;
-- Adicionar índice para melhor performance
CREATE INDEX IF NOT EXISTS idx_ofs_concluidas_status ON public.ofs_concluidas(status_detalhado);
-- Função para mover OF de ativa para concluída
CREATE OR REPLACE FUNCTION concluir_of(of_id_param uuid)
RETURNS void
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
DECLARE
of_record ordens_fabricacao%ROWTYPE;
ficha_data jsonb;
BEGIN
-- Buscar dados da OF ativa
SELECT * INTO of_record
FROM ordens_fabricacao
WHERE id = of_id_param;
IF NOT FOUND THEN
RAISE EXCEPTION 'OF não encontrada';
END IF;
-- Buscar dados da ficha técnica
SELECT to_jsonb(ft.*) INTO ficha_data
FROM ficha_tecnica_contratos ft
WHERE of_number = of_record.num_of;
-- Inserir na tabela ofs_concluidas com status 'concluida'
INSERT INTO ofs_concluidas (
num_of,
descritivo,
peso_total,
data_abertura,
data_prazo,
criterio_qualidade,
tratamento_final,
local_uf,
user_id,
ficha_tecnica_data,
status_detalhado,
arquivado_por
) 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,
ficha_data,
'concluida',
auth.uid()
);
-- Remover da tabela de ordens ativas
DELETE FROM ordens_fabricacao WHERE id = of_id_param;
END;
$function$;
-- Função para mover OF de concluída para entregue
CREATE OR REPLACE FUNCTION entregar_of(of_concluida_id uuid)
RETURNS void
LANGUAGE plpgsql
SECURITY DEFINER
AS $function$
BEGIN
-- Atualizar status para 'entregue'
UPDATE ofs_concluidas
SET
status_detalhado = 'entregue',
data_arquivamento = now(),
arquivado_por = auth.uid()
WHERE id = of_concluida_id AND status_detalhado = 'concluida';
IF NOT FOUND THEN
RAISE EXCEPTION 'OF concluída não encontrada ou já entregue';
END IF;
END;
$function$;
-- Atualizar políticas RLS para incluir o novo campo
-- (As políticas existentes já cobrem o acesso, apenas garantindo que estão corretas)