Skip to content

3.9.0

Latest

Choose a tag to compare

@GabrielPintoSouza GabrielPintoSouza released this 24 Jun 17:02
ee1587b

What's Changed

Full Changelog: 3.8.7...3.9.0

Alterações no banco de dados

Módulo Pessoa

Migração da coluna de e-mail

USE `wegia`;
-- ================================================================
-- SCRIPT DE MIGRAÇÃO: Mover coluna EMAIL de SOCIO para PESSOA
-- ================================================================
-- Data: 2026-05-07
-- Descrição: Move a coluna email da tabela socio para a tabela pessoa
-- Ambiente: Produção
-- ================================================================

-- Desativar verificação de chaves estrangeiras durante a migração
SET FOREIGN_KEY_CHECKS = 0;

-- ================================================================
-- PASSO 1: Adicionar coluna EMAIL na tabela PESSOA
-- ================================================================
ALTER TABLE `wegia`.`pessoa` 
ADD COLUMN `email` VARCHAR(256) NULL DEFAULT NULL AFTER `imagem`;
-- ================================================================
-- PASSO 2: Copiar dados de EMAIL de SOCIO para PESSOA
-- ================================================================
-- Atualiza o email na tabela pessoa a partir dos dados de socio

START TRANSACTION;
UPDATE `wegia`.`pessoa` p
SET p.`email` = (
    SELECT s.`email` 
    FROM `wegia`.`socio` s 
    WHERE s.`id_pessoa` = p.`id_pessoa` 
    LIMIT 1
)
WHERE EXISTS (
    SELECT 1 
    FROM `wegia`.`socio` s 
    WHERE s.`id_pessoa` = p.`id_pessoa` 
    AND s.`email` IS NOT NULL
);
COMMIT;
-- ================================================================
-- PASSO 3: Remover coluna EMAIL da tabela SOCIO
-- ================================================================
ALTER TABLE `wegia`.`socio` 
DROP COLUMN `email`;

-- ================================================================
-- PASSO 4: Reativar verificação de chaves estrangeiras
-- ================================================================
SET FOREIGN_KEY_CHECKS = 1;

-- ================================================================
-- PASSO 5: Criar índice único para EMAIL na tabela PESSOA (opcional)
-- ================================================================
-- Descomente a linha abaixo se desejar garantir que não haja emails duplicados
-- ALTER TABLE `wegia`.`pessoa` ADD UNIQUE INDEX `uq_pessoa_email` (`email` ASC);

-- ================================================================
-- VERIFICAÇÃO: Executar após a migração para validar
-- ================================================================
-- Verificar quantidade de emails migrados
SELECT 
    COUNT(*) as total_pessoas_com_email,
    COUNT(DISTINCT email) as emails_unicos
FROM `wegia`.`pessoa`
WHERE `email` IS NOT NULL;

-- Verificar se a coluna foi removida de socio
-- SELECT * FROM `wegia`.`socio` LIMIT 0;

-- ================================================================
-- FIM DO SCRIPT
-- ================================================================

Alteração de procedure

USE `wegia`;

DROP PROCEDURE IF EXISTS `cadfuncionario`;

DELIMITER $$

CREATE PROCEDURE `cadfuncionario`(
  IN `nome` VARCHAR(100), 
  IN `sobrenome` VARCHAR(100), 
  IN `cpf` VARCHAR(40), 
  IN `senha` VARCHAR(70), 
  IN `sexo` CHAR(1), 
  IN `email` VARCHAR(100),
  IN `telefone` VARCHAR(100), 
  IN `data_nascimento` DATE, 
  IN `imagem` LONGTEXT, 
  IN `cep` VARCHAR(100), 
  IN `estado` VARCHAR(50), 
  IN `cidade` VARCHAR(40), 
  IN `bairro` VARCHAR(40), 
  IN `logradouro` VARCHAR(40), 
  IN `numero_endereco` VARCHAR(100), 
  IN `complemento` VARCHAR(50), 
  IN `ibge` VARCHAR(20), 
  IN `registro_geral` VARCHAR(20), 
  IN `orgao_emissor` VARCHAR(120), 
  IN `data_expedicao` DATE, 
  IN `nome_pai` VARCHAR(100), 
  IN `nome_mae` VARCHAR(100), 
  IN `tipo_sanguineo` VARCHAR(50), 
  IN `data_admissao` DATE, 
  IN `pis` VARCHAR(140), 
  IN `ctps` VARCHAR(150), 
  IN `uf_ctps` VARCHAR(200), 
  IN `numero_titulo` VARCHAR(150), 
  IN `zona` VARCHAR(300), 
  IN `secao` VARCHAR(400), 
  IN `certificado_reservista_numero` VARCHAR(100), 
  IN `certificado_reservista_serie` VARCHAR(100), 
  IN `id_situacao` INT,
  IN `id_cargo` INT
)
BEGIN

DECLARE idP INT;
DECLARE idF INT;

INSERT INTO pessoa(cpf, senha, nome, sobrenome, sexo, email, telefone, data_nascimento, imagem, cep, estado, cidade, bairro, logradouro, numero_endereco, complemento, ibge, registro_geral, orgao_emissor, data_expedicao, nome_pai, nome_mae, tipo_sanguineo)
VALUES(cpf, senha, nome, sobrenome, sexo, email, telefone, data_nascimento, imagem, cep, estado, cidade, bairro, logradouro, numero_endereco, complemento, ibge, registro_geral, orgao_emissor, data_expedicao, nome_pai, nome_mae, tipo_sanguineo);

SELECT MAX(id_pessoa) INTO idP FROM pessoa;

INSERT INTO funcionario(id_pessoa, id_cargo, id_situacao, data_admissao, pis, ctps, uf_ctps, numero_titulo, zona, secao, certificado_reservista_numero, certificado_reservista_serie)
VALUES(idP, id_cargo, id_situacao, data_admissao, pis, ctps, uf_ctps, numero_titulo, zona, secao, certificado_reservista_numero, certificado_reservista_serie);

END$$

DELIMITER ;

Módulo Material e Patrimônio

ALTER TABLE produto
ADD COLUMN ativo TINYINT(1) NOT NULL DEFAULT 1;

ALTER TABLE entrada
ADD COLUMN arquivada_por_produto_inativo TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE saida
ADD COLUMN arquivada_por_produto_inativo TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE ientrada
ADD COLUMN oculto_por_produto_inativo TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE isaida
ADD COLUMN oculto_por_produto_inativo TINYINT(1) NOT NULL DEFAULT 0;

Módulo Agenda

USE wegia;

CREATE TABLE IF NOT EXISTS wegia.agenda_status (
id INT NOT NULL AUTO_INCREMENT,
descricao VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX descricao_UNIQUE (descricao ASC)
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda (
id INT NOT NULL AUTO_INCREMENT,
descricao TEXT NOT NULL,
id_status INT NOT NULL,
PRIMARY KEY (id),
INDEX fk_agenda_status_idx (id_status ASC),
CONSTRAINT fk_agenda_status
FOREIGN KEY (id_status)
REFERENCES wegia.agenda_status (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda_equipe_status (
id INT NOT NULL AUTO_INCREMENT,
descricao VARCHAR(100) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX descricao_UNIQUE (descricao ASC)
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda_equipe (
id INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(150) NOT NULL,
id_status INT NOT NULL,
descricao TEXT NULL,
id_agenda INT NOT NULL,
inicio_turno TIME NOT NULL,
fim_turno TIME NOT NULL,
PRIMARY KEY (id),
INDEX fk_agenda_equipe_status_idx (id_status ASC),
INDEX fk_agenda_equipe_agenda_idx (id_agenda ASC),
CONSTRAINT fk_agenda_equipe_status
FOREIGN KEY (id_status)
REFERENCES wegia.agenda_equipe_status (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_agenda_equipe_agenda
FOREIGN KEY (id_agenda)
REFERENCES wegia.agenda (id)
ON DELETE CASCADE
ON UPDATE NO ACTION
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda_equipe_divisao (
id INT NOT NULL AUTO_INCREMENT,
id_equipe INT NOT NULL,
nome VARCHAR(100) NOT NULL,
ativo TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (id),
INDEX fk_aed_equipe_idx (id_equipe ASC),
CONSTRAINT fk_aed_equipe
FOREIGN KEY (id_equipe)
REFERENCES wegia.agenda_equipe (id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda_equipe_membro (
id INT NOT NULL AUTO_INCREMENT,
id_equipe INT NOT NULL,
id_divisao INT NULL DEFAULT NULL,
id_pessoa INT NOT NULL,
ativo TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (id),
UNIQUE INDEX uq_equipe_pessoa (id_equipe ASC, id_pessoa ASC),
INDEX fk_aem_equipe_idx (id_equipe ASC),
INDEX fk_aem_divisao_idx (id_divisao ASC),
INDEX fk_aem_pessoa_idx (id_pessoa ASC),
CONSTRAINT fk_aem_equipe
FOREIGN KEY (id_equipe)
REFERENCES wegia.agenda_equipe (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_aem_divisao
FOREIGN KEY (id_divisao)
REFERENCES wegia.agenda_equipe_divisao (id)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT fk_aem_pessoa
FOREIGN KEY (id_pessoa)
REFERENCES wegia.pessoa (id_pessoa)
ON DELETE NO ACTION
ON UPDATE NO ACTION
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda_alocacao (
id INT NOT NULL AUTO_INCREMENT,
id_agenda INT NOT NULL,
id_equipe INT NOT NULL,
inicio DATE NOT NULL,
fim DATE NOT NULL,
lembrete DATETIME NULL DEFAULT NULL,
lembrete_enviado TINYINT(1) NOT NULL DEFAULT 0,
intervalo INT NOT NULL DEFAULT 0,
PRIMARY KEY (id),
INDEX fk_aa_agenda_idx (id_agenda ASC),
INDEX fk_aa_equipe_idx (id_equipe ASC),
CONSTRAINT fk_aa_agenda
FOREIGN KEY (id_agenda)
REFERENCES wegia.agenda (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_aa_equipe
FOREIGN KEY (id_equipe)
REFERENCES wegia.agenda_equipe (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda_alocacao_periodo (
id INT NOT NULL AUTO_INCREMENT,
id_alocacao INT NOT NULL,
data_inicio DATETIME NOT NULL,
data_fim DATETIME NOT NULL,
PRIMARY KEY (id),
INDEX fk_periodo_alocacao_idx (id_alocacao ASC),
CONSTRAINT fk_periodo_alocacao
FOREIGN KEY (id_alocacao)
REFERENCES wegia.agenda_alocacao (id)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS wegia.agenda_membro_periodo (
id INT NOT NULL AUTO_INCREMENT,
id_periodo INT NOT NULL,
id_pessoa INT NOT NULL,
id_divisao INT NULL DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE INDEX uq_membro_periodo_pessoa (id_periodo ASC, id_pessoa ASC),
INDEX fk_amp_periodo_idx (id_periodo ASC),
INDEX fk_amp_pessoa_idx (id_pessoa ASC),
INDEX fk_amp_divisao_idx (id_divisao ASC),
CONSTRAINT fk_amp_periodo
FOREIGN KEY (id_periodo)
REFERENCES wegia.agenda_alocacao_periodo (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_amp_pessoa
FOREIGN KEY (id_pessoa)
REFERENCES wegia.pessoa (id_pessoa)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_amp_divisao
FOREIGN KEY (id_divisao)
REFERENCES wegia.agenda_equipe_divisao (id)
ON DELETE SET NULL
ON UPDATE CASCADE
) ENGINE = InnoDB;

INSERT IGNORE INTO recurso (id_recurso, descricao) VALUES
('10', 'Módulo Agenda'),
('101', 'Gerenciar Agenda'),
('102', 'Gerenciar Equipe'),
('103', 'Visualizar Agenda');

INSERT IGNORE INTO modulos_visiveis (id_recurso, visivel) VALUES (10, 1);

INSERT IGNORE INTO agenda_status (descricao) VALUES ('Ativo'), ('Inativo');

INSERT IGNORE INTO agenda_equipe_status (descricao) VALUES ('Ativo'), ('Inativo');