-- Utilizzo l'ultima data di aggiornamento dei dati
DECLARE @UltimoAggiornamento datetime
select @UltimoAggiornamento=convert(datetime,coalesce(Max(Descrizione),'1900-01-01 00:00:00'),120) from DesVar WHERE Chiave='Data' AND Codice='UltimoAggiornamento'
print @UltimoAggiornamento

-- 1. aggiorno stato allegati ad OLD
UPDATE Allegati SET Stato='OLD'

-- 2. inserisco gli allegati da PrIDE relativi all'ultima revisione e collegati agli articoli presenti nella tabella Articolo
INSERT INTO Allegati (UserIns, DataIns, UserMod, DataMod, Stato, ChiaveArticolo, NomeDoc, TipoDoc, RevisioneDoc, LinguaDoc, PathDoc, StatoDoc, NumeroDoc)
SELECT 'Admin',getdate(),'Admin', getdate(),'NEW', sFactCode, sFileDesc, sDocType, MAX(sDocEdition), sLanguage, sFilePath, iStatus, sDocNumber 
FROM [10.5.32.22].[PrIDE].dbo.dbo_tb_OTS_xx_TDD LEFT OUTER JOIN Articolo ON sFactCode =  Articolo.ChiaveArticolo 
GROUP BY sDocType, sFactCode, sLanguage, sFileDesc, sFilePath, iStatus, sDocNumber 
HAVING(ISNULL(MAX(dInsDate),getdate())>@UltimoAggiornamento OR ISNULL(MAX(dUpdDate),getdate())>@UltimoAggiornamento)

-- 3.  trovo irecord modificati (record doppi)
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmp_a1')) DROP TABLE #tmp_a1
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmp_tmpa1')) DROP TABLE #tmp_tmpa1
SELECT COUNT(*) AS Conteggio, ChiaveArticolo INTO [#tmp_tmpa1] FROM Allegati GROUP BY ChiaveArticolo, NomeDoc, TipoDoc, RevisioneDoc, LinguaDoc, PathDoc, StatoDoc, NumeroDoc HAVING COUNT(*) > 1
SELECT max(Conteggio) as Conteggio, ChiaveArticolo INTO [#tmp_a1] FROM #tmp_tmpa1 GROUP BY ChiaveArticolo

-- 4. aggiorno copie e sequenza con ultimo stato di avanzamento
UPDATE Allegati SET Copie = Allegati_OLD.MaxCopie, Sequenza = Allegati_OLD.MaxSequenza 
FROM Allegati INNER JOIN (SELECT left(Allegati_1.ChiaveArticolo,8) AS ChiaveArticolo,  TipoDoc, LinguaDoc, NumeroDoc, MAX(Copie) As MaxCopie, MAX(Sequenza) AS MaxSequenza FROM [#tmp_a1] INNER JOIN Allegati AS Allegati_1 ON left([#tmp_a1].ChiaveArticolo,8) = left(Allegati_1.ChiaveArticolo,8) WHERE Allegati_1.Stato = N'OLD' GROUP BY left(Allegati_1.ChiaveArticolo,8), TipoDoc, LinguaDoc, NumeroDoc) AS Allegati_OLD 
ON left(Allegati.ChiaveArticolo,8) = Allegati_OLD.ChiaveArticolo AND Allegati.NomeDoc = Allegati_OLD.NomeDoc AND Allegati.TipoDoc = Allegati_OLD.TipoDoc AND Allegati.LinguaDoc = Allegati_OLD.LinguaDoc AND Allegati.PathDoc = Allegati_OLD.PathDoc AND Allegati.StatoDoc = Allegati_OLD.StatoDoc AND Allegati.NumeroDoc = Allegati_OLD.NumeroDoc

-- 5. storicizzo i record OLD  modificati
INSERT INTO StoricoAllegati (UserIns, DataIns, UserMod, DataMod, ChiaveArticolo, NomeDoc, TipoDoc, RevisioneDoc, LinguaDoc, PathDoc, StatoDoc, Copie, Sequenza, Note, NumeroDoc)
SELECT UserIns, DataIns, UserMod, DataMod, Allegati.ChiaveArticolo, NomeDoc, TipoDoc, RevisioneDoc, LinguaDoc, PathDoc, StatoDoc, Copie, Sequenza, Note, NumeroDoc 
FROM Allegati INNER JOIN [#tmp_a1] ON [#tmp_a1].ChiaveArticolo = Allegati.ChiaveArticolo WHERE Allegati.Stato = N'OLD'

-- 6. elimino record OLD
DELETE FROM Allegati FROM [#tmp_a1] INNER JOIN Allegati ON [#tmp_a1].ChiaveArticolo = Allegati.ChiaveArticolo WHERE Allegati.Stato = N'OLD'
