292 lines
7.8 KiB
Transact-SQL
292 lines
7.8 KiB
Transact-SQL
create table ElencoReport(
|
|
IdxRep int not null identity constraint PK_ElencoReport primary key,
|
|
ReportName nvarchar(50),
|
|
ReportUrl nvarchar(500),
|
|
imgUrl nvarchar(50)
|
|
);
|
|
go
|
|
|
|
|
|
set xact_abort on
|
|
go
|
|
|
|
begin transaction
|
|
go
|
|
|
|
set identity_insert dbo.ElencoReport on
|
|
go
|
|
|
|
INSERT INTO dbo.ElencoReport
|
|
(IdxRep, ReportName, ReportUrl, imgUrl)
|
|
VALUES (1, N'Report Ore: Cliente - Progetto - Utente', N'GPW+-+Report+Presenze%2fGPW+-+Ore+per+Cliente-Progetto-Utente', NULL)
|
|
INSERT INTO dbo.ElencoReport
|
|
(IdxRep, ReportName, ReportUrl, imgUrl)
|
|
VALUES (2, N'Report Completo: Elenco Ore Attivita Progetti', N'GPW+-+Report+Presenze%2fGPW+-+Elenco+Ore+Attivita+Progetti', NULL)
|
|
go
|
|
|
|
set identity_insert dbo.ElencoReport off
|
|
go
|
|
|
|
commit transaction
|
|
go
|
|
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/**********************************************************
|
|
* STORED stp_ReportOreDip
|
|
*
|
|
* elenco ore dipendenti
|
|
*
|
|
* mod: S.E.L. 2013.02.04
|
|
*
|
|
**********************************************************/
|
|
alter PROCEDURE export.stp_ReportOreDip
|
|
(
|
|
@idxDipendente INT = 0, -- 0 = tutti
|
|
@dataFrom DATETIME,
|
|
@dataTo DATETIME
|
|
)
|
|
AS
|
|
SET NOCOUNT OFF;
|
|
DECLARE @minArr INT
|
|
|
|
SELECT @minArr = ISNULL(valInt,1) FROM AnagKeyValue WHERE nomeVar = 'minutiRoundDay'
|
|
|
|
-- elenco mensile...
|
|
SELECT dataLav, CognomeNome,
|
|
entrata_1, uscita_1, entrata_2, uscita_2,
|
|
entrata_3, uscita_3, entrata_4, uscita_4,
|
|
FLOOR(CAST(h_lav AS DECIMAL(9,3))*60/@minArr)/(60/@minArr) AS h_lavorate,
|
|
FLOOR(CAST(minStra AS DECIMAL(9,3))/@minArr)/(60/@minArr) AS h_straordinarie,
|
|
CEILING(CAST(minPerm AS DECIMAL(9,3))/@minArr)/(60/@minArr) AS h_permessi,
|
|
CEILING(CAST(minFer AS DECIMAL(9,3))/@minArr)/(60/@minArr) AS h_ferie,
|
|
CEILING(CAST(minMal AS DECIMAL(9,3))/@minArr)/(60/@minArr) AS h_malattia,
|
|
CEILING(CAST(minFest AS DECIMAL(9,3))/@minArr)/(60/@minArr) AS h_festivita
|
|
FROM TimbratureExpl
|
|
WHERE (idxDipendente = @idxDipendente OR @idxDipendente = 0)
|
|
AND dataLav >= CAST(@dataFrom AS DATE)
|
|
AND dataLav <= CAST(@dataTo AS DATE)
|
|
--AND NOT (entrata_1 IS NULL)
|
|
ORDER BY CognomeNome, dataLav
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/**********************************************************
|
|
* STORED stp_AP_Expl_getData
|
|
*
|
|
* recupera elenco progetti con filtraggio ore totali per
|
|
* - dipendente
|
|
* - periodo
|
|
*
|
|
* mod: S.E.L. 2013.01.30
|
|
*
|
|
**********************************************************/
|
|
alter PROCEDURE stp_AP_Expl_getData
|
|
(
|
|
@idxDipendente INT = 0, -- 0 = tutti
|
|
@dataFrom DATETIME = '19000101',
|
|
@dataTo DATETIME = '99991231',
|
|
@idxCliente INT = 0, -- 0 = tutti
|
|
@showPrjArch BIT = 1, -- 1 = mostra tutti, 0 = nasconde archiviati
|
|
@showPrjZeroH BIT = 1 -- 1 = mostra tutti, 0 = nasconde se zero ore caricate
|
|
)
|
|
AS
|
|
|
|
-- controllo se date nulle importo a min/max
|
|
DECLARE @firstDate DATETIME
|
|
DECLARE @lastDate DATETIME
|
|
|
|
SELECT @firstDate = MIN(inizio), @lastDate=DATEADD(DAY,1,MAX(inizio)) FROM RegAttivita
|
|
SELECT @dataFrom=ISNULL(@dataFrom, @firstDate) , @dataTo=ISNULL(@dataTo, @lastDate)
|
|
|
|
|
|
;WITH cteOreReal AS
|
|
(
|
|
SELECT ap.idxProgetto, SUM(ISNULL(ra.oreTot, 0)) AS totOre
|
|
FROM AnagProgetti AS ap INNER JOIN
|
|
AnagClienti AS ac ON ac.idxCliente=ap.idxCliente INNER JOIN
|
|
AnagFasi AS af ON ap.idxProgetto = af.idxProgetto INNER JOIN
|
|
RegAttivita AS ra ON af.idxFase = ra.idxFase
|
|
WHERE (ra.idxDipendente = @idxDipendente OR @idxDipendente = 0)
|
|
AND (ra.inizio >= @dataFrom AND ra.inizio <= @dataTo)
|
|
AND (ac.idxCliente = @idxCliente OR @idxCliente = 0)
|
|
AND (ap.Attivo = CASE WHEN @showPrjArch <> 0 THEN ap.Attivo ELSE 1 END)
|
|
GROUP BY ap.idxProgetto
|
|
)
|
|
,cteOreBudget as
|
|
(
|
|
SELECT
|
|
idxProgetto
|
|
,SUM(ISNULL(budgetTime,0)) as budgetTime
|
|
,SUM(ISNULL(budgetMoney,0)) as budgetMoney
|
|
FROM AnagFasi
|
|
GROUP BY idxProgetto
|
|
)
|
|
|
|
SELECT ac.RagSociale
|
|
, ap.idxProgetto
|
|
, ap.idxCliente
|
|
, ap.nomeProj
|
|
, ap.descrProj
|
|
, ISNULL(bdgt.budgetTime,0) AS budgetTime
|
|
, ISNULL(bdgt.budgetMoney,0) AS budgetMoney
|
|
, ISNULL(ap.OldIdx,-1) AS OldIdx
|
|
, ap.Attivo
|
|
, ISNULL(ap.codExt,'') AS codExt
|
|
, ISNULL(cte.totOre, 0) AS totOre
|
|
, ISNULL(ap.avvio,'19000101') AS avvio
|
|
, ISNULL(ap.chiusura,'99991231') AS chiusura
|
|
FROM AnagClienti AS ac INNER JOIN
|
|
AnagProgetti AS ap ON ac.idxCliente = ap.idxCliente LEFT OUTER JOIN
|
|
cteOreBudget AS bdgt ON ap.idxProgetto = bdgt.idxProgetto LEFT OUTER JOIN
|
|
cteOreReal AS cte ON cte.idxProgetto = ap.idxProgetto
|
|
WHERE (ac.idxCliente = @idxCliente OR @idxCliente = 0)
|
|
AND (ap.Attivo = CASE WHEN @showPrjArch <> 0 THEN ap.Attivo ELSE 1 END)
|
|
AND (totOre > 0 OR @showPrjZeroH = 1)
|
|
ORDER BY ac.RagSociale, ap.nomeProj
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
set xact_abort on;
|
|
go
|
|
|
|
begin transaction;
|
|
go
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/**********************************************************
|
|
* STORED stp_RA_clonaLastRA_byFaseUtente
|
|
*
|
|
* clona un attività utente: ultima di un dato tipo di fase
|
|
*
|
|
* mod: S.E.L. 2013.02.20
|
|
*
|
|
**********************************************************/
|
|
alter PROCEDURE stp_RA_clonaLastRA_byFaseUtente
|
|
(
|
|
@idxDipendente INT
|
|
,@dataRif DATETIME -- data x cui creare un record attività
|
|
,@idxFase INT
|
|
,@minuti INT = 0 -- se 0 fa last value
|
|
)
|
|
AS
|
|
|
|
-- variabili
|
|
DECLARE @idxRA INT
|
|
DECLARE @inizio DATETIME
|
|
|
|
-- calcolo fine ultima attività del giorno x l'utente (se c'è...)
|
|
SELECT TOP 1 @inizio = ISNULL(fine, @dataRif)
|
|
FROM RegAttivita
|
|
WHERE idxDipendente = @idxDipendente
|
|
AND CONVERT(DATE,fine) = @dataRif
|
|
ORDER BY fine DESC
|
|
|
|
|
|
DECLARE @round AS INT
|
|
SET @round = ( SELECT valInt FROM AnagKeyValue WHERE nomeVar = 'minutiRoundDay' )
|
|
|
|
-- arrotondo data richiesta...
|
|
SELECT @dataRif = DATEADD(n, (ROUND(dbo.TimeSpanUnits('m', dbo.TimeOnly(DATEADD(n,-1,@dataRif))) / @round, 2) + 1) * @round , CAST(CAST(@dataRif AS DATE) AS DATETIME))
|
|
|
|
-- controlla che x la data richiesta non ci siano già altre attività, in quel caso "accoda"...
|
|
DECLARE @trovate INT = 0
|
|
SELECT @trovate = COUNT(idxRA) FROM RegAttivita WHERE idxDipendente = @idxDipendente AND CAST(@dataRif AS DATE) = CAST(inizio AS DATE)
|
|
|
|
IF @trovate > 0
|
|
BEGIN
|
|
-- imposto @dataRif per iniziare alla fine dell'ultimo record
|
|
SELECT TOP 1 @dataRif=fine FROM RegAttivita WHERE idxDipendente = @idxDipendente AND CAST(@dataRif AS DATE) = CAST(inizio AS DATE) ORDER BY fine DESC
|
|
END
|
|
|
|
-- cerco ultima reg attività utente x fase indicata...
|
|
SELECT @idxRA=ISNULL((SELECT TOP 1 idxRA FROM RegAttivita WHERE idxDipendente = @idxDipendente AND idxFase = @idxFase ORDER BY inizio DESC),0)
|
|
|
|
-- inserisco su data richeista duplicazione dell'ultima attività utente...
|
|
INSERT INTO RegAttivita(idxDipendente, idxFase, inizio, fine, descrizione, importo)
|
|
SELECT idxDipendente, idxFase, @dataRif, DATEADD(minute, CASE WHEN @minuti = 0 THEN DATEDIFF(MINUTE, inizio, fine) ELSE @minuti END, @dataRif), descrizione, importo
|
|
FROM RegAttivita
|
|
WHERE (idxRA = @idxRA)
|
|
go
|
|
|
|
commit;
|
|
go
|
|
|
|
|
|
set ANSI_NULLS on;
|
|
go
|
|
|
|
/**********************************************************
|
|
* FUNCTION f_dataOraITA
|
|
*
|
|
* formatta data ora in modo che sia compatibilit con excel ITA
|
|
*
|
|
**********************************************************/
|
|
create FUNCTION f_dataOraITA
|
|
(
|
|
@valore DATETIME
|
|
)
|
|
RETURNS NVARCHAR(50)
|
|
AS
|
|
BEGIN
|
|
RETURN CONVERT(NVARCHAR(50), @valore, 120)
|
|
END
|
|
go
|
|
|
|
/**********************************************************
|
|
* FUNCTION f_floatITA
|
|
*
|
|
* formatta data ora in modo che sia compatibilita con excel ITA
|
|
*
|
|
**********************************************************/
|
|
create FUNCTION f_floatITA
|
|
(
|
|
@valore FLOAT
|
|
)
|
|
RETURNS NVARCHAR(50)
|
|
AS
|
|
BEGIN
|
|
RETURN REPLACE(CONVERT(NVARCHAR(50), @valore),'.',',')
|
|
END
|
|
go
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- registro versione...
|
|
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(306, GETDATE())
|
|
GO
|
|
SELECT * FROM LogUpdateDb ORDER BY Versione DESC
|