🚀 Initial commit: Versão atual do TrackSteel APP
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
-- Verificar estrutura atual da tabela tipos_materia_prima
|
||||
-- Se a coluna categoria não existir, vamos adicioná-la para distinguir entre material direto e indireto
|
||||
|
||||
-- Adicionar coluna categoria se não existir
|
||||
ALTER TABLE tipos_materia_prima
|
||||
ADD COLUMN IF NOT EXISTS categoria TEXT DEFAULT 'direto' CHECK (categoria IN ('direto', 'indireto'));
|
||||
|
||||
-- Criar tabelas para os outros CRUDs se não existirem
|
||||
|
||||
-- Tabela para unidades de medida
|
||||
CREATE TABLE IF NOT EXISTS unidades_medida (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
nome TEXT NOT NULL UNIQUE,
|
||||
abreviacao TEXT NOT NULL UNIQUE,
|
||||
descricao TEXT,
|
||||
ativo BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Tabela para localizações
|
||||
CREATE TABLE IF NOT EXISTS localizacoes_estoque (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
nome TEXT NOT NULL UNIQUE,
|
||||
descricao TEXT,
|
||||
codigo TEXT UNIQUE,
|
||||
ativo BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Tabela para qualidades de aço
|
||||
CREATE TABLE IF NOT EXISTS qualidades_aco (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
nome TEXT NOT NULL UNIQUE,
|
||||
norma TEXT,
|
||||
descricao TEXT,
|
||||
propriedades JSONB DEFAULT '{}',
|
||||
ativo BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Triggers para atualizar updated_at
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_unidades_medida()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_localizacoes()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_qualidades_aco()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = NOW();
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Criar triggers se não existirem
|
||||
DROP TRIGGER IF EXISTS trigger_update_updated_at_unidades_medida ON unidades_medida;
|
||||
CREATE TRIGGER trigger_update_updated_at_unidades_medida
|
||||
BEFORE UPDATE ON unidades_medida
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_updated_at_unidades_medida();
|
||||
|
||||
DROP TRIGGER IF EXISTS trigger_update_updated_at_localizacoes ON localizacoes_estoque;
|
||||
CREATE TRIGGER trigger_update_updated_at_localizacoes
|
||||
BEFORE UPDATE ON localizacoes_estoque
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_updated_at_localizacoes();
|
||||
|
||||
DROP TRIGGER IF EXISTS trigger_update_updated_at_qualidades_aco ON qualidades_aco;
|
||||
CREATE TRIGGER trigger_update_updated_at_qualidades_aco
|
||||
BEFORE UPDATE ON qualidades_aco
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_updated_at_qualidades_aco();
|
||||
|
||||
-- Inserir alguns dados iniciais para unidades de medida
|
||||
INSERT INTO unidades_medida (nome, abreviacao, descricao) VALUES
|
||||
('Peça', 'PC', 'Unidade por peça'),
|
||||
('Metro', 'M', 'Unidade de comprimento em metros'),
|
||||
('Quilograma', 'KG', 'Unidade de peso em quilogramas'),
|
||||
('Tonelada', 'TON', 'Unidade de peso em toneladas'),
|
||||
('Metro Quadrado', 'M²', 'Unidade de área em metros quadrados'),
|
||||
('Litro', 'L', 'Unidade de volume em litros')
|
||||
ON CONFLICT (nome) DO NOTHING;
|
||||
|
||||
-- Inserir algumas localizações iniciais
|
||||
INSERT INTO localizacoes_estoque (nome, codigo, descricao) VALUES
|
||||
('Galpão Principal', 'GP001', 'Galpão principal de armazenamento'),
|
||||
('Área Externa', 'AE001', 'Área externa coberta'),
|
||||
('Depósito Pequeno', 'DP001', 'Depósito para materiais pequenos'),
|
||||
('Área de Recebimento', 'AR001', 'Área para recebimento de materiais'),
|
||||
('Área de Expedição', 'AX001', 'Área para expedição de materiais')
|
||||
ON CONFLICT (nome) DO NOTHING;
|
||||
|
||||
-- Inserir algumas qualidades de aço iniciais
|
||||
INSERT INTO qualidades_aco (nome, norma, descricao, propriedades) VALUES
|
||||
('ASTM A36', 'ASTM A36', 'Aço carbono estrutural', '{"resistencia": "250 MPa", "uso": "estrutural"}'),
|
||||
('ASTM A572 Gr50', 'ASTM A572', 'Aço carbono alta resistência', '{"resistencia": "345 MPa", "uso": "estrutural"}'),
|
||||
('SAE 1020', 'SAE 1020', 'Aço carbono baixo teor', '{"carbono": "0.20%", "uso": "geral"}'),
|
||||
('SAE 1045', 'SAE 1045', 'Aço carbono médio teor', '{"carbono": "0.45%", "uso": "eixos"}'),
|
||||
('ASTM A500 Gr B', 'ASTM A500', 'Aço carbono para tubos', '{"resistencia": "290 MPa", "uso": "tubular"}')
|
||||
ON CONFLICT (nome) DO NOTHING;
|
||||
|
||||
-- RLS Policies
|
||||
ALTER TABLE unidades_medida ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE localizacoes_estoque ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE qualidades_aco ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
-- Políticas para visualização (todos podem ver)
|
||||
CREATE POLICY "Todos podem visualizar unidades" ON unidades_medida FOR SELECT USING (true);
|
||||
CREATE POLICY "Todos podem visualizar localizações" ON localizacoes_estoque FOR SELECT USING (true);
|
||||
CREATE POLICY "Todos podem visualizar qualidades aço" ON qualidades_aco FOR SELECT USING (true);
|
||||
|
||||
-- Políticas para modificação (apenas usuários autenticados)
|
||||
CREATE POLICY "Usuários autenticados podem gerenciar unidades" ON unidades_medida FOR ALL USING (auth.uid() IS NOT NULL);
|
||||
CREATE POLICY "Usuários autenticados podem gerenciar localizações" ON localizacoes_estoque FOR ALL USING (auth.uid() IS NOT NULL);
|
||||
CREATE POLICY "Usuários autenticados podem gerenciar qualidades aço" ON qualidades_aco FOR ALL USING (auth.uid() IS NOT NULL);
|
||||
Reference in New Issue
Block a user