Files
ETS/ETS_Data/SQL/ETS_PROJ/ETS_PROJ_00218.sql
Samuele Locatelli 362d7d1a7e installer ETS in prod
2013-09-20 09:46:38 +02:00

214 lines
6.7 KiB
Transact-SQL

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