﻿-- Aggiunta GESTIONE EligoTitoli L192 (FCianfa, 26/11/2014)  
CREATE procedure [c6mart].[Popola_S133_S157DatiPiramide]                                                                              
AS                                                                                                                                                
BEGIN                                                                                                                                             
 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_TEMP                                                                                                                       
 FROM                                                                                                                                      
  C6Mart.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,                                                                                               
  CASE                                                                                                                              
   WHEN ID_AREA = 'SELF'                                                                                                     
   THEN LEFT(ID_AREA,4)                                                                                                      
   ELSE LEFT(ID_AREA,3)                                                                                                      
   END AS ID_AREA,                                                                                                           
   SUM(COALESCE(CTV,0)) AS CTV_AREA                                                                                          
  FROM                                                                                                                              
   C6MART.PATRIMONIO_BF  PIRAMIDE_VERT                                                                              
   GROUP BY                                                                                                                  
   RETE, COD_FISCALE,                                                                                             
   CASE                          
   WHEN ID_AREA = 'SELF'                                                                                                     
   THEN LEFT(ID_AREA,4)                                                                                                      
   ELSE LEFT(ID_AREA,3)                                                                                                      
   END                                                                                                                       
 ) PIRAMIDE_VERT                                                                                                                           
  ON                                                                                                                                
   PIRAMIDE_VERT.ID_AREA = PIRAMIDE_MOD.ID_AREA                                                                              
      and PIRAMIDE_VERT.COD_FISCALE = PIRAMIDE_MOD.COD_FISCALE                                          
   and PIRAMIDE_VERT.RETE = PIRAMIDE_MOD.RETE                                                                                
 WHERE                                                                                                                                     
            --modificata atringali --  (PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA')                                                    
  (PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA', 'CC','SELF','INV')                                                              
   --OR (PIRAMIDE_MOD.ID_AREA = 'INV' AND PIRAMIDE_MOD.NOME_PROGETTO IS NULL) /* 20161202 nome_progetto sempre diverso da null */  
  )    
/* 20161214 - aggiunto aggragazione percentuali per area */  
 SELECT                                                                                                                                    
  RETE,                                                                                                                
  COD_FISCALE,                                                                                                    
  ID_AREA,                                                                                                             
  sum(PERC_AREA) as PERC_AREA,                                                                                                           
  CONTROVALORE                                                                                            
 INTO #PIRAMIDE_VERT                                                                                                            
 FROM                                                                                                                                      
  #PIRAMIDE_VERT_TEMP  
 group by rete,cod_fiscale, id_area, CONTROVALORE                                                                                                                                    
truncate table  c6mart.TB_S133_S157DatiPiramide                                                             
insert into c6mart.TB_S133_S157DatiPiramide                                                                                       
  SELECT    distinct  /* 20161202 */                                                                                                                        
  ATTUALE.RETE,                                                                                                                     
  ATTUALE.COD_FISCALE,                                                                                                              
   AREA_BISOGNO.ID_AREA AS NeedArea,                                                                                         
   AREA_BISOGNO.NOME_AREA AS AreaName,                                                                                       
   ISNULL(ATTUALE.PERC_AREA,0) AS PercentualeModello,                                                                        
   ISNULL(ATTUALE.CONTROVALORE,0) PercentualeAttuale,                                                                        
   ROUND(ISNULL(ATTUALE.CONTROVALORE,0),2) AS ControvaloreAttuale,                                                           
   ISNULL(ATTUALE.PERC_AREA,0) ControvaloreModello,                                                                          
   ATTUALE.PERC_AREA AS Totale_Percentuale,                                                                                  
   ISNULL(ATTUALE.CONTROVALORE,0) DifferenzaEuro,                                                                            
   0 differenzapercentuale,                                                                                                  
   ISNULL(RISCHIOAREA.VAR_PERC_PTF,0) AS var_needarea,                                                     
   CASE                                                                                                                      
    WHEN RISCHIOAREA.COPERTURA IS NULL THEN 'n.c.'                                                                    
    WHEN RISCHIOAREA.COPERTURA = 0 THEN 'n.c.'                                                                        
--------------------------------------------------------------                                                                                    
--INIZIO INTERVENTI OMNIA QUIII                                                                                              
    --WHEN AREA_BISOGNO.ID_AREA = 'LIQ' THEN 'n.c.'                                                                     
--FINE INTERVENTI OMNIA QUIII                                                                                                                     
--------------------------------------------------------------             
    ELSE NULL                                                                                                         
   END AS var_needareaString,                                                                                                
   ISNULL(RISCHIOAREA.COPERTURA,0) AS copertura_needarea,                                                                    
   CASE                                                                                                                      
    WHEN RISCHIOAREA.COPERTURA IS NULL THEN 'n.c.'                                                                    
    WHEN RISCHIOAREA.COPERTURA = 0 THEN '0,00'                                                                        
    ELSE NULL                                                                                                         
   END AS copertura_needareaString,                                                                                          
   0 AS Nota, --TODO: VERIFICARE REGOLA PER LA NOTA                                                                          
   0 somma_controvalAttuale,                                                                                                 
   0 somma_controvalModello,                                                                                                 
   0.00 AS somma_percentualeAttuale,                                                                                         
   0.00 AS somma_percentualeModello,                                       
   RISCHIOTOTALE.VAR_PERC_PTF var_tot,                                                                                       
    null var_totString,                                                                                               
    RISCHIOTOTALE_PIR.VAR_PERC_PTF var_tot_pir,                                                                       
    CASE                                                                                                              
     --V SOLO CC -> VAR = 0                                                                                   
     WHEN RISCHIOTOTALE_PIR.COPERTURA IS NULL THEN 'n.c.'  
     WHEN RISCHIOTOTALE_PIR.COPERTURA = 0 THEN 'n.c.'                                            
     ELSE NULL                                                                                                 
    END AS var_tot_pirString,           
   ISNULL(RISCHIOTOTALE.COPERTURA,0) AS copertura_tot,                                                                       
   CASE                                                                                                                      
    WHEN RISCHIOTOTALE.COPERTURA IS NULL THEN '0,00'                                                                  
    WHEN RISCHIOTOTALE.COPERTURA = 0 THEN '0,00'                                                                      
    ELSE NULL                                                                                                         
   END AS copertura_totString,                                                                                               
   --V                                                                                                                       
   ISNULL(RISCHIOTOTALE_PIR.COPERTURA,0) AS copertura_tot_pir,                                                               
   CASE                                                                                                                      
    WHEN RISCHIOTOTALE_PIR.COPERTURA IS NULL THEN 'n.c.'                                                              
    WHEN RISCHIOTOTALE_PIR.COPERTURA = 0 THEN 'n.c.'                                                                  
   END AS copertura_tot_pirString,                                                                                           
   --                                                                                                                        
   --V                                                                                                                       
   RISCHIORISFIN.VAR_PERC_PTF AS VAR_RISFIN,                                                                                 
   CASE                                                                                                                      
    WHEN RISCHIORISFIN.COPERTURA IS NULL THEN 'n.c.'                                                                  
    WHEN RISCHIORISFIN.COPERTURA = 0 THEN 'n.c.'                                                                      
    ELSE NULL                                                                                                         
   END AS VAR_RISFINSTRING,                                                                                                  
   ISNULL(RISCHIORISFIN.COPERTURA,0) AS copertura_risfin,                                                                    
   CASE                                                                                                                      
    WHEN RISCHIORISFIN.COPERTURA IS NULL THEN 'n.c.'                                                                  
    WHEN RISCHIORISFIN.COPERTURA = 0 THEN 'n.c.'                                                                      
    ELSE NULL                                                                                                         
   END AS copertura_risfinString,                                                                                            
   AREA_BISOGNO.ORDINAMENTO AS ordinamento                                                                                   
  FROM                                                                                                                              
   c6mart.AREA_BISOGNO                                                                                              
  LEFT JOIN                                                                                                                         
   #PIRAMIDE_VERT ATTUALE                                                                                                    
   ON                                                                                                                        
    ATTUALE.ID_AREA = AREA_BISOGNO.ID_AREA                                                                            
  LEFT JOIN                                                                                                                         
   c6mart.RISCHIO_AGGREGATO RISCHIOAREA                                                                             
   ON                                                                                                                        
    RISCHIOAREA.RETE = ATTUALE.RETE                                                                                   
    AND RISCHIOAREA.COD_FISCALE = ATTUALE.COD_FISCALE                                                                 
     AND                                                                                                       
                   RISCHIOAREA.COD_AGGREG = (                                                                                                     
                   CASE WHEN ATTUALE.ID_AREA IN ('EXT','INV','PRE','RIS','LIQ')                                                                   
     THEN  'RISFIN|PIRAMIDE|' + ATTUALE.ID_AREA                                                                
       WHEN ATTUALE.ID_AREA = 'NA'                                                                                    
     THEN 'RISFIN|NA'                                                                                          
                   WHEN ATTUALE.ID_AREA = 'CC'                                                                                                    
     THEN 'COMPLESSIVO|BF|CC'                                                                                  
       WHEN ATTUALE.ID_AREA = 'Self'                                                                                  
      THEN 'COMPLESSIVO|BF|SELF'                                                                        
                   END                         
                   )                                                                                                                              
  LEFT JOIN                                                                                                                         
   c6mart.RISCHIO_AGGREGATO RISCHIOTOTALE                                                                           
   ON                                                                                                                        
    RISCHIOTOTALE.RETE = ATTUALE.RETE                                                                                 
    AND RISCHIOTOTALE.COD_FISCALE = ATTUALE.COD_FISCALE                                                               
    AND RISCHIOTOTALE.COD_AGGREG = 'COMPLESSIVO|BF'                                                                   
  --V                                                                                                                               
  LEFT JOIN                                                                                                                         
   c6mart.RISCHIO_AGGREGATO RISCHIOTOTALE_PIR                                                                       
   ON                                                                                                                        
    RISCHIOTOTALE_PIR.RETE = ATTUALE.RETE                                                                             
    AND RISCHIOTOTALE_PIR.COD_FISCALE = ATTUALE.COD_FISCALE                                                           
    AND RISCHIOTOTALE_PIR.COD_AGGREG = 'RISFIN|PIRAMIDE'                                                              
  LEFT JOIN                                                                                                                         
   c6mart.RISCHIO_AGGREGATO RISCHIORISFIN                                                                           
   ON                                                                                                                        
    RISCHIORISFIN.RETE = ATTUALE.RETE                                                                                 
    AND RISCHIORISFIN.COD_FISCALE = ATTUALE.COD_FISCALE                                                               
    AND RISCHIORISFIN.COD_AGGREG = 'RISFIN|PIRAMIDE'       --Per Aladdin è stato aggiunto il tag |PIRAMIDE                                                                    
  --                                                                                                                                
  /*WHERE                                                                                                                           
   AREA_BISOGNO.ORDINAMENTO < 6*/                                                                                            
  WHERE AREA_BISOGNO.ID_AREA <> 'self'                                                                                                                 
------------------------------------------------------------------                                                                           
SELECT rete, cod_fiscale,sum(ATTUALE.CONTROVALORE) TotControvalore                                                                           
into #temp                                  
FROM #PIRAMIDE_VERT ATTUALE                                                                                                                       
WHERE ID_AREA not in ('Na', 'Cc','Self')                                                                                                          
group by rete,cod_fiscale                                                                                                                         
update s157                                                                                                                                       
set s157.PercentualeAttuale =CASE                                                                                                                 
  WHEN vert.TotControvalore = 0 THEN 0                                                                                              
  ELSE (100 * s157.PercentualeAttuale / ISNULL(vert.TotControvalore,1))                                                             
  END,                                                                                                                              
s157.ControvaloreModello=ROUND(ISNULL(s157.ControvaloreModello * vert.TotControvalore / 100 , 0),2) ,                                             
s157.DifferenzaEuro = ROUND(ISNULL(s157.DifferenzaEuro,0),2) - ROUND(ISNULL(s157.Totale_Percentuale * vert.TotControvalore / 100 , 0),2),         
s157.DifferenzaPercentuale = CASE                                                                                                                 
   WHEN vert.TotControvalore = 0 THEN - s157.Totale_Percentuale                                                              
    ELSE ISNULL( (100 * ISNULL(s157.ControvaloreAttuale,0) / vert.TotControvalore  - s157.Totale_Percentuale) , 0)    
   END ,                                                                                                                     
s157.somma_controvalAttuale =vert.TotControvalore,                                                                                                
s157.somma_controvalModello=vert.TotControvalore                                                                                                  
from c6mart.TB_S133_S157DatiPiramide s157                                                                                                
inner join #temp vert                                                                                                                             
on vert.rete = s157.rete and vert.cod_fiscale = s157.codicefiscale                                                                                  
select rete,cod_fiscale,'TOT' as Tipo,count(*) over ( partition by rete,cod_fiscale) TOT  
 into #TempContatori  
 FROM c6mart.PATRIMONIO_BF  
union  
select rete,cod_fiscale,'TOTCCSELF',count(*) over ( partition by rete,cod_fiscale) TOTCCSELF  
 FROM c6mart.PATRIMONIO_BF  
 where TIPO_PRODOTTO = 'CC' OR  ISIN in ('EURO00000009','EURO10000007')  
union  
select rete,cod_fiscale,'TOTSELF',count(*) over ( partition by rete,cod_fiscale) TOTSELF  
 FROM c6mart.PATRIMONIO_BF  
 where ISIN  in ('EURO00000009','EURO10000007')  
union  
select rete,cod_fiscale,'TOTSELFLIQ',count(*) over ( partition by rete,cod_fiscale) TOTSELFLIQ  
 FROM c6mart.PATRIMONIO_BF  
 where ISIN in ('EURO00000009','EURO10000007') AND ID_AREA = 'LIQ'  
union  
select rete,cod_fiscale,'TOTLIQ',count(*) over ( partition by rete,cod_fiscale) TOTLIQ  
 FROM c6mart.PATRIMONIO_BF  
 where ID_AREA = 'LIQ'  
 select   
 totale1.rete,  
 totale1.cod_fiscale,  
 ISNULL(totale1.TOT,0) as TOT,  
 ISNULL(totale2.TOT,0) as TOTCCSELF,  
 ISNULL(totale3.TOT,0) as TOTSELF,   
 ISNULL(totale4.TOT,0) as TOTSELFLIQ,  
 ISNULL(totale5.TOT,0) as TOTLIQ   
 into #Contatori  
 from   
 (select rete,cod_fiscale,TOT from #TempContatori  
 where tipo = 'TOT') as totale1  
 left join   
 (select rete,cod_fiscale,TOT from #TempContatori  
 where tipo = 'TOTCCSELF') as totale2  
 on  totale1.rete=totale2.rete  
 and totale1.cod_fiscale=totale2.cod_fiscale  
 left join   
 (select rete,cod_fiscale,TOT from #TempContatori  
 where tipo = 'TOTSELF') as totale3  
 on  totale1.rete=totale3.rete  
 and totale1.cod_fiscale=totale3.cod_fiscale  
 left join   
 (select rete,cod_fiscale,TOT from #TempContatori  
 where tipo = 'TOTSELFLIQ') as totale4  
 on  totale1.rete=totale4.rete  
 and totale1.cod_fiscale=totale4.cod_fiscale  
  left join   
 (select rete,cod_fiscale,TOT from #TempContatori  
 where tipo = 'TOTLIQ') as totale5  
 on  totale1.rete=totale5.rete  
 and totale1.cod_fiscale=totale5.cod_fiscale  
update s157                    
set    
var_needareaString= CASE  
     WHEN TOTSELFLIQ = TOTLIQ and needarea = 'LIQ' THEN 'n.c.'     
     ELSE var_needareaString    
     END,  
var_tot =     CASE  
     WHEN TOTCCSELF = TOT THEN 0.00  
     ELSE var_tot  
     END ,   
var_totString=CASE   
     WHEN (TOTCCSELF <> TOT) AND(copertura_tot IS NULL OR copertura_tot = 0) THEN 'n.c.'  
     WHEN (TOTSELF = TOT) THEN 'n.c.'   
     ELSE NULL   
    END    ,    
var_tot_pir =CASE   
     WHEN TOTCCSELF = TOT THEN 0  
     ELSE var_tot_pir  
END ,  
var_tot_pirString=CASE  
     WHEN var_tot_pirString <> 'n.c.' THEN  
     CASE  
         WHEN TOTCCSELF = TOT THEN NULL  
         WHEN TOTSELF = TOT THEN 'n.c.'  
      ELSE var_tot_pirString  
        END  
     ELSE var_tot_pirString  
    END ,    
VAR_RISFINSTRING=CASE   
     WHEN VAR_RISFINSTRING <> 'n.c.' THEN  
     CASE  
      WHEN TOTCCSELF = TOT THEN NULL  
      ELSE VAR_RISFINSTRING  
     END  
     ELSE VAR_RISFINSTRING  
     END                                                                                                                           
from c6mart.TB_S133_S157DatiPiramide s157                                                                                                
inner join ( select * from #Contatori )  contatori                                                                                                  
on contatori.rete = s157.rete and contatori.cod_fiscale = s157.codicefiscale                                                                  
--and codicefiscale='00247580970'                                                                                                      
 Drop TABLE #temp                                                                                                                          
 DROP TABLE #PIRAMIDE_VERT                                                                                                                 
 drop table #Contatori          
    drop table #TempContatori                                                                                                          
END