USE productos_profesor;

SHOW TRIGGERS;

/*Se crea una tabla para el registro de actividades*/
CREATE TABLE log_actividades (
id_actividad INT AUTO_INCREMENT PRIMARY KEY,
operacion VARCHAR(10),
tabla VARCHAR(30),
actividad TINYTEXT,
fecha_modificacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)Engine=InnoDB;


/*Eliminar Triggers de Bitácora Revista y Artículo*/
DROP TRIGGER IF EXISTS log_insertar_revista;
DROP TRIGGER IF EXISTS log_insertar_articulo;

/*Eliminar Triggers de Validar Revista y Puntos Artículo*/
DROP TRIGGER IF EXISTS validar_tipo_revista;
DROP TRIGGER IF EXISTS asignar_puntos_articulo;
DROP TRIGGER IF EXISTS asignar_puntos_congreso;


SELECT * FROM articulo_investigacion;
SELECT * FROM congreso;
SELECT * FROM presentacion_congreso;

/**************TRIGGERS DE BITÁCORA**********/

/*Se registra en la bitácora que se insertó una revista
Se almacena el isbn*/

DELIMITER $$

CREATE TRIGGER log_insertar_revista AFTER INSERT ON revista
	FOR EACH ROW BEGIN
			INSERT INTO log_actividades (operacion,tabla,actividad) VALUES
			(
				'INS','revista',CONCAT('Se insertó una revista con el isbn ',NEW.isbn)
			);

END $$

/*Se registra en la bitácora que se insertó un artículo en revista
Se almacena el isbn*/

CREATE TRIGGER log_insertar_articulo AFTER INSERT ON articulo_investigacion
	FOR EACH ROW BEGIN
			INSERT INTO log_actividades (operacion,tabla,actividad) VALUES
			(
				'INS','profesor_articulo_investigacion',CONCAT('Se insertó un articulo con el id ',NEW.id_articulo_investigacion)
			);

END $$



/**************TRIGGERS DE VALIDACIONES**********/

/*Restriccion de atributo para una revista.
El valor de tipo debe ser "INDEXADA" o "NO INDEXADA", 
en caso de que no se así, se tomará "NO INDEXADA"
*/

DELIMITER $$

CREATE TRIGGER validar_tipo_revista BEFORE INSERT ON revista
	FOR EACH ROW BEGIN
		IF (NEW.tipo <> 'INDEXADA' && NEW.tipo <> 'NO INDEXADA')
		THEN 
			SET NEW.tipo = 'NO INDEXADA';
			INSERT INTO log_actividades (operacion,tabla,actividad) VALUES(
				'INS','revista','Valor de atributo tipo no válido, se insertó NO INDEXADA'
			);
		END IF;

END $$


/*Asegurar que los valores en PUNTOS son los adecuados
al insertar una revista*/

DELIMITER $$
		
CREATE TRIGGER asignar_puntos_articulo BEFORE INSERT ON articulo_investigacion
	FOR EACH ROW BEGIN
			SET @tipo = (SELECT tipo FROM revista WHERE isbn=NEW.revista_isbn);
				IF (@tipo = 'INDEXADA' && NEW.estado = 'FINALIZADO')
					THEN
					SET NEW.puntos = 100;
				ELSEIF (@tipo = 'INDEXADA' && NEW.estado = 'EN PROCESO')
					THEN
					SET NEW.puntos = 0;
				ELSEIF (@tipo = 'NO INDEXADA' && NEW.estado = 'FINALIZADO')
					THEN
					SET NEW.puntos = 80;
				ELSEIF (@tipo = 'NO INDEXADA' && NEW.estado = 'EN PROCESO')
					THEN
					SET NEW.puntos = 0;
				END IF;

END $$

/*TRIGGER PARA ACTUALIZAR LOS PUNTOS DE UNA REVISTA AL ACTUALIZAR EL ESTADO,
SE UTILIZA NEW U OLD POR QUE NO SE MODIFICA EL VALOR DEL ID*/
DELIMITER $$
	CREATE TRIGGER actualizar_estado_revista BEFORE UPDATE ON articulo_investigacion
	FOR EACH ROW BEGIN
	SET @tipo_revista = (SELECT revista.tipo FROM articulo_investigacion,revista WHERE 
	revista.isbn = articulo_investigacion.revista_isbn
	AND articulo_investigacion.id_articulo_investigacion = NEW.id_articulo_investigacion);

IF (@tipo_revista = 'INDEXADA' AND NEW.estado = 'FINALIZADO') THEN
			SET NEW.puntos = 100;
		ELSEIF (@tipo_revista = 'NO INDEXADA' AND NEW.estado = 'FINALIZADO') THEN
			SET NEW.puntos = 80;
		ELSEIF (@tipo_revista = 'INDEXADA' AND NEW.estado = 'EN PROCESO') THEN
			SET NEW.puntos = 0;
		ELSEIF (@tipo_revista = 'NO INDEXADA' AND NEW.estado = 'EN PROCESO') THEN
			SET NEW.puntos = 0;
		END IF;

END $$

/*EJERCICIO*/

/*RESTRICCIÓN DE ATRIBUTO PARA UN CONGRESO
EL VALOR DE TIPO DEBE SER "NACIONAL" o "INTERNACIONAL",
en caso de que no sea así, se tomará "NACIONAL"*/

DELIMITER $$

CREATE TRIGGER validar_tipo_congreso BEFORE INSERT ON congreso
	FOR EACH ROW BEGIN
		IF (NEW.tipo <> 'NACIONAL' && NEW.tipo <> 'INTERNACIONAL')
		THEN 
			SET NEW.tipo = 'NACIONAL';
			INSERT INTO log_actividades (operacion,tabla,actividad) VALUES(
				'INS','congreso','Valor de atributo tipo no válido, se insertó NACIONAL'
			);
		END IF;

END $$


/*TRIGGER PARA INSERCIÓN CORRECTA DE PUNTOS, EN CASO DE QUE 
LA PRESENTACIÓN SEA EN UN CONGRESO NACIONAL Y SU ESTADO SEA
FINALIZADO, SE INSERTARÁN 50 PUNTOS.
EN CASO DE QUE SEA EN UN CONGRESO INTERNACIONAL Y SU ESTADO SEA
FINALIZADO, SE INSERTARÁN 60 PUNTOS.
EN CASO DE QUE EL ESTADO SEA EN PROCESO, SE ASIGNARÁN 0 PUNTOS*/

DELIMITER $$

CREATE TRIGGER asignar_puntos_congreso BEFORE INSERT ON presentacion_congreso

	FOR EACH ROW BEGIN
		SET @tipo_congreso = (SELECT tipo FROM congreso WHERE id_congreso=NEW.congreso_id_congreso);
		IF (@tipo_congreso = 'NACIONAL' && NEW.estado = 'FINALIZADO')
					THEN
					SET NEW.puntos = 50;
				ELSEIF (@tipo_congreso = 'NACIONAL' && NEW.estado = 'EN PROCESO')
					THEN
					SET NEW.puntos = 0;
				ELSEIF (@tipo_congreso = 'INTERNACIONAL' && NEW.estado = 'FINALIZADO')
					THEN
					SET NEW.puntos = 60;
				ELSEIF (@tipo_congreso = 'INTERNACIONAL' && NEW.estado = 'EN PROCESO')
					THEN
					SET NEW.puntos = 0;
				END IF;
END $$




