95 lines
2.4 KiB
PL/PgSQL
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)
|