Files
2021-03-26 17:17:28 +01:00

290 lines
8.0 KiB
Transact-SQL

set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/*----------------------------------
* Trigger su insert/update
*
* Aggiorna giustificativi nella tab TimbratureExpl
*
* creato da: S.E. Locatelli - 2012.12.04
* ultima modifica:
*----------------------------------*/
alter TRIGGER trg_giustUpdateTimbr
ON Giustificativi
FOR INSERT, UPDATE
AS
-- controllo se rescord esista altrimenti lo creo!!!
DECLARE @trovate INT = 0
DECLARE @idxDipendente INT
DECLARE @dataRif DATETIME
-- carico dati
SET @trovate = ISNULL( ( SELECT COUNT(*) FROM TimbratureExpl te INNER JOIN inserted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav) ,0)
SELECT @idxDipendente = idxDipendente, @dataRif=dataLav FROM inserted
IF(@trovate = 0)
BEGIN
EXEC stp_ricalcolaTimbratureExpl @idxDipendente, @dataRif
END
-- CONTROLLO SE IL RECORD NON SIA BLOCCATO con where nell'update
-- prendo tutte le "vecchie" righe (deleted) e x le giornate relative TOLGO i minuti dei giustificativi
UPDATE TimbratureExpl
SET minMal = CASE WHEN g.codGiust='MAL' THEN 0 ELSE minMal END,
minFer = CASE WHEN g.codGiust='FER' THEN 0 ELSE minFer END,
minFest = CASE WHEN g.codGiust='FEST' THEN 0 ELSE minFest END,
minPerm = CASE WHEN g.codGiust='PERM' THEN 0 ELSE minPerm END
FROM TimbratureExpl te INNER JOIN deleted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav
WHERE te.block = 0
-- prendo le "nuove" righe (inserted) e x le giornate relative AGGIUNGO i minuti dei giustificativi
UPDATE TimbratureExpl
SET minMal = CASE WHEN g.codGiust='MAL' THEN g.minuti ELSE minMal END,
minFer = CASE WHEN g.codGiust='FER' THEN g.minuti ELSE minFer END,
minFest = CASE WHEN g.codGiust='FEST' THEN g.minuti ELSE minFest END,
minPerm = CASE WHEN g.codGiust='PERM' THEN g.minuti ELSE minPerm END
FROM TimbratureExpl te INNER JOIN inserted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav
WHERE te.block = 0
-- verifico SE codice orario richieda una chkFun eseguo calcolo...
IF(dbo.f_chkFunDip(@idxDipendente)<>'')
BEGIN
EXEC stp_TE_doChkFun @idxDipendente, @dataRif
END
go
/*----------------------------------
* Trigger su delete
*
* Aggiorna giustificativi nella tab TimbratureExpl
*
* creato da: S.E. Locatelli - 2012.12.04
* ultima modifica:
*----------------------------------*/
alter TRIGGER trg_giustDelUpdTimbr
ON Giustificativi
FOR DELETE
AS
-- controllo se rescord esista altrimenti lo creo!!!
DECLARE @trovate INT = 0
DECLARE @idxDipendente INT
DECLARE @dataRif DATETIME
-- carico dati
SELECT @idxDipendente = idxDipendente, @dataRif=dataLav FROM deleted
-- CONTROLLO SE IL RECORD NON SIA BLOCCATO in update con where
-- prendo tutte le "vecchie" righe (deleted) e x le giornate relative TOLGO i minuti dei giustificativi
UPDATE TimbratureExpl
SET minMal = CASE WHEN g.codGiust='MAL' THEN 0 ELSE minMal END,
minFer = CASE WHEN g.codGiust='FER' THEN 0 ELSE minFer END,
minFest = CASE WHEN g.codGiust='FEST' THEN 0 ELSE minFest END,
minPerm = CASE WHEN g.codGiust='PERM' THEN 0 ELSE minPerm END
FROM TimbratureExpl te INNER JOIN deleted g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav
WHERE te.block = 0
-- verifico SE codice orario richieda una chkFun eseguo calcolo...
IF(dbo.f_chkFunDip(@idxDipendente)<>'')
BEGIN
EXEC stp_TE_doChkFun @idxDipendente, @dataRif
END
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/*************************************************
* STORED PROCEDURE stp_giust_insertQuery
*
* Aggiunge un giustificativo NUOVO
* mod: S.E.L. - 2013.04.03
**************************************************/
create PROCEDURE stp_giust_insertQuery
(
@dataLav date,
@idxDipendente int,
@codGiust nvarchar(5),
@minuti int
)
AS
INSERT INTO Giustificativi (dataLav, idxDipendente, codGiust, minuti)
VALUES (@dataLav, @idxDipendente, @codGiust, @minuti)
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/*************************************************
* STORED PROCEDURE stp_giust_insByDate
*
* Aggiunge un giustificativo per coprire la durata necessaria a chiudere la giornata indicata
* mod: S.E.L. - 2012.12.10
**************************************************/
alter PROCEDURE stp_giust_insByDate
(
@idxDipendente INT = 0,
@dataRif DATETIME,
@codGiust NVARCHAR(5) = 'PERM'
)
AS
BEGIN TRAN
DECLARE @minPerm INT = 0 -- min necessari x chiudere giornata
DECLARE @isPP BIT = 0
SELECT @isPP = CASE WHEN ISNULL(chkFunCod,'')='P' THEN 1 ELSE 0 END FROM TimbratureExpl WHERE idxDipendente=@idxDipendente AND dataLav=@dataRif
IF(@isPP=1)
BEGIN
-- recupero tipo di fuction da usare
DECLARE @chkFun NVARCHAR(50) = ''
DECLARE @minPP INT = 0
-- imposto variabili
SELECT @chkFun = dbo.f_chkFunDip(@idxDipendente), @codGiust = 'PERM'
-- controllo tipo di funzione... e imposto risultato!
IF(@chkFun = 'PP60m')
BEGIN
SET @minPP = 60
END
ELSE IF(@chkFun = 'PP30m')
BEGIN
SET @minPP = 30
END
-- calcolo quota permesso
SELECT @minPerm = @minPP - (minArcoPres - minLav)
FROM TimbratureExpl
WHERE idxDipendente = @idxDipendente AND dataLav = @dataRif
-- INSERT giustificativo!
INSERT INTO Giustificativi
VALUES (@dataRif,@idxDipendente,@codGiust,@minPerm,1)
END
ELSE
BEGIN
-- variabili
DECLARE @minArr INT
--SELECT @minArr=dbo.f_minArrotDip(@idxDipendente)
SELECT @minArr = ISNULL(valInt,1) FROM AnagKeyValue WHERE nomeVar = 'minutiRoundDay'
-- calcolo minuti
SELECT @minPerm = (CEILING(CONVERT(FLOAT,minOrd-minLav)/@minArr)*@minArr)
FROM TimbratureExpl
WHERE isOkLav = 0
AND idxDipendente = @idxDipendente
AND dataLav = @dataRif
-- INSERT giustificativo!
INSERT INTO Giustificativi
VALUES (@dataRif,@idxDipendente,@codGiust,@minPerm,1)
END
COMMIT TRAN
RETURN
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/*******************************************************************************
* STORED PROCEDURE stp_TE_doChkFun
*
* effettua check finali sulla riga di timbrature esplore indicata, contiene varie logiche
* anche da + installazioni clienti
*
* mod: S.E.L. 2013.03.28
*
*******************************************************************************/
alter PROCEDURE stp_TE_doChkFun
(
@idxDipendente INT,
@dataRif DATETIME
)
AS
SET NOCOUNT ON;
-- recupero tipo di fuction da usare
DECLARE @chkFun NVARCHAR(50) = ''
DECLARE @chkFunCod NVARCHAR(50) = ''
DECLARE @chkFunRes NVARCHAR(50) = ''
DECLARE @minPP INT = 0
SELECT @chkFun = dbo.f_chkFunDip(@idxDipendente)
-- controllo tipo di funzione... e imposto risultato!
IF(@chkFun = 'PP60m')
BEGIN
SELECT @minPP = 60, @chkFunCod = 'P', @chkFunRes = 'Mancata pausa pranzo 60m'
END
ELSE IF(@chkFun = 'PP30m')
BEGIN
SELECT @minPP = 30, @chkFunCod = 'P', @chkFunRes = 'Mancata pausa pranzo 30m'
END
-- se c'è check da fare faccio COMUNQUE update!
IF(@chkFun <>'')
BEGIN
UPDATE TimbratureExpl
SET chkFunCod = CASE WHEN (minArcoPres - minLav) < @minPP - minPerm THEN @chkFunCod ELSE '' END, -- chk pause > PP imposta (- minuti permesso caricati)
chkFunRes = CASE WHEN (minArcoPres - minLav) < @minPP - minPerm THEN @chkFunRes ELSE '' END -- chk pause > PP imposta (- minuti permesso caricati)
WHERE idxDipendente = @idxDipendente AND dataLav = @dataRif
AND (minOrd > 0 AND minLav > 0) -- controllo DEBBA lavorare e ABBIA lavorato
AND block = 0 -- controllo NON sia bloccato
END
RETURN
go
commit;
go
-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(327, GETDATE())
GO
SELECT * FROM LogUpdateDb ORDER BY Versione DESC