﻿-- Stored procedure
--V Transazione gestita a livello applicativo
CREATE PROCEDURE [dbo].[HIST_DELETEARCHIVIATI] AS
BEGIN
-- Nella tabella temporanea #deleteReport mettiamo tutti i report da cancellare presi dalla tabella generata dalla
-- HIST_getReportDaStoricizzare e caricati su nastro (flagArchiviato = 1)
select * into #deleteRepFisico from appoDaArchiviare where flagArchiviato = 1
declare @ttlStorico as int
set @ttlStorico = 30
--delete dei restorati al passare dei 30 giorni
--DELETE FROM dbo.ReportStorico
--WHERE IDENTIFICATIVO IN
--	(SELECT id 
--	 from dbo.RepositoryStorico WHERE datediff(dd,caricamentoInStorico,getDate()) > @ttlStorico
--    )
----aggiornamento puntamento tabella metadati
--UPDATE repositoryMetadati
--SET repository = 4
--WHERE repository = 3 and id IN 
--	(SELECT id 
--	 from dbo.RepositoryStorico WHERE datediff(dd,caricamentoInStorico,getDate()) > @ttlStorico
--    )
--Cancellazione report online NON storicizzati --41083 1.57.36 -  1480 0.2.55
--cancellazione com'era prima della fix
--DELETE FROM dbo.ReportFisico
--WHERE IDENTIFICATIVO IN 
--	(SELECT IdInRepository 
--	 FROM repositoryMetadati WHERE flagstoricizzato = 1 and  flaglock = 0
--	 )
--fix per problema lock/timeout
-- Nuova delete che sostituissce le query 1 e 2
delete rFisico
FROM dbo.ReportFisico rfisico
inner join #deleteRepFisico delRep on delRep.idReport = rfisico.identificativo
and delRep.repository = 0
----aggiornamento tabella metadati, mantengo l'informazione di quali report ho cancellato definitivamente.
update 
RepositoryMetadati
set flagStoricizzato = 1
where datediff(day,dataGenerazione,getDate()) > 180
and repository = 0 and flaglock = 0 and flagStoricizzato = 0
-- Query 1
--DELETE FROM dbo.ReportFisico
--WHERE IDENTIFICATIVO IN 
--    (SELECT TOP 10000 IdInRepository 
--     FROM repositoryMetadati a
--     join reportFisico b
--     on a.idInRepository = b.identificativo
--     WHERE flagstoricizzato = 1 and  flaglock = 0 and repository = 0
--     )
     /*
WHILE @@ROWCOUNT>0
DELETE FROM dbo.ReportFisico
WHERE IDENTIFICATIVO IN 
    (SELECT TOP 2000 IdInRepository 
     FROM repositoryMetadati a
     join reportFisico b
     on a.idInRepository = b.identificativo
     WHERE flagstoricizzato = 1 and  flaglock = 0 and repository = 0
     )
--fine fix per problema lock/timeout
*/
--Cancellazione report online storicizzati 1232 0.02.30  - 56 0.0.3
---- Query 2
--DELETE FROM dbo.ReportFisico
--WHERE IDENTIFICATIVO IN 
--	(
--	 SELECT top 10000 IdInRepository
--	 FROM repositoryMetadati a 
--	 join reportFisico b
--     on a.idInRepository = b.identificativo
--	 WHERE flagstoricizzato = 1 and repositoryPrestorico = 0 and flaglock = 1
--   )
--Cancellazione report contratto sei	
-- Sotituisce query 3
delete rFisico
FROM dbo.C6ReportFisico rfisico
inner join #deleteRepFisico delRep on delRep.idReport = rfisico.identificativo
and delRep.repository = 1
-- Query 3
--Cancellazione report contratto sei
--DELETE FROM dbo.C6ReportFisico --32363 01.03.02 - 387 0.0.42
--WHERE IDENTIFICATIVO IN 
--	(SELECT top 10000 IdInRepository--, a.*
--	 FROM repositoryMetadati a 
--	 join C6ReportFisico b
--	 on a.idInRepository = b.identificativo
--	 WHERE flagstoricizzato = 1 and repositoryPrestorico = 1 and flaglock = 1
--	 )
--Cancellazione report contratto sei campagna
-- sostituisce query 4
delete rFisico
FROM dbo.C6ReportFisico rfisico
inner join #deleteRepFisico delRep on delRep.idReport = rfisico.identificativo
and delRep.repository = 2
-- query 4
--Cancellazione report contratto sei campagna
--DELETE FROM dbo.C6ReportFisico_CAMPAGNA
--WHERE IDENTIFICATIVO IN 
--	(SELECT IdInRepository 
--	 FROM repositoryMetadati WHERE flagstoricizzato = 1 and repositoryPrestorico = 2 and flaglock = 1
--	 )
--aggiornamento repository tabella dei metadati ------begin transaction rollback
--vengono aggiornati i report a lucchetto aperti cancellati
update repositoryMetadati
set repository = 4
WHERE flagstoricizzato = 1
and repository not in (3,4) 
-- Archivio tutti i Report che Sono stati archiviati
insert into dbo.ReportArchiviati
Select *, getDate()
from #deleteRepFisico
--- 08/10/2015-- Ho terminato il processo di cancellazione e ora posso svuotare la tabella di Selezione Report da archiviare 
truncate table appoDaArchiviare
END