Skip to content

3.6.4

Choose a tag to compare

@nilsonLazarin nilsonLazarin released this 10 Feb 12:15
· 558 commits to master since this release

What's Changed

Full Changelog: 3.6.2...3.6.4

Passo a passo para atualizar o Banco de dados:

Migrar documentação de atendidos

  1. Desabilitar temporariamente a verificação de chaves estrangeiras
SET FOREIGN_KEY_CHECKS = 0;
  1. Criar a nova tabela pessoa_arquivo
CREATE TABLE IF NOT EXISTS `pessoa_arquivo` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `id_pessoa` INT NOT NULL,
  `data` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `arquivo_nome` VARCHAR(255) NOT NULL,
  `arquivo_extensao` VARCHAR(10) NOT NULL,
  `arquivo` LONGBLOB NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_pessoa_arquivo_pessoa_id_pessoa`
    FOREIGN KEY (`id_pessoa`)
    REFERENCES `pessoa` (`id_pessoa`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
) ENGINE=InnoDB;
  1. Adicionar a coluna de relacionamento na tabela atendido_documentacao
ALTER TABLE `atendido_documentacao`
  ADD COLUMN `id_pessoa_arquivo` INT NULL
  AFTER `atendido_docs_atendidos_idatendido_docs_atendidos`;
  1. Migrar os arquivos existentes para a tabela pessoa_arquivo
INSERT INTO pessoa_arquivo (
  id_pessoa,
  data,
  arquivo_nome,
  arquivo_extensao,
  arquivo
)
SELECT
  a.pessoa_id_pessoa,
  ad.data,
  ad.arquivo_nome,
  ad.arquivo_extensao,
  ad.arquivo
FROM atendido_documentacao ad
JOIN atendido a
  ON a.idatendido = ad.atendido_idatendido;
  1. Atualizar a tabela atendido_documentacao com o ID do arquivo migrado
UPDATE atendido_documentacao ad
JOIN atendido a
  ON a.idatendido = ad.atendido_idatendido
JOIN pessoa_arquivo pa
  ON pa.id_pessoa = a.pessoa_id_pessoa
 AND pa.arquivo_nome = ad.arquivo_nome
 AND pa.arquivo_extensao = ad.arquivo_extensao
 AND pa.arquivo = ad.arquivo
SET ad.id_pessoa_arquivo = pa.id;
  1. Validar se ainda existem registros não migrados. O resultado deve ser 0.
SELECT COUNT(*) AS pendentes
FROM atendido_documentacao
WHERE id_pessoa_arquivo IS NULL;
  1. Tornar a coluna id_pessoa_arquivo obrigatória
ALTER TABLE `atendido_documentacao`
  MODIFY COLUMN `id_pessoa_arquivo` INT NOT NULL;
  1. Criar índice e chave estrangeira para otimização e integridade
CREATE INDEX `idx_atendido_documentacao_arquivo`
ON `atendido_documentacao` (`id_pessoa_arquivo`);

ALTER TABLE `atendido_documentacao`
ADD CONSTRAINT `fk_atendido_documentacao_pessoa_arquivo`
  FOREIGN KEY (`id_pessoa_arquivo`)
  REFERENCES `pessoa_arquivo` (`id`)
  ON DELETE CASCADE
  ON UPDATE NO ACTION;
  1. Remover as colunas antigas de arquivo da tabela atendido_documentacao
ALTER TABLE `atendido_documentacao`
DROP COLUMN `data`,
DROP COLUMN `arquivo_nome`,
DROP COLUMN `arquivo_extensao`,
DROP COLUMN `arquivo`;
  1. Reativar a verificação de chaves estrangeiras
SET FOREIGN_KEY_CHECKS = 1;

Tabela socio_log

ALTER TABLE `wegia`.`socio_log`
  ADD COLUMN `ip` VARCHAR(39) NULL AFTER `descricao`,
  ADD COLUMN `user_agent` VARCHAR(512) NULL AFTER `ip`;

Procedures

DELIMITER $$

DROP PROCEDURE IF EXISTS `cadatendido`$$

CREATE PROCEDURE `cadatendido`(
  IN `strNome` VARCHAR(100),
  IN `strSobrenome` VARCHAR(100),
  IN `strCpf` VARCHAR(40),
  IN `strSexo` CHAR(1),
  IN `strTelefone` VARCHAR(25),
  IN `dateNascimento` DATE,
  IN `intStatus` INT,
  IN `intTipo` INT
)
BEGIN
  DECLARE idP INT;

  INSERT INTO pessoa(cpf, nome, sobrenome, sexo, telefone, data_nascimento)
  VALUES (strCpf, strNome, strSobrenome, strSexo, strTelefone, dateNascimento);

  SET idP = LAST_INSERT_ID();

  IF EXISTS (
    SELECT 1
    FROM atendido
    WHERE pessoa_id_pessoa = idP
  ) THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'Já existe atendido para esta pessoa.';
  END IF;

  INSERT INTO atendido(
    pessoa_id_pessoa,
    atendido_tipo_idatendido_tipo,
    atendido_status_idatendido_status
  )
  VALUES (idP, intTipo, intStatus);

END$$

DELIMITER ;

Processo de aceitação (processo_aceitacao)

  1. Renomear a tabela principal
RENAME TABLE `wegia`.`processo_de_aceitacao`
TO `wegia`.`processo_aceitacao`;

2.1. Remover a foreign key antiga

ALTER TABLE `wegia`.`pa_etapa`
DROP FOREIGN KEY `fk_etapa_processo`;

2.2. Renomear e ajustar colunas

ALTER TABLE `wegia`.`pa_etapa`
  CHANGE COLUMN `descricao` `titulo` VARCHAR(128) NOT NULL,
  CHANGE COLUMN `id_processo` `id_processo_aceitacao` INT NOT NULL;

2.3. Criar a nova foreign key

ALTER TABLE `wegia`.`pa_etapa`
ADD CONSTRAINT `fk_etapa_processo`
FOREIGN KEY (`id_processo_aceitacao`)
REFERENCES `wegia`.`processo_aceitacao` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
  1. Alterar campo descrição
ALTER TABLE processo_aceitacao
MODIFY COLUMN descricao TEXT NULL after data_fim;

Processo de aceitação (pa_arquivo)

  1. Remover foreign keys antigas
ALTER TABLE `wegia`.`pa_arquivo`
DROP FOREIGN KEY `fk_pa_arquivo_processo`,
DROP FOREIGN KEY `fk_pa_arquivo_etapa`;

2.1. Renomear id_processo → id_processo_aceitacao

ALTER TABLE `wegia`.`pa_arquivo`
CHANGE COLUMN `id_processo` `id_processo_aceitacao` INT NULL;

2.2. Remover colunas antigas de arquivo físico

ALTER TABLE `wegia`.`pa_arquivo`
DROP COLUMN `arquivo_nome`,
DROP COLUMN `arquivo_extensao`,
DROP COLUMN `arquivo`,
DROP COLUMN `data_upload`;

2.3. Adicionar novas colunas

ALTER TABLE `wegia`.`pa_arquivo`
ADD COLUMN `id_tipo_documentacao` INT NULL AFTER `id_etapa`,
ADD COLUMN `id_pessoa_arquivo` INT NOT NULL AFTER `id_tipo_documentacao`;

3.3. Criar índices

ALTER TABLE `wegia`.`pa_arquivo`
ADD CONSTRAINT `fk_pa_arquivo_processo`
  FOREIGN KEY (`id_processo_aceitacao`)
  REFERENCES `wegia`.`processo_aceitacao` (`id`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,

ADD CONSTRAINT `fk_pa_arquivo_etapa`
  FOREIGN KEY (`id_etapa`)
  REFERENCES `wegia`.`pa_etapa` (`id`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION,

ADD CONSTRAINT `fk_pa_arquivo_tipo_doc`
  FOREIGN KEY (`id_tipo_documentacao`)
  REFERENCES `wegia`.`atendido_docs_atendidos` (`idatendido_docs_atendidos`)
  ON DELETE SET NULL
  ON UPDATE CASCADE,

ADD CONSTRAINT `fk_pa_arquivo_pessoa_arquivo`
  FOREIGN KEY (`id_pessoa_arquivo`)
  REFERENCES `wegia`.`pessoa_arquivo` (`id`)
  ON DELETE CASCADE
  ON UPDATE NO ACTION;

Ajustes em atendido

  1. Verificar duplicidades
SELECT pessoa_id_pessoa, COUNT(*)
FROM atendido
GROUP BY pessoa_id_pessoa
HAVING COUNT(*) > 1;
  1. Adicionar unicidade para pessoa_id_pessoa
ALTER TABLE `wegia`.`atendido`
ADD CONSTRAINT `uq_atendido_pessoa`
UNIQUE (`pessoa_id_pessoa`);

Processo aceitação (pa_etapa)

ALTER TABLE pa_etapa
ADD COLUMN descricao TEXT NULL AFTER titulo;