﻿-- modifiche 2021.10 x gestione assegnazione gruppi, ordinamento, visualizzazione gruppi in Bazaar
USE [ETS_PROJ]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- modifica tab Dip2ATR
alter TABLE [dbo].[Dip2ATR]
ADD  [GrpOrder] [int] NOT NULL DEFAULT 1
GO

-- fix ordinamento dipendenti in gruppi
update Dip2ATR
set GrpOrder = RIGHT(Gruppo,2)
GO

-- rimozione ordinamento dal gruppi ( riduzione a VERI gruppi)
update Dip2ATR 
set gruppo = REPLACE(gruppo, RIGHT(Gruppo,3),'')
GO

-- tab gruppi
CREATE TABLE [dbo].[AnagGruppi](
    [Gruppo] [nvarchar](50) NOT NULL,
    [Descrizione] [nvarchar](250) NOT NULL,
    [OrdGruppo] [int] NOT NULL,
    [Visibile] [bit] NOT NULL,
 CONSTRAINT [PK_AnagGruppi] PRIMARY KEY CLUSTERED 
(
    [Gruppo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[AnagGruppi] ADD  CONSTRAINT [DF_AnagGruppi_Gruppo]  DEFAULT ('') FOR [Gruppo]
GO

ALTER TABLE [dbo].[AnagGruppi] ADD  CONSTRAINT [DF_AnagGruppi_Descrizione]  DEFAULT ('-') FOR [Descrizione]
GO

ALTER TABLE [dbo].[AnagGruppi] ADD  CONSTRAINT [DF_AnagGruppi_OrdGruppo]  DEFAULT ((1)) FOR [OrdGruppo]
GO

ALTER TABLE [dbo].[AnagGruppi] ADD  CONSTRAINT [DF_AnagGruppi_Visibile]  DEFAULT ((1)) FOR [Visibile]
GO



-- popolamento tab gruppi già ordinati
insert into AnagGruppi
select distinct REPLACE(gruppo, LEFT(gruppo,3),'') as gruppo, gruppo as descrizione, left(gruppo, 2) as OrdGruppo, 1 as visibile from dip2atr
GO


-- sistemo gruppi sugli utenti
UPDATE Dip2ATR
SET		Gruppo = REPLACE(gruppo, LEFT(gruppo,3),'')
GO

-- sistemo le stored collegate

/**********************************************************
* STORED stp_D2ATR_getBazOrd
*
* recupera elenco dipendenti abilitati a bazaar ordinati x i gruppi validi
*
* mod: S.E.L. 2013.09.04 - release
* mod: S.E.L. 2021.10.15 revisione sistema gruppi ed ordinamento
*
**********************************************************/
ALTER PROCEDURE [dbo].[stp_D2ATR_getBazOrd]

AS

SELECT      D2A.*
FROM        Dip2ATR D2A
    INNER JOIN AnagGruppi AG ON D2A.Gruppo = AG.Gruppo
ORDER BY    AG.OrdGruppo, D2A.GrpOrder

RETURN
GO

/**********************************************************
* STORED stp_D2ATR_getBazOrd
*
* recupera elenco dipendenti abilitati a bazaar
*
* mod: S.E.L. 2017.07.18
* mod: S.E.L. 2021.10.15 revisione sistema gruppi ed ordinamento
**********************************************************/
ALTER PROCEDURE [dbo].[stp_Dip_Baz]

AS

SELECT      dip.*
FROM        Dipendenti dip 
    INNER JOIN Dip2ATR D2A ON dip.idxDipendente=D2A.idxDipendente
    INNER JOIN AnagGruppi AG ON D2A.Gruppo = AG.Gruppo
ORDER BY    AG.OrdGruppo, D2A.GrpOrder

RETURN
GO

/**********************************************************
* STORED stp_AG_updateQuery
*
* update gruppo
*
* mod: S.E.L. 2021.10.15
*
**********************************************************/
CREATE PROCEDURE [dbo].[stp_AG_updateQuery]
(
    @Original_Gruppo	NVARCHAR(50),
    @Descrizione		NVARCHAR(250),
    @OrdGruppo			INT,
    @Visibile			BIT
)
AS

SET NOCOUNT OFF;
UPDATE	AnagGruppi
SET		Descrizione	= @Descrizione,
        OrdGruppo	= @OrdGruppo,
        Visibile	= @Visibile
WHERE	Gruppo = @Original_Gruppo;
    
SELECT	* 
FROM	AnagGruppi
WHERE	Gruppo = @Original_Gruppo;

GO


/**********************************************************
* STORED stp_AG_deleteQuery
*
* elimina gruppo (SE NON Impiegato)
*
* mod: S.E.L. 2021.10.15
*
**********************************************************/
CREATE PROCEDURE [dbo].[stp_AG_deleteQuery]
(
    @Original_Gruppo int
)
AS
    SET NOCOUNT OFF;

    -- controllo: se ci sono record assegnati a fase NON cancello ma archivio...
    DECLARE @trovate INT = 0;
    
    SET		@trovate = ( SELECT ISNULL(COUNT(*),0) FROM Dip2ATR WHERE Gruppo = @Original_Gruppo )

    IF(@trovate < 1)
        BEGIN
            -- elimino gruppo
            DELETE	
            FROM	AnagGruppi 
            WHERE	Gruppo = @Original_Gruppo
        END
GO


/**********************************************************
* STORED stp_AG_InsertQuery
*
* crezione nuovo gruppo
*
* mod: S.E.L. 2021.10.15
*
**********************************************************/
create PROCEDURE [dbo].[stp_AG_InsertQuery]
(
    @Gruppo			NVARCHAR(50),
    @Descrizione	NVARCHAR(250)
)
AS

SET NOCOUNT OFF;

DECLARE @maxOrd INT = 999;

SELECT	@maxOrd = MAX(OrdGruppo)
FROM	AnagGruppi


INSERT INTO AnagGruppi ( Gruppo, Descrizione, OrdGruppo, Visibile)
VALUES (@Gruppo, @Descrizione, @maxOrd+1, 1);
    
SELECT	* 
FROM	AnagGruppi
WHERE	Gruppo = @Gruppo

GO


/**********************************************************
* STORED stp_AG_GetData
*
* crezione nuovo gruppo
*
* mod: S.E.L. 2021.10.15
*
**********************************************************/
CREATE PROCEDURE [dbo].[stp_AG_GetData]
AS
    SET NOCOUNT ON;

SELECT		* 
FROM		v_AnagGruppi
ORDER BY	OrdGruppo 


-- viste e altri parametri x gestione Gruppi
CREATE VIEW [dbo].[v_AnagGruppi]
AS
SELECT AG.Gruppo
    ,AG.Descrizione
    ,AG.OrdGruppo
    ,AG.Visibile
    ,ISNULL(dbo.v_Dip2Group.NumDip, 0) AS NumDip
FROM dbo.AnagGruppi AG
LEFT OUTER JOIN dbo.v_Dip2Group ON AG.Gruppo = dbo.v_Dip2Group.Gruppo

GO
