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

866 lines
26 KiB
Transact-SQL

create table AnagTipoCheck(
chkFun nvarchar(50) not null constraint PK_AnagTipoCheck primary key,
descrFun nvarchar(50)
);
go
set xact_abort on
go
begin transaction
go
INSERT INTO dbo.AnagTipoCheck
VALUES (N'PP30m', N'Pausa pranzo 30 min')
INSERT INTO dbo.AnagTipoCheck
VALUES (N'PP60m', N'Pausa pranzo 60 min')
go
commit transaction
go
set xact_abort on;
go
begin transaction;
go
alter table AnagOrari add
chkFun nvarchar(50) constraint DF_AnagOrari_checkFun default ('');
go
exec sp_addextendedproperty 'MS_Description', 'parametro (opzionale) da passare alla funzione di check "finale" per verifica giornate lavorate in tab TimbratureExpl', 'SCHEMA', 'dbo', 'TABLE', 'AnagOrari', 'COLUMN', 'chkFun';
go
update AnagOrari set chkFun=('');
go
set ANSI_NULLS on;
go
commit;
go
/******************************************************************************
* FUNCTION f_chkFunDip
*
* restituisce il nome della funzione di check da applicare dato profilo orario
*
* mod: S.E.L. 2013.03.28
*
*******************************************************************************/
create FUNCTION f_chkFunDip
(
@idxDipendente INT
)
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @chkFun NVARCHAR(50) = ''
SELECT @chkFun = ISNULL(chkFun,'')
FROM AnagOrari ao INNER JOIN Dipendenti d ON ao.codOrario=d.codOrario
WHERE d.idxDipendente = @idxDipendente
RETURN @chkFun
END
go
set xact_abort on;
go
begin transaction;
go
alter table TimbratureExpl drop
constraint DF_TimbratureExpl_minOrd ,
constraint DF_TimbratureExpl_minLav ,
constraint DF_TimbratureExpl_minStra ,
constraint DF_TimbratureExpl_minNonLav ,
constraint DF_TimbratureExpl_minFest ,
constraint DF_TimbratureExpl_minPerm ,
constraint DF_TimbratureExpl_minFer ,
constraint DF_TimbratureExpl_minFest1 ,
constraint DF_TimbratureExpl_block ,
constraint DF_TimbratureExpl_isOkTim ,
constraint DF_TimbratureExpl_isOk ;
go
exec sp_rename 'PK_TimbratureExpl_1', 'tmp__PK_TimbratureExpl_1', 'OBJECT';
go
exec sp_rename 'TimbratureExpl', 'tmp__TimbratureExpl_2', 'OBJECT';
go
create table TimbratureExpl(
dataLav date not null,
idxDipendente int not null,
CognomeNome nvarchar(100),
entrata_1 datetime,
uscita_1 datetime,
entrata_2 datetime,
uscita_2 datetime,
entrata_3 datetime,
uscita_3 datetime,
entrata_4 datetime,
uscita_4 datetime,
h_lav float,
h_giust as ((((CONVERT([float],[minPerm],(0))+[minFer])+[minMal])+[minFest])/(60)),
minLav int constraint DF_TimbratureExpl_minLav default ((0)),
minOrd int constraint DF_TimbratureExpl_minOrd default ((0)),
minNonLav int constraint DF_TimbratureExpl_minNonLav default ((0)),
minStra int constraint DF_TimbratureExpl_minStra default ((0)),
minPerm int constraint DF_TimbratureExpl_minPerm default ((0)),
minFer int constraint DF_TimbratureExpl_minFer default ((0)),
minMal int constraint DF_TimbratureExpl_minFest1 default ((0)),
minFest int constraint DF_TimbratureExpl_minFest default ((0)),
minArcoPres as (datediff(minute,isnull([entrata_1],getdate()),isnull(isnull([uscita_4],isnull([uscita_3],isnull([uscita_2],isnull([uscita_1],[entrata_1])))),getdate()))),
isOkTim bit constraint DF_TimbratureExpl_isOkTim default ((0)),
isOkApp bit constraint DF_TimbratureExpl_isOk default ((1)),
isOkLav as (case when [minOrd]<=(((([minLav]+[minPerm])+[minFer])+[minMal])+[minFest]) then (1) else (0) end),
isOk as (([isOkTim]&[isOkApp])&case when [minOrd]<=(((([minLav]+[minPerm])+[minFer])+[minMal])+[minFest]) then (1) else (0) end),
block bit constraint DF_TimbratureExpl_block default ((0)),
chkFunCod nvarchar(50) constraint DF_TimbratureExpl_chkFunRes default (''),
chkFunRes nvarchar(50) constraint DF_TimbratureExpl_chkFunRes1 default (''),
constraint PK_TimbratureExpl_1 primary key(dataLav,idxDipendente)
);
go
create index ix_idxDip on TimbratureExpl(idxDipendente)
include(dataLav,CognomeNome,h_lav,minOrd,minStra,minPerm,minFer,block,isOkApp,isOkTim);
go
create index ix_TimbrExpl_CognomeNome_DataLav on TimbratureExpl(CognomeNome,dataLav);
go
exec sp_addextendedproperty 'MS_Description', 'totale ore giustificate', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'h_giust';
go
exec sp_addextendedproperty 'MS_Description', 'minuti non lavorati (ovvero se fatti meno di ordinari e senza giustificativi)', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'minNonLav';
go
exec sp_addextendedproperty 'MS_Description', 'DATEDIFF(n, ISNULL(entrata_1,GETDATE()), ISNULL(ISNULL(uscita_4,ISNULL(uscita_3,ISNULL(uscita_2,ISNULL(uscita_1,entrata_1)))),GETDATE()))', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'minArcoPres';
go
exec sp_addextendedproperty 'MS_Description', 'dato sintetico x indicare se TUTTE le timbrature componenti siano approvate', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'isOkApp';
go
exec sp_addextendedproperty 'MS_Description', 'determina se la giornata sia ok (oreLav + giustificativi >= oreOrd)', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'isOkLav';
go
exec sp_addextendedproperty 'MS_Description', 'determina se il record sia "bloccato" (archiviazione e blocco mesi precedenti...)', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'block';
go
exec sp_addextendedproperty 'MS_Description', 'eventuale diagnostica da check function sulla riga indicata (codice)', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'chkFunCod';
go
exec sp_addextendedproperty 'MS_Description', 'eventuale diagnostica da check function sulla riga indicata (spiegazione)', 'SCHEMA', 'dbo', 'TABLE', 'TimbratureExpl', 'COLUMN', 'chkFunRes';
go
insert into TimbratureExpl(dataLav,idxDipendente,CognomeNome,entrata_1,uscita_1,entrata_2,uscita_2,entrata_3,uscita_3,entrata_4,uscita_4,h_lav,minLav,minOrd,minNonLav,minStra,minPerm,minFer,minMal,minFest,isOkTim,isOkApp,block) select dataLav,idxDipendente,CognomeNome,entrata_1,uscita_1,entrata_2,uscita_2,entrata_3,uscita_3,entrata_4,uscita_4,h_lav,minLav,minOrd,minNonLav,minStra,minPerm,minFer,minMal,minFest,isOkTim,isOkApp,block from tmp__TimbratureExpl_2;
go
drop table tmp__TimbratureExpl_2;
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
create VIEW v_selCodOrario
AS
SELECT codOrario AS value, codOrario AS label
FROM dbo.AnagOrari
go
exec sp_addextendedproperty 'MS_DiagramPane1', '[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "AnagOrari"
Begin Extent =
Top = 6
Left = 38
Bottom = 200
Right = 223
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
Begin ColumnWidths = 9
Width = 284
Width = 1500
Width = 3810
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
', 'SCHEMA', 'dbo', 'VIEW', 'v_selCodOrario';
go
exec sp_addextendedproperty 'MS_DiagramPaneCount', 1, 'SCHEMA', 'dbo', 'VIEW', 'v_selCodOrario';
go
create VIEW v_selTipoChk
AS
SELECT chkFun AS value, descrFun AS label
FROM dbo.AnagTipoCheck
go
exec sp_addextendedproperty 'MS_DiagramPane1', '[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "AnagTipoCheck"
Begin Extent =
Top = 6
Left = 38
Bottom = 102
Right = 208
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
Begin ColumnWidths = 9
Width = 284
Width = 1500
Width = 1755
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
Width = 1500
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
', 'SCHEMA', 'dbo', 'VIEW', 'v_selTipoChk';
go
exec sp_addextendedproperty 'MS_DiagramPaneCount', 1, 'SCHEMA', 'dbo', 'VIEW', 'v_selTipoChk';
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/**********************************************************
* STORED stp_AD_insertQuery
*
* aggiunge un dipendente in anagrafica
*
* mod: S.E.L. 2012.10.29
*
**********************************************************/
alter PROCEDURE stp_AD_insertQuery
(
@matricola NVARCHAR(50),
@CF NVARCHAR(16),
@Cognome NVARCHAR(50),
@Nome NVARCHAR(50),
@dataNascita DATETIME,
@luogoNascita NVARCHAR(50),
@provNascita NVARCHAR(50),
@nazNascita NVARCHAR(50),
@email NVARCHAR(250),
@dominio NVARCHAR(50),
@utente NVARCHAR(50),
@codOrario NVARCHAR(50),
@attivo BIT
)
AS
SET NOCOUNT OFF;
INSERT INTO Dipendenti
(matricola, CF, Cognome, Nome, dataNascita, luogoNascita, provNascita, nazNascita, email, dominio, utente,codOrario,attivo)
VALUES (@matricola,@CF,@Cognome,@Nome,@dataNascita,@luogoNascita,UPPER(@provNascita),UPPER(@nazNascita),@email,@dominio,@utente,@codOrario,@attivo);
SELECT * FROM Dipendenti WHERE (idxDipendente = SCOPE_IDENTITY())
go
/**********************************************************
* STORED stp_AD_updateQuery
*
* aggiorna un dipendente da anagrafica
*
* mod: S.E.L. 2012.10.29
*
**********************************************************/
alter PROCEDURE stp_AD_updateQuery
(
@matricola NVARCHAR(50),
@CF NVARCHAR(16),
@Cognome NVARCHAR(50),
@Nome NVARCHAR(50),
@dataNascita datetime,
@luogoNascita NVARCHAR(50),
@provNascita NVARCHAR(50),
@nazNascita NVARCHAR(50),
@email NVARCHAR(250),
@dominio NVARCHAR(50),
@utente NVARCHAR(50),
@codOrario NVARCHAR(50),
@attivo BIT,
@Original_idxDipendente int
)
AS
SET NOCOUNT OFF;
UPDATE Dipendenti
SET matricola = @matricola, CF = @CF, Cognome = @Cognome, Nome = @Nome, dataNascita = @dataNascita, luogoNascita = @luogoNascita,
provNascita = UPPER(@provNascita), nazNascita = UPPER(@nazNascita), email = @email, dominio = @dominio, utente = @utente
,codOrario = @codOrario, attivo = @attivo
WHERE (idxDipendente = @Original_idxDipendente);
SELECT * FROM Dipendenti WHERE (idxDipendente = @Original_idxDipendente)
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
*
*******************************************************************************/
create PROCEDURE stp_TE_doChkFun
(
@idxDipendente INT,
@dataRif DATETIME
)
AS
SET NOCOUNT ON;
-- recupero tipo di fuction da usare
DECLARE @chkFun NVARCHAR(50) = ''
DECLARE @minPP INT = 0
SELECT @chkFun = dbo.f_chkFunDip(@idxDipendente)
-- controllo tipo di funzione... e imposto risultato!
IF(@chkFun = 'PP60m')
BEGIN
SET @minPP = 60
UPDATE TimbratureExpl
SET chkFunCod = 'P',
chkFunRes = 'Mancata pausa pranzo 60m'
WHERE idxDipendente = @idxDipendente AND dataLav = @dataRif
AND (minArcoPres - minLav) < @minPP -- controllo pause > PP imposta
AND (minOrd > 0 AND minLav > 0) -- controllo DEBBA lavorare e ABBIA lavorato
END
ELSE IF(@chkFun = 'PP30m')
BEGIN
SET @minPP = 30
UPDATE TimbratureExpl
SET chkFunCod = 'P',
chkFunRes = 'Mancata pausa pranzo 30m'
WHERE idxDipendente = @idxDipendente AND dataLav = @dataRif
AND (minArcoPres - minLav) < @minPP -- controllo pause > PP imposta
AND (minOrd > 0 AND minLav > 0) -- controllo DEBBA lavorare e ABBIA lavorato
END
RETURN
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/*******************************************************************************
* stp_ricalcolaTimbratureExpl
*
* Aggiorna la tab timbrature expl ricalcolando la giornata del record interessato
* mod: S.E.L. - 2012.02.06
********************************************************************************/
alter PROCEDURE stp_ricalcolaTimbratureExpl
(
@idxDipendente AS INT,
@dataRif AS DATETIME
)
AS
-- variabili
DECLARE @minArr INT
SELECT @minArr=dbo.f_minArrotDip(@idxDipendente)
-- CONTROLLO SE IL RECORD NON SIA BLOCCATO!!!
DECLARE @block BIT
SET @block = ( SELECT ISNULL(( SELECT block FROM TimbratureExpl WHERE (idxDipendente = @idxDipendente) AND CONVERT(DATE,dataLav) = CONVERT(DATE,@dataRif) ),0) )
IF(@block = 0)
BEGIN
-- elimino i periodi della data indicata...
DELETE FROM TimbratureExpl
WHERE (idxDipendente = @idxDipendente) AND CONVERT(DATE,dataLav) = CONVERT(DATE,@dataRif)
-- inserisco i dati minimi per la data indicata
INSERT INTO TimbratureExpl(idxDipendente, dataLav)
VALUES(@idxDipendente, CONVERT(DATE,@dataRif))
-- aggiorno cognome nome
BEGIN TRY
UPDATE te
SET CognomeNome = ISNULL(vcn.CognomeNome,'')
FROM TimbratureExpl te INNER JOIN v_cognomeNome vcn ON te.idxDipendente = vcn.idxDipendente
WHERE CONVERT(DATE,te.dataLav) = CONVERT(DATE,@dataRif) AND te.idxDipendente = @idxDipendente
END TRY
BEGIN CATCH
-- non faccio nulla
END CATCH
-- aggiorno 1 timbratura
UPDATE te
SET te.entrata_1 = pl.entrata,
te.uscita_1 = pl.uscita
FROM TimbratureExpl te INNER JOIN PeriodiLav pl ON
te.idxDipendente = pl.idxDipendente AND
(CONVERT(DATE,te.dataLav) = CONVERT(DATE,pl.entrata))
WHERE pl.rowNum = 1 AND te.idxDipendente = @idxDipendente AND CONVERT(DATE,pl.entrata) = CONVERT(DATE,@dataRif)
-- aggiorno 2 timbratura
UPDATE te
SET te.entrata_2 = pl.entrata,
te.uscita_2 = pl.uscita
FROM TimbratureExpl te INNER JOIN PeriodiLav pl ON te.idxDipendente = pl.idxDipendente
AND (CONVERT(DATE,te.dataLav) = CONVERT(DATE,pl.entrata))
WHERE pl.rowNum = 2 AND te.idxDipendente = @idxDipendente AND CONVERT(DATE,pl.entrata) = CONVERT(DATE,@dataRif)
-- aggiorno 3 timbratura
UPDATE te
SET te.entrata_3 = pl.entrata,
te.uscita_3 = pl.uscita
FROM TimbratureExpl te INNER JOIN PeriodiLav pl ON te.idxDipendente = pl.idxDipendente
AND (CONVERT(DATE,te.dataLav) =CONVERT(DATE,pl.entrata))
WHERE pl.rowNum = 3 AND te.idxDipendente = @idxDipendente AND CONVERT(DATE,pl.entrata) = CONVERT(DATE,@dataRif)
-- aggiorno 4 timbratura
UPDATE te
SET te.entrata_4 = pl.entrata,
te.uscita_4 = pl.uscita
FROM TimbratureExpl te INNER JOIN PeriodiLav pl ON te.idxDipendente = pl.idxDipendente
AND (CONVERT(DATE,te.dataLav) =CONVERT(DATE,pl.entrata))
WHERE pl.rowNum = 4 AND te.idxDipendente = @idxDipendente AND CONVERT(DATE,pl.entrata) = CONVERT(DATE,@dataRif)
-- calcolo ore totali...
UPDATE TimbratureExpl
SET h_lav = CAST(FLOOR((ISNULL(DATEDIFF(n,entrata_1,uscita_1),0) + ISNULL(DATEDIFF(n,entrata_2,uscita_2),0) + ISNULL(DATEDIFF(n,entrata_3,uscita_3),0) + ISNULL(DATEDIFF(n,entrata_4,uscita_4),0))/@minArr) AS FLOAT)*@minArr/60
FROM TimbratureExpl
WHERE (CONVERT(DATE,dataLav) = CONVERT(DATE,@dataRif)) AND idxDipendente = @idxDipendente
-- verifico: se c' anche solo 1 timbratura non approvata metto flag isOkApp a falso
UPDATE TimbratureExpl
SET isOkApp = ISNULL((
SELECT MIN(CASE WHEN Approv=0 THEN 0 ELSE 1 END) AS isOk
FROM Timbrature
WHERE idxDipendente = @idxDipendente
AND (CONVERT(DATE,dataOra) = CONVERT(DATE,@dataRif))
GROUP BY CONVERT(DATE,dataOra)
),1)
FROM TimbratureExpl
WHERE (CONVERT(DATE,dataLav) = CONVERT(DATE,@dataRif)) AND idxDipendente = @idxDipendente
-- verifico: se entrate <> uscite flag isOkTim a falso
UPDATE TimbratureExpl
SET isOkTim = (
SELECT CASE WHEN
ISNULL(
(SELECT COUNT(*) as timb
FROM Timbrature AS t
WHERE t.idxDipendente = @idxDipendente
AND (CONVERT(DATE,dataOra) = CONVERT(DATE,@dataRif))
GROUP BY t.idxDipendente , CONVERT(DATE,t.dataOra)
HAVING COUNT ( CASE Entrata WHEN 1 THEN dataOra END ) <> COUNT ( CASE Entrata WHEN 0 THEN dataOra END )
),0) > 0 THEN 0 ELSE 1 END
)
FROM TimbratureExpl
WHERE (CONVERT(DATE,dataLav) = CONVERT(DATE,@dataRif)) AND idxDipendente = @idxDipendente
-- calcolo resoconto MINUTI giornaliero, imposto LUN x inizio settimana
SET DATEFIRST 1
-- MIN lavorati, ordinari (con arrotondamento...)
UPDATE TimbratureExpl
SET minLav = CAST((ISNULL(DATEDIFF(n,entrata_1,uscita_1),0) + ISNULL(DATEDIFF(n,entrata_2,uscita_2),0) + ISNULL(DATEDIFF(n,entrata_3,uscita_3),0) + ISNULL(DATEDIFF(n,entrata_4,uscita_4),0)) AS FLOAT)
,minOrd = dbo.f_oreOrdDip(idxDipendente,dataLav) * 60 -- da schema orario dip attivo
FROM TimbratureExpl
WHERE (CONVERT(DATE,dataLav) = CONVERT(DATE,@dataRif)) AND idxDipendente = @idxDipendente
-- MIN non lavorati, straordinari (con arrotondamento...)
UPDATE TimbratureExpl
SET minNonLav = (CEILING(CONVERT(FLOAT,CASE WHEN minOrd <= minLav THEN (0) ELSE minOrd-minLav END)/@minArr)*@minArr)
,minStra = (FLOOR(CONVERT(FLOAT,CASE WHEN minOrd < minLav AND minLav > (0) THEN minLav-minOrd ELSE (0) END)/@minArr)*@minArr)
FROM TimbratureExpl
WHERE (CONVERT(DATE,dataLav) = CONVERT(DATE,@dataRif)) AND idxDipendente = @idxDipendente
-- MIN da tab giustificativi (feste, ferie, malattia, permessi)
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,
chkFunCod = '',
chkFunRes = ''
FROM TimbratureExpl te INNER JOIN Giustificativi g ON te.idxDipendente = g.idxDipendente AND te.dataLav = g.dataLav
WHERE (CONVERT(DATE,te.dataLav) = CONVERT(DATE,@dataRif)) AND te.idxDipendente = @idxDipendente
-- verifico SE codice orario richieda una chkFun eseguo calcolo...
IF(dbo.f_chkFunDip(@idxDipendente)<>'')
BEGIN
EXEC stp_TE_doChkFun @idxDipendente, @dataRif
END
END
RETURN
go
commit;
go
set xact_abort on;
go
begin transaction;
go
set ANSI_NULLS on;
go
/**********************************************************
* STORED stp_lcuByDipDate
*
* elenco dati COMPLETI di timbratura e commessa per utente/periodo
*
* mod: S.E.L. 2012.11.02
*
**********************************************************/
alter PROCEDURE stp_TE_RA_ByUserDate
(
@idxDipendente INT,
@dataFrom DATETIME,
@dataTo DATETIME,
@showWE BIT = 1, -- imposto visualizzazione week-end a true di default
@maxErrMin INT = 0, -- minuti massimi di scostamento consentiti per DIFETTO, default 0
@maxErrPlus INT = 0 -- minuti massimi di scostamento consentiti per ECCESSO, default 0
)
with recompile
AS
BEGIN
-- imposto LUN x inizio settimana
SET DATEFIRST 1
-- faccio una tab temporanea con tallyTable x calcolo periodo intero...
DECLARE @numD INT
SET @numD = ( SELECT DATEDIFF(dd, @dataFrom, @dataTo ) )
-- tab dei record RegAttivit progetti
;WITH myCteRA AS
(
SELECT idxDipendente, dataLav, minRegAtt, descrProj
FROM dbo.RegAttivitaExpl
WHERE (idxDipendente = @idxDipendente OR @idxDipendente = 0) AND (dataLav >= DATEADD(DAY,-1,@dataFrom) AND dataLav <= @dataTo)
)
SELECT mc.Data as dataLav
,mc.idxDipendente
,ISNULL(dip.Cognome + ' ' + dip.Nome,'') AS CognomeNome
-- ore base + progetti
,ISNULL(te.h_lav,0) AS h_lav
,ISNULL(te.h_giust,0) AS h_giust
,CAST(ISNULL(vra.minRegAtt,0) AS DECIMAL(9,3))/60 AS h_com
,ISNULL(vra.descrProj,'') as progetti
-- check coerenza
,CASE WHEN ISNULL(vra.minRegAtt,0)-ISNULL(te.h_lav,0)*60 >= @maxErrMin AND ISNULL(vra.minRegAtt,0)-ISNULL(te.h_lav,0)*60 <= @maxErrPlus THEN 1 ELSE 0 END AS okLavCom
,ISNULL(te.isOkTim,0) AS isOkTim
,ISNULL(te.isOkApp,0) AS isOkApp
,ISNULL(te.isOkLav,0) AS isOkLav
,ISNULL(te.isOk,0) AS isOk
-- check blocco
,ISNULL(te.block,0) AS block
-- dettaglio minuti
,ISNULL(te.minOrd,0) AS minOrd
,ISNULL(te.minNonLav,0) AS minNonLav
,ISNULL(te.minStra,0) AS minStra
,ISNULL(te.minPerm,0) AS minPerm
,ISNULL(te.minFer,0) AS minFer
,ISNULL(te.minMal,0) AS minMal
,ISNULL(te.minFest,0) AS minFest
,ISNULL(te.minArcoPres,0) AS minArcoPres
,ISNULL(vra.minRegAtt,0) AS minRegAtt
-- dettaglio entrate
, te.entrata_1, te.uscita_1
, te.entrata_2, te.uscita_2
, te.entrata_3, te.uscita_3
, te.entrata_4, te.uscita_4
-- dati check
, te.chkFunCod, te.chkFunRes
FROM (SELECT CONVERT(DATE,DATEADD(dd, -N, @dataTo)) as Data, idxDipendente
FROM Tally, Dipendenti
WHERE N <= @numD
AND (idxDipendente = @idxDipendente OR @idxDipendente = 0)
) AS mc
LEFT OUTER JOIN myCteRA vra ON mc.Data = vra.dataLav AND mc.idxDipendente=vra.idxDipendente
LEFT OUTER JOIN TimbratureExpl te ON mc.Data=te.dataLav AND te.idxDipendente=mc.idxDipendente
LEFT OUTER JOIN Dipendenti dip ON dip.idxDipendente=mc.idxDipendente
WHERE (te.idxDipendente = @idxDipendente OR @idxDipendente = 0)
AND DATEPART(dw, mc.Data) <= CASE WHEN @showWE=0 THEN 5 ELSE 7 END --solo lun-ven, 1-5
ORDER BY mc.Data DESC, dip.Cognome, dip.Nome
END
RETURN
go
commit;
go
-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(324, GETDATE())
GO
SELECT * FROM LogUpdateDb ORDER BY Versione DESC