Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marisa Lima

Controlar validades

Recommended Posts

Boas,

 

Tenho uma aplicação em PHP com recurso a framework Yii, que permite gerir toda a formação dada e emitir certificados. Neste momento preciso de controlar a validade dos certificados, acontece que ao longo do ano o formando tem vários certificados com diferentes validades.

Cada curso ocorre várias vezes durante o ano para diferentes participantes... a minha duvida está como eu posso comparar se após passar a validade o formando teve ou não aquela formação. Com uma query em mysql eu consigo criar alertas para as validades que terminam no prazo de 60 dias, mas podem existir validades "perdidas" que eu preciso manter em alerta.

 

Eu não tenho forma de verificar que o formando X cuja a validade terminou em 20-02-2018 já teve a formação em Junho. Como poderei resolver este problema?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A estrutura das tabelas é a seguinte:

 

Tabela accao que guarda a data de inicio e fim de realização do curso

CREATE TABLE `accao` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `nome` VARCHAR(50) NULL DEFAULT NULL,
    `Id_curso` INT(11) NULL DEFAULT NULL,
    `data_inicio` DATE NULL DEFAULT NULL,
    `data_fim` DATE NULL DEFAULT NULL,
    `coordenador` INT(11) NULL DEFAULT NULL,
    `fabrica` INT(11) NULL DEFAULT NULL,
    `duracao` FLOAT NULL DEFAULT NULL,
    `qualificacao` INT(11) NULL DEFAULT NULL,
    `Id_modalidade` INT(11) NULL DEFAULT NULL,
    `Id_enquadramento` INT(11) NULL DEFAULT NULL,
    `plano_extraplano` VARCHAR(50) NULL DEFAULT NULL,
    `Idtipo_formacao` INT(11) NULL DEFAULT NULL,
    `certificacao` INT(11) NULL DEFAULT NULL,
    `obs` VARCHAR(50) NULL DEFAULT NULL,
    `tipo` VARCHAR(50) NULL DEFAULT NULL,
    `t33` VARCHAR(50) NULL DEFAULT NULL,
    `id_user` INT(11) NULL DEFAULT NULL,
    `status` VARCHAR(15) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `FK_accao_curso` (`Id_curso`),
    INDEX `FK_accao_modalidade` (`Id_modalidade`),
    INDEX `FK_accao_enquadramento` (`Id_enquadramento`),
    INDEX `FK_accao_fabrica` (`fabrica`),
    INDEX `FK_accao_certificacao` (`certificacao`),
    INDEX `FK_accao_coordenador` (`coordenador`),
    INDEX `FK_accao_tipo_formacao` (`Idtipo_formacao`),
    INDEX `FK_accao_utilizador` (`id_user`),
    INDEX `FK_accao_tipo_qualificacao` (`qualificacao`),
    CONSTRAINT `FK_accao_certificacao` FOREIGN KEY (`certificacao`) REFERENCES `certificacao` (`id`),
    CONSTRAINT `FK_accao_coordenador` FOREIGN KEY (`coordenador`) REFERENCES `coordenador` (`id`),
    CONSTRAINT `FK_accao_curso` FOREIGN KEY (`Id_curso`) REFERENCES `curso` (`id`),
    CONSTRAINT `FK_accao_enquadramento` FOREIGN KEY (`Id_enquadramento`) REFERENCES `enquadramento` (`id`),
    CONSTRAINT `FK_accao_fabrica` FOREIGN KEY (`fabrica`) REFERENCES `fabrica` (`id`),
    CONSTRAINT `FK_accao_modalidade` FOREIGN KEY (`Id_modalidade`) REFERENCES `modalidade` (`id`),
    CONSTRAINT `FK_accao_tipo_formacao` FOREIGN KEY (`Idtipo_formacao`) REFERENCES `tipo_formacao` (`id`),
    CONSTRAINT `FK_accao_tipo_qualificacao` FOREIGN KEY (`qualificacao`) REFERENCES `tipo_qualificacao` (`id`),
    CONSTRAINT `FK_accao_utilizador` FOREIGN KEY (`id_user`) REFERENCES `utilizador` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2001033
;
 

tabela accao formando guarda a lista de participantes.

 

CREATE TABLE `accao_formando` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `id_accao` INT(11) NULL DEFAULT NULL,
    `formando` INT(11) NULL DEFAULT NULL,
    `n_certificado` INT(11) NULL DEFAULT NULL,
    `avaliacao` VARCHAR(50) NULL DEFAULT NULL,
    `obs` VARCHAR(200) NULL DEFAULT NULL,
    `validade` DATE NULL DEFAULT NULL,
    `desistencia` VARCHAR(50) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `FK_accao_formando_accao` (`id_accao`),
    INDEX `FK_accao_formando_formando` (`formando`),
    CONSTRAINT `FK_accao_formando_accao` FOREIGN KEY (`id_accao`) REFERENCES `accao` (`id`),
    CONSTRAINT `FK_accao_formando_formando` FOREIGN KEY (`formando`) REFERENCES `colaborador` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1016588
;
 

Terei também a tabela sessão onde ficam registados os "sumarios" de cada sessão. Nesta tabela sessão fica associada a tabela módulos, onde podem existir módulos com validades diferentes, por exemplo o certificado ter a validade de 12 Meses mas ser constituido por um módulo cuja a validade é de 24 meses.

 

CREATE TABLE `sessao` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `id_accao` INT(11) NULL DEFAULT NULL,
    `data` DATE NULL DEFAULT NULL,
    `hora_inicio` TIME NULL DEFAULT NULL,
    `hora_fim` TIME NULL DEFAULT NULL,
    `id_local` INT(11) NULL DEFAULT NULL,
    `tipo_sessao` INT(11) NULL DEFAULT NULL,
    `id_entidade` INT(11) NULL DEFAULT NULL,
    `id_modulo` INT(11) NULL DEFAULT NULL,
    `id_formador` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `FK_sessao_accao` (`id_accao`),
    INDEX `FK_sessao_fabrica` (`id_entidade`),
    INDEX `FK_sessao_modulo` (`id_modulo`),
    INDEX `FK_sessao_local` (`id_local`),
    INDEX `FK_sessao_formador` (`id_formador`),
    INDEX `FK_sessao_tipo_sessao` (`tipo_sessao`),
    CONSTRAINT `FK_sessao_accao` FOREIGN KEY (`id_accao`) REFERENCES `accao` (`id`),
    CONSTRAINT `FK_sessao_fabrica` FOREIGN KEY (`id_entidade`) REFERENCES `entidade` (`id`),
    CONSTRAINT `FK_sessao_formador` FOREIGN KEY (`id_formador`) REFERENCES `formador` (`id`),
    CONSTRAINT `FK_sessao_local` FOREIGN KEY (`id_local`) REFERENCES `local` (`id`),
    CONSTRAINT `FK_sessao_modulo` FOREIGN KEY (`id_modulo`) REFERENCES `modulo` (`id`),
    CONSTRAINT `FK_sessao_tipo_sessao` FOREIGN KEY (`tipo_sessao`) REFERENCES `tipo_sessao` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=62069
;
 

Esta informação é util?

 

Obrigada.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ver se entendi...

Você precisa apenas identificar os certificados que estão vencidos, certo?

Se for isso mesmo, faça:

SELECT 
	*
FROM accao_formando
WHERE
	validade < NOW();
                     
//Função NOW() retorna a data atual do banco
                   
	

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa é uma parte da solução. A minha principal dificuldade é que essas validades podem já ter sido "substituidas" por novos certificados, por exemplo a que terminou em Fevereiro de certeza que o formando já foi convocado para formação mas eu não consigo comparar se realmente foi ou não realizada a formação.

 

Por exemplo no caso de um documento quando termina a validade, eu entro na aplicação e vou substitiur o documento sem validade pelo actual, neste caso não posso "apagar" nada pois tudo tem de ficar em histórico e o que apenas faço é registar que no dia X decorreu a acção de formação Y com determinados participantes...

 

Não sei se consegui explicar o meu problema?

 

Obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.