290 lines
8.0 KiB
Transact-SQL
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
|