﻿-- Function: eleccionrapida(integer, integer)

DROP FUNCTION eleccionrapida(integer, integer, integer);

CREATE OR REPLACE FUNCTION eleccionrapida(evento integer, ronda integer, criterio integer = 0)
  RETURNS integer AS
$BODY$
DECLARE
    juez RECORD;
    chica RECORD;
    criterios RECORD;
    pm integer;
    r integer;
BEGIN
	pm = (select puntuacion_maxima from "CertamenTabasco_ronda" where id = ronda);
	r = 0;
	
	FOR juez IN SELECT * FROM "CertamenTabasco_juez" LOOP
		FOR chica IN SELECT * FROM "CertamenTabasco_participante" where ronda_id=ronda LOOP
			FOR criterios IN SELECT * FROM "CertamenTabasco_criterio" where (0 = criterio or id in (criterio)) and id in (select criterio_id from "CertamenTabasco_ronda_criterio" where ronda_id = ronda) LOOP
			 if not exists (
			 select * from "CertamenTabasco_calificacion" where usuario_id=juez.user_ptr_id 
			 and activo=TRUE
			 AND evento_id =EVENTO
			 AND ronda_id=RONDA
			 AND juez_id=juez.user_ptr_id
			 AND participante_id = CHICA.ID
			 AND criterio_id = CRITERIOs.ID) 
			 THEN 
				INSERT INTO "CertamenTabasco_calificacion"(fecha_registro,usuario_id,activo,evento_id,ronda_id,
				juez_id,participante_id,criterio_id,calificacion)
				VALUES (now(),juez.user_ptr_id,TRUE,evento,ronda,juez.user_ptr_id,chica.id,criterios.id,trunc(random()*pm+1));
				r = r + 1;
				END IF;
			END LOOP;
		END LOOP;
	END LOOP;
    
    RETURN r;
END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION eleccionrapida(integer, integer, integer)
  OWNER TO postgres;
