d3c3b273a7
rilasciata visualizzazione ore effettive svolte udpate SQL
187 lines
6.3 KiB
Transact-SQL
187 lines
6.3 KiB
Transact-SQL
--struttura!
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/**********************************************************
|
|
* STORED stp_IR_getFullSettByDip
|
|
*
|
|
* recupera riga tabella PIENA x anno, settimana e dipendente selezionate (eventualmrnte record a zero ove non presenti)
|
|
*
|
|
* mod: S.E.L. 2013.09.06
|
|
*
|
|
**********************************************************/
|
|
create PROCEDURE stp_IR_getFullSettByDip
|
|
(
|
|
@Anno INT = 0,
|
|
@Settimana INT = 0,
|
|
@idxDipendente INT = 0
|
|
)
|
|
AS
|
|
|
|
|
|
SELECT @anno AS Anno, @settimana AS Sett, tf.idxDipendente, tf.idxFase, ISNULL(ir.OreTot, 0) as OreTot
|
|
FROM
|
|
(
|
|
SELECT DISTINCT d2a.idxDipendente, ir.idxFase
|
|
FROM Dip2ATR d2a CROSS JOIN ImpiegoRisorse ir
|
|
WHERE ISNULL(d2a.Gruppo,'') <>''
|
|
AND d2a.idxDipendente = @idxDipendente
|
|
) as tf LEFT OUTER JOIN ImpiegoRisorse ir ON tf.idxDipendente = ir.idxDipendente AND tf.idxFase = ir.idxFase
|
|
|
|
RETURN
|
|
go
|
|
|
|
/**********************************************************
|
|
* STORED stp_IR_getFullSettimana
|
|
*
|
|
* genera tabella PIENA x anno e settimana selezionate (eventualemnte record a zero ove non presenti)
|
|
*
|
|
* mod: S.E.L. 2013.09.06
|
|
*
|
|
**********************************************************/
|
|
create PROCEDURE stp_IR_getFullSettimana
|
|
(
|
|
@Anno INT = 0,
|
|
@Settimana INT = 0
|
|
)
|
|
AS
|
|
|
|
|
|
SELECT @anno AS Anno, @settimana AS Sett, tf.idxDipendente, tf.idxFase, ISNULL(ir.OreTot, 0) as OreTot
|
|
FROM
|
|
(
|
|
SELECT DISTINCT d2a.idxDipendente, ir.idxFase
|
|
FROM Dip2ATR d2a CROSS JOIN ImpiegoRisorse ir
|
|
WHERE ISNULL(d2a.Gruppo,'') <>''
|
|
) as tf LEFT OUTER JOIN ImpiegoRisorse ir ON tf.idxDipendente = ir.idxDipendente AND tf.idxFase = ir.idxFase
|
|
|
|
RETURN
|
|
go
|
|
|
|
/**********************************************************
|
|
* STORED stp_IR_importSettimana
|
|
*
|
|
* importa i dati di registro attività x anno e settimana selezionate
|
|
*
|
|
* mod: S.E.L. 2013.09.04
|
|
*
|
|
**********************************************************/
|
|
create PROCEDURE stp_IR_importSettimana
|
|
(
|
|
@Anno INT = 0,
|
|
@Settimana INT = 0
|
|
)
|
|
AS
|
|
|
|
DECLARE @InizioAnno AS DATETIME;
|
|
DECLARE @SettInizioAnno AS INT;
|
|
DECLARE @InizioSettimana AS DATETIME;
|
|
DECLARE @FineSettimana 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 @InizioSettimana = dateadd(week, @SettInizioAnno + @Settimana -1 , 0 );
|
|
SET @FineSettimana = dateadd(week, @SettInizioAnno + @Settimana , 0 );
|
|
|
|
-- con merge ( query corretta )
|
|
WITH cte AS -- calcolo totale ore lavorate x dipendente / fase x la settimana richiesta
|
|
( SELECT @Anno AS Anno, @Settimana AS Sett, ra.idxDipendente
|
|
, CASE WHEN af.idxFaseAncest = 0 THEN af.idxFase ELSE af.idxFaseAncest END AS idxFaseAncest
|
|
, SUM(oreTot) AS OreTot
|
|
FROM dbo.RegAttivita AS ra
|
|
INNER JOIN dbo.AnagFasi AS af ON ra.idxFAse=af.idxFase
|
|
INNER JOIN dbo.Dip2ATR AS d2a ON d2a.idxDipendente=ra.idxDipendente
|
|
WHERE inizio >= @InizioSettimana AND inizio < @FineSettimana
|
|
AND ISNULL(d2a.Gruppo,'') <> '' -- tolgo i dipendenti senza un gruppo assegnato
|
|
GROUP BY CASE WHEN af.idxFaseAncest = 0 THEN af.idxFase ELSE af.idxFaseAncest END, ra.idxDipendente
|
|
)
|
|
MERGE dbo.ImpiegoRisorse AS target
|
|
USING cte AS source
|
|
ON target.Anno = source.Anno
|
|
AND target.Sett = source.Sett
|
|
AND target.idxDipendente = source.idxDipendente
|
|
AND target.idxFase = source.idxFaseAncest
|
|
|
|
WHEN MATCHED THEN -- se esiste riga aggiorno
|
|
UPDATE SET target.OreTot = source.OreTot
|
|
WHEN NOT MATCHED BY TARGET THEN -- se non esiste in destinazione inserisco record
|
|
INSERT (Anno,Sett,idxDipendente,idxFase , OreTot)
|
|
VALUES (source.Anno,source.Sett,source.idxDipendente,source.idxFaseAncest , source.OreTot)
|
|
WHEN NOT MATCHED BY SOURCE THEN -- se esiste in destinazione ma non nella sorgente cancello
|
|
DELETE;
|
|
-- OUTPUT $action, inserted.*, deleted.*; -- da usare x test e vedere i dati modificati
|
|
|
|
|
|
/*
|
|
-- con merge
|
|
WITH cte AS -- calcolo totale ore lavorate x dipendente / fase x la settimana richiesta
|
|
( SELECT @Anno AS Anno, @Settimana AS Sett, ra.idxDipendente
|
|
, CASE WHEN af.idxFaseAncest = 0 THEN af.idxFase ELSE af.idxFaseAncest END AS idxFaseAncest
|
|
, SUM(oreTot) AS OreTot
|
|
FROM dbo.RegAttivita AS ra
|
|
INNER JOIN dbo.AnagFasi AS af ON ra.idxFAse=af.idxFase
|
|
INNER JOIN dbo.Dip2ATR AS d2a ON d2a.idxDipendente=ra.idxDipendente
|
|
WHERE DATEPART(wk, inizio) = @Settimana AND YEAR(inizio) = @Anno
|
|
AND ISNULL(d2a.Gruppo,'') <> '' -- tolgo i dipendenti senza un gruppo assegnato
|
|
GROUP BY CASE WHEN af.idxFaseAncest = 0 THEN af.idxFase ELSE af.idxFaseAncest END, ra.idxDipendente
|
|
)
|
|
MERGE dbo.ImpiegoRisorse AS target
|
|
USING cte AS source
|
|
ON target.Anno = source.Anno
|
|
AND target.Sett = source.Sett
|
|
AND target.idxDipendente = source.idxDipendente
|
|
AND target.idxFase = source.idxFaseAncest
|
|
|
|
WHEN MATCHED THEN -- se esiste riga aggiorno
|
|
UPDATE SET target.OreTot = source.OreTot
|
|
WHEN NOT MATCHED BY TARGET THEN -- se non esiste in destinazione inserisco record
|
|
INSERT (Anno,Sett,idxDipendente,idxFase , OreTot)
|
|
VALUES (source.Anno,source.Sett,source.idxDipendente,source.idxFaseAncest , source.OreTot)
|
|
WHEN NOT MATCHED BY SOURCE THEN -- se esiste in destinazione ma non nella sorgente cancello
|
|
DELETE;
|
|
-- OUTPUT $action, inserted.*, deleted.*; -- da usare x test e vedere i dati modificati
|
|
|
|
|
|
-- **** questa è quella schifosa di SAM
|
|
-- svuoto eventuali record precedenti...
|
|
DELETE
|
|
FROM ImpiegoRisorse
|
|
WHERE Anno = @Anno
|
|
AND Sett = @Settimana
|
|
|
|
-- creo record...
|
|
INSERT INTO ImpiegoRisorse(Anno,Sett,idxDipendente,idxFase,OreTot)
|
|
SELECT @Anno, @Settimana, idxDipendente, af.idxFaseAncest, SUM(oreTot) AS OreTot
|
|
FROM RegAttivita ra INNER JOIN AnagFasi af on ra.idxFAse=af.idxFase
|
|
WHERE DATEPART(wk, inizio) = @Settimana AND YEAR(inizio) = @Anno
|
|
GROUP BY af.idxFaseAncest, idxDipendente
|
|
*/
|
|
|
|
|
|
RETURN
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- registro versione...
|
|
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(199, GETDATE())
|
|
GO
|
|
SELECT TOP 10 * FROM LogUpdateDb ORDER BY Versione DESC
|
|
GO
|