214 lines
6.7 KiB
Transact-SQL
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
|