🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
|
||||
-- Criar tabela para romaneios de expedição
|
||||
CREATE TABLE public.romaneios_expedicao (
|
||||
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
numero_romaneio TEXT NOT NULL UNIQUE,
|
||||
of_number TEXT NOT NULL,
|
||||
data_romaneio DATE NOT NULL DEFAULT CURRENT_DATE,
|
||||
prioridade INTEGER NOT NULL DEFAULT 1,
|
||||
status TEXT NOT NULL DEFAULT 'Em Preparação',
|
||||
observacoes TEXT,
|
||||
peso_total_romaneio NUMERIC(10,2) NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
|
||||
created_by UUID REFERENCES auth.users(id)
|
||||
);
|
||||
|
||||
-- Criar tabela para itens do romaneio (peças)
|
||||
CREATE TABLE public.itens_romaneio_pecas (
|
||||
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
romaneio_id UUID NOT NULL REFERENCES public.romaneios_expedicao(id) ON DELETE CASCADE,
|
||||
peca_id UUID NOT NULL REFERENCES public.pecas(id),
|
||||
marca TEXT NOT NULL,
|
||||
fase TEXT,
|
||||
descricao TEXT,
|
||||
comprimento NUMERIC(10,2),
|
||||
peso_unitario NUMERIC(10,3) NOT NULL,
|
||||
quantidade_expedida NUMERIC(10,2) NOT NULL,
|
||||
peso_total NUMERIC(10,2) NOT NULL,
|
||||
quantidade_faltante NUMERIC(10,2) NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Criar tabela para insumos do romaneio
|
||||
CREATE TABLE public.itens_romaneio_insumos (
|
||||
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
romaneio_id UUID NOT NULL REFERENCES public.romaneios_expedicao(id) ON DELETE CASCADE,
|
||||
tipo_insumo TEXT NOT NULL, -- 'parafusos', 'tintas', 'eletrodos', 'cola', etc
|
||||
descricao TEXT NOT NULL,
|
||||
unidade TEXT NOT NULL DEFAULT 'PC',
|
||||
quantidade_expedida NUMERIC(10,2) NOT NULL,
|
||||
peso_unitario NUMERIC(10,3),
|
||||
peso_total NUMERIC(10,2),
|
||||
observacoes TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- Criar índices para melhorar performance
|
||||
CREATE INDEX idx_romaneios_of_number ON public.romaneios_expedicao(of_number);
|
||||
CREATE INDEX idx_romaneios_data ON public.romaneios_expedicao(data_romaneio);
|
||||
CREATE INDEX idx_itens_romaneio_pecas ON public.itens_romaneio_pecas(romaneio_id);
|
||||
CREATE INDEX idx_itens_romaneio_insumos ON public.itens_romaneio_insumos(romaneio_id);
|
||||
|
||||
-- Trigger para atualizar updated_at
|
||||
CREATE OR REPLACE FUNCTION update_romaneios_updated_at()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = now();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER update_romaneios_expedicao_updated_at
|
||||
BEFORE UPDATE ON public.romaneios_expedicao
|
||||
FOR EACH ROW EXECUTE FUNCTION update_romaneios_updated_at();
|
||||
|
||||
-- Políticas RLS
|
||||
ALTER TABLE public.romaneios_expedicao ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.itens_romaneio_pecas ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE public.itens_romaneio_insumos ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Políticas para romaneios_expedicao
|
||||
CREATE POLICY "Usuários autenticados podem visualizar romaneios"
|
||||
ON public.romaneios_expedicao FOR SELECT
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem inserir romaneios"
|
||||
ON public.romaneios_expedicao FOR INSERT
|
||||
WITH CHECK (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem atualizar romaneios"
|
||||
ON public.romaneios_expedicao FOR UPDATE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem deletar romaneios"
|
||||
ON public.romaneios_expedicao FOR DELETE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
-- Políticas para itens_romaneio_pecas
|
||||
CREATE POLICY "Usuários autenticados podem visualizar itens peças"
|
||||
ON public.itens_romaneio_pecas FOR SELECT
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem inserir itens peças"
|
||||
ON public.itens_romaneio_pecas FOR INSERT
|
||||
WITH CHECK (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem atualizar itens peças"
|
||||
ON public.itens_romaneio_pecas FOR UPDATE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem deletar itens peças"
|
||||
ON public.itens_romaneio_pecas FOR DELETE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
-- Políticas para itens_romaneio_insumos
|
||||
CREATE POLICY "Usuários autenticados podem visualizar itens insumos"
|
||||
ON public.itens_romaneio_insumos FOR SELECT
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem inserir itens insumos"
|
||||
ON public.itens_romaneio_insumos FOR INSERT
|
||||
WITH CHECK (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem atualizar itens insumos"
|
||||
ON public.itens_romaneio_insumos FOR UPDATE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
CREATE POLICY "Usuários autenticados podem deletar itens insumos"
|
||||
ON public.itens_romaneio_insumos FOR DELETE
|
||||
USING (auth.uid() IS NOT NULL);
|
||||
|
||||
-- Função para gerar número do romaneio automaticamente
|
||||
CREATE OR REPLACE FUNCTION generate_romaneio_number()
|
||||
RETURNS TEXT AS $$
|
||||
DECLARE
|
||||
next_num INTEGER;
|
||||
new_romaneio_number TEXT;
|
||||
BEGIN
|
||||
SELECT COALESCE(MAX(CAST(SUBSTRING(numero_romaneio FROM 'ROM-(\d+)') AS INTEGER)), 0) + 1
|
||||
INTO next_num
|
||||
FROM public.romaneios_expedicao
|
||||
WHERE numero_romaneio ~ '^ROM-\d+$';
|
||||
|
||||
new_romaneio_number := 'ROM-' || LPAD(next_num::TEXT, 4, '0');
|
||||
RETURN new_romaneio_number;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Trigger para gerar número do romaneio automaticamente
|
||||
CREATE OR REPLACE FUNCTION handle_romaneio_number()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
IF NEW.numero_romaneio IS NULL OR NEW.numero_romaneio = '' THEN
|
||||
NEW.numero_romaneio := generate_romaneio_number();
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER generate_romaneio_number_trigger
|
||||
BEFORE INSERT ON public.romaneios_expedicao
|
||||
FOR EACH ROW EXECUTE FUNCTION handle_romaneio_number();
|
||||
Reference in New Issue
Block a user