
/***************************************
* STORED stp_ParticolariOverview
*
* elenco di overview sullo stato dei magazzini (dettaglio a "maglie larghe")
*
* Steamware, S.E.L.
* mod: 2013.06.17 x Cella Terra Bloccata non visibile
*      procedura vecchia in fondo
****************************************/
CREATE PROCEDURE stp_magazzinoOverview
(
	@CodCS VARCHAR(2),
	@particolare NVARCHAR(15) = ''
)
AS

-- controllo se particolare vuoto o '*' mostro tutto...
IF(@particolare = '' OR @particolare='*' OR @particolare IS NULL)
	BEGIN	

        SELECT
               AnagMag.CodCS , 
               AnagMag.CodMag , 
               AnagMag.DescMag , 
               Blocchi.IdxBlocco , 
               Blocchi.CodBlocco , 
               Blocchi.DescBlocco , 
               TipoCella.Capienza * Blocchi.NumX * Blocchi.NumY * Blocchi.NumZ AS                               TotCelle,
               TipoCella.Capienza * COUNT( DISTINCT ( CASE WHEN Celle.Attiva = 1 THEN Celle.IdxCella 
                                                           ELSE NULL END ) ) AS                                 CelleAttive,
               COUNT( PosizioneUdcCorrente.UDC )AS                                                              CelleOccupate,
               -- COUNT( CASE WHEN Celle.Attiva = 1 THEN PosizioneUdcCorrente.UDC ELSE NULL END )  AS           CelleAttiveOccupate,
               -- CelleLibere = CelleAttive - CelleOccupate ( solo se attive )
               ( TipoCella.Capienza * COUNT( DISTINCT ( CASE WHEN Celle.Attiva = 1 
                                                             THEN Celle.IdxCella ELSE NULL END )) )
                      - ( COUNT( CASE WHEN Celle.Attiva = 1 THEN PosizioneUdcCorrente.UDC ELSE NULL END ) ) AS  CelleLibere,

               ISNULL( MIN( PosizioneUdcCorrente.DataRif ) , GETDATE( ))AS                                      Oldest , 
               ISNULL( MAX( PosizioneUdcCorrente.DataRif ) , GETDATE( ))AS                                      Newest
        FROM AnagMag
        INNER JOIN Blocchi
                ON AnagMag.CodMag = Blocchi.CodMag AND AnagMag.CodCS = Blocchi.CodCS 
        INNER JOIN TipoCella
                ON AnagMag.CodMag = TipoCella.CodMag AND AnagMag.CodCS = TipoCella.CodCS 
        INNER JOIN Celle
                ON TipoCella.IdxTipoCella = Celle.IdxTipoCella AND Blocchi.IdxBlocco = Celle.IdxBlocco
        LEFT OUTER JOIN PosizioneUdcCorrente
                ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella

        WHERE AnagMag.CodCS = @CodCS AND ISNULL( AnagMag.Nascosto , 0 ) = 0  -- escludo mag. nascosti
        GROUP BY AnagMag.CodCS , 
                 AnagMag.CodMag , 
                 AnagMag.DescMag , 
                 Blocchi.IdxBlocco , 
                 Blocchi.CodBlocco , 
                 Blocchi.DescBlocco , 
                 Blocchi.NumX , 
                 Blocchi.NumY , 
                 Blocchi.NumZ , 
                 TipoCella.Capienza
        ORDER BY AnagMag.CodMag , Blocchi.CodBlocco;
     END 
ELSE
	BEGIN

        SELECT
            AnagMag.CodCS , 
            AnagMag.CodMag , 
            AnagMag.DescMag , 
            Blocchi.IdxBlocco , 
            Blocchi.CodBlocco , 
            Blocchi.DescBlocco , 
            TipoCella.Capienza * Blocchi.NumX * Blocchi.NumY * Blocchi.NumZ AS                               TotCelle,
            -- CelleLibere e CelleAttive = 0 altrimenti grafico videata non corretto con selezione particolare
            CONVERT(INT, 0 ) AS                                                                              CelleAttive,
            COUNT( CASE WHEN ec.Particolare = @particolare  THEN PosizioneUdcCorrente.UDC ELSE NULL END ) AS CelleOccupate,
            CONVERT(INT, 0 ) AS                                                                              CelleLibere,

            -- Calcoli normali x CelleLibere e CelleAttive ( verificare grafico videata - calcoli corretti )
            --TipoCella.Capienza * COUNT( DISTINCT ( CASE WHEN Celle.Attiva = 1 THEN Celle.IdxCella 
            --                                            ELSE NULL END ) ) AS                                     CelleAttive,
            --COUNT( CASE WHEN ec.Particolare = @particolare  THEN PosizioneUdcCorrente.UDC ELSE NULL END ) AS    CelleOccupate,
            --( TipoCella.Capienza * COUNT( DISTINCT ( CASE WHEN Celle.Attiva = 1 THEN Celle.IdxCella ELSE NULL END )) )
            --      - ( COUNT( CASE WHEN Celle.Attiva = 1 THEN PosizioneUdcCorrente.UDC ELSE NULL END ) ) AS      CelleLibere,

            ISNULL( MIN( CASE WHEN ec.Particolare = @particolare  THEN PosizioneUdcCorrente.DataRif ELSE NULL END ) , GETDATE( ))AS Oldest , 
            ISNULL( MAX( CASE WHEN ec.Particolare = @particolare  THEN PosizioneUdcCorrente.DataRif ELSE NULL END ) , GETDATE( ))AS Newest
        FROM AnagMag
        INNER JOIN Blocchi
                ON AnagMag.CodMag = Blocchi.CodMag AND AnagMag.CodCS = Blocchi.CodCS 
        INNER JOIN TipoCella
                ON AnagMag.CodMag = TipoCella.CodMag AND AnagMag.CodCS = TipoCella.CodCS 
        INNER JOIN Celle
                ON TipoCella.IdxTipoCella = Celle.IdxTipoCella AND Blocchi.IdxBlocco = Celle.IdxBlocco
        LEFT OUTER JOIN PosizioneUdcCorrente
                ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella
        LEFT OUTER JOIN ElencoCartellini ec ON PosizioneUdcCorrente.UDC = ec.UDC
        
        WHERE AnagMag.CodCS = @CodCS AND ISNULL( AnagMag.Nascosto , 0 ) = 0  -- escludo mag. nascosti
        GROUP BY AnagMag.CodCS , 
                 AnagMag.CodMag , 
                 AnagMag.DescMag , 
                 Blocchi.IdxBlocco , 
                 Blocchi.CodBlocco , 
                 Blocchi.DescBlocco , 
                 Blocchi.NumX , 
                 Blocchi.NumY , 
                 Blocchi.NumZ , 
                 TipoCella.Capienza
        -- filtro solo i magazzini con il particolare richiesto
        HAVING COUNT( CASE WHEN ec.Particolare = @particolare  THEN PosizioneUdcCorrente.UDC ELSE NULL END ) > 0
        ORDER BY AnagMag.CodMag , Blocchi.CodBlocco;

    END

/*  OLD 17/06/2013 Problema della cella terra bloccata non più visibile e delle celle bloccate piene
		SELECT     AnagMag.CodCS, AnagMag.CodMag, AnagMag.DescMag, Blocchi.IdxBlocco, Blocchi.CodBlocco, Blocchi.DescBlocco, 
				   TipoCella.Capienza * Blocchi.NumX * Blocchi.NumY * Blocchi.NumZ AS TotCelle, 
				   TipoCella.Capienza * COUNT(DISTINCT Celle.IdxCella) AS CelleAttive, 
				   COUNT(PosizioneUdcCorrente.UDC) AS CelleOccupate, 
				   TipoCella.Capienza * COUNT(DISTINCT Celle.IdxCella) - COUNT(PosizioneUdcCorrente.UDC) AS CelleLibere, 
				   ISNULL(MIN(PosizioneUdcCorrente.DataRif), GETDATE()) AS Oldest, ISNULL(MAX(PosizioneUdcCorrente.DataRif), GETDATE()) AS Newest
	FROM			TipoCella INNER JOIN
					AnagMag INNER JOIN
					Blocchi ON AnagMag.CodMag = Blocchi.CodMag AND AnagMag.CodCS = Blocchi.CodCS ON TipoCella.CodMag = AnagMag.CodMag AND 
					TipoCella.CodCS = AnagMag.CodCS LEFT OUTER JOIN
					Celle ON TipoCella.IdxTipoCella = Celle.IdxTipoCella AND Blocchi.IdxBlocco = Celle.IdxBlocco LEFT OUTER JOIN
					PosizioneUdcCorrente ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella
	WHERE			(Celle.Attiva = 1) AND (AnagMag.CodCS = @CodCS) AND (ISNULL(AnagMag.Nascosto, 0) = 0)
	GROUP BY		AnagMag.CodCS, AnagMag.CodMag, AnagMag.DescMag, Blocchi.IdxBlocco, Blocchi.CodBlocco, Blocchi.DescBlocco, 
					Blocchi.NumX, Blocchi.NumY, Blocchi.NumZ, 
					TipoCella.Capienza
	ORDER BY		AnagMag.CodMag, Blocchi.CodBlocco
	END
ELSE
	BEGIN
		SELECT     AnagMag.CodCS, AnagMag.CodMag, AnagMag.DescMag, Blocchi.IdxBlocco, Blocchi.CodBlocco, Blocchi.DescBlocco, 
				   TipoCella.Capienza * Blocchi.NumX * Blocchi.NumY * Blocchi.NumZ AS TotCelle, 
				   TipoCella.Capienza * COUNT(DISTINCT Celle.IdxCella) AS CelleAttive, 
				   COUNT(PosizioneUdcCorrente.UDC) AS CelleOccupate, 
				   TipoCella.Capienza * COUNT(DISTINCT Celle.IdxCella) - COUNT(PosizioneUdcCorrente.UDC) AS CelleLibere, 
				   ISNULL(MIN(PosizioneUdcCorrente.DataRif), GETDATE()) AS Oldest, ISNULL(MAX(PosizioneUdcCorrente.DataRif), GETDATE()) AS Newest
	FROM			TipoCella INNER JOIN
					AnagMag INNER JOIN
					Blocchi ON AnagMag.CodMag = Blocchi.CodMag AND AnagMag.CodCS = Blocchi.CodCS ON TipoCella.CodMag = AnagMag.CodMag AND 
					TipoCella.CodCS = AnagMag.CodCS LEFT OUTER JOIN
					Celle ON TipoCella.IdxTipoCella = Celle.IdxTipoCella AND Blocchi.IdxBlocco = Celle.IdxBlocco LEFT OUTER JOIN
					PosizioneUdcCorrente ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella
					INNER JOIN ElencoCartellini ec ON PosizioneUdcCorrente.UDC = ec.UDC
	WHERE			(Celle.Attiva = 1) AND (AnagMag.CodCS = @CodCS) AND (ISNULL(AnagMag.Nascosto, 0) = 0) AND ec.Particolare = @particolare
	GROUP BY		AnagMag.CodCS, AnagMag.CodMag, AnagMag.DescMag, Blocchi.IdxBlocco, Blocchi.CodBlocco, Blocchi.DescBlocco, 
					Blocchi.NumX, Blocchi.NumY, Blocchi.NumZ, 
					TipoCella.Capienza
	ORDER BY		AnagMag.CodMag, Blocchi.CodBlocco
	END
*/

RETURN
