--Consultas para Gestao de Suspensao
--Estados da suspensao: 
	--Activa(A):Em vigor
				--Atrasada(AT): Cujo o tempo ja passou, mais a multa nao foi paga pelo leitor(NAO PRECISA)
	--Anulada(AN): Caso seja registada e verificou-se a anomalia no processo,entao ela e cancelada
	--Cumprida(C): Quando ele cumpri o periodo determinado e paga o valor da suspensao
-- Selecionar Suspensoes somente Temporais que nao geram multas vencidas
SELECT * FROM suspensao S INNER JOIN motivosuspmulta M
ON S.motivoSuspMulta=M.id WHERE M.estado='A' AND
M.multaValor = 0 AND S.dataVencimento < CURRENT_TIMESTAMP
	--Actualizar estado da suspensao temporal (Sem multa) vencidas
UPDATE suspensao S 
INNER JOIN motivosuspmulta M
ON S.motivoSuspMulta=M.id 
SET S.estado = 'C'
WHERE M.estado='A' AND
M.multaValor = 0 AND S.dataVencimento < CURRENT_TIMESTAMP

-- OU NO DQL

UPDATE RemaSigmaBundle:Suspensao S 
                SET S.estado = 'C'
                WHERE  
                S.dataVencimento < CURRENT_TIMESTAMP() AND
                S.motivoSuspMulta IN(
                SELECT MSM.id FROM RemaSigmaBundle:MotivoSuspMulta MSM
                WHERE MSM.estado = 'A' AND
                MSM.multaValor = 0)

	--Selecionar Id de todos Leitores que  possuem Suspensao Activas
SELECT DISTINCT(l.id) FROM leitor L 
INNER JOIN suspensao s 
on s.leitor=L.id
WHERE L.estado='s' AND
S.estado = 'A'

	--Actualizar estado de todos os leitores para activo, caso esteja suspenso e nao possui nenhuma suspensao activa


UPDATE leitor L 
SET L.estado = 'A'
WHERE L.id NOT IN(
SELECT DISTINCT(LSuspenso.id) FROM leitor LSuspenso 
INNER JOIN suspensao s 
on s.leitor=LSuspenso.id
WHERE LSuspenso.estado='s' AND
S.estado = 'A'
   )
   
   --Devido o problema em associar tabela, TENHO QUE DESTA FORMA
   UPDATE leitor L 
SET L.estado = 'A'
WHERE L.id NOT IN(
SELECT DISTINCT(LSuspenso.id) FROM
  (SELECT * FROM leitor ) AS LSuspenso
INNER JOIN suspensao s 
on s.leitor=LSuspenso.id
WHERE LSuspenso.estado='s' AND
S.estado = 'A'
   )
   
	-- Disponibilizar todos os exemplares cuja a reserva foi vencida
	SELECT * FROM  
exemplar_reserva,exemplar ,reserva 
WHERE
exemplar_reserva.Reserva = reserva.id AND
exemplar_reserva.Exemplar = exemplar.id AND
reserva.estado= 'AT'

SELECT EX.id,EX.disponibilidade FROM  
exemplar_reserva EXR,
exemplar EX ,reserva RS
WHERE
EXR.Reserva = RS.id AND
EXR.Exemplar = EX.id AND
RS.estado= 'AT'
   
SELECT EX.id FROM  
exemplar_reserva EXR,
exemplar EX 
WHERE
EXR.Exemplar = EX.id AND
EXR.Reserva IN(
SELECT R.id FROM Reserva R  
 WHERE 
 R.dataVencimento < CURRENT_TIMESTAMP() AND 
(R.dataVenRenovacao < CURRENT_TIMESTAMP() OR (R.dataVenRenovacao IS NULL) )
AND R.estado='A')
   
   
   
