set ANSI_NULLS on; go /*********************************************************** * Function f_getFaseOldest * * fornisce il valore idxFase della (sotto) fase più vecchia tra quelle attive (da idxFaseAncest) * ***********************************************************/ create FUNCTION f_getFaseOldest ( @idxFaseAncest INT = 0 ) RETURNS INT AS BEGIN DECLARE @answ INT = 0 SELECT TOP 1 @answ = idxFase FROM AnagFasi WHERE idxFaseAncest = @idxFaseAncest AND enableTime=1 ORDER BY codFase RETURN ISNULL(@answ,0) END go create table ReleasedWeek( Anno int not null, Sett int not null, UsernameAD nvarchar(50), dataConf datetime, constraint PK_ReleasedWeek primary key(Anno,Sett) ); go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /********************************************************** * STORED stp_BAZ_copy2GPW * * crea in blocco registrazioni attività in GPW * * mod: S.E.L. 2013.09.19 * **********************************************************/ create PROCEDURE stp_BAZ_copy2GPW ( @Anno INT = 0, @Sett INT = 0, @UsernameAD NVARCHAR(50) ) AS BEGIN TRAN -- variabili accessorie DECLARE @InizioAnno AS DATETIME; DECLARE @SettInizioAnno AS INT; DECLARE @StartDate AS DATETIME; DECLARE @EndDate AS DATETIME; -- CALCOLO DIFFERENZA SETTIMANA DA GIORNO 0 A INIZIO ANNO SET @InizioAnno = CONVERT( DATETIME, CONVERT(CHAR(4), @anno ) + '0101' ); SET @SettInizioAnno = datediff(week, 0, @InizioAnno); -- Calcolo il giorno di inizio settimana richiesta e il primo gg della settimana successiva SET @StartDate = dateadd(week, @SettInizioAnno + @Sett -1 , 0 ); SET @EndDate = dateadd(week, @SettInizioAnno + @Sett , 0 ); ---------------------------------------------------------------------------------------------- -- elimino RA in intervallo settimanale ---------------------------------------------------------------------------------------------- DELETE FROM RegAttivita WHERE inizio BETWEEN @StartDate AND @EndDate ---------------------------------------------------------------------------------------------- -- inserisco nuove RA intervallo settimanale ---------------------------------------------------------------------------------------------- ;WITH myCte AS ( -- lunedì SELECT *, 1 as gg, dbo.f_getFaseOldest(idxFase) as idxFaseOld, DATEADD(DD,0,DATEADD(HOUR,8,@StartDate)) as inizio, SUBSTRING(SchemaWeek,1,1) as ore,ROW_NUMBER() OVER(PARTITION BY Anno, Sett, IdxDipendente ORDER BY IdxFase) AS Row FROM BazaarRisorse WHERE Anno=@Anno AND Sett=@Sett AND Allocazione > 0 AND SUBSTRING(SchemaWeek,1,1) <> '0' UNION -- martedì SELECT *, 2 as gg, dbo.f_getFaseOldest(idxFase) as idxFaseOld, DATEADD(DD,1,DATEADD(HOUR,8,@StartDate)) as inizio, SUBSTRING(SchemaWeek,2,1) as ore,ROW_NUMBER() OVER(PARTITION BY Anno, Sett, IdxDipendente ORDER BY IdxFase) AS Row FROM BazaarRisorse WHERE Anno=@Anno AND Sett=@Sett AND Allocazione > 0 AND SUBSTRING(SchemaWeek,2,1) <> '0' UNION -- mercoledì SELECT *, 3 as gg, dbo.f_getFaseOldest(idxFase) as idxFaseOld, DATEADD(DD,2,DATEADD(HOUR,8,@StartDate)) as inizio, SUBSTRING(SchemaWeek,3,1) as ore,ROW_NUMBER() OVER(PARTITION BY Anno, Sett, IdxDipendente ORDER BY IdxFase) AS Row FROM BazaarRisorse WHERE Anno=@Anno AND Sett=@Sett AND Allocazione > 0 AND SUBSTRING(SchemaWeek,3,1) <> '0' UNION -- giovedì SELECT *, 4 as gg, dbo.f_getFaseOldest(idxFase) as idxFaseOld, DATEADD(DD,3,DATEADD(HOUR,8,@StartDate)) as inizio, SUBSTRING(SchemaWeek,4,1) as ore,ROW_NUMBER() OVER(PARTITION BY Anno, Sett, IdxDipendente ORDER BY IdxFase) AS Row FROM BazaarRisorse WHERE Anno=@Anno AND Sett=@Sett AND Allocazione > 0 AND SUBSTRING(SchemaWeek,4,1) <> '0' UNION -- venerdì SELECT *, 5 as gg, dbo.f_getFaseOldest(idxFase) as idxFaseOld, DATEADD(DD,4,DATEADD(HOUR,8,@StartDate)) as inizio, SUBSTRING(SchemaWeek,5,1) as ore,ROW_NUMBER() OVER(PARTITION BY Anno, Sett, IdxDipendente ORDER BY IdxFase) AS Row FROM BazaarRisorse WHERE Anno=@Anno AND Sett=@Sett AND Allocazione > 0 AND SUBSTRING(SchemaWeek,5,1) <> '0' ) INSERT INTO RegAttivita(idxDipendente, idxFase, inizio, fine, descrizione) SELECT idxDipendente, idxFaseOld, DATEADD(HOUR,(Row-1)*4,inizio) as inizio, DATEADD(HOUR,(Row-1)*4+ore,inizio) as fine, '...completare...' as descrizione FROM myCte ---------------------------------------------------------------------------------------------- -- registro che al settimana è stata confermata (e quindi solo superuser può sbloccare...) ---------------------------------------------------------------------------------------------- DELETE FROM ReleasedWeek WHERE Anno=@Anno and Sett=@Sett INSERT INTO ReleasedWeek VALUES(@Anno,@Sett,@UsernameAD,GETDATE()) COMMIT TRAN RETURN go /********************************************************** * STORED stp_BAZ_ResetCopyGPW * * sblocca rilascio delal settimana ed elimina registrazioni attività in GPW * * mod: S.E.L. 2013.09.19 * **********************************************************/ create PROCEDURE stp_BAZ_ResetCopyGPW ( @Anno INT = 0, @Sett INT = 0, @UsernameAD NVARCHAR(50) ) AS BEGIN TRAN -- variabili accessorie DECLARE @InizioAnno AS DATETIME; DECLARE @SettInizioAnno AS INT; DECLARE @StartDate AS DATETIME; DECLARE @EndDate AS DATETIME; -- CALCOLO DIFFERENZA SETTIMANA DA GIORNO 0 A INIZIO ANNO SET @InizioAnno = CONVERT( DATETIME, CONVERT(CHAR(4), @anno ) + '0101' ); SET @SettInizioAnno = datediff(week, 0, @InizioAnno); -- Calcolo il giorno di inizio settimana richiesta e il primo gg della settimana successiva SET @StartDate = dateadd(week, @SettInizioAnno + @Sett -1 , 0 ); SET @EndDate = dateadd(week, @SettInizioAnno + @Sett , 0 ); ---------------------------------------------------------------------------------------------- -- elimino RA in intervallo settimanale ---------------------------------------------------------------------------------------------- DELETE FROM RegAttivita WHERE inizio BETWEEN @StartDate AND @EndDate ---------------------------------------------------------------------------------------------- -- registro che al settimana è stata confermata (e quindi solo superuser può sbloccare...) ---------------------------------------------------------------------------------------------- DELETE FROM ReleasedWeek WHERE Anno=@Anno and Sett=@Sett COMMIT TRAN RETURN go create PROCEDURE stp_ReW_getByAnnoSett ( @Anno int, @Sett int ) AS SET NOCOUNT ON; SELECT Anno, Sett, UsernameAD, dataConf FROM dbo.ReleasedWeek WHERE Anno=@Anno AND Sett=@Sett go commit; go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(218, GETDATE()) GO SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC GO