-- Schema: C6Mart
-- Stored Procedure: zzzzPL_D_S157ConfrontoPiramidi


-- Stored procedure



-- =============================================
-- Author:		Paolo Giovanetti
-- Create date: 11/11/2008
-- Description:	<Description,,>
-- =============================================
-- [C6Mart].[PL_D_S157ConfrontoPiramidi] 'S','CSLMCR54P48H501U'
-- CHIEDERE A FABRIZIO, case @TOTControvaloreModello when 0 ....
CREATE procedure [C6Mart].[zzzzPL_D_S157ConfrontoPiramidi]
	-- Add the parameters for the stored procedure here
	@Rete char(1), 
	@CodiceFiscale varchar(16)
AS
BEGIN

--	DECLARE @minGradoCoperura AS INT
--	SET @minGradoCoperura = CAST(dbo.getParametro('MINGRADOCOPERTURA') AS INT)
	SELECT 
		PIRAMIDE_MOD.RETE, 
		PIRAMIDE_MOD.COD_FISCALE, 	
		PIRAMIDE_MOD.ID_AREA,
		PIRAMIDE_MOD.PERC_AREA,
		PIRAMIDE_VERT.CTV_AREA AS CONTROVALORE
	INTO #PIRAMIDE_VERT
	FROM 
    (SELECT PIRAMIDE_MOD.RETE, 
	     	PIRAMIDE_MOD.COD_FISCALE, 	
		    PIRAMIDE_MOD.ID_AREA,
		    SUM(PIRAMIDE_MOD.PERC_AREA) AS PERC_AREA
     FROM C6MART.PIRAMIDE_MOD
     WHERE 
        PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA', 'CC', 'INV' )
		AND PIRAMIDE_MOD.RETE = @Rete
		AND PIRAMIDE_MOD.COD_FISCALE = @CodiceFiscale
     GROUP BY PIRAMIDE_MOD.RETE, 
	       PIRAMIDE_MOD.COD_FISCALE, 	
		   PIRAMIDE_MOD.ID_AREA) AS PIRAMIDE_MOD
	LEFT JOIN (
		-- GROUP BY PER ACCORPARE I CTV_AREA SULLE PRE1 E PRE2 IN UNO UNICO CORRISPONDENTE A PRE
		SELECT 
		RETE, 
		COD_FISCALE, 
		LEFT(ID_AREA,3) AS ID_AREA, 
		SUM(COALESCE(CTV,0)) AS CTV_AREA		
		FROM 
			C6MART.PATRIMONIO_BF  PIRAMIDE_VERT
		WHERE 
			PIRAMIDE_VERT.RETE = @Rete
			AND PIRAMIDE_VERT.COD_FISCALE = @CodiceFiscale
            --modificata atringali -- AND   ID_AREA NOT IN ('Cc')
		GROUP BY 
			RETE, COD_FISCALE, LEFT(ID_AREA,3) 
	) PIRAMIDE_VERT 
		ON 
			PIRAMIDE_VERT.ID_AREA = PIRAMIDE_MOD.ID_AREA
	WHERE 
            --modificata atringali --  (PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA')
		(PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA', 'CC')
			OR (
                PIRAMIDE_MOD.ID_AREA = 'INV' 
   --             AND PIRAMIDE_MOD.NOME_PROGETTO IS NULL
                ))
		AND PIRAMIDE_MOD.RETE = @Rete
		AND PIRAMIDE_MOD.COD_FISCALE = @CodiceFiscale

	IF(@@ROWCOUNT>0)

		BEGIN

			-- Ordinamento per Area di bisogno
			DECLARE @TOTControvaloreAttuale DECIMAL(20,2)

			SELECT @TOTControvaloreAttuale = SUM(ATTUALE.CONTROVALORE)
			FROM #PIRAMIDE_VERT ATTUALE
			WHERE ATTUALE.RETE = @Rete
				AND ATTUALE.COD_FISCALE = @CodiceFiscale
			--V
			AND ID_AREA not in ('Na', 'Cc')

				
			--V 
			DECLARE @TOTCC DECIMAL (20,2)
			SELECT @TOTCC = ISNULL(CONTROVALORE,0)
			FROM #PIRAMIDE_VERT ATTUALE
			WHERE ATTUALE.RETE = @Rete
				AND ATTUALE.COD_FISCALE = @CodiceFiscale
				AND ID_AREA = 'Cc'

			--V 
--			DECLARE @TOTNA DECIMAL (20,2)
--			SELECT @TOTCC = ISNULL(CONTROVALORE,0)
--			FROM #PIRAMIDE_VERT ATTUALE
--			WHERE ATTUALE.RETE = @Rete
--				AND ATTUALE.COD_FISCALE = @CodiceFiscale
--				AND ID_AREA = 'Na'

			--V 
			DECLARE @TOT DECIMAL (20,2)
			SELECT @TOT = SUM(ISNULL(CONTROVALORE,0))
			FROM #PIRAMIDE_VERT ATTUALE
			WHERE ATTUALE.RETE = @Rete
				AND ATTUALE.COD_FISCALE = @CodiceFiscale
				

			SELECT 
				AREA_BISOGNO.ID_AREA AS NeedArea,
				AREA_BISOGNO.NOME_AREA AS AreaName,
				ISNULL(ATTUALE.PERC_AREA,0) AS PercentualeModello,
				CASE 
					WHEN @TOTControvaloreAttuale = 0 THEN 0 
				ELSE (100 * ISNULL(ATTUALE.CONTROVALORE,0) / ISNULL(@TOTControvaloreAttuale,1)) 
				END AS PercentualeAttuale,
				ROUND(ISNULL(ATTUALE.CONTROVALORE,0),2) AS ControvaloreAttuale,
				ROUND(ISNULL(ATTUALE.PERC_AREA * @TOTControvaloreAttuale / 100 , 0),2) AS ControvaloreModello,
				ATTUALE.PERC_AREA AS Totale_Percentuale,
				ROUND(ISNULL(ATTUALE.CONTROVALORE,0),2) - ROUND(ISNULL(ATTUALE.PERC_AREA * @TOTControvaloreAttuale / 100 , 0),2) AS DifferenzaEuro,
				-- V D S
			CASE 
				WHEN @TOTControvaloreAttuale = 0 THEN - ATTUALE.PERC_AREA 
