All Downloads are FREE. Search and download functionalities are using the official Maven repository.

expsigladb.Procedure.prc_load_table_stampa_bilancio.prc Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
CREATE OR REPLACE PROCEDURE PRC_LOAD_TABLE_STAMPA_BILANCIO(P_ESERCIZIO IN NUMBER,
                                                           P_AGG_PREVISIONE_AC IN char,
                                                           P_AGG_RESIDUI_AC IN char,
                                                           P_AGG_PREVISIONE_AP IN char,
                                                           P_AGG_RESIDUI_AP IN char,
                                                           P_AGG_CASSA_AC IN char,
                                                           P_PERC_CASSA IN NUMBER,
                                                           P_UTCR IN VARCHAR2) IS
  parEnte PARAMETRI_ENTE%Rowtype;
BEGIN
  IF P_ESERCIZIO<2016 THEN
     RETURN;
  END IF;
  
  parEnte := CNRUTL001.getRecParametriEnteAttivo;

  IF Nvl(P_AGG_PREVISIONE_AC,'N')='Y' THEN
     UPDATE PDG_DATI_STAMPA_BILANCIO_TEMP
     SET IM_PREVISIONE_AC = 0,
         UTUV = P_UTCR,
         DUVA = SYSDATE,
         PG_VER_REC = PG_VER_REC + 1
     WHERE ESERCIZIO = P_ESERCIZIO;

     For rec in (SELECT a.CD_CENTRO_RESPONSABILITA, 'S' TI_GESTIONE, c.CD_LIVELLO6, d.CD_PROGRAMMA, d.CD_MISSIONE,
                        SUM ( NVL(a.im_spese_gest_decentrata_int, 0) + NVL(a.im_spese_gest_decentrata_est, 0) +
                                NVL(a.im_spese_gest_accentrata_int, 0) + NVL(a.im_spese_gest_accentrata_est, 0)) IM_PREVISIONE_AC
                  FROM pdg_modulo_spese_gest a,
                       elemento_voce b,
                       v_linea_attivita_valida d,
                       v_classificazione_voci_all c
                 WHERE P_ESERCIZIO = 2016
                 AND   a.esercizio = P_ESERCIZIO
                 AND   a.esercizio = b.esercizio
                 AND   a.ti_appartenenza = b.ti_appartenenza
                 AND   a.ti_gestione = b.ti_gestione
                 AND   a.cd_elemento_voce = b.cd_elemento_voce
                 AND   a.esercizio = d.esercizio
                 AND   a.cd_cdr_assegnatario = d.cd_centro_responsabilita
                 AND   a.cd_linea_attivita = d.cd_linea_attivita
                 AND   b.id_classificazione = c.id_classificazione
                 AND   a.cd_cdr_assegnatario_clgs is null
                 GROUP BY a.CD_CENTRO_RESPONSABILITA, c.CD_LIVELLO6, d.CD_PROGRAMMA, d.CD_MISSIONE
                 UNION ALL
                 SELECT a.CD_CENTRO_RESPONSABILITA,'S', c.CD_LIVELLO6, areaprog.CD_DIPARTIMENTO, a.CD_MISSIONE,
                        SUM ( NVL(a.im_spese_gest_decentrata_int, 0) + NVL(a.im_spese_gest_decentrata_est, 0) +
                              NVL(a.im_spese_gest_accentrata_int, 0) + NVL(a.im_spese_gest_accentrata_est, 0)) IM_PREVISIONE_AC
                  FROM pdg_modulo_spese a,
                       v_classificazione_voci_all c,
                       progetto_prev progetto,
                       progetto_prev areaprog
                 WHERE P_ESERCIZIO > 2016
                 AND   a.esercizio = P_ESERCIZIO
                 AND   a.id_classificazione = c.id_classificazione
                 AND   a.esercizio = progetto.esercizio
                 AND   a.pg_progetto = progetto.pg_progetto
                 AND   progetto.esercizio_progetto_padre = areaprog.esercizio
                 AND   progetto.pg_progetto_padre = areaprog.pg_progetto
                 GROUP BY a.CD_CENTRO_RESPONSABILITA, c.CD_LIVELLO6, areaprog.CD_DIPARTIMENTO, a.CD_MISSIONE
                 UNION ALL
                 SELECT a.CD_CENTRO_RESPONSABILITA, 'E', c.CD_LIVELLO6, areaprog.CD_DIPARTIMENTO, null, 
                        SUM ( NVL (a.im_entrata_app, NVL (a.im_entrata, 0))) IM_PREVISIONE_AC
                  FROM pdg_modulo_entrate a,
                       v_classificazione_voci_all c,
                       progetto_prev progetto,
                       progetto_prev areaprog
                 WHERE a.esercizio = P_ESERCIZIO
                 AND   a.id_classificazione = c.id_classificazione
                 AND   a.esercizio = progetto.esercizio
                 AND   a.pg_progetto = progetto.pg_progetto
                 AND   progetto.esercizio_progetto_padre = areaprog.esercizio
                 AND   progetto.pg_progetto_padre = areaprog.pg_progetto
                 GROUP BY a.CD_CENTRO_RESPONSABILITA, c.CD_LIVELLO6, areaprog.CD_DIPARTIMENTO) Loop
           
        Update PDG_DATI_STAMPA_BILANCIO_TEMP
        set IM_PREVISIONE_AC = rec.IM_PREVISIONE_AC,
            UTUV = P_UTCR,
            DUVA = SYSDATE,
            PG_VER_REC = PG_VER_REC + 1
        where ESERCIZIO = P_ESERCIZIO
        and   CD_CENTRO_RESPONSABILITA = rec.CD_CENTRO_RESPONSABILITA
        and   TI_GESTIONE = rec.TI_GESTIONE
        and   CD_ELEMENTO_VOCE = rec.CD_LIVELLO6
        and   ((rec.CD_PROGRAMMA IS NULL AND CD_PROGRAMMA IS NULL) OR CD_PROGRAMMA = rec.CD_PROGRAMMA)
        and   ((rec.CD_MISSIONE IS NULL AND CD_MISSIONE IS NULL) OR CD_MISSIONE = rec.CD_MISSIONE);

        If sql%rowcount=0 Then
           INSERT INTO PDG_DATI_STAMPA_BILANCIO_TEMP
             (ESERCIZIO, CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_PROGRAMMA, CD_MISSIONE,
              IM_RESIDUI_AC, IM_PREVISIONE_AC, IM_CASSA_AC, IM_RESIDUI_AP, UTCR, DACR, UTUV, DUVA, PG_VER_REC)
           VALUES
             (P_ESERCIZIO, rec.CD_CENTRO_RESPONSABILITA, rec.TI_GESTIONE, rec.CD_LIVELLO6, 
              rec.cd_programma, rec.CD_MISSIONE, 0, rec.IM_PREVISIONE_AC, 0, 0, P_UTCR, SYSDATE, P_UTCR, SYSDATE, 1);
        End If;
     End Loop;                          
  END IF;
  
  IF P_ESERCIZIO>2016 THEN
    IF Nvl(P_AGG_RESIDUI_AC,'N')='Y' THEN
       UPDATE PDG_DATI_STAMPA_BILANCIO
       SET IM_RESIDUI_AC = 0,
           UTUV = P_UTCR,
           DUVA = SYSDATE,
           PG_VER_REC = PG_VER_REC + 1
       WHERE ESERCIZIO = P_ESERCIZIO;

       UPDATE PDG_DATI_STAMPA_BILANCIO_TEMP
       SET IM_RESIDUI_AC = 0,
           UTUV = P_UTCR,
           DUVA = SYSDATE,
           PG_VER_REC = PG_VER_REC + 1
       WHERE ESERCIZIO = P_ESERCIZIO;

       --CARICO I DATI RESIDUI ANNO CORRENTE
       For rec in (select CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, 
                          CD_PROGRAMMA, CD_MISSIONE, NVL(SUM(IM_RESIDUO_AC), 0) IM_RESIDUO_AC,
                          NVL(SUM(IM_RESIDUO_AC_SOLO_IMP), 0) IM_RESIDUO_AC_SOLO_IMP
                    FROM (select A.CD_CENTRO_RESPONSABILITA, A.TI_GESTIONE, 
                                 NVL((SELECT CD_ELEMENTO_VOCE_NEW
                                      FROM ASS_EVOLD_EVNEW
                                      WHERE ESERCIZIO_OLD = A.ESERCIZIO
                                      AND   TI_APPARTENENZA_OLD = A.TI_APPARTENENZA
                                      AND   TI_GESTIONE_OLD = A.TI_GESTIONE
                                      AND   CD_ELEMENTO_VOCE_OLD = A.CD_ELEMENTO_VOCE), A.CD_ELEMENTO_VOCE) CD_ELEMENTO_VOCE,
                                 linea.cd_programma, linea.cd_missione, 
                                 nvl(case when a.esercizio = a.esercizio_res
                                          then NVL (im_stanz_iniziale_a1, 0) + NVL (variazioni_piu, 0) - NVL (variazioni_meno, 0) 
                                               - NVL (im_mandati_reversali_pro, 0)
                                          else case when e.descrizione='CNR'
                                                    then NVL (im_stanz_res_improprio, 0)
                                                         + NVL (var_piu_stanz_res_imp, 0) - NVL (var_meno_stanz_res_imp, 0 )
                                                         + NVL (im_obbl_res_pro, 0)
                                                         - NVL (im_mandati_reversali_pro, 0) - NVL (im_mandati_reversali_imp, 0)
                                                    else NVL (im_obbl_res_pro, 0)
                                                         - NVL (im_mandati_reversali_pro, 0) - NVL (im_mandati_reversali_imp, 0)
                                                    end
                                          end, 0) IM_RESIDUO_AC,
                                 nvl(case when a.esercizio = a.esercizio_res
                                          then NVL (im_obbl_acc_comp, 0) - NVL (im_mandati_reversali_pro, 0)
                                          else NVL (im_obbl_res_pro, 0) + NVL (im_obbl_res_imp, 0) 
                                               - NVL (im_mandati_reversali_pro, 0) - NVL (im_mandati_reversali_imp, 0)
                                          end, 0) IM_RESIDUO_AC_SOLO_IMP
                          from voce_f_saldi_cdr_linea a,
                               v_linea_attivita_valida linea,
                               parametri_ente e
                          where a.esercizio = P_ESERCIZIO-1
                          and   a.esercizio = linea.esercizio (+)
                          and   a.cd_centro_responsabilita = linea.cd_centro_responsabilita (+)
                          and   a.cd_linea_attivita = linea.cd_linea_attivita (+)
                          and   e.attivo = 'Y')
                   group by CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_PROGRAMMA, CD_MISSIONE) loop
        Declare
          im_residuo saldi_stanziamenti.im_stanz_iniziale_a1%type;
        Begin
          if parEnte.descrizione='CNR' Then
            im_residuo := rec.IM_RESIDUO_AC;
          else
            im_residuo := rec.IM_RESIDUO_AC_SOLO_IMP;
          END IF;

          Update PDG_DATI_STAMPA_BILANCIO
          set IM_RESIDUI_AC = im_residuo
          where ESERCIZIO = P_ESERCIZIO
          and   CD_CENTRO_RESPONSABILITA = rec.CD_CENTRO_RESPONSABILITA
          and   TI_GESTIONE = rec.TI_GESTIONE
          and   CD_ELEMENTO_VOCE = rec.CD_ELEMENTO_VOCE
          and   ((rec.CD_PROGRAMMA IS NULL AND CD_PROGRAMMA IS NULL) OR CD_PROGRAMMA = rec.CD_PROGRAMMA)
          and   ((rec.CD_MISSIONE IS NULL AND CD_MISSIONE IS NULL) OR CD_MISSIONE = rec.CD_MISSIONE);

          If sql%rowcount=0 Then
            INSERT INTO PDG_DATI_STAMPA_BILANCIO
              (ESERCIZIO, CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_PROGRAMMA, CD_MISSIONE,
               IM_RESIDUI_AC, IM_CASSA_AC, UTCR, DACR, UTUV, DUVA, PG_VER_REC)
            VALUES
              (P_ESERCIZIO, rec.CD_CENTRO_RESPONSABILITA, rec.TI_GESTIONE, rec.CD_ELEMENTO_VOCE, 
               rec.cd_programma, rec.CD_MISSIONE, im_residuo, 0, P_UTCR, SYSDATE, P_UTCR, SYSDATE, 1);
          End If;

          Update PDG_DATI_STAMPA_BILANCIO_TEMP
          set IM_RESIDUI_AC = im_residuo
          where ESERCIZIO = P_ESERCIZIO
          and   CD_CENTRO_RESPONSABILITA = rec.CD_CENTRO_RESPONSABILITA
          and   TI_GESTIONE = rec.TI_GESTIONE
          and   CD_ELEMENTO_VOCE = rec.CD_ELEMENTO_VOCE
          and   ((rec.CD_PROGRAMMA IS NULL AND CD_PROGRAMMA IS NULL) OR CD_PROGRAMMA = rec.CD_PROGRAMMA)
          and   ((rec.CD_MISSIONE IS NULL AND CD_MISSIONE IS NULL) OR CD_MISSIONE = rec.CD_MISSIONE);

          If sql%rowcount=0 Then
            INSERT INTO PDG_DATI_STAMPA_BILANCIO_TEMP
              (ESERCIZIO, CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_PROGRAMMA, CD_MISSIONE,
               IM_RESIDUI_AC, IM_PREVISIONE_AC, IM_CASSA_AC, IM_RESIDUI_AP, UTCR, DACR, UTUV, DUVA, PG_VER_REC)
            VALUES
              (P_ESERCIZIO, rec.CD_CENTRO_RESPONSABILITA, rec.TI_GESTIONE, rec.CD_ELEMENTO_VOCE, 
               rec.cd_programma, rec.CD_MISSIONE, im_residuo, 0, 0, 0, P_UTCR, SYSDATE, P_UTCR, SYSDATE, 1);
          End If;
        End;
       End loop;
    End If;

    If Nvl(P_AGG_CASSA_AC,'N')='Y' Then
       update PDG_DATI_STAMPA_BILANCIO_TEMP
       set IM_CASSA_AC = 0
       where ESERCIZIO = P_ESERCIZIO;

       update PDG_DATI_STAMPA_BILANCIO_TEMP
       set IM_CASSA_AC = (NVL(IM_PREVISIONE_AC,0)+NVL(IM_RESIDUI_AC,0))*80/100
       where ESERCIZIO = P_ESERCIZIO;
    End If;

    IF Nvl(P_AGG_PREVISIONE_AP,'N')='Y' THEN
       UPDATE PDG_DATI_STAMPA_BILANCIO_TEMP
       SET IM_PREVISIONE_AP = 0,
           UTUV = P_UTCR,
           DUVA = SYSDATE,
           PG_VER_REC = PG_VER_REC + 1
       WHERE ESERCIZIO = P_ESERCIZIO;

       For rec in (SELECT a.CD_CENTRO_RESPONSABILITA, a.TI_GESTIONE, c.CD_LIVELLO6, d.CD_PROGRAMMA, d.CD_MISSIONE,
                          SUM ( NVL(a.assestato_iniziale, 0)) IM_PREVISIONE_AP
                   FROM v_assestato a,
                        elemento_voce b,
                        v_linea_attivita_valida d,
                        v_classificazione_voci_all c
                   WHERE P_ESERCIZIO >= 2016
                   AND   a.esercizio = P_ESERCIZIO-1
                   AND   a.esercizio_res = P_ESERCIZIO-1
                   AND   a.esercizio = b.esercizio
                   AND   a.ti_appartenenza = b.ti_appartenenza
                   AND   a.ti_gestione = b.ti_gestione
                   AND   a.cd_elemento_voce = b.cd_elemento_voce
                   AND   a.esercizio = d.esercizio
                   AND   a.cd_centro_responsabilita = d.cd_centro_responsabilita
                   AND   a.cd_linea_attivita = d.cd_linea_attivita
                   AND   b.id_classificazione = c.id_classificazione
                   GROUP BY a.CD_CENTRO_RESPONSABILITA, a.TI_GESTIONE, c.CD_LIVELLO6, d.CD_PROGRAMMA, d.CD_MISSIONE
                   HAVING SUM ( NVL(a.assestato_iniziale, 0))>0) Loop
           
          Update PDG_DATI_STAMPA_BILANCIO_TEMP
          set IM_PREVISIONE_AP = rec.IM_PREVISIONE_AP,
              UTUV = P_UTCR,
              DUVA = SYSDATE,
              PG_VER_REC = PG_VER_REC + 1
          where ESERCIZIO = P_ESERCIZIO
          and   CD_CENTRO_RESPONSABILITA = rec.CD_CENTRO_RESPONSABILITA
          and   TI_GESTIONE = rec.TI_GESTIONE
          and   CD_ELEMENTO_VOCE = rec.CD_LIVELLO6
          and   ((rec.CD_PROGRAMMA IS NULL AND CD_PROGRAMMA IS NULL) OR CD_PROGRAMMA = rec.CD_PROGRAMMA)
          and   ((rec.CD_MISSIONE IS NULL AND CD_MISSIONE IS NULL) OR CD_MISSIONE = rec.CD_MISSIONE);

          If sql%rowcount=0 Then
             INSERT INTO PDG_DATI_STAMPA_BILANCIO_TEMP
               (ESERCIZIO, CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_PROGRAMMA, CD_MISSIONE,
                IM_RESIDUI_AC, IM_PREVISIONE_AC, IM_CASSA_AC, IM_RESIDUI_AP, IM_PREVISIONE_AP, 
                UTCR, DACR, UTUV, DUVA, PG_VER_REC)
             VALUES
               (P_ESERCIZIO, rec.CD_CENTRO_RESPONSABILITA, rec.TI_GESTIONE, rec.CD_LIVELLO6, 
                rec.cd_programma, rec.CD_MISSIONE, 0, 0, 0, 0, rec.IM_PREVISIONE_AP,
                P_UTCR, SYSDATE, P_UTCR, SYSDATE, 1);
          End If;
       End Loop;                          
    END IF;

    IF Nvl(P_AGG_RESIDUI_AP,'N')='Y' THEN
       UPDATE PDG_DATI_STAMPA_BILANCIO_TEMP
       SET IM_RESIDUI_AP = 0,
           UTUV = P_UTCR,
           DUVA = SYSDATE,
           PG_VER_REC = PG_VER_REC + 1
       WHERE ESERCIZIO = P_ESERCIZIO;

       --CARICO I DATI RESIDUI INIZIALI ANNO PRECEDENTE
       For rec in (select CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, 
                          CD_PROGRAMMA, CD_MISSIONE, NVL(SUM(IM_RESIDUO_AP), 0) IM_RESIDUO_AP
                    FROM (select A.CD_CENTRO_RESPONSABILITA, A.TI_GESTIONE, 
                                 NVL((SELECT CD_ELEMENTO_VOCE_NEW
                                      FROM ASS_EVOLD_EVNEW
                                      WHERE ESERCIZIO_OLD = A.ESERCIZIO
                                      AND   TI_APPARTENENZA_OLD = A.TI_APPARTENENZA
                                      AND   TI_GESTIONE_OLD = A.TI_GESTIONE
                                      AND   CD_ELEMENTO_VOCE_OLD = A.CD_ELEMENTO_VOCE), A.CD_ELEMENTO_VOCE) CD_ELEMENTO_VOCE,
                                 linea.cd_programma, linea.cd_missione, 
                                 case when e.descrizione='CNR'
                                      then NVL (im_stanz_res_improprio, 0) + NVL (im_obbl_res_pro, 0)
                                      else NVL (im_obbl_res_pro, 0)
                                 end IM_RESIDUO_AP
                          from voce_f_saldi_cdr_linea a,
                               v_linea_attivita_valida linea,
                               parametri_ente e
                          where a.esercizio = P_ESERCIZIO-1
                          and   a.esercizio_res < a.esercizio
                          and   a.esercizio = linea.esercizio (+)
                          and   a.cd_centro_responsabilita = linea.cd_centro_responsabilita (+)
                          and   a.cd_linea_attivita = linea.cd_linea_attivita (+)
                          and   e.attivo = 'Y')
                   group by CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_PROGRAMMA, CD_MISSIONE) loop
      
          Update PDG_DATI_STAMPA_BILANCIO_TEMP
          set IM_RESIDUI_AP = rec.IM_RESIDUO_AP
          where ESERCIZIO = P_ESERCIZIO
          and   CD_CENTRO_RESPONSABILITA = rec.CD_CENTRO_RESPONSABILITA
          and   TI_GESTIONE = rec.TI_GESTIONE
          and   CD_ELEMENTO_VOCE = rec.CD_ELEMENTO_VOCE
          and   ((rec.CD_PROGRAMMA IS NULL AND CD_PROGRAMMA IS NULL) OR CD_PROGRAMMA = rec.CD_PROGRAMMA)
          and   ((rec.CD_MISSIONE IS NULL AND CD_MISSIONE IS NULL) OR CD_MISSIONE = rec.CD_MISSIONE);

          If sql%rowcount=0 Then
            INSERT INTO PDG_DATI_STAMPA_BILANCIO_TEMP
              (ESERCIZIO, CD_CENTRO_RESPONSABILITA, TI_GESTIONE, CD_ELEMENTO_VOCE, CD_PROGRAMMA, CD_MISSIONE, 
               IM_RESIDUI_AC, IM_PREVISIONE_AC, IM_CASSA_AC, IM_RESIDUI_AP, UTCR, DACR, UTUV, DUVA, PG_VER_REC)
            VALUES
              (P_ESERCIZIO, rec.CD_CENTRO_RESPONSABILITA, rec.TI_GESTIONE, rec.CD_ELEMENTO_VOCE, 
               rec.cd_programma, rec.CD_MISSIONE, 0, 0, 0, rec.IM_RESIDUO_AP, P_UTCR, SYSDATE, P_UTCR, SYSDATE, 1);
          End If;
       End loop;
    End If;
  End If;

  Delete from PDG_DATI_STAMPA_BILANCIO
  where ESERCIZIO = P_ESERCIZIO
  and IM_RESIDUI_AC = 0
  and IM_CASSA_AC = 0;

  Delete from PDG_DATI_STAMPA_BILANCIO_TEMP
  where ESERCIZIO = P_ESERCIZIO
  and IM_RESIDUI_AC = 0
  and IM_PREVISIONE_AC = 0
  and IM_CASSA_AC = 0
  and IM_RESIDUI_AP = 0
  and IM_PREVISIONE_AP = 0
  and IM_CASSA_AP = 0;
END;
/






© 2015 - 2024 Weber Informatics LLC | Privacy Policy