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

expsigladb.Package.CNRCTB250_BODY.sql Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
--------------------------------------------------------
--  DDL for Package Body CNRCTB250
--------------------------------------------------------

  CREATE OR REPLACE PACKAGE BODY "CNRCTB250" AS

-- =================================================================================================
-- Guscio per gestione liquidazione IVA di massa in batch
-- =================================================================================================
PROCEDURE job_liquidazione_massa
   (
    job NUMBER, pg_exec NUMBER, next_date DATE,
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    logid INTEGER,
    msgError VARCHAR2,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    inTipoImpegno VARCHAR2 Default Null
   ) IS
   aStringa VARCHAR2(50);
   aDescJob VARCHAR2(100);
   i BINARY_INTEGER;

BEGIN
   -- Lancio start esecuzione log

   aStringa:=msgError;

   IF inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA THEN
     aDescJob := 'Liquidazione iva centro per tutte le UO';
   Else
     aDescJob := 'Liquidazione provvisoria iva centro per tutte le UO';
   End If;

   IBMUTL210.logStartExecutionUpd(pg_exec, LOG_TIPO_LIQIVAMAS, job, 'Richiesta utente:' || id_utente,
                                  aDescJob||'. Start:' || TO_CHAR(sysdate,'YYYY/MM/DD HH-MI-SS'));

   BEGIN

     stampeIvaInterna(inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale, inDataInizio,
                      inDataFine, inTipoStampa, inTipoRegistro, inTipoReport, inRistampa,
                      repID, logid, aStringa, id_utente, inGruppoReport,inTipoImpegno);
     COMMIT;

     -- Messaggio di operazione completata ad utente

     IBMUTL205.LOGINF(aDescJob,
                      aDescJob||' '||TO_CHAR(sysdate,'DD/MM/YYYY HH:MI:SS'),
                      'Operazione completata con successo',id_utente);

   EXCEPTION

      when others then
           rollback;
      -- Messaggio di attenzione ad utente

      IBMUTL205.LOGWAR(aDescJob||' '|| errori_tab.COUNT,
                       aDescJob||' '|| TO_CHAR(sysdate,'DD/MM/YYYY HH:MI:SS') ||
                       ' (pg_exec=' || pg_exec || ')',DBMS_UTILITY.FORMAT_ERROR_STACK,id_utente);

      -- Scrittura degli eventuali altri errori

      IF errori_tab.COUNT > 0 THEN

         FOR i IN errori_tab.FIRST .. errori_tab.LAST

         LOOP

            IBMUTL200.LOGWAR(pg_exec,
                             aDescJob||' - Dettaglio errori',
                             'Errore : ' || errori_tab(i).tStringaErr,
                             'Codice UO = ' || errori_tab(i).tStringaUo || ' ' ||
                             'Tipo Liquidazione ' || errori_tab(i).tStringaTipo);

         END LOOP;

      END IF;

   END;

END job_liquidazione_massa;


-- =================================================================================================
-- Main stampa generica report IVA
-- =================================================================================================
PROCEDURE StampeIVA
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    logid INTEGER,
    msgError IN OUT VARCHAR2,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    inTipoImpegno VARCHAR2 Default Null
   ) IS
   aProcedure VARCHAR2(2000);
   aDescJob VARCHAR2(2000);
   aDtInizio VARCHAR2(50);
   aDtFine VARCHAR2(50);
   aStringa VARCHAR2(50);


BEGIN
   aStringa:=msgError;
   -------------------------------------------------------------------------------------------------
   -- La liquidazione IVA di massa attiva la gestione batch

   IF inTipoStampa IN (TI_ELAB_LIQUIDAZIONE_MASSA, TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN

      aDtInizio:='TO_DATE(' || '''' || TO_CHAR(inDataInizio,'DDMMYYYY') || '''' || ',''DDMMYYYY'')';
      aDtFine:='TO_DATE(' || '''' || TO_CHAR(inDataFine,'DDMMYYYY') || '''' || ',''DDMMYYYY'')';

      aProcedure:='CNRCTB250.job_liquidazione_massa(job, pg_exec, next_date, ' ||
                  '''' || inCdCdsOrigine || ''',' ||
                  '''' || inCdUoOrigine || ''',' ||
                  inEsercizio || ', ''' || inCdTipoSezionale || ''',' ||
                  aDtInizio || ',' || aDtFine || ',''' || inTipoStampa || ''',' ||
                  '''' || inTipoRegistro  || ''',' ||
                  '''' || inTipoReport  || ''',' ||
                  '''' || inRistampa  || ''',' ||
                  repID || ',' || logid || ',''' || aStringa || ''',' ||
                  '''' || id_utente  || ''',' ||
                  '''' || inGruppoReport  || ''',' ||
                  '''' || inTipoImpegno  || ''');';

     IF inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA THEN
       aDescJob := 'Liquidazione iva centro per tutte le UO';
     Else
       aDescJob := 'Liquidazione provvisoria iva centro per tutte le UO';
     End If;

     IBMUTL210.CREABATCHDINAMICO(aDescJob, aProcedure, id_utente);

     IBMUTL001.deferred_commit;

     IBMERR001.RAISE_ERR_GENERICO
         ('Operazione sottomessa per esecuzione. Al completamento l''utente riceverא un messaggio di notifica ' ||
          'dello stato dell''operazione');

   Else
      stampeIvaInterna(inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale, inDataInizio,
                       inDataFine, inTipoStampa, inTipoRegistro, inTipoReport, inRistampa,
                       repID, logid, msgError, id_utente, inGruppoReport, inTipoImpegno);
   END IF;

END StampeIVA;

-- =================================================================================================
-- Main stampa generica report IVA
-- =================================================================================================
PROCEDURE StampeIVAInterna
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    logid INTEGER,
    msgError IN OUT VARCHAR2,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    inTipoImpegno VARCHAR2 Default Null
   ) IS
   isLiquidIvaInterfaccia INTEGER;
   aTipoReportStato VARCHAR2(50);

   aEsercizioReale NUMBER(4);
   UOENTE unita_organizzativa%rowtype:= CNRCTB020.GETUOENTE(inEsercizio);

BEGIN

   -------------------------------------------------------------------------------------------------
   -- Valorizzazione del nome report per la selezione e scrittura in REPORT_STATO

   IF    inTipoStampa = TI_ELAB_REGISTRO_IVA THEN
         IF inTipoRegistro = TI_TIPO_REGISTRO_ACQ THEN
            aTipoReportStato:=CNRCTB255.TI_REGISTRO_ACQUISTI;
         ELSE
            aTipoReportStato:=CNRCTB255.TI_REGISTRO_VENDITE;
         END IF;
   ELSIF inTipoStampa = TI_ELAB_RIEPILOGATIVO_UO THEN
         IF inTipoRegistro = TI_TIPO_REGISTRO_ACQ THEN
            aTipoReportStato:=CNRCTB255.TI_RIEPILOGATIVO_ACQUISTI;
         ELSE
            aTipoReportStato:=CNRCTB255.TI_RIEPILOGATIVO_VENDITE;
         END IF;
   ELSIF inTipoStampa = TI_ELAB_RIEPILOGATIVO_CENTRO THEN
         aTipoReportStato:=CNRCTB255.TI_RIEPILOGATIVO_CENTRO;
   ELSIF inTipoStampa = TI_ELAB_IVA_DIFFERITA THEN
         aTipoReportStato:=CNRCTB255.TI_ESIGIBILITA_DIFFERITA;
   ELSIF (inTipoStampa = TI_ELAB_LIQUIDAZIONE OR
          inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF OR
          inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA OR
          inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN
         aTipoReportStato:=CNRCTB255.TI_LIQUIDAZIONE;
   END IF;

   -------------------------------------------------------------------------------------------------
   -- Valorizzazione dell'identificativo dell'esercizio per gestire la liquidazione nell'esercizio
   -- successivo rispetto a quanto indicato da periodo di riferimento. Solo le funzioni di liquidazione
   -- del mese di dicembre sono eseguite con esercizio successivo

   aEsercizioReale:=inEsercizio;
   IF aTipoReportStato=CNRCTB255.TI_LIQUIDAZIONE THEN
      IF inEsercizio != TO_NUMBER(TO_CHAR(inDataFine,'YYYY')) THEN
         aEsercizioReale:=TO_NUMBER(TO_CHAR(inDataFine,'YYYY'));
      END IF;
   END IF;

   -------------------------------------------------------------------------------------------------
   -- Verifica l'esecuzione della Liquidazione IVA per interfaccia
   -- 1) E' richiesta la stampa di una liquidazione
   -- 2) Il cds richiedente ט presente nella tabella LIQUID_IVA_INTERF_CDS
   -- L'esercizio di riferimento ט sempre quello reale, solo la liquidazione ט scritta in quello successivo

   isLiquidIvaInterfaccia:=0;

   IF (inTipoStampa = TI_ELAB_LIQUIDAZIONE OR
       (inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF AND
        inCdCdsOrigine != UOENTE.cd_unita_padre)) THEN

      SELECT COUNT(*) INTO isLiquidIvaInterfaccia
      FROM   DUAL
      WHERE  EXISTS
             (SELECT 1
              FROM   LIQUID_IVA_INTERF_CDS
              WHERE  cd_cds = inCdCdsOrigine AND
                     esercizio = aEsercizioReale);

   END IF;

   -------------------------------------------------------------------------------------------------
   -- Costruzione della stampa predefinita

   IF isLiquidIvaInterfaccia = 1 THEN

      CNRCTB240.elaboraLiquidInterf(inCdCdsOrigine,
                                    inCdUoOrigine,
                                    inEsercizio,
                                    inCdTipoSezionale,
                                    inDataInizio,
                                    inDataFine,
                                    inTipoStampa,
                                    inTipoRegistro,
                                    inTipoReport,
                                    inRistampa,
                                    repID,
                                    msgError,
                                    id_utente,
                                    inGruppoReport,
                                    aEsercizioReale,
                                    aTipoReportStato);
   ELSE

      creaReportPredefinito(inCdCdsOrigine,
                            inCdUoOrigine,
                            inEsercizio,
                            inCdTipoSezionale,
                            inDataInizio,
                            inDataFine,
                            inTipoStampa,
                            inTipoRegistro,
                            inTipoReport,
                            inRistampa,
                            repID,
                            msgError,
                            id_utente,
                            inGruppoReport,
                            aEsercizioReale,
                            aTipoReportStato,
                            inTipoImpegno);

   END IF;

END StampeIVAInterna;

-- =================================================================================================
-- Elaborazione dei diversi report relativi all'IVA
-- =================================================================================================
PROCEDURE creaReportPredefinito
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    msg_out IN OUT VARCHAR2,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aEsercizioReale NUMBER,
    aTipoReportStato VARCHAR2,
    inTipoImpegno VARCHAR2 Default Null
   ) IS
   isElaborazioneVuota CHAR(1);
   UOENTE unita_organizzativa%rowtype:= CNRCTB020.GETUOENTE(inEsercizio);
   aRecUnitaOrganizzativa UNITA_ORGANIZZATIVA%ROWTYPE;
   repID_loop INTEGER;
   gen_cv GenericCurTyp;
BEGIN

 IF   (inTipoStampa = TI_ELAB_REGISTRO_IVA and  inRistampa = 'N' and inCdUoOrigine=UOENTE.cd_unita_organizzativa ) then
 OPEN gen_cv FOR

                    SELECT A.cd_unita_organizzativa,
                           A.cd_unita_padre
                    FROM   UNITA_ORGANIZZATIVA A,SEZIONALE B
                    WHERE  A.livello = 2 AND
                           A.cd_tipo_unita != CNRCTB001.TIPO_ENTE AND
                           A.esercizio_inizio <= inEsercizio AND
                           A.esercizio_fine >= inEsercizio AND
                           B.cd_cds = A.cd_unita_padre AND
                           B.cd_unita_organizzativa = A.cd_unita_organizzativa AND
                           B.esercizio = aEsercizioReale AND
                           B.ti_fattura = 'T' AND
                           B.cd_tipo_sezionale = inCdTipoSezionale and
                           NOT EXISTS
                                (SELECT 1
                         FROM   TIPO_SEZIONALE C, REPORT_STATO D
                         WHERE
                                C.cd_tipo_sezionale = B.cd_tipo_sezionale AND
                                d.cd_tipo_sezionale = c.cd_tipo_sezionale and
                                D.cd_cds = B.cd_cds AND
                                D.cd_unita_organizzativa = B.cd_unita_organizzativa  AND
                                D.tipo_report = CNRCTB255.TI_REGISTRO_ACQUISTI AND
                                D.dt_inizio = inDataInizio AND
                                D.dt_fine = inDataFine AND
                                D.stato IN ('B', 'C'))
                    ORDER BY A.cd_unita_organizzativa;

               LOOP

                  FETCH gen_cv INTO
                        aRecUnitaOrganizzativa.cd_unita_organizzativa,
                        aRecUnitaOrganizzativa.cd_unita_padre;

                  EXIT WHEN gen_cv%NOTFOUND;


   -------------------------------------------------------------------------------------------------
   -- Valorizzazione parametri di base alla procedura. Funzione comune a tutti i report

   valorizzaParametri(aRecUnitaOrganizzativa.cd_unita_padre,
                      aRecUnitaOrganizzativa.cd_unita_organizzativa,
                      aEsercizioReale,
                      inCdTipoSezionale,
                      inDataInizio,
                      inDataFine,
                      inTipoStampa,
                      inTipoRegistro,
                      inGruppoReport);

   -------------------------------------------------------------------------------------------------
   -- Settaggio variabili

   gDataOdierna:=SYSDATE;
   isElaborazioneVuota:='N';

   -------------------------------------------------------------------------------------------------
   -- Attivazione controlli
   -- Le funzioni di controllo operano sempre con quanto passato dal client nel paramentro aCdTipoSezionale

     chkAmmettiElaborazione(aRecUnitaOrganizzativa.cd_unita_padre,
                            aRecUnitaOrganizzativa.cd_unita_organizzativa,
                            inEsercizio,
                            inCdTipoSezionale,
                            inDataInizio,
                            inDataFine,
                            inTipoStampa,
                            inTipoRegistro,
                            inTipoReport,
                            inGruppoReport,
                            aEsercizioReale,
                            aTipoReportStato);

   -- Controlli relativi alla gestione per report vuoto. La gestione si applica solo a stampe registri e
   -- riepilogativi definitivi


     isElaborazioneVuota:=chkRegistraReportVuoto(aRecUnitaOrganizzativa.cd_unita_padre,
                                                 aRecUnitaOrganizzativa.cd_unita_organizzativa,
                                                 inEsercizio,
                                                 inCdTipoSezionale,
                                                 inDataInizio,
                                                 inDataFine,
                                                 inTipoStampa,
                                                 inTipoRegistro,
                                                 inTipoReport,
                                                 inRistampa,
                                                 id_utente,
                                                 inGruppoReport,
                                                 aTipoReportStato);


    If (inTipoStampa = TI_ELAB_REGISTRO_IVA AND  inTipoRegistro = 'A' And inTipoReport = 'D' And inRistampa = 'N') THEN

         -- Assegnazione della data di esigibilita IVA per fatture passive non divenute esigibili nell'arco di 1 Anno
         -- in sede di stampa registri IVA
         CNRCTB260.insDataDiffFatturePassAuto(aRecUnitaOrganizzativa.cd_unita_padre,
                                aRecUnitaOrganizzativa.cd_unita_organizzativa,
                                inEsercizio,
                                inCdTipoSezionale,
                                inDataInizio,
                                inDataFine);
     End If;

   -------------------------------------------------------------------------------------------------
   -- Verifico se l'elaborazione ט vuota

  IF isElaborazioneVuota = 'N' THEN
        select IBMSEQ00_STAMPA.nextval into repID_loop from dual;
   -------------------------------------------------------------------------------------------------
   --  Ciclo per l'esecuzione delle query di valorizzazione dei campi per la stampa del report
   --  generico IVA. Differenziati per stampa

         stampaRegistri(aRecUnitaOrganizzativa.cd_unita_padre, aRecUnitaOrganizzativa.cd_unita_organizzativa, inEsercizio, inCdTipoSezionale,
                        inDataInizio, inDataFine, inTipoStampa, inTipoRegistro,
                        inTipoReport, inRistampa, repID_loop, msg_out, id_utente,
                        inGruppoReport, aTipoReportStato);
  end if;

end loop;
close gen_cv;

else

   -------------------------------------------------------------------------------------------------
   -- Valorizzazione parametri di base alla procedura. Funzione comune a tutti i report

   valorizzaParametri(inCdCdsOrigine,
                      inCdUoOrigine,
                      aEsercizioReale,
                      inCdTipoSezionale,
                      inDataInizio,
                      inDataFine,
                      inTipoStampa,
                      inTipoRegistro,
                      inGruppoReport);

   -------------------------------------------------------------------------------------------------
   -- Settaggio variabili

   gDataOdierna:=SYSDATE;
   isElaborazioneVuota:='N';

   -------------------------------------------------------------------------------------------------
   -- Attivazione controlli
   -- Le funzioni di controllo operano sempre con quanto passato dal client nel paramentro aCdTipoSezionale

   -- Controllo ammissibilitא della elaborazione. La ristampa non ט controllata in quanto giא filtrata dal client

   IF inRistampa = 'N' THEN

      chkAmmettiElaborazione(inCdCdsOrigine,
                             inCdUoOrigine,
                             inEsercizio,
                             inCdTipoSezionale,
                             inDataInizio,
                             inDataFine,
                             inTipoStampa,
                             inTipoRegistro,
                             inTipoReport,
                             inGruppoReport,
                             aEsercizioReale,
                             aTipoReportStato);

   END IF;

   -- Controlli relativi alla gestione per report vuoto. La gestione si applica solo a stampe registri e
   -- riepilogativi definitivi

  IF (inTipoStampa = TI_ELAB_REGISTRO_IVA OR
      inTipoStampa = TI_ELAB_RIEPILOGATIVO_UO Or
      (inTipoStampa = TI_ELAB_IVA_DIFFERITA And inCdCdsOrigine != UOENTE.cd_unita_padre)) THEN

     isElaborazioneVuota:=chkRegistraReportVuoto(inCdCdsOrigine,
                                                 inCdUoOrigine,
                                                 inEsercizio,
                                                 inCdTipoSezionale,
                                                 inDataInizio,
                                                 inDataFine,
                                                 inTipoStampa,
                                                 inTipoRegistro,
                                                 inTipoReport,
                                                 inRistampa,
                                                 id_utente,
                                                 inGruppoReport,
                                                 aTipoReportStato);

   END IF;
     If (inTipoStampa = TI_ELAB_REGISTRO_IVA AND  inTipoRegistro = 'A' And inTipoReport = 'D' And inRistampa = 'N') THEN

         -- Assegnazione della data di esigibilita IVA per fatture passive non divenute esigibili nell'arco di 1 Anno
         -- in sede di stampa registri IVA
         CNRCTB260.insDataDiffFatturePassAuto(inCdCdsOrigine,
                                inCdUoOrigine,
                                inEsercizio,
                                inCdTipoSezionale,
                                inDataInizio,
                                inDataFine);
     End If;
   -------------------------------------------------------------------------------------------------
   -- Verifico se l'elaborazione ט vuota

   IF isElaborazioneVuota = 'Y' THEN
      msg_out:='La funzione di stampa ' || aTipoReportStato || ' non ha trovato alcun elemento da elaborare.';
      IF inTipoReport = 'D' THEN
         msg_out:=msg_out || 'Creata entrata in REPORT_STATO per elaborazione definitiva';
      END IF;
      RETURN;
   END IF;

   -------------------------------------------------------------------------------------------------
   --  Ciclo per l'esecuzione delle query di valorizzazione dei campi per la stampa del report
   --  generico IVA. Differenziati per stampa

   IF    inTipoStampa = TI_ELAB_REGISTRO_IVA THEN
         stampaRegistri(inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale,
                        inDataInizio, inDataFine, inTipoStampa, inTipoRegistro,
                        inTipoReport, inRistampa, repID, msg_out, id_utente,
                        inGruppoReport, aTipoReportStato);
   ELSIF inTipoStampa = TI_ELAB_RIEPILOGATIVO_UO THEN
         stampaRiepilogativi(inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale,
                             inDataInizio, inDataFine, inTipoStampa, inTipoRegistro,
                             inTipoReport, inRistampa, repID, msg_out, id_utente,
                             inGruppoReport, aTipoReportStato);
   ELSIF inTipoStampa = TI_ELAB_RIEPILOGATIVO_CENTRO THEN
         stampaRiepilogativiCentro(inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale,
                                   inDataInizio, inDataFine, inTipoStampa, inTipoRegistro,
                                   inTipoReport, inRistampa, repID, msg_out, id_utente,
                                   inGruppoReport, aTipoReportStato);
   ELSIF inTipoStampa = TI_ELAB_IVA_DIFFERITA THEN
         stampaIvaDifferita (inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale,
                             inDataInizio, inDataFine, inTipoStampa, inTipoRegistro,
                             inTipoReport, inRistampa, repID, id_utente,
                             inGruppoReport, aTipoReportStato);
   ELSIF (inTipoStampa = TI_ELAB_LIQUIDAZIONE OR
          inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF) THEN
         stampaLiquidazione(inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale,
                            inDataInizio, inDataFine, inTipoStampa, inTipoRegistro,
                            inTipoReport, inRistampa, repID, id_utente,
                            inGruppoReport, aEsercizioReale, aTipoReportStato,inTipoImpegno);
   ELSIF (inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA OR
          inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN
         elaboraLiquidazioneMassa(inCdCdsOrigine, inCdUoOrigine, inEsercizio, inCdTipoSezionale,
                                  inDataInizio, inDataFine, inTipoStampa, inTipoRegistro,
                                  inTipoReport, inRistampa, repID, id_utente,
                                  inGruppoReport, aEsercizioReale, aTipoReportStato,inTipoImpegno);

   END IF;
end if;
END creaReportPredefinito;

-- =================================================================================================
-- Controllo ammissibilitא ad una elaborazione IVA
-- =================================================================================================
PROCEDURE chkAmmettiElaborazione
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inGruppoReport VARCHAR2,
    aEsercizioReale NUMBER,
    aTipoReportStato VARCHAR2
   ) IS
   flEsistePeriodo INTEGER;
   flEsistePeriodoPrecedente INTEGER;
   flEsistePeriodoPrima INTEGER;
   flEsistePeriodoDopo INTEGER;
   flUoHaSezionali CHAR(1);
   i INTEGER;
   j INTEGER;
   contaSezionali INTEGER;
   aMessaggio1 VARCHAR2(100);
   aMessaggio2 VARCHAR2(100);
   aMessaggioSezionale VARCHAR2(10);
   aTipoReportStatoAltro VARCHAR2(50);
   aCodiceSezionaleAltro VARCHAR2(10);
   aCdCdsAltro VARCHAR2(30);
   aCdUoAltro VARCHAR2(30);
   aGruppoReportAltro VARCHAR2(10);
   aStringa VARCHAR2(2000);
   aErrore CHAR(1);

   aRecUnitaOrganizzativa UNITA_ORGANIZZATIVA%ROWTYPE;
   gen_cv GenericCurTyp;
   UOENTE unita_organizzativa%rowtype:= CNRCTB020.GETUOENTE(inEsercizio);

BEGIN

   flEsistePeriodo:=0;
   flEsistePeriodoPrecedente:=0;
   flEsistePeriodoPrima:=0;
   flEsistePeriodoDopo:=0;
   IF inCdTipoSezionale = '*' THEN
      aMessaggioSezionale:='TUTTI';
   ELSE
      aMessaggioSezionale:=inCdTipoSezionale;
   END IF;
   aMessaggio1:='Elaborazione interrotta. ';
   IF inTipoStampa in (TI_ELAB_LIQUIDAZIONE_MASSA, TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN
      aMessaggio2:='La funzione di stampa ' || inTipoStampa || ' per il sezionale ' || aMessaggioSezionale;
   ELSE
      aMessaggio2:='La funzione di stampa ' || aTipoReportStato || ' per il sezionale ' || aMessaggioSezionale;
   END IF;
   -------------------------------------------------------------------------------------------------
   -- Ritorna l'esistenza di record nella tabella REPORT_STATO per un dato aCdTipoSezionale nelle
   -- seguenti condizioni:
   -- 1) Esiste entrata per periodo uguale a quello in input
   -- 2) Esiste entrata per periodo precedente a quello in input (mese precedente)
   -- 3) Esiste entrata per qualsiasi periodo
   -- Si esclude l'elaborazione della liquidazione di massa

   IF inTipoStampa NOT IN (TI_ELAB_LIQUIDAZIONE_MASSA, TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN

      CNRCTB255.getStatoReportStatoSiCdSez(inCdCdsOrigine,
                                           inCdUoOrigine,
                                           inCdTipoSezionale,
                                           inDataInizio,
                                           inDataFine,
                                           inGruppoReport,
                                           aTipoReportStato,
                                           flEsistePeriodo,
                                           flEsistePeriodoPrecedente,
                                           flEsistePeriodoPrima,
                                           flEsistePeriodoDopo);

   END IF;


   -------------------------------------------------------------------------------------------------
   -- Attivazione controlli generali

   -- Elaborazione provvisioria --------------------------------------------------------------------

   IF inTipoReport = 'P' THEN

      -- Non ט ammessa l'elaborazione provvisoria se esiste, nello stesso periodo, l'elaborazione definitiva

      IF (inTipoStampa = TI_ELAB_REGISTRO_IVA OR
          inTipoStampa = TI_ELAB_RIEPILOGATIVO_CENTRO OR
          inTipoStampa = TI_ELAB_IVA_DIFFERITA OR
          (inTipoStampa = TI_ELAB_RIEPILOGATIVO_UO AND
           inCdTipoSezionale = '*')) THEN

         IF flEsistePeriodo = 1 THEN
            IBMERR001.RAISE_ERR_GENERICO
               (aMessaggio1 || aMessaggio2 || ' risulta essere in stato definitivo per il periodo richiesto. '  ||
                'Eseguire la funzione di ristampa.');
         END IF;

      END IF;

      -- La liquidazione di massa non puע essere provvisoria

      IF inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA THEN
         IBMERR001.RAISE_ERR_GENERICO
               (aMessaggio1 || aMessaggio2 || ' non ט ammessa in forma provvisoria');
      END IF;

      RETURN;

   Else --Elaborazione definitiva
      -- La liquidazione di massa provvisoria non puע essere definitiva
      IF inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA_PRV THEN
         IBMERR001.RAISE_ERR_GENERICO
               (aMessaggio1 || aMessaggio2 || ' non ט ammessa in forma definitiva');
      END IF;
   END IF;

   -- Elaborazione definitiva ----------------------------------------------------------------------

   -- Se esiste una entrata per il periodo in input si solleva errore

   IF inTipoStampa NOT IN  (TI_ELAB_LIQUIDAZIONE_MASSA, TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN

      IF flEsistePeriodo = 1 THEN
         IBMERR001.RAISE_ERR_GENERICO
            (aMessaggio1 || aMessaggio2 || ' risulta essere in stato definitivo per il periodo richiesto');
      END IF;

      -- Non esiste una entrata per il periodo precedente. Se vi sono comunque delle entrate sulla tabella
      -- REPORT_STATO si solleva errore.
      -- In questo caso, allo stato attuale, non si distingue se le entrate trovate sono future.
     if(inTipoStampa!=TI_ELAB_RIEPILOGATIVO_CENTRO) then
        IF (flEsistePeriodoPrecedente = 0 AND
            (flEsistePeriodoPrima = 1 OR
             flEsistePeriodoDopo = 1)) THEN
           IBMERR001.RAISE_ERR_GENERICO
            (aMessaggio1 || aMessaggio2 || ' non risulta presente in stato definitivo per il periodo precedente ' ||
             'mentre esistono altri periodi valorizzati');
        END IF;
    end if;
   END IF;

   -------------------------------------------------------------------------------------------------
   -- Attivazione controlli specifici per elaborazioni definitive

   -- Nel caso in cui sia richiesta una stampa registri definitiva: --------------------------------
   -- - Se esiste liquidazione definitiva nel periodo corrente o in periodi successivi sollevo errore.
   -- - Se non esiste liquidazione definitiva per il periodo precedente ed esistono stampe di altri registri
   --   definitivi in periodi diversi dal corrente sollevo errore

   IF inTipoStampa = TI_ELAB_REGISTRO_IVA THEN
      aGruppoReportAltro:=NULL;

      aCodiceSezionaleAltro:='*';
      aTipoReportStatoAltro:=CNRCTB255.TI_LIQUIDAZIONE;
      IF inTipoRegistro = TI_TIPO_REGISTRO_ACQ THEN
         IF gsezio_acq_tab(1).stringa3 = 'C' THEN
            aGruppoReportAltro:=TI_LIQ_IVA_COMMERC;
         ELSE
            IF    gsezio_acq_tab(1).stringa4 = 'Y' And gsezio_acq_tab(1).stringa6 != 'S' THEN
                  aGruppoReportAltro:=TI_LIQ_IVA_ISTSMSI;
            ELSIF gsezio_acq_tab(1).stringa5 = 'Y' And  gsezio_acq_tab(1).stringa6 = 'B' Then
                  aGruppoReportAltro:=TI_LIQ_IVA_ISTINTR;
                  --RP
            ELSIF (gsezio_acq_tab(1).stringa7 = 'Y' Or gsezio_acq_tab(1).stringa5 = 'Y' Or gsezio_acq_tab(1).stringa4 = 'Y') And gsezio_acq_tab(1).stringa6 = 'S'  THEN
                  aGruppoReportAltro:=TI_LIQ_IVA_ISTSNR;
            ELSIF (gsezio_acq_tab(1).stringa8 = 'Y')  THEN
                  aGruppoReportAltro:=TI_LIQ_IVA_ISTSPLIT;
            END IF;
         END IF;
      ELSE
         aGruppoReportAltro:=TI_LIQ_IVA_COMMERC;
      END IF;
      IF aGruppoReportAltro IS NOT NULL THEN

         CNRCTB255.getStatoReportStatoSiCdSez(inCdCdsOrigine,
                                              inCdUoOrigine,
                                              aCodiceSezionaleAltro,
                                              inDataInizio,
                                              inDataFine,
                                              aGruppoReportAltro,
                                              aTipoReportStatoAltro,
                                              flEsistePeriodo,
                                              flEsistePeriodoPrecedente,
                                              flEsistePeriodoPrima,
                                              flEsistePeriodoDopo);

         IF (flEsistePeriodo = 1 OR
             flEsistePeriodoDopo = 1) THEN
            IBMERR001.RAISE_ERR_GENERICO
               (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto esistono liquidazioni definitive nel periodo ' ||
                'corrente o in quelli successivi');
         END IF;

         IF flEsistePeriodoPrecedente = 0 THEN
            Declare
              CONTA NUMBER := 0;
            Begin
              SELECT count(0) into conta
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionaleAltro AND
                     tipo_report = aTipoReportStato
                     and rownum < 2;

              If conta > 0 Then --Non ט la prima stampa.....quindi controllo
                CNRCTB255.getStatoReportStatoNoCdSez(inCdCdsOrigine,
                                                     inCdUoOrigine,
                                                     inDataInizio,
                                                     inDataFine,
                                                     inGruppoReport,
                                                     aTipoReportStato,
                                                     flEsistePeriodo,
                                                     flEsistePeriodoPrecedente,
                                                     flEsistePeriodoPrima,
                                                     flEsistePeriodoDopo);

                IF (flEsistePeriodoPrecedente = 1 OR
                    flEsistePeriodoPrima = 1 OR
                    flEsistePeriodoDopo = 1) THEN
                   IBMERR001.RAISE_ERR_GENERICO
                      (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto non esiste liquidazione definitiva per ' ||
                       'il periodo precedente ed esistono stampe registri definitivi in periodi diversi dal corrente.');
                END IF;
              End if;
            End;
         END IF;

      END IF;

   END IF;

   -- Per le liquidazioni non ente e quella di massa si verifica che non sia giא stata elaborata ---
   -- la liquidazione al centro

   IF (inTipoStampa IN (TI_ELAB_LIQUIDAZIONE_MASSA, TI_ELAB_LIQUIDAZIONE_MASSA_PRV) OR
       (inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF AND
        inCdCdsOrigine <> UOENTE.cd_unita_padre)) THEN

      aCdCdsAltro:=UOENTE.cd_unita_padre;
      aCdUoAltro:=UOENTE.cd_unita_organizzativa;

      CNRCTB255.getStatoReportStatoNoGruppo(aCdCdsAltro,
                                            aCdUoAltro,
                                            inCdTipoSezionale,
                                            inDataInizio,
                                            inDataFine,
                                            aTipoReportStato,
                                            flEsistePeriodo,
                                            flEsistePeriodoPrecedente,
                                            flEsistePeriodoPrima,
                                            flEsistePeriodoDopo);

      -- Se esiste una entrata per il periodo in input si solleva errore

      IF flEsistePeriodo = 1 THEN
         IBMERR001.RAISE_ERR_GENERICO
            (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto esiste la liquidazione centro in stato ' ||
             'definitivo per il periodo richiesto');
      END IF;

      -- Non esiste una entrata per il periodo precedente. Se vi sono comunque delle entrate sulla tabella
      -- REPORT_STATO si solleva errore.
      -- In questo caso, allo stato attuale, non si distingue se le entrate trovate sono future.

      IF (flEsistePeriodoPrecedente = 0 AND
          (flEsistePeriodoPrima = 1 OR
           flEsistePeriodoDopo = 1)) THEN
         IBMERR001.RAISE_ERR_GENERICO
            (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto la liquidazione centro, pur non risultando ' ||
             'presente in stato definitivo per il periodo precedente, ט definita  in altri periodi contabili');
      END IF;

   END IF;

   -- Nel caso in cui sia richiesta la stampa definitiva di un riepilogativo, dell'iva differita o di
   -- una liquidazione per un cd_cds diverso dall'ente, allora si deve controllare se tutti i registri
   -- per il mese corrente risultano stampati in modo definitivo
   -- Non si ammette l'elaborazione se non sono definiti sezionali per la U.O.

   IF (inTipoStampa = TI_ELAB_RIEPILOGATIVO_UO OR
       inTipoStampa = TI_ELAB_IVA_DIFFERITA OR
       (inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF AND
        inCdCdsOrigine <> UOENTE.cd_unita_padre)) THEN

      -- Ciclo su array sezionali di acquisto e vendita  -------------------------------------------

      FOR i IN 1 .. 2

      LOOP

         IF i = 1 THEN
            contaSezionali:=gsezio_acq_tab.COUNT;
            aTipoReportStatoAltro:=CNRCTB255.TI_REGISTRO_ACQUISTI;
         ELSE
            contaSezionali:=gsezio_ven_tab.COUNT;
            aTipoReportStatoAltro:=CNRCTB255.TI_REGISTRO_VENDITE;
         END IF;

         IF contaSezionali > 0 THEN
            Declare
               aSezionaliError varchar2(255) := null;
               contaError number := 0;
            Begin
               FOR j IN 1 .. contaSezionali

               LOOP

                  IF i = 1 THEN
                     aCodiceSezionaleAltro:=gsezio_acq_tab(j).stringa1;
                  ELSE
                     aCodiceSezionaleAltro:=gsezio_ven_tab(j).stringa1;
                  END IF;

                  CNRCTB255.getStatoReportStatoSiCdSez(inCdCdsOrigine,
                                                    inCdUoOrigine,
                                                    aCodiceSezionaleAltro,
                                                    inDataInizio,
                                                    inDataFine,
                                                    inGruppoReport,
                                                    aTipoReportStatoAltro,
                                                    flEsistePeriodo,
                                                    flEsistePeriodoPrecedente,
                                                    flEsistePeriodoPrima,
                                                    flEsistePeriodoDopo);

                  IF flEsistePeriodo = 0 THEN
                     contaError := contaError + 1;
                     If aSezionaliError is null Then
                        aSezionaliError := aCodiceSezionaleAltro;
                     Else
                        aSezionaliError := aSezionaliError||','||aCodiceSezionaleAltro;
                     End If;
                  END IF;

               END LOOP;

               If aSezionaliError is not null Then
                  IBMERR001.RAISE_ERR_GENERICO
                     (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto i seguenti sezionali ('||aSezionaliError||
                      ') non risultano in stato stampa registri definitiva');
               Elsif contaError > 0 Then
                  IBMERR001.RAISE_ERR_GENERICO
                     (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto tutti i sezionali '||
                     'non risultano in stato stampa registri definitiva');
               End If;
            End;
         ELSE

            flUoHaSezionali:=CNRCTB120.getUoHaSezionali(inCdCdsOrigine,
                                                        inCdUoOrigine,
                                                        aEsercizioReale);

            IF flUoHaSezionali = 'N' THEN

               IBMERR001.RAISE_ERR_GENERICO
                  (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto non ט stato definito alcun sezionale ' ||
                   'per la U.O. ' || inCdUoOrigine);

            END IF;

         END IF;

      END LOOP;

   END IF;

   -- Nel caso in cui sia richiesta la stampa definitiva di una liquidazione per l'ente si verifica che
   -- siano state fatte le liquidazioni definitive per tutte le uo presenti nel sistema

   IF (inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF AND
       inCdCdsOrigine = UOENTE.cd_unita_padre) THEN

      BEGIN

         aStringa:=NULL;
         aErrore:='N';

         OPEN gen_cv FOR

              SELECT *
              FROM   UNITA_ORGANIZZATIVA A
              WHERE  A.livello = 2 AND
                     A.cd_tipo_unita != 'ENTE' AND
                     A.esercizio_inizio <= aEsercizioReale AND
                     A.esercizio_fine >= aEsercizioReale AND
                     EXISTS
                        (SELECT 1
                         FROM   SEZIONALE B
                         WHERE  B.cd_cds = A.cd_unita_padre AND
                                B.cd_unita_organizzativa = A.cd_unita_organizzativa AND
                                B.esercizio = aEsercizioReale) AND
                     NOT EXISTS
                        (SELECT 1
                         FROM   LIQUIDAZIONE_IVA L
                         WHERE  L.cd_cds = A.cd_unita_padre AND
                                L.esercizio = inEsercizio AND
                                L.cd_unita_organizzativa = A.cd_unita_organizzativa AND
                                L.tipo_liquidazione = inGruppoReport AND
                                L.dt_inizio = inDataInizio AND
                                L.dt_fine = inDataFine AND
                                L.report_id = 0 AND
                                L.stato = 'D') AND
                     NOT EXISTS
                        (SELECT 1
                         FROM   LIQUID_IVA_INTERF_CDS C
                         WHERE  C.cd_cds = A.cd_unita_padre AND
                                C.esercizio = aEsercizioReale)
              ORDER BY A.cd_unita_organizzativa;

         LOOP

            FETCH gen_cv INTO
                  aRecUnitaOrganizzativa;

            EXIT WHEN gen_cv%NOTFOUND;

            aErrore:='Y';

            IF aStringa IS NULL THEN
               aStringa:=aRecUnitaOrganizzativa.cd_unita_organizzativa;
            ELSE
               IF LENGTH(aStringa) < 1980 THEN
                  aStringa:=aStringa || '/' || aRecUnitaOrganizzativa.cd_unita_organizzativa;
               END IF;
            END IF;

         END LOOP;

         CLOSE gen_cv;

         IF aErrore = 'Y' THEN
            IBMERR001.RAISE_ERR_GENERICO
               (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto non ט stata fatta la liquidazione ' ||
                'definita per le seguenti UO ' || aStringa);
         END IF;

      END;

   END IF;

   -- Nel caso in cui sia richiesta la liquidazione di massa per l'ente si verifica che tutti i registri
   -- iva siano presenti in stato definitivo

   IF inTipoStampa IN (TI_ELAB_LIQUIDAZIONE_MASSA, TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN

      BEGIN

         aStringa:=NULL;
         aErrore:='N';

         OPEN gen_cv FOR

              SELECT *
              FROM   UNITA_ORGANIZZATIVA A
              WHERE  A.livello = 2 AND
                     A.cd_tipo_unita != 'ENTE' AND
                     A.esercizio_inizio <= aEsercizioReale AND
                     A.esercizio_fine >= aEsercizioReale AND
                     NOT EXISTS
                        (SELECT 1
                         FROM   SEZIONALE B, TIPO_SEZIONALE C, REPORT_STATO D
                         WHERE  B.cd_cds = A.cd_unita_padre AND
                                B.cd_unita_organizzativa = A.cd_unita_organizzativa AND
                                B.esercizio = aEsercizioReale AND
                                B.ti_fattura = 'T' AND
                                C.cd_tipo_sezionale = B.cd_tipo_sezionale AND
                                (
                                     C.ti_istituz_commerc = 'C'
                                 OR
                                     (C.ti_istituz_commerc = 'I' AND
                                      C.fl_san_marino_senza_iva = 'Y' AND
                                      C.ti_bene_servizio = 'B')
                                 OR
                                     (C.ti_istituz_commerc = 'I' AND
                                      C.fl_intra_ue = 'Y' AND
                                      C.ti_bene_servizio = 'B')
                                 OR
                                     (C.ti_istituz_commerc = 'I' AND
                                     (C.fl_intra_ue = 'Y' Or c.fl_extra_ue ='Y' Or C.fl_san_marino_senza_iva = 'Y' ) And
                                      C.ti_bene_servizio = 'S')
                                 OR
                                     (C.ti_istituz_commerc = 'I' AND
                                      C.fl_split_payment = 'Y')
                                ) AND
                                D.cd_cds = B.cd_cds AND
                                D.cd_unita_organizzativa = B.cd_unita_organizzativa  AND
                                D.tipo_report = CNRCTB255.TI_REGISTRO_ACQUISTI AND
                                D.dt_inizio = inDataInizio AND
                                D.dt_fine = inDataFine AND
                                D.stato IN ('B', 'C')) AND
                     NOT EXISTS
                        (SELECT 1
                         FROM   LIQUID_IVA_INTERF_CDS C
                         WHERE  C.cd_cds = A.cd_unita_padre AND
                                C.esercizio = aEsercizioReale)
              ORDER BY A.cd_unita_organizzativa;

         LOOP

            FETCH gen_cv INTO
                  aRecUnitaOrganizzativa;

            EXIT WHEN gen_cv%NOTFOUND;

            aErrore:='Y';

            IF aStringa IS NULL THEN
               aStringa:=aRecUnitaOrganizzativa.cd_unita_organizzativa;
            ELSE
               IF LENGTH(aStringa) < 1980 THEN
                  aStringa:=aStringa || '/' || aRecUnitaOrganizzativa.cd_unita_organizzativa;
               END IF;
            END IF;

         END LOOP;

         CLOSE gen_cv;

         IF aErrore = 'Y' THEN
            IBMERR001.RAISE_ERR_GENERICO
               (aMessaggio1 || aMessaggio2 || ' non ט ammessa in quanto non ט stata fatta la stampa definitiva ' ||
                'dei registri per le seguenti UO ' || aStringa);
         END IF;

      END;

   END IF;

END chkAmmettiElaborazione;


-- =================================================================================================
-- Controlla i sezionali vuoti e, per essi, genera una entrata in report_stato
-- =================================================================================================
FUNCTION chkRegistraReportVuoto
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    idUtente VARCHAR2,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2
   ) RETURN CHAR IS
   i INTEGER;
   contaSezionali INTEGER;
   aCodiceSezionale VARCHAR2(10);
   isStatoSezionale INTEGER;
   isSezionaleVuoto CHAR(1);
   isSezionalePieno CHAR(1);
   aRecReportStato REPORT_STATO%ROWTYPE;

BEGIN

   isSezionaleVuoto:='N';
   isSezionalePieno:='N';

   BEGIN

      ----------------------------------------------------------------------------------------------
      -- Determino il numero di sezionali da elaborare

      IF inTipoRegistro = 'A' THEN
         contaSezionali:=gsezio_acq_tab.COUNT;
      ELSE
         contaSezionali:=gsezio_ven_tab.COUNT;
      END IF;

      IF contaSezionali > 0 THEN
         FOR j IN 1 .. contaSezionali

         LOOP

            IF inTipoRegistro = 'A' THEN
               aCodiceSezionale:=gsezio_acq_tab(j).stringa1;
               isStatoSezionale:=gsezio_acq_tab(j).intero;
            ELSE
               aCodiceSezionale:=gsezio_ven_tab(j).stringa1;
               isStatoSezionale:=gsezio_ven_tab(j).intero;
            END IF;

            -- Il report, per il sezionale in elaborazione, ט vuoto

            IF isStatoSezionale = 0 THEN
               isSezionaleVuoto:='Y';
            ELSE
               isSezionalePieno:='Y';
            END IF;

         END LOOP;

      END IF;

   END;

   IF (isSezionaleVuoto = 'Y' AND
       isSezionalePieno = 'N') THEN

       -- Inserimento dell'entrata in REPORT_STATO per registro vuoto solo se non ristampa

       IF (inTipoReport = 'D' AND
           inRistampa = 'N') THEN
          CNRCTB255.inserisciInReportStato(inCdCdsOrigine,
                                           inCdUoOrigine,
                                           inEsercizio,
                                           inCdTipoSezionale,
                                           inDataInizio,
                                           inDataFine,
                                           inTipoRegistro,
                                           inGruppoReport,
                                           aTipoReportStato,
                                           idUtente);
      END IF;

      RETURN 'Y';
   ELSE
      RETURN 'N';
   END IF;

END chkRegistraReportVuoto;

-- =================================================================================================
-- Stampa dei Registri IVA
-- =================================================================================================
procedure stampaRegistri
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    msg_out IN OUT VARCHAR2,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2
   ) IS
   aTitoloReport1 VARCHAR2(200);
   aTitoloReport2 VARCHAR2(200);
   aTitoloReport3 VARCHAR2(200);
   lnumeroSezionali INTEGER;
   lcodiceSezionale VARCHAR2(10);
   ldescrizioneSezionale VARCHAR2(100);
   lTipoCommercIstituz CHAR(1);
   lgruppoStm CHAR(1);
   lsottoGruppoStm CHAR(1);
   ldescrizioneGruppoStm CHAR(100);
   lrigaStampa VARCHAR2(1000);
   lSequenza INTEGER;
   aEsercizioRif INTEGER;

BEGIN

   lSequenza:=0;
    -------------------------------------------------------------------------------------------------
   -- Costruzione del titolo report

   -- Intestazione dell'unita organizzativa

   aTitoloReport1:='U.0. ' || inCdUoOrigine || ' ' || gparametri_tab(7).stringa1;

   -- Descrizione del registro

   aTitoloReport2:='REGISTRO IVA ';

   IF inTipoRegistro = 'A' THEN
      aTitoloReport2:=aTitoloReport2 || 'ACQUISTI ';
      lnumeroSezionali:=gsezio_acq_tab.COUNT;
      lcodiceSezionale:=gsezio_acq_tab(1).stringa1;
      ldescrizioneSezionale:=gsezio_acq_tab(1).stringa2;
   ELSE
      aTitoloReport2:=aTitoloReport2 || 'VENDITE ';
      lnumeroSezionali:=gsezio_ven_tab.COUNT;
      lcodiceSezionale:=gsezio_ven_tab(1).stringa1;
      ldescrizioneSezionale:=gsezio_ven_tab(1).stringa2;
   END IF;

   IF inTipoReport = 'P' THEN
      aTitoloReport2:=aTitoloReport2 || 'PROVVISORIO ';
   END IF;

   aTitoloReport2:=aTitoloReport2 || 'DAL ' ||
                   TO_CHAR(inDataInizio, 'DD/MM/YYYY') || ' AL ' ||
                   TO_CHAR(inDataFine, 'DD/MM/YYYY') || ' ';
   aTitoloReport3:='SEZIONALE ' || inCdTipoSezionale;
   IF inTipoRegistro = 'A' THEN
      aTitoloReport3:=aTitoloReport3 || ' ' || gparametri_tab(4).stringa1;
   ELSE
      aTitoloReport3:=aTitoloReport3 || ' ' || gparametri_tab(3).stringa1;
   END IF;

   aEsercizioRif:=TO_NUMBER(TO_CHAR(inDataFine,'YYYY'));

   -----------------------------------------------------------------------------------------------
   --  Ciclo per l'esecuzione delle query di valorizzazione dei campi per la stampa

   FOR lPasso IN 1 .. 9

   LOOP

      lSequenza:=lSequenza + 20;

      IF    lPasso = 1 THEN
            lrigaStampa:='Memorizzazione titolo report';
            lgruppoStm:='-';
            lsottoGruppoStm:='-';
            ldescrizioneGruppoStm:='TITOLO REPORT';
      ELSIF lPasso = 2 THEN
            lrigaStampa:='GRUPPO A - Memorizzazione copertina del riepilogo sezionali in stampa';
            lgruppoStm:='A';
            lsottoGruppoStm:='A';
            ldescrizioneGruppoStm:='TITOLO GRUPPO A';
      ELSIF lPasso = 3 THEN
            lrigaStampa:='GRUPPO B - Stampa del registro IVA e dei riepiloghi per aliquota';
            lgruppoStm:='B';
            lsottoGruppoStm:='D';
            ldescrizioneGruppoStm:='CORPO GRUPPO B';
      ELSIF lPasso = 4 THEN
            lrigaStampa:='GRUPPO C - Eventuale riepilogo generale per aliquota';
            lgruppoStm:='C';
            lsottoGruppoStm:='C';
            ldescrizioneGruppoStm:='CORPO GRUPPO C';
      ELSIF lPasso = 5 THEN
            lrigaStampa:='GRUPPO D - Riporto dati dichiarazione di intento su registro Vendite definitivo';
            lgruppoStm:='D';
            lsottoGruppoStm:=NULL;
            ldescrizioneGruppoStm:='CORPO GRUPPO D';
      ELSIF lPasso = 6 THEN
            lrigaStampa:='GRUPPO E - Riporto dati revoca dichiarazione di intento su registro Vendite definitivo';
            lgruppoStm:='E';
            lsottoGruppoStm:=NULL;
            ldescrizioneGruppoStm:='CORPO GRUPPO E';
      ELSIF lPasso = 7 THEN
            lrigaStampa:='GRUPPO F - Stampa Annotazioni libere';
            lgruppoStm:='F';
            lsottoGruppoStm:=NULL;
            ldescrizioneGruppoStm:='CORPO GRUPPO F';
      ELSIF lPasso = 8 THEN
            lrigaStampa:='GRUPPO G - Inserimento fatture in REPORT_DETTAGLIO';
            lgruppoStm:='G';
            lsottoGruppoStm:=NULL;
            ldescrizioneGruppoStm:='CORPO GRUPPO G';
      ELSIF lPasso = 9 THEN
            lrigaStampa:='GRUPPO H - Inserimento riga in REPORT_STATO';
            lgruppoStm:='H';
            lsottoGruppoStm:=NULL;
            ldescrizioneGruppoStm:='CORPO GRUPPO H';
      END IF;

      -------------------------------------------------------------------------------------------
      -- Memorizzazione del titolo report

      IF    lPasso = 1 THEN

            CNRCTB260.insTitColReportGenerico(repID,
                                              lSequenza,
                                              aTitoloReport1,
                                              aTitoloReport2,
                                              aTitoloReport3,
                                              gparametri_tab(8).stringa1,
                                              gparametri_tab(8).stringa2,
                                              aEsercizioRif,
                                              lgruppoStm,
                                              lsottoGruppoStm,
                                              ldescrizioneGruppoStm,
                                              inTipoReport,
                                              inTipoRegistro);

      -------------------------------------------------------------------------------------------
      -- Memorizzazione copertina del riepilogo sezionali in stampa

      ELSIF lPasso = 2 THEN

            IF lnumeroSezionali > 1  THEN

               -- Valorizzazione del titolo della copertina

               aTitoloReport1:='FRONTESPIZIO DEL REGISTRO ';

               IF inTipoRegistro = 'A' THEN
                  aTitoloReport1:=aTitoloReport1 || 'ACQUISTI ';
               ELSE
                  aTitoloReport1:=aTitoloReport1 || 'VENDITE ';
               END IF;

               aTitoloReport1:=aTitoloReport1 || 'DAL ' ||
                               TO_CHAR(inDataInizio, 'DD/MM/YYYY') || ' AL ' ||
                               TO_CHAR(inDataFine, 'DD/MM/YYYY');
               aTitoloReport2:=' RIASSUNTIVO DELLE FATTURE REGISTRATE DALLE UNITA'' SEZIONALI DI SEGUITO SPECIFICATE';
               aTitoloReport3:=NULL;

               CNRCTB260.insTitColReportGenerico(repID,
                                                 lSequenza,
                                                 aTitoloReport1,
                                                 aTitoloReport2,
                                                 aTitoloReport3,
                                                 gparametri_tab(8).stringa1,
                                                 gparametri_tab(8).stringa2,
                                                 aEsercizioRif,
                                                 lgruppoStm,
                                                 lsottoGruppoStm,
                                                 ldescrizioneGruppoStm,
                                                 inTipoReport,
                                                 inTipoRegistro);

               -- Valorizzazione del dettaglio della copertina del riepilogo sezionali

               BEGIN

                  ldescrizioneGruppoStm:='CORPO GRUPPO A';

                  FOR i IN 1 .. lnumeroSezionali

                  LOOP

                     IF inTipoRegistro = 'A' THEN
                        lcodiceSezionale:=gsezio_acq_tab(i).stringa1;
                        ldescrizioneSezionale:=gsezio_acq_tab(i).stringa2;
                        lTipoCommercIstituz:=gsezio_acq_tab(i).stringa3;
                     ELSE
                        lcodiceSezionale:=gsezio_ven_tab(i).stringa1;
                        ldescrizioneSezionale:=gsezio_ven_tab(i).stringa2;
                        lTipoCommercIstituz:=gsezio_ven_tab(i).stringa3;
                     END IF;

                     lSequenza:=lSequenza + 20;

                     CNRCTB260.insProspettiPerRegistri(repID,
                                                       lSequenza,
                                                       lPasso,
                                                       inCdCdsOrigine,
                                                       inCdUoOrigine,
                                                       inEsercizio,
                                                       lcodiceSezionale,
                                                       ldescrizioneSezionale,
                                                       inDataInizio,
                                                       inDataFine,
                                                       inTipoReport,
                                                       inTipoRegistro,
                                                       lgruppoStm,
                                                       lsottoGruppoStm,
                                                       ldescrizioneGruppoStm);

                  END LOOP;

               END;

            END IF;

      -------------------------------------------------------------------------------------------
      -- Stampa del registro IVA e dei riepiloghi correlati

      ELSIF lPasso = 3 THEN

            lSequenza:=lSequenza + 20;

            -- Selezione ed intestazione del registro

            BEGIN

               FOR i IN 1 .. lnumeroSezionali

               LOOP

                  IF inTipoRegistro = 'A' THEN
                     lcodiceSezionale:=gsezio_acq_tab(i).stringa1;
                     ldescrizioneSezionale:=gsezio_acq_tab(i).stringa2;
                     lTipoCommercIstituz:=gsezio_acq_tab(i).stringa3;
                  ELSE
                     lcodiceSezionale:=gsezio_ven_tab(i).stringa1;
                     ldescrizioneSezionale:=gsezio_ven_tab(i).stringa2;
                     lTipoCommercIstituz:=gsezio_ven_tab(i).stringa3;
                  END IF;

                  lSequenza:=lSequenza + 20;

                  CNRCTB260.insFatturePerRegistri(repID,
                                                  lSequenza,
                                                  lPasso,
                                                  inCdCdsOrigine,
                                                  inCdUoOrigine,
                                                  inEsercizio,
                                                  lcodiceSezionale,
                                                  ldescrizioneSezionale,
                                                  lTipoCommercIstituz,
                                                  inDataInizio,
                                                  inDataFine,
                                                  inTipoRegistro,
                                                  inTipoReport,
                                                  inRistampa,
                                                  lgruppoStm,
                                                  lsottoGruppoStm,
                                                  ldescrizioneGruppoStm,
                                                  gparametri_tab(2).stringa1,
                                                  aTipoReportStato);

               END LOOP;

            END;

      -------------------------------------------------------------------------------------------
      -- Stampa del riepilogo per aliquota (solo in presenza di stampa per piש sezionali

      ELSIF lPasso = 4 THEN

            IF lnumeroSezionali > 1 THEN

               lSequenza:=lSequenza + 20;

               CNRCTB260.insRiepilogoIvaPerRegistri(repID,
                                                    lSequenza,
                                                    lPasso,
                                                    inEsercizio,
                                                    lgruppoStm,
                                                    lsottoGruppoStm,
                                                    ldescrizioneGruppoStm,
                                                    inCdCdsOrigine,
                                                    inCdUoOrigine,
                                                    inCdTipoSezionale);

            END IF;

      -------------------------------------------------------------------------------------------
      -- Stampa del Riporto dati dichiarazione di intento su registro Vendite definitivo
      -- ALLO STATO ATTUALE SOSPESA

      ELSIF lPasso = 5 THEN

            NULL;

--            IF aTipoReport = 'D' THEN
--
--               CNRCTB260.insRiportoDatiIntento(repID,
--                                               lSequenza,
--                                               lPasso,
--                                               inCdCdsOrigine,
--                                               inCdUoOrigine,
--                                               inEsercizio,
--                                               aCodiceSezionale,
--                                               inDataInizio,
--                                               inDataFine,
--                                               inTipoRegistro,
--                                               inRistampa,
--                                               lgruppoStm,
--                                               lsottoGruppoStm,
--                                               ldescrizioneGruppoStm);
--
--            END IF;

      -------------------------------------------------------------------------------------------
      -- Stampa del Riporto dati revoca dichiarazione di intento su registro Vendite definitivo
      -- ALLO STATO ATTUALE SOSPESA

      ELSIF lPasso = 6 THEN

            NULL;

--            IF aTipoReport = 'D' THEN
--
--               CNRCTB260.insRevocaDatiIntento(repID,
--                                              lSequenza,
--                                              lPasso,
--                                              aCdCdsOrigine,
--                                              aCdUoOrigine,
--                                              aEsercizio,
--                                              aCodiceSezionale,
--                                              aDataInizio,
--                                              aDataFine,
--                                              aTipoRegistro,
--                                              aRistampa,
--                                              lgruppoStm,
--                                              lsottoGruppoStm,
--                                              ldescrizioneGruppoStm);
--
--            END IF;

      -------------------------------------------------------------------------------------------
      -- Stampa delle annotazioni libere
      -- ALLO STATO ATTUALE SOSPESA

      ELSIF lPasso = 7 THEN

            NULL;

--         IF aTipoReport = 'D' THEN
--             lSequenza:=lSequenza + 20;
--
--             -- Valorizzazione del dettaglio della copertina del riepilogo sezionali
--
--             BEGIN
--
--                FOR i IN 1 .. lnumeroSezionali
--
--                LOOP
--
--                   IF aTipoRegistro = 'A' THEN
--                      lcodiceSezionale:=gsezio_acq_tab(i).stringa1;
--                      prefissoSezionale:=gsezio_acq_tab(i).stringa2;
--                      descrizioneSezionale:=gsezio_acq_tab(i).stringa3;
--                   ELSE
--                      lcodiceSezionale:=gsezio_ven_tab(i).stringa1;
--                      prefissoSezionale:=gsezio_ven_tab(i).stringa2;
--                      descrizioneSezionale:=gsezio_ven_tab(i).stringa3;
--                   END IF;
--
--                   lSequenza:=lSequenza + 20;
--
--                   Cnrctb260.insAnnotazioniLibere
--                           (
--                            repID,
--                            lSequenza,
--                            lPasso,
--                            lcodiceSezionale,
--                            prefissoSezionale,
--                            descrizioneSezionale,
--                            aCodiceEsercizio,
--                            aDataInizio,
--                            aDataFine,
--                            aTipoRegistro,
--                            lgruppoStm,
--                            lsottoGruppoStm,
--                            ldescrizioneGruppoStm
--                           );
--
--
--                END LOOP;
--
--             END;
--
--         END IF;

      -------------------------------------------------------------------------------------------
      -- Inserimento nella tabella REPORT DETTAGLIO delle fatture (solo per i registri definitivi)

      ELSIF lPasso = 8 THEN

            IF (inTipoReport = 'D' AND inRistampa = 'N') THEN

               BEGIN

                  FOR i IN 1 .. lnumeroSezionali

                  LOOP

                     IF inTipoRegistro = 'A' THEN
                        lcodiceSezionale:=gsezio_acq_tab(i).stringa1;
                        ldescrizioneSezionale:=gsezio_acq_tab(i).stringa2;
                        lTipoCommercIstituz:=gsezio_acq_tab(i).stringa3;
                     ELSE
                        lcodiceSezionale:=gsezio_ven_tab(i).stringa1;
                        ldescrizioneSezionale:=gsezio_ven_tab(i).stringa2;
                        lTipoCommercIstituz:=gsezio_ven_tab(i).stringa3;
                     END IF;

                     CNRCTB260.insDettaglioPerRegistri(repID,
                                                       lPasso,
                                                       ldescrizioneSezionale,
                                                       inCdCdsOrigine,
                                                       inCdUoOrigine,
                                                       inEsercizio,
                                                       lcodiceSezionale,
                                                       inDataInizio,
                                                       inDataFine,
                                                       inTipoRegistro,
                                                       id_utente,
                                                       aTipoReportStato);

                END LOOP;

          END;

      END IF;

      -------------------------------------------------------------------------------------------
      -- Inserimento nella tabella REPORT STATO di una riga (solo per i registri definitivi)

      ELSIF lPasso = 9 THEN

         IF (inTipoReport = 'D' AND inRistampa = 'N') THEN

            CNRCTB255.inserisciInReportStato(inCdCdsOrigine,
                                             inCdUoOrigine,
                                             inEsercizio,
                                             lCodiceSezionale,
                                             inDataInizio,
                                             inDataFine,
                                             inTipoRegistro,
                                             inGruppoReport,
                                             aTipoReportStato,
                                             id_utente);

         END IF;

      END IF;

   END LOOP;

END stampaRegistri;

-- =================================================================================================
-- Stampa dei Riepilogativi IVA
-- =================================================================================================
PROCEDURE stampaRiepilogativi
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    msg_out IN OUT VARCHAR2,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2
   ) IS
   aTitoloReport1 VARCHAR2(200);
   aTitoloReport2 VARCHAR2(200);
   aTitoloReport3 VARCHAR2(200);
   lPasso INTEGER;
   lSequenza INTEGER;
   lnumeroSezionali INTEGER;
   ldesTipoRegistro VARCHAR2(30);
   lrigaStampa VARCHAR2(1000);
   lgruppoStm CHAR(1);
   lsottoGruppoStm CHAR(1);
   ldescrizioneGruppoStm CHAR(100);
   lcodiceSezionale VARCHAR2(10);
   ldescrizioneSezionale VARCHAR2(100);
   lTipoCommercIstituz CHAR(1);
   lSezionaleVuoto INTEGER;
   cv_cd_tipo_sezionale  VARCHAR2(30);
   lnumeroMese INTEGER;
   contaSezionali INTEGER;
   aEsercizioRif INTEGER;

   gen_cv GenericCurTyp;

BEGIN

   lSequenza:=0;
   lnumeroMese:=TO_NUMBER(TO_CHAR(inDataInizio,'MM'));
   contaSezionali:=0;

   ------------------------------------------------------------------------------------------------
   -- Costruzione del titolo report

   -- Intestazione della UO proprietaria del registro

   aTitoloReport1:='U.0. ' || inCdUoOrigine || ' ' || gparametri_tab(7).stringa1;


   -- Descrizione del registro

   aTitoloReport2:='REGISTRO RIEPILOGATIVO ';

   IF inTipoRegistro = 'A' THEN
      lnumeroSezionali:=gsezio_acq_tab.COUNT;
      aTitoloReport2:=aTitoloReport2 || 'ACQUISTI ';
      ldesTipoRegistro:=CNRCTB255.TI_REGISTRO_ACQUISTI;
   ELSE
      lnumeroSezionali:=gsezio_ven_tab.COUNT;
      aTitoloReport2:=aTitoloReport2 || 'VENDITE ';
      ldesTipoRegistro:=CNRCTB255.TI_REGISTRO_VENDITE;
   END IF;

   IF inTipoReport = 'P' THEN
      aTitoloReport2:=aTitoloReport2 || 'PROVVISORIO PERIODO DAL ' ||
                      TO_CHAR(inDataInizio, 'DD/MM/YYYY') || ' AL ' ||
                      TO_CHAR(inDataFine, 'DD/MM/YYYY');
   ELSE
      aTitoloReport2:=aTitoloReport2 || 'MESE DI ' || gmesi_tab(lnumeroMese).stringa1;
   END IF;

   aTitoloReport3:=NULL;

   aEsercizioRif:=TO_NUMBER(TO_CHAR(inDataFine,'YYYY'));

   ------------------------------------------------------------------------------------------------
   --  Ciclo per l'esecuzione delle query di valorizzazione dei campi per la stampa

   FOR lPasso IN 1 .. 6

   LOOP

      lSequenza:=lSequenza + 20;

      IF    lPasso = 1 THEN
            lrigaStampa:='Memorizzazione titolo report';
            lgruppoStm:='A';
            lsottoGruppoStm:='A';
            ldescrizioneGruppoStm:='TITOLO REPORT';
      ELSIF lPasso = 2 THEN
            lrigaStampa:='Memorizzazione titolo della prima seziona del riepilogativo';
            lgruppoStm:='B';
            lsottoGruppoStm:='B';
            ldescrizioneGruppoStm:='TITOLO GRUPPO B';
            aTitoloReport1:='RIEPILOGO CODICI IVA PER SINGOLO SEZIONALE CON TOTALI DI GRUPPO';
            aTitoloReport2:=NULL;
            aTitoloReport2:=NULL;
      ELSIF lPasso = 3 THEN
            lrigaStampa:='GRUPPO B - Riepilogativo con dettaglio per sezionale ';
            lgruppoStm:='B';
            lsottoGruppoStm:='B';
            ldescrizioneGruppoStm:='CORPO GRUPPO B';
      ELSIF lPasso = 4 THEN
            lrigaStampa:='Memorizzazione titolo della seconda sezione del riepilogativo';
            lgruppoStm:='C';
            lsottoGruppoStm:='C';
            ldescrizioneGruppoStm:='TITOLO GRUPPO C';
            aTitoloReport1:='RIEPILOGO CODICI IVA PER TUTTI I SEZIONALI CON TOTALI DI GRUPPO';
            aTitoloReport2:=NULL;
            aTitoloReport2:=NULL;
      ELSIF lPasso = 5 THEN
            lrigaStampa:='GRUPPO C - Riepilogativo con dettaglio per sezionale ';
            lgruppoStm:='C';
            lsottoGruppoStm:='C';
            ldescrizioneGruppoStm:='CORPO GRUPPO C';
      ELSIF lPasso = 6 THEN
            lrigaStampa:='GRUPPO D - Inserimento riga in REPORT_STATO';
            lgruppoStm:='D';
            lsottoGruppoStm:=NULL;
            ldescrizioneGruppoStm:='CORPO GRUPPO D';
      END IF;

      ---------------------------------------------------------------------------------------------
      -- Memorizzazione del titolo report o del riepilogativo

      IF    (lPasso = 1 OR
             lPasso = 2 OR
             lPasso = 4) THEN

            CNRCTB260.insTitColReportGenerico(repID,
                                              lSequenza,
                                              aTitoloReport1,
                                              aTitoloReport2,
                                              aTitoloReport3,
                                              gparametri_tab(8).stringa1,
                                              gparametri_tab(8).stringa2,
                                              aEsercizioRif,
                                              lgruppoStm,
                                              lsottoGruppoStm,
                                              ldescrizioneGruppoStm,
                                              inTipoReport,
                                              inTipoRegistro);

      ---------------------------------------------------------------------------------------------
      -- Stampa del registro riepilogativo con dettaglio per sezionale

      ELSIF lPasso = 3 THEN

            IF inTipoReport = 'P' THEN

               -- Ciclo principale per estrazione totali per sezionale (STAMPA PROVVISORIA)

               BEGIN

                  FOR i IN 1 .. lnumeroSezionali

                  LOOP

                     IF inTipoRegistro = 'A' THEN
                        lcodiceSezionale:=gsezio_acq_tab(i).stringa1;
                        ldescrizioneSezionale:=gsezio_acq_tab(i).stringa2;
                        lTipoCommercIstituz:=gsezio_acq_tab(i).stringa3;
                        lSezionaleVuoto:=gsezio_acq_tab(i).intero;
                     ELSE
                        lcodiceSezionale:=gsezio_ven_tab(i).stringa1;
                        ldescrizioneSezionale:=gsezio_ven_tab(i).stringa2;
                        lTipoCommercIstituz:=gsezio_ven_tab(i).stringa3;
                        lSezionaleVuoto:=gsezio_ven_tab(i).intero;
                     END IF;

                     -- L'estrazione ט eseguita solo per i sezionali valorizzati

                     IF lSezionaleVuoto > 0 THEN

                        lSequenza:=lSequenza + 20;
                        contaSezionali:=contaSezionali + 1;

                        CNRCTB260.insFatturePerRiepilogativi(repID,
                                                             lSequenza,
                                                             lPasso,
                                                             ldescrizioneSezionale,
                                                             lTipoCommercIstituz,
                                                             inCdCdsOrigine,
                                                             inCdUoOrigine,
                                                             inEsercizio,
                                                             lcodiceSezionale,
                                                             inDataInizio,
                                                             inDataFine,
                                                             inTipoRegistro,
                                                             inTipoReport,
                                                             lgruppoStm,
                                                             lsottoGruppoStm,
                                                             ldescrizioneGruppoStm);

                     END IF;

                  END LOOP;

               END;

            ELSE

               -- Ciclo principale per estrazione totali per sezionale (STAMPA DEFINITIVA)

               OPEN gen_cv FOR

                    SELECT cd_tipo_sezionale
                    FROM   REPORT_DETTAGLIO
                    WHERE  cd_cds = inCdCdsOrigine AND
                           cd_unita_organizzativa = inCdUoOrigine AND
                           esercizio = inEsercizio AND
                           data_inizio = inDataInizio AND
                           data_fine = inDataFine AND
                           tipo_report = ldesTipoRegistro
                    GROUP BY cd_tipo_sezionale
                    ORDER BY cd_tipo_sezionale;

               LOOP

                  FETCH gen_cv INTO
                        cv_cd_tipo_sezionale;

                  EXIT WHEN gen_cv%NOTFOUND;

                  BEGIN

                     SELECT ds_tipo_sezionale,
                            ti_istituz_commerc INTO ldescrizioneSezionale, lTipoCommercIstituz
                     FROM   TIPO_SEZIONALE
                     WHERE  cd_tipo_sezionale = cv_cd_tipo_sezionale;

                     lSequenza:=lSequenza + 20;
                     contaSezionali:=contaSezionali + 1;

                     CNRCTB260.insFatturePerRiepilogativi(repID,
                                                          lSequenza,
                                                          lPasso,
                                                          ldescrizioneSezionale,
                                                          lTipoCommercIstituz,
                                                          inCdCdsOrigine,
                                                          inCdUoOrigine,
                                                          inEsercizio,
                                                          cv_cd_tipo_sezionale,
                                                          inDataInizio,
                                                          inDataFine,
                                                          inTipoRegistro,
                                                          inTipoReport,
                                                          lgruppoStm,
                                                          lsottoGruppoStm,
                                                          ldescrizioneGruppoStm);

                  END;

               END LOOP;

               CLOSE gen_cv;

            END IF;

      ---------------------------------------------------------------------------------------------
      -- Stampa del registro riepilogativo senza dettaglio per sezionale. Si esegue solo se risultano
      -- elaborati piש di un sezionale

      ELSIF lPasso = 5 THEN

            IF contaSezionali > 0 THEN

               lSequenza:=lSequenza + 20;

               CNRCTB260.insTotaliPerRiepilogativi(repID,
                                                   lSequenza,
                                                   lPasso,
                                                   lgruppoStm,
                                                   lsottoGruppoStm,
                                                   ldescrizioneGruppoStm);

            END IF;

      ---------------------------------------------------------------------------------------------
      -- Inserimento nella tabella REPORT STATO di una riga (solo per i registri riepilogativi definitivi)

      ELSIF lPasso = 6 THEN

            IF (inTipoReport = 'D' AND inRistampa = 'N' ) THEN

               CNRCTB255.inserisciInReportStato(inCdCdsOrigine,
                                                inCdUoOrigine,
                                                inEsercizio,
                                                inCdTipoSezionale,
                                                inDataInizio,
                                                inDataFine,
                                                inTipoRegistro,
                                                inGruppoReport,
                                                aTipoReportStato,
                                                id_utente);

            END IF;

      END IF;

   END LOOP;

END stampaRiepilogativi;

-- =================================================================================================
-- Stampa dei Riepilogativi IVA del CENTRO
-- =================================================================================================
PROCEDURE stampaRiepilogativiCentro
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    msg_out IN OUT VARCHAR2,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2
   ) IS
   aTitoloReport1 VARCHAR2(200);
   aTitoloReport2 VARCHAR2(200);
   aTitoloReport3 VARCHAR2(200);
   aNumeroMese INTEGER;
   aPasso INTEGER;
   aSequenza INTEGER;
   aGruppoStm CHAR(1);
   aSottoGruppoStm CHAR(1);
   aDescrizioneGruppoStm CHAR(100);
   aTipoDocumentoReportStato CHAR(1);
   stringaErrore VARCHAR2(2000);
   aEsercizioRif INTEGER;
   aSequenzaUo INTEGER;

   aRecTipoSezionale TIPO_SEZIONALE%ROWTYPE;
   aRecUnitaOrganizzativa UNITA_ORGANIZZATIVA%ROWTYPE;

   gen_cv GenericCurTyp;

BEGIN

   ------------------------------------------------------------------------------------------------
   -- Valorizzazione variabili

   aSequenza:=0;
   aSequenzaUo:=0;
   aNumeroMese:=TO_NUMBER(TO_CHAR(inDataInizio,'MM'));
   stringaErrore:=NULL;

   -- Recupero dati del sezionale ט sempre elaborato un unico sezionale per volta ------------------

   aRecTipoSezionale:=CNRCTB120.getTipoSezionale(inCdTipoSezionale);
   aTipoDocumentoReportStato:=NULL;
   IF aRecTipoSezionale.ti_istituz_commerc = 'C' THEN
      aTipoDocumentoReportStato:=TI_LIQ_IVA_COMMERC;
   ELSE
      IF    aRecTipoSezionale.fl_san_marino_senza_iva = 'Y' And aRecTipoSezionale.TI_BENE_SERVIZIO !='S' THEN
            aTipoDocumentoReportStato:=TI_LIQ_IVA_ISTSMSI;
      ELSIF aRecTipoSezionale.fl_intra_ue = 'Y' And aRecTipoSezionale.TI_BENE_SERVIZIO ='B' THEN
            aTipoDocumentoReportStato:=TI_LIQ_IVA_ISTINTR;
      Elsif (aRecTipoSezionale.fl_intra_ue = 'Y' Or aRecTipoSezionale.fl_extra_ue = 'Y' Or aRecTipoSezionale.fl_san_marino_senza_iva = 'Y' ) And  aRecTipoSezionale.TI_BENE_SERVIZIO ='S' Then
        aTipoDocumentoReportStato:=TI_LIQ_IVA_ISTSNR;
      END IF;
   END IF;

   -- Costruzione del titolo report ---------------------------------------------------------------

   -- Intestazione della UO proprietaria del registro

   aTitoloReport1:='U.0. ' || inCdUoOrigine || ' ' || gparametri_tab(7).stringa1;

   -- Descrizione del registro

   aTitoloReport2:='REGISTRO RIEPILOGATIVO CENTRO ';

   IF inTipoReport = 'P' THEN
      aTitoloReport2:=aTitoloReport2 || 'PROVVISORIO PERIODO DAL ' ||
                      TO_CHAR(inDataInizio, 'DD/MM/YYYY') || ' AL ' ||
                      TO_CHAR(inDataFine, 'DD/MM/YYYY');
   ELSE
      if('0101'||TO_CHAR(inDataInizio,'yyyy')= TO_CHAR(inDataInizio, 'DDMMYYYY') and
         '3112'||TO_CHAR(inDataFine,'yyyy')  = TO_CHAR(inDataFine, 'DDMMYYYY')) then
          aTitoloReport2:=aTitoloReport2 || 'ANNUALE ';
      else
         aTitoloReport2:=aTitoloReport2 || 'MESE DI ' || gmesi_tab(aNumeroMese).stringa1;
      end if;
   END IF;

   aTitoloReport2:=SUBSTR(aTitoloReport2 || ' PER SEZIONALE '  || inCdTipoSezionale || ' - ' ||
                          aRecTipoSezionale.ds_tipo_sezionale,1,190);

   aTitoloReport3:=NULL;

   aEsercizioRif:=TO_NUMBER(TO_CHAR(inDataFine,'YYYY'));

   ------------------------------------------------------------------------------------------------
   --  Ciclo per l'esecuzione delle query di valorizzazione dei campi per la stampa

   FOR aPasso IN 1 .. 6

   LOOP

      aSequenza:=aSequenza + 20;

      IF    aPasso = 1 THEN
            aGruppoStm:='A';
            aSottoGruppoStm:='A';
            aDescrizioneGruppoStm:='TITOLO REPORT';
      ELSIF aPasso = 2 THEN
            aGruppoStm:='B';
            aSottoGruppoStm:='B';
            aDescrizioneGruppoStm:='TITOLO GRUPPO B';
            aTitoloReport1:='RIEPILOGO CODICI IVA PER SINGOLO SEZIONALE CON TOTALI DI GRUPPO';
            aTitoloReport2:=NULL;
            aTitoloReport2:=NULL;
      ELSIF aPasso = 3 THEN
            aGruppoStm:='B';
            aSottoGruppoStm:='B';
            aDescrizioneGruppoStm:='CORPO GRUPPO B';
      ELSIF aPasso = 4 THEN
            aGruppoStm:='C';
            aSottoGruppoStm:='C';
            aDescrizioneGruppoStm:='TITOLO GRUPPO C';
            aTitoloReport1:='RIEPILOGO CODICI IVA PER TUTTI I SEZIONALI CON TOTALI DI GRUPPO';
            aTitoloReport2:=NULL;
            aTitoloReport2:=NULL;
      ELSIF aPasso = 5 THEN
            aGruppoStm:='C';
            aSottoGruppoStm:='C';
            aDescrizioneGruppoStm:='CORPO GRUPPO C';
      ELSIF aPasso = 6 THEN
            aGruppoStm:='D';
            aSottoGruppoStm:=NULL;
            aDescrizioneGruppoStm:='CORPO GRUPPO D';
      END IF;

      ---------------------------------------------------------------------------------------------
      -- Memorizzazione del titolo report o del riepilogativo

      IF    (aPasso = 1 OR
             aPasso = 2 OR
             aPasso = 4) THEN

            CNRCTB260.insTitColReportGenerico(repID,
                                              aSequenza,
                                              aTitoloReport1,
                                              aTitoloReport2,
                                              aTitoloReport3,
                                              gparametri_tab(8).stringa1,
                                              gparametri_tab(8).stringa2,
                                              aEsercizioRif,
                                              aGruppoStm,
                                              aSottoGruppoStm,
                                              aDescrizioneGruppoStm,
                                              inTipoReport,
                                              inTipoRegistro);

      ---------------------------------------------------------------------------------------------
      -- Stampa del registro riepilogativo a  rottura di unitא organizzativa

      ELSIF aPasso = 3 THEN

            -- Ciclo principale di estrazione delle U.0. che possono essere oggetto di elaborazione IVA

            BEGIN

               OPEN gen_cv FOR

                    SELECT A.cd_unita_organizzativa,
                           A.ds_unita_organizzativa,
                           A.cd_unita_padre
                    FROM   UNITA_ORGANIZZATIVA A
                    WHERE  A.livello = 2 AND
                           A.cd_tipo_unita != CNRCTB001.TIPO_ENTE AND
                           A.esercizio_inizio <= inEsercizio AND
                           A.esercizio_fine >= inEsercizio AND
                           NOT EXISTS
                               (SELECT 1
                                FROM   LIQUID_IVA_INTERF_CDS B
                                WHERE  B.esercizio = inEsercizio AND
                                       B.cd_cds = A.cd_unita_padre)
                    ORDER BY A.cd_unita_organizzativa;

               LOOP

                  FETCH gen_cv INTO
                        aRecUnitaOrganizzativa.cd_unita_organizzativa,
                        aRecUnitaOrganizzativa.ds_unita_organizzativa,
                        aRecUnitaOrganizzativa.cd_unita_padre;

                  EXIT WHEN gen_cv%NOTFOUND;

                  -- Inserimento dei dati sulla tabella report generico ---------------------------

                  aSequenza:=aSequenza + 20;

                  CNRCTB265.insFatturePerRiepilogoCentro(repID,
                                                         aSequenza,
                                                         aSequenzaUo,
                                                         aRecUnitaOrganizzativa.cd_unita_padre,
                                                         aRecUnitaOrganizzativa.cd_unita_organizzativa,
                                                         aRecUnitaOrganizzativa.ds_unita_organizzativa,
                                                         inEsercizio,
                                                         inCdTipoSezionale,
                                                         aRecTipoSezionale.ds_tipo_sezionale,
                                                         aRecTipoSezionale.ti_acquisti_vendite,
                                                         aTipoDocumentoReportStato,
                                                         inDataInizio,
                                                         inDataFine,
                                                         inTipoReport,
                                                         aGruppoStm,
                                                         aSottoGruppoStm,
                                                         aDescrizioneGruppoStm,
                                                         stringaErrore);

               END LOOP;

               IF inTipoReport = 'D' Then
                If inRistampa = 'N' Then
                  IF stringaErrore IS NOT NULL THEN
                     IBMERR001.RAISE_ERR_GENERICO
                        ('Impossibile procedere con la stampa definitiva del riepilogativo centro. ' ||
                         'Le seguenti UO non hanno il sezionale ' || inCdTipoSezionale || ' in stato definitivo ' ||
                         stringaErrore);
                  END IF;
                End If;
               END IF;

            END;

      ---------------------------------------------------------------------------------------------
      -- Stampa del registro riepilogativo senza dettaglio per sezionale.

      ELSIF aPasso = 5 THEN

            aSequenza:=aSequenza + 20;

            CNRCTB265.insTotaliPerRiepilogoCentro(repID,
                                                  inCdCdsOrigine,
                                                  inCdUoOrigine,
                                                  inEsercizio,
                                                  aSequenza,
                                                  inTipoReport,
                                                  aGruppoStm,
                                                  aSottoGruppoStm,
                                                  aDescrizioneGruppoStm);

      ---------------------------------------------------------------------------------------------
      -- Inserimento nella tabella REPORT STATO di una riga (solo per i registri riepilogativi definitivi)

      ELSIF aPasso = 6 THEN

            IF (inTipoReport = 'D' AND inRistampa = 'N' ) THEN

               CNRCTB255.inserisciInReportStato(inCdCdsOrigine,
                                                inCdUoOrigine,
                                                inEsercizio,
                                                inCdTipoSezionale,
                                                inDataInizio,
                                                inDataFine,
                                                inTipoRegistro,
                                                inGruppoReport,
                                                aTipoReportStato,
                                                id_utente);

            END IF;

      END IF;

   END LOOP;


END stampaRiepilogativiCentro;


-- =================================================================================================
-- Stampa IVA ad esigibilitא differita
-- =================================================================================================
PROCEDURE stampaIvaDifferita
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inTipoReport VARCHAR2,
    inRistampa VARCHAR2,
    repID INTEGER,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2
   ) IS
   aTitoloReport1 VARCHAR2(200);
   aTitoloReport2 VARCHAR2(200);
   aTitoloReport3 VARCHAR2(200);
   lda_i BINARY_INTEGER;
   la_i BINARY_INTEGER;
   ldescrizioneSezionale VARCHAR2(100);
   lSezionaleVuoto INTEGER;
   lrigaStampa VARCHAR2(1000);
   lgruppoStm CHAR(1);
   lsottoGruppoStm CHAR(1);
   ldescrizioneGruppoStm VARCHAR2(100);
   ldescTotaleStm VARCHAR2(100);
   lPasso NUMBER;
   lSequenza INTEGER;
   lnumeroSezionali_ven INTEGER;
   lnumeroSezionali_acq INTEGER;
   lnumeroSezionali INTEGER;
   lcodiceSezionale VARCHAR2(10);
   cv_totale_imponibile NUMBER(15,2);
   cv_totale_iva NUMBER(15,2);
   cv_totale_iva_indet NUMBER(15,2);
   cv_totale_fattura NUMBER(15,2);
   aTotaleImponibile NUMBER(15,2);
   aTotaleIva NUMBER(15,2);
   aTotaleIvaIndetraibile NUMBER(15,2);
   aTotaleFattura NUMBER(15,2);
   aEsercizioRif INTEGER;

   gen_cv GenericCurTyp;
   UOENTE unita_organizzativa%rowtype:= CNRCTB020.GETUOENTE(inEsercizio);
BEGIN

   lSequenza:=0;
   aTotaleImponibile:=0;
   aTotaleIva:=0;
   aTotaleIvaIndetraibile:=0;
   aTotaleFattura:=0;

   lnumeroSezionali_acq:=gsezio_acq_tab.COUNT;
   lnumeroSezionali_ven:=gsezio_ven_tab.COUNT;
   lnumeroSezionali:=lnumeroSezionali_acq+lnumeroSezionali_ven;

   -------------------------------------------------------------------------------------------------
   -- Definizione del numero di passi da eseguire nella stampa IVA differita
   -- Nella stampa delle sole fatture divenute esigibili per ateneo si espone la sola sezione II
   -- Nella stampa del riepilogo iva ad esigibilitא differita per riepilogo si esegue anche il passo
   -- delle totalizzazioni per sezionale all'interno di ogni sezione in stampa

   IF    inTipoStampa = TI_ELAB_IVA_DIFFERITA_CENTRO THEN
         lda_i:=1;
         la_i:=5;
   ELSIF inTipoStampa = TI_ELAB_IVA_DIFFERITA_II THEN
         lda_i:=2;
         la_i:=2;
   Else   --sembra l'unica gestita
         lda_i:=1;
          IF inTipoRegistro = 'A' Then
          -- Aggiunta sezione fatture divenute esigibile perchט trascorso 1 anno dalla data emissione fornitore
                la_i:=6;
          Else
                la_i:=5;
          End If;
   END IF;

   -------------------------------------------------------------------------------------------------
   -- Costruzione del titolo report
   -- ***********************************************************************************************************
   -- Attenzione: inTipoRegistro = '*', ma poiche' non sono gestite le differite per gli acquisti, lasciamo cosi'
   -- ***********************************************************************************************************
   -- Intestazione della UO proprietaria del registro

   aTitoloReport1:='U.O.: ' || inCdUoOrigine || ' ' || gparametri_tab(7).stringa1;

   IF inTipoStampa = TI_ELAB_IVA_DIFFERITA_II THEN
      aTitoloReport2:='STAMPA FATTURE DIVENUTE ESIGIBILI - SITUAZIONE AL ';
   ELSE
      aTitoloReport2:='RIEPILOGO OPERAZIONI ';
      IF inTipoRegistro = 'A' THEN
         IF inTipoStampa = TI_ELAB_IVA_DIFFERITA_CENTRO THEN
            aTitoloReport2:= aTitoloReport2 || 'PASSIVE CON IVA AD ESIGIBILITA DIFFERITA CENTRO - SITUAZIONE AL ';
         ELSE
            aTitoloReport2:= aTitoloReport2 || 'PASSIVE CON IVA AD ESIGIBILITA DIFFERITA - SITUAZIONE AL ';
         END IF;
      ELSE
         IF inTipoStampa = TI_ELAB_IVA_DIFFERITA_CENTRO THEN
            aTitoloReport2:= aTitoloReport2 || 'ATTIVE CON IVA AD ESIGIBILITA DIFFERITA CENTRO - SITUAZIONE AL ';
         ELSE
            aTitoloReport2:= aTitoloReport2 || 'ATTIVE CON IVA AD ESIGIBILITA DIFFERITA - SITUAZIONE AL ';
         END IF;
      END IF;
   END IF;
   aTitoloReport2:=aTitoloReport2 || TO_CHAR(inDataFine,'DD/MM/YYYY');
   aTitoloReport3:=NULL;

   aEsercizioRif:=TO_NUMBER(TO_CHAR(inDataFine,'YYYY'));

   -------------------------------------------------------------------------------------------------
   --  Ciclo per l'esecuzione delle query di valorizzazione dei campi per la stampa

   FOR lPasso IN 1 .. 4

   LOOP

      lSequenza:=lSequenza + 20;

      IF    lPasso = 1 THEN
            lrigaStampa:='Memorizzazione titolo report';
            lgruppoStm:='A';
            lsottoGruppoStm:='A';
            ldescrizioneGruppoStm:='TITOLO REPORT';
      ELSIF lPasso = 2 THEN
            lrigaStampa:='Stampa delle fatture con IVA differita e totale parziale';
      ELSIF lPasso = 3 THEN
            lrigaStampa:='Generazione delle righe del riepilogo';
            lgruppoStm:='T';
            lsottoGruppoStm:='T';
            ldescrizioneGruppoStm:='TOTALE REPORT';
      END IF;

      ----------------------------------------------------------------------------------------------
      -- Memorizzazione del titolo report

      IF    lPasso = 1 THEN

            Cnrctb260.insTitColReportGenerico(repID,
                                              lSequenza,
                                              aTitoloReport1,
                                              aTitoloReport2,
                                              aTitoloReport3,
                                              gparametri_tab(8).stringa1,
                                              gparametri_tab(8).stringa2,
                                              aEsercizioRif,
                                              lgruppoStm,
                                              lsottoGruppoStm,
                                              ldescrizioneGruppoStm,
                                              inTipoReport,
                                              inTipoRegistro);


      ----------------------------------------------------------------------------------------------
      -- Stampa dei riepilogativi IVA nelle cinque sezioni

      ELSIF lPasso = 2 THEN

            FOR i IN lda_i .. la_i

            LOOP

               IF    i = 1 THEN
                     lgruppoStm:='A';
                     lsottoGruppoStm:='A';
                     ldescrizioneGruppoStm:='CORPO SEZIONE I';
                     ldescTotaleStm:='TOTALE PRIMA SEZIONE';
               ELSIF i = 2 THEN
                     lgruppoStm:='B';
                     lsottoGruppoStm:='B';
                     ldescrizioneGruppoStm:='CORPO SEZIONE II';
                     ldescTotaleStm:='TOTALE SECONDA SEZIONE';
               ELSIF i = 3 THEN
                     lgruppoStm:='C';
                     lsottoGruppoStm:='C';
                     ldescrizioneGruppoStm:='CORPO SEZIONE III';
                     ldescTotaleStm:='TOTALE TERZA SEZIONE';
               ELSIF i = 4 THEN
                     lgruppoStm:='D';
                     lsottoGruppoStm:='D';
                     ldescrizioneGruppoStm:='CORPO SEZIONE IV';
                     ldescTotaleStm:='TOTALE QUARTA SEZIONE';
               ELSIF i = 5 THEN
                     lgruppoStm:='E';
                     lsottoGruppoStm:='E';
                     ldescrizioneGruppoStm:='CORPO SEZIONE V';
                     ldescTotaleStm:='TOTALE QUINTA SEZIONE';
                ELSIF i = 6 THEN
                     lgruppoStm:='F';
                     lsottoGruppoStm:='F';
                     ldescrizioneGruppoStm:='CORPO SEZIONE VI';
                     ldescTotaleStm:='TOTALE SESTA SEZIONE';
               END IF;

               -- Loop per ogni sezione per recupero dettaglio fatture

               BEGIN

                  FOR j IN 1 .. lnumeroSezionali

                  Loop
                     If inTipoRegistro = 'A' THEN
                        lcodiceSezionale:=gsezio_acq_tab(j).stringa1;
                        ldescrizioneSezionale:=gsezio_acq_tab(j).stringa2;
                        lSezionaleVuoto:=gsezio_acq_tab(j).intero;
                     ELSE
                        lcodiceSezionale:=gsezio_ven_tab(j).stringa1;
                        ldescrizioneSezionale:=gsezio_ven_tab(j).stringa2;
                        lSezionaleVuoto:=gsezio_ven_tab(j).intero;
                     END IF;
                     If (lSezionaleVuoto > 0 And inCdCdsOrigine <> UOENTE.cd_unita_padre) Or  inCdCdsOrigine = UOENTE.cd_unita_padre THEN

                        lSequenza:=lSequenza + 20;

                        CNRCTB260.insFattureIvaDifferita(repID,
                                                         lSequenza,
                                                         ldescrizioneSezionale,
                                                         inCdCdsOrigine,
                                                         inCdUoOrigine,
                                                         inEsercizio,
                                                         lcodiceSezionale,
                                                         inDataInizio,
                                                         inDataFine,
                                                         inTipoRegistro,
                                                         inTipoReport,
                                                         inRistampa,
                                                         lgruppoStm,
                                                         lsottoGruppoStm,
                                                         ldescrizioneGruppoStm);

                     END IF;

                  END LOOP;

                  -- Calcolo dei totali per seszionale all'interno di una sezione

                  IF inTipoStampa = TI_ELAB_IVA_DIFFERITA_CENTRO THEN

                     lSequenza:=lSequenza + 20;

                     CNRCTB260.insTotaliSezionaleIvaDifferita(repID,
                                                              lSequenza,
                                                              lgruppoStm,
                                                              lsottoGruppoStm,
                                                              ldescTotaleStm);

                  END IF;

                  -- Calcolo del totale per sezione e codice iva

                  lSequenza:=lSequenza + 20;

      CNRCTB260.insTotaliIvaDiffPerCodIVA(repID,
                                                  lSequenza,
                                                  lgruppoStm,
                                                  lsottoGruppoStm,
                                                  ldescTotaleStm);

                  -- Calcolo del totale per sezione

                  lSequenza:=lSequenza + 20;

                  CNRCTB260.insTotaliIvaDifferita(repID,
                                                  lSequenza,
                                                  lgruppoStm,
                                                  lsottoGruppoStm,
                                                  ldescTotaleStm);

               END;

            END LOOP;

      ----------------------------------------------------------------------------------------------
      -- Generazione delle righe del riepilogo

      ELSIF lPasso = 3 THEN

            -- Ciclo di lettura importi complessivi emesso del periodo

            FOR i IN 1 .. lnumeroSezionali

            LOOP

               BEGIN

                  IF inTipoRegistro = 'A' THEN

                     lcodiceSezionale:=gsezio_acq_tab(i).stringa1;

                     OPEN gen_cv FOR

                          SELECT SUM(imponibile_dettaglio),
                                 SUM(iva_dettaglio),
                                 SUM(TRUNC(iva_indetraibile_dettaglio,2)),
                                 SUM(totale_dettaglio)
                          FROM   V_TOTALE_IVA_ACQUISTI
                          WHERE  cd_cds_origine = inCdCdsOrigine AND
                                 cd_uo_origine = inCdUoOrigine AND
                                 esercizio = inEsercizio AND
                                 cd_tipo_sezionale = lcodiceSezionale AND
                                (data_registrazione BETWEEN inDataInizio AND inDataFine);

                  ELSE

                     lcodiceSezionale:=gsezio_ven_tab(i).stringa1;

                     OPEN gen_cv FOR

                          SELECT SUM(imponibile_dettaglio),
                                 SUM(iva_dettaglio),
                                 SUM(iva_indetraibile_dettaglio),
                                 SUM(totale_dettaglio)
                          FROM   V_TOTALE_IVA_VENDITE
                          WHERE  cd_cds_origine = inCdCdsOrigine AND
                                 cd_uo_origine = inCdUoOrigine AND
                                 esercizio = inEsercizio AND
                                 cd_tipo_sezionale = lcodiceSezionale AND
                                 (data_emissione BETWEEN inDataInizio AND inDataFine);

                  END IF;

                  LOOP

                     FETCH gen_cv INTO
                           cv_totale_imponibile,
                           cv_totale_iva,
                           cv_totale_iva_indet,
                           cv_totale_fattura;

                     EXIT WHEN gen_cv%NOTFOUND;

                     atotaleImponibile:=atotaleImponibile + cv_totale_imponibile;
                     atotaleIva:=atotaleIva + cv_totale_iva;
                     atotaleIvaIndetraibile:=atotaleIvaIndetraibile + ROUND(cv_totale_iva_indet,2);
                     atotaleFattura:=atotaleFattura + cv_totale_fattura;

                  END LOOP;

                  CLOSE gen_cv;

               END;

            END LOOP;

            lSequenza:=lSequenza + 20;

            CNRCTB260.insRiepilogoIvaDifferita(repID,
                                               lSequenza,
                                               inTipoRegistro,
                                               inTipoReport,
                                               atotaleImponibile,
                                               atotaleIva,
                                               atotaleIvaIndetraibile,
                                               atotaleFattura,
                                               lgruppoStm,
                                               lsottoGruppoStm,
                                               ldescTotaleStm);

      ---------------------------------------------------------------------------------------------
      -- Inserimento nella tabella REPORT STATO di una riga (solo per i registri riepilogativi definitivi)

      ELSIF lPasso = 4 THEN

            IF (inTipoReport = 'D' AND inRistampa = 'N' ) THEN

               CNRCTB255.inserisciInReportStato(inCdCdsOrigine,
                                                inCdUoOrigine,
                                                inEsercizio,
                                                inCdTipoSezionale,
                                                inDataInizio,
                                                inDataFine,
                                                inTipoRegistro,
                                                inGruppoReport,
                                                aTipoReportStato,
                                                id_utente);

            END IF;

      END IF;

   END LOOP;

END stampaIvaDifferita;

-- =================================================================================================
-- Elaborazione della LIQUIDAZIONE (provvisoria o definitiva) di massa (centro per tutte le UO)
-- =================================================================================================
PROCEDURE elaboraLiquidazioneMassa
   (
    aCdCdsOrigine VARCHAR2,
    aCdUoOrigine VARCHAR2,
    aEsercizio NUMBER,
    aCdTipoSezionale VARCHAR2,
    aDataInizio DATE,
    aDataFine DATE,
    aTipoStampa VARCHAR2,
    aTipoRegistro VARCHAR2,
    aTipoReport VARCHAR2,
    aRistampa VARCHAR2,
    repID INTEGER,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aEsercizioReale NUMBER,
    aTipoReportStato VARCHAR2,
    inTipoImpegno VARCHAR2 Default Null
   ) IS
   i BINARY_INTEGER;
   j BINARY_INTEGER;
   aGruppoReport CHAR(1);
   chkEsisteLiqDef CHAR(1);

   aRecUnitaOrganizzativa UNITA_ORGANIZZATIVA%ROWTYPE;
   aRecLiquidazioneIvaBase LIQUIDAZIONE_IVA%ROWTYPE;
   aRecLiquidazioneIva LIQUIDAZIONE_IVA%ROWTYPE;

   gen_cv GenericCurTyp;

BEGIN
   -- Azzeramento array errori

   errori_tab.DELETE;

   j:=0;

   --cancello eventuale elaborazione precedente
   If aTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA_PRV Then
     delete LIQUIDAZIONE_IVA
     Where report_id = repID
     and   report_id != 0
     and   stato = 'P';
   End If;

   --------------------------------------------------------------------------------------------------
   -- Azzera il record della liquidazione di default

   aRecLiquidazioneIvaBase:=NULL;
   aRecLiquidazioneIvaBase.esercizio:=aEsercizio;
   aRecLiquidazioneIvaBase.dt_inizio:=aDataInizio;
   aRecLiquidazioneIvaBase.dt_fine:=aDataFine;
   aRecLiquidazioneIvaBase.report_id:=repID;
   if aTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA Then
     aRecLiquidazioneIvaBase.stato:='D';
   Else
     aRecLiquidazioneIvaBase.stato:='P';
   End If;
   aRecLiquidazioneIvaBase.iva_vendite:=0;
   aRecLiquidazioneIvaBase.iva_vendite_diff:=0;
   aRecLiquidazioneIvaBase.iva_vend_diff_esig:=0;
   aRecLiquidazioneIvaBase.iva_autofatt:=0;
   aRecLiquidazioneIvaBase.iva_intraue:=0;
   aRecLiquidazioneIvaBase.iva_debito:=0;
   aRecLiquidazioneIvaBase.iva_acquisti:=0;
   aRecLiquidazioneIvaBase.iva_acq_non_detr:=0;
   aRecLiquidazioneIvaBase.iva_acquisti_diff:=0;
   aRecLiquidazioneIvaBase.iva_acq_diff_esig:=0;
   aRecLiquidazioneIvaBase.iva_credito:=0;
   aRecLiquidazioneIvaBase.var_imp_per_prec:=0;
   aRecLiquidazioneIvaBase.iva_non_vers_per_prec:=0;
   aRecLiquidazioneIvaBase.iva_deb_cred_per_prec:=0;
   aRecLiquidazioneIvaBase.cred_iva_comp_detr:=0;
   aRecLiquidazioneIvaBase.iva_deb_cred:=0;
   aRecLiquidazioneIvaBase.int_deb_liq_trim:=0;
   aRecLiquidazioneIvaBase.cred_iva_spec_detr:=0;
   aRecLiquidazioneIvaBase.acconto_iva_vers:=0;
   aRecLiquidazioneIvaBase.iva_da_versare:=0;
   aRecLiquidazioneIvaBase.iva_versata:=0;
   aRecLiquidazioneIvaBase.cred_iva_infrann_rimb:=0;
   aRecLiquidazioneIvaBase.cred_iva_infrann_comp:=0;
   aRecLiquidazioneIvaBase.iva_credito_no_prorata:=0;
   aRecLiquidazioneIvaBase.perc_prorata_detraibile:=0;
   aRecLiquidazioneIvaBase.dacr:=gDataOdierna;
   aRecLiquidazioneIvaBase.utcr:=id_utente;
   aRecLiquidazioneIvaBase.duva:=gDataOdierna;
   aRecLiquidazioneIvaBase.utuv:=id_utente;
   aRecLiquidazioneIvaBase.pg_ver_rec:=1;
   aRecLiquidazioneIvaBase.iva_liq_esterna:=0;

   --------------------------------------------------------------------------------------------------
   -- Ciclo principale di lettura delle UO su cui eseguire la liquidazione

   BEGIN
      OPEN gen_cv FOR

           SELECT *
           FROM   UNITA_ORGANIZZATIVA A
           WHERE  A.livello = 2 AND
                  A.cd_tipo_unita != 'ENTE' AND
                  A.esercizio_inizio <= aEsercizioReale AND
                  A.esercizio_fine >= aEsercizioReale AND
                  NOT EXISTS
                      (SELECT 1
                       FROM   LIQUID_IVA_INTERF_CDS C
                       WHERE  C.cd_cds = A.cd_unita_padre AND
                              C.esercizio = aEsercizioReale)
           ORDER BY A.cd_unita_organizzativa;

      LOOP

         FETCH gen_cv INTO
               aRecUnitaOrganizzativa;

         EXIT WHEN gen_cv%NOTFOUND;
         -- Valorizzo i riferimenti cds e Uo della liquidazione

         aRecLiquidazioneIvaBase.cd_cds:=aRecUnitaOrganizzativa.cd_unita_padre;
         aRecLiquidazioneIvaBase.cd_unita_organizzativa:=aRecUnitaOrganizzativa.cd_unita_organizzativa;

         --------------------------------------------------------------------------------------------
         -- Per ogni UO calcolo le cinque tipologie di Liquidazione

         FOR i IN 1 .. 5

         Loop
            IF    i = 1 THEN
                  aGruppoReport:=TI_LIQ_IVA_COMMERC;
            ELSIF i = 2 THEN
                  aGruppoReport:=TI_LIQ_IVA_ISTINTR;
            ELSIF i = 3 THEN
                  aGruppoReport:=TI_LIQ_IVA_ISTSMSI;
            ELSIF i = 4 THEN
                  aGruppoReport:=TI_LIQ_IVA_ISTSNR;
            ELSIF i = 5 THEN
                  aGruppoReport:=TI_LIQ_IVA_ISTSPLIT;
            END IF;

            -- Per la liquidazione provvisoria massiva il calcolo ט solo per il commerciale
            If i > 1 and aTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA_PRV Then
              exit;
            End If;

            aRecLiquidazioneIvaBase.tipo_liquidazione:=aGruppoReport;

            -- Verifico che non esiste liquidazione definitiva quindi procedo al calcolo

            chkEsisteLiqDef:=CNRCTB260.chkEsisteLiquidazioneDef(aRecLiquidazioneIvaBase.cd_cds,
                                                                aRecLiquidazioneIvaBase.cd_unita_organizzativa,
                                                                aEsercizio,
                                                                aDataInizio,
                                                                aDataFine,
                                                                aGruppoReport);

            IF chkEsisteLiqDef = 'N' THEN

               BEGIN

                  -- Creo lo liquidazione vuota

                  CNRCTB265.insLiquidazioneIva(aRecLiquidazioneIvaBase);

                  -- Elabora il calcolo della liquidazione

                  calcolaLiquidazione(aRecLiquidazioneIvaBase.cd_cds, aRecLiquidazioneIvaBase.cd_unita_organizzativa,
                                      aEsercizio, aCdTipoSezionale, aDataInizio, aDataFine, aTipoRegistro,
                                      aTipoReport, aRistampa, repID, id_utente, aGruppoReport, aEsercizioReale);

                  If aTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA Then
                    -- Scrittura record di liquidazione definitivo

                    liquidazioneDefinitiva(aRecLiquidazioneIvaBase.cd_cds, aRecLiquidazioneIvaBase.cd_unita_organizzativa,
                                           aEsercizio, aCdTipoSezionale, aDataInizio, aDataFine, aTipoStampa,
                                           aTipoRegistro, aTipoReport, aRistampa, repID, id_utente,
                                           aGruppoReport, aTipoReportStato);

                    BEGIN

                      SELECT * INTO aRecLiquidazioneIva
                      FROM   LIQUIDAZIONE_IVA A
                      WHERE  A.cd_cds = aRecLiquidazioneIvaBase.cd_cds AND
                             A.cd_unita_organizzativa = aRecLiquidazioneIvaBase.cd_unita_organizzativa AND
                             A.esercizio = aEsercizio AND
                             A.dt_inizio = aDataInizio AND
                             A.dt_fine = aDataFine AND
                             A.tipo_liquidazione = aGruppoReport AND
                             A.report_id = 0;

                    EXCEPTION

                      WHEN NO_DATA_FOUND THEN
                          IBMERR001.RAISE_ERR_GENERICO
                              ('Liquidazione iva del mese di ' || TO_CHAR(aDataInizio,'mm') || ' non presente');

                    END;

                    -- Contabilizzazione della liquidazione

                    CNRCTB270.contabilLiquidIva(aRecLiquidazioneIva.cd_cds, aEsercizio,
                                                aRecLiquidazioneIva.cd_unita_organizzativa,
                                                aDataInizio, aDataFine, id_utente, aGruppoReport,inTipoImpegno);

                  End If;

                  -- Elimino quanto registrato sulla tabella di appoggio nel calcolo della liquidazione

                  DELETE FROM REPORT_GENERICO
                  WHERE  ID = repID;


                  COMMIT;

               EXCEPTION

                  WHEN others THEN
                       j:=j + 1;
                       errori_tab(j).tStringaUo:=aRecLiquidazioneIvaBase.cd_unita_organizzativa;
                       errori_tab(j).tStringaTipo:=aGruppoReport;
                       errori_tab(j).tStringaErr:=SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK,1,2000);
                       ROLLBACK;
               END;

            END IF;

         END LOOP;

      END LOOP;

   END;

   -- Se ho trovato errori faccio la raise di un errore generico

   IF errori_tab.COUNT > 0 THEN
     If aTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA Then
       IBMERR001.RAISE_ERR_GENERICO
          ('Liquidazione iva di massa con errori');
     Else
       IBMERR001.RAISE_ERR_GENERICO
          ('Liquidazione provvisoria iva di massa con errori');
     End If;
   END IF;

   -- Aggiornamento a stato C dei record di REPORT_STATO riferiti alla stampa registri IVA di base
   -- alla liquidazione
   If aTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA Then
     CNRCTB255.upgStatoRegistriIva(aEsercizioReale, aDataInizio, aDataFine, id_utente);
   End If;
END elaboraLiquidazioneMassa;

-- =================================================================================================
-- Stampa Liquidazione IVA
-- =================================================================================================
PROCEDURE stampaLiquidazione
   (
    aCdCdsOrigine VARCHAR2,
    aCdUoOrigine VARCHAR2,
    aEsercizio NUMBER,
    aCdTipoSezionale VARCHAR2,
    aDataInizio DATE,
    aDataFine DATE,
    aTipoStampa VARCHAR2,
    aTipoRegistro VARCHAR2,
    aTipoReport VARCHAR2,
    aRistampa VARCHAR2,
    repID INTEGER,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aEsercizioReale NUMBER,
    aTipoReportStato VARCHAR2,
    inTipoImpegno VARCHAR2 Default Null
   ) IS
   aRecLiquidazioneIva LIQUIDAZIONE_IVA%ROWTYPE;

BEGIN

   ------------------------------------------------------------------------------------------------
   -- Elabora il calcolo della liquidazione

   calcolaLiquidazione(aCdCdsOrigine, aCdUoOrigine, aEsercizio, aCdTipoSezionale,
                       aDataInizio, aDataFine, aTipoRegistro, aTipoReport,
                       aRistampa, repID, id_utente, inGruppoReport, aEsercizioReale);

   ------------------------------------------------------------------------------------------------
   -- Scrittura record di liquidazione definitivo

   IF (aTipoStampa=TI_ELAB_LIQUIDAZIONE_DEF AND
       aTipoReport ='D') THEN
      liquidazioneDefinitiva(aCdCdsOrigine, aCdUoOrigine, aEsercizio,
                             aCdTipoSezionale, aDataInizio, aDataFine, aTipoStampa,
                             aTipoRegistro, aTipoReport, aRistampa, repID, id_utente,
                             inGruppoReport, aTipoReportStato);

      BEGIN

         SELECT * INTO aRecLiquidazioneIva
         FROM   LIQUIDAZIONE_IVA A
         WHERE  A.cd_cds = aCdCdsOrigine AND
                A.cd_unita_organizzativa = aCdUoOrigine AND
                A.esercizio = aEsercizio AND
                A.dt_inizio = aDataInizio AND
                A.dt_fine = aDataFine AND
                A.tipo_liquidazione = inGruppoReport AND
                A.report_id = 0;

      EXCEPTION

         WHEN NO_DATA_FOUND THEN
              IBMERR001.RAISE_ERR_GENERICO
                 ('Liquidazione iva del mese di ' || TO_CHAR(aDataInizio,'mm') || ' non presente');

      END;

      -- Contabilizzazione della liquidazione

      CNRCTB270.contabilLiquidIva(aCdCdsOrigine,
                                  aEsercizio,
                                  aCdUoOrigine,
                                  aDataInizio,
                                  aDataFine,
                                  id_utente,
                                  inGruppoReport,
                                  inTipoImpegno);

   END IF;

END stampaLiquidazione;

-- =================================================================================================
-- Calcolo della Liquidazione IVA
--- ================================================================================================
PROCEDURE calcolaLiquidazione
   (
    aCdCdsOrigine VARCHAR2,
    aCdUoOrigine VARCHAR2,
    aEsercizio NUMBER,
    aCdTipoSezionale VARCHAR2,
    aDataInizio DATE,
    aDataFine DATE,
    aTipoRegistro VARCHAR2,
    aTipoReport VARCHAR2,
    aRistampa VARCHAR2,
    repID INTEGER,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aEsercizioReale NUMBER
   ) IS
   aPasso NUMBER;
   aGruppoStm CHAR(1);
   aSottoGruppoStm CHAR(1);
   aDescrizioneGruppoStm CHAR(100);
   aNumeroSezionali INTEGER;
   aCodiceSezionale VARCHAR2(10);
   i BINARY_INTEGER;
   j BINARY_INTEGER;
   isElaboraOk CHAR(1);
   UOENTE unita_organizzativa%rowtype:= CNRCTB020.GETUOENTE(aEsercizio);
BEGIN

   -------------------------------------------------------------------------------------------------
   --  Ciclo per l'esecuzione delle query di calcolo della Liquidazione IVA

   FOR aPasso IN 1 .. 3

   LOOP

      IF    aPasso = 1 THEN
            aGruppoStm:='A';
            aSottoGruppoStm:='A';
            aDescrizioneGruppoStm:='CORPO GRUPPO A';
      ELSIF aPasso = 2 THEN
            aGruppoStm:='A';
            aSottoGruppoStm:='A';
            aDescrizioneGruppoStm:='CORPO GRUPPO A';
      ELSIF aPasso = 3 THEN
            aGruppoStm:='A';
            aSottoGruppoStm:='A';
            aDescrizioneGruppoStm:='CORPO GRUPPO A';
      END IF;

      ----------------------------------------------------------------------------------------------
      -- Lettura dati da liquidazione e creazione record di appoggio su REPORT_GENERICO

      IF    aPasso = 1 THEN

            CNRCTB260.letturaLiquidazione(repID,
                                          aCdCdsOrigine,
                                          aEsercizio,
                                          aCdUoOrigine,
                                          aDataInizio,
                                          aDataFine,
                                          aTipoRegistro,
                                          aTipoReport,
                                          aGruppoStm,
                                          aSottoGruppoStm,
                                          aDescrizioneGruppoStm,
                                          inGruppoReport);

      ----------------------------------------------------------------------------------------------
      -- Calcolo importi per la liquidazione distinguo tra liquidazione dell'ente o altro

      ELSIF aPasso = 2 THEN

            -- Calcola liquidazione ente -----------------------------------------------------------

            IF aCdCdsOrigine =UOENTE.cd_unita_padre THEN

               CNRCTB260.calcolaLiquidazioneEnte(repID,
                                                 aCdCdsOrigine,
                                                 aCdUoOrigine,
                                                 aEsercizio,
                                                 aDataInizio,
                                                 aDataFine,
                                                 aTipoRegistro,
                                                 aTipoReport,
                                                 aGruppoStm,
                                                 aSottoGruppoStm,
                                                 aDescrizioneGruppoStm,
                                                 gparametri_tab(5).stringa1,
                                                 gparametri_tab(6).stringa1,
                                                 aEsercizioReale,
                                                 inGruppoReport);
            ELSE

            -- Calcola liquidazione UO -------------------------------------------------------------

               BEGIN

                  FOR i IN 1 .. 2

                  LOOP

                     IF i = 1 THEN
                        aNumeroSezionali:=gsezio_acq_tab.COUNT;
                     ELSE
                        aNumeroSezionali:=gsezio_ven_tab.COUNT;
                     END IF;

                     IF aNumeroSezionali > 0 THEN

                        FOR j IN 1 .. aNumeroSezionali

                        LOOP

                           isElaboraOk:='N';

                           IF i = 1 THEN

                              aCodiceSezionale:=gsezio_acq_tab(j).stringa1;

                              IF    inGruppoReport = TI_LIQ_IVA_COMMERC THEN
                                    IF  gsezio_acq_tab(j).stringa3 = 'C' THEN
                                        isElaboraOk:='Y';
                                    END IF;
                              ELSIF inGruppoReport = TI_LIQ_IVA_ISTINTR THEN
                                    IF  (gsezio_acq_tab(j).stringa3 = 'I' AND
                                         gsezio_acq_tab(j).stringa5 = 'Y' And
                                         gsezio_acq_tab(j).stringa6 = 'B') THEN
                                        isElaboraOk:='Y';
                                    END IF;
                              ELSIF inGruppoReport = TI_LIQ_IVA_ISTSMSI THEN
                                    IF  (gsezio_acq_tab(j).stringa3 = 'I' AND
                                         gsezio_acq_tab(j).stringa4 = 'Y' And
                                         gsezio_acq_tab(j).stringa6 = 'B') THEN
                                        isElaboraOk:='Y';
                                    END IF;
                              ELSIF inGruppoReport = TI_LIQ_IVA_ISTSNR THEN
                                    IF  (gsezio_acq_tab(j).stringa3 = 'I' And    -- istituzionale
                                         gsezio_acq_tab(j).stringa6 = 'S' And    -- ti_bene_servizio
                                        (gsezio_acq_tab(j).stringa5 = 'Y' Or     -- intra_ue
                                         gsezio_acq_tab(j).stringa4 = 'Y' Or     -- san marino senza iva
                                         gsezio_acq_tab(j).stringa7 = 'Y')) Then -- extra_ue
                                        isElaboraOk:='Y';
                                    END IF;
                              ELSIF inGruppoReport = TI_LIQ_IVA_ISTSPLIT THEN
                                    IF  (gsezio_acq_tab(j).stringa3 = 'I' And    -- istituzionale
                                         gsezio_acq_tab(j).stringa8 = 'Y')  Then -- split payment
                                        isElaboraOk:='Y';
                                    END IF;
                              END IF;

                           ELSE
            aCodiceSezionale:=gsezio_ven_tab(j).stringa1;

                              IF    inGruppoReport = TI_LIQ_IVA_COMMERC THEN
                                    IF  gsezio_ven_tab(j).stringa3 = 'C' THEN
                                        isElaboraOk:='Y';
                                    END IF;
                              ELSIF inGruppoReport = TI_LIQ_IVA_ISTINTR THEN
                                    IF  (gsezio_ven_tab(j).stringa3 = 'I' AND
                                         gsezio_ven_tab(j).stringa5 = 'Y' And
                                         gsezio_ven_tab(j).stringa6 = 'B') THEN
                                        isElaboraOk:='Y';
                                    END IF;
                              ELSIF inGruppoReport = TI_LIQ_IVA_ISTSMSI THEN
                                    IF  (gsezio_ven_tab(j).stringa3 = 'I' AND
                                         gsezio_ven_tab(j).stringa4 = 'Y' And
                                         gsezio_ven_tab(j).stringa6 = 'B') THEN
                                        isElaboraOk:='Y';
                                    END IF;
                              Elsif inGruppoReport = TI_LIQ_IVA_ISTSNR Then
                                    IF  (gsezio_ven_tab(j).stringa3 = 'I' And    -- istituzionale
                                         gsezio_ven_tab(j).stringa6 = 'S' And    -- ti_bene_servizio
                                        (gsezio_ven_tab(j).stringa5 = 'Y' Or     -- intra_ue
                                         gsezio_ven_tab(j).stringa4 = 'Y' Or     -- san marino senza iva
                                         gsezio_ven_tab(j).stringa7 = 'Y')) Then -- extra_ue
                                        isElaboraOk:='Y';
                                    END IF;
                              ELSIF inGruppoReport = TI_LIQ_IVA_ISTSPLIT THEN
                                    IF  (gsezio_ven_tab(j).stringa3 = 'I' And    -- istituzionale
                                         gsezio_ven_tab(j).stringa8 = 'Y')  Then -- split payment
                                        isElaboraOk:='Y';
                                    END IF;
                              END IF;
                              --aCodiceSezionale:=gsezio_ven_tab(j).stringa1;
                              --isElaboraOk:='Y';

                           END IF;

                           IF isElaboraOk = 'Y' THEN

                              CNRCTB260.calcolaLiquidazione(repID,
                                                            aCdCdsOrigine,
                                                            aCdUoOrigine,
                                                            aEsercizio,
                                                            aCodiceSezionale,
                                                            aDataInizio,
                                                            aDataFine,
                                                            aTipoRegistro,
                                                            aTipoReport,
                                                            i,
                                                            aGruppoStm,
                                                            aSottoGruppoStm,
                                                            aDescrizioneGruppoStm,
                                                            gparametri_tab(5).stringa1,
                                                            gparametri_tab(6).stringa1,
                                                            aEsercizioReale,
                                                            inGruppoReport);

                           END IF;

                        END LOOP;

                     END IF;

                  END LOOP;

               END;

            END IF;

      -------------------------------------------------------------------------------------------
      -- Scrittura su LIQUIDAZIONE_IVA dei dati di liquidazione IVA calcolati

      ELSIF aPasso = 3 THEN

            CNRCTB260.scritturaLiquidazione(repID,
                                            aCdCdsOrigine,
                                            aEsercizio,
                                            aCdUoOrigine,
                                            aDataInizio,
                                            aDataFine,
                                            aTipoRegistro,
                                            aTipoReport,
                                            aGruppoStm,
                                            aSottoGruppoStm,
                                            aDescrizioneGruppoStm,
                                            inGruppoReport);

      END IF;

   END LOOP;

END calcolaLiquidazione;


-- =================================================================================================
-- Aggiornamento dati per Liquidazione definitiva
-- =================================================================================================
PROCEDURE liquidazioneDefinitiva
   (
    aCdCdsOrigine VARCHAR2,
    aCdUoOrigine VARCHAR2,
    aEsercizio NUMBER,
    aCdTipoSezionale VARCHAR2,
    aDataInizio DATE,
    aDataFine DATE,
    aTipoStampa VARCHAR2,
    aTipoRegistro VARCHAR2,
    aTipoReport VARCHAR2,
    aRistampa VARCHAR2,
    repID INTEGER,
    id_utente VARCHAR2,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2
   ) IS
   aPasso NUMBER;
   aNumeroSezionali INTEGER;
   aCodiceSezionale VARCHAR2(10);
   aTipoRegistroAltro CHAR(1);

   i BINARY_INTEGER;
   j BINARY_INTEGER;

BEGIN
   -------------------------------------------------------------------------------------------------
   -- Ciclo per l'esecuzione delle query di valorizzazione dei campi per l'aggiornamento della
   -- liquidazione definitiva

   FOR aPasso IN 1 .. 3

   LOOP

      ----------------------------------------------------------------------------------------------
      -- Crea record liquidazione definitiva

      IF    aPasso = 1 THEN

            CNRCTB260.insRecLiquidazioneDef(repID,
                                            aCdCdsOrigine,
                                            aCdUoOrigine,
                                            aEsercizio,
                                            aDataInizio,
                                            aDataFine,
                                            id_utente,
                                            inGruppoReport);

      ----------------------------------------------------------------------------------------------
      -- Aggiornamento fatture a esigibilitא differita su tabella REPORT_DETTAGLIO

      ELSIF aPasso = 2 THEN

            BEGIN

               FOR i IN 1 .. 2

               LOOP

                  IF i = 1 THEN
                     aNumeroSezionali:=gsezio_acq_tab.COUNT;
                  ELSE
                     aNumeroSezionali:=gsezio_ven_tab.COUNT;
                  END IF;

                  IF aNumeroSezionali > 0 THEN

                     FOR j IN 1 .. aNumeroSezionali

                     LOOP

                         IF i = 1 THEN
                            aCodiceSezionale:=gsezio_acq_tab(j).stringa1;
                            aTipoRegistroAltro:='A';
                         ELSE
                            aCodiceSezionale:=gsezio_ven_tab(j).stringa1;
                            aTipoRegistroAltro:='V';
                         END IF;

                         If (i = 1 And
                             (
                             (inGruppoReport = 'C' And gsezio_acq_tab(j).stringa3 = 'C')
                             Or
                             (inGruppoReport = 'I' And gsezio_acq_tab(j).stringa3 = 'I' And gsezio_acq_tab(j).stringa5 = 'Y' And gsezio_acq_tab(j).stringa6 = 'B')
                             Or
                             (inGruppoReport = 'S' And gsezio_acq_tab(j).stringa3 = 'I' And gsezio_acq_tab(j).stringa4 = 'Y' And gsezio_acq_tab(j).stringa6 = 'B')
                              Or
                             -- Servizi non residenti ,istituzionale ,(intra_ue o extra_ue),servizi anche per i servizi san marino senza iva
                             (inGruppoReport = 'X' And gsezio_acq_tab(j).stringa3 = 'I' And
                             (gsezio_acq_tab(j).stringa5 = 'Y' Or gsezio_acq_tab(j).stringa7 = 'Y' Or gsezio_acq_tab(j).stringa4 = 'Y') And gsezio_acq_tab(j).stringa6 = 'S')
                             )
                              Or
                             -- Servizi istituzionale split payment
                             (inGruppoReport = 'P' And gsezio_acq_tab(j).stringa3 = 'I' And
                             gsezio_acq_tab(j).stringa8 = 'Y')
                            )
                            Or
                            (i = 2 And
                             (
                             (inGruppoReport = 'C' And gsezio_ven_tab(j).stringa3 = 'C')
                             Or
                             (inGruppoReport = 'I' And gsezio_ven_tab(j).stringa3 = 'I' And gsezio_ven_tab(j).stringa5 = 'Y' And gsezio_ven_tab(j).stringa6 = 'B')
                             Or
                             (inGruppoReport = 'S' And gsezio_ven_tab(j).stringa3 = 'I' And gsezio_ven_tab(j).stringa4 = 'Y' And gsezio_ven_tab(j).stringa6 = 'B')
                             Or
                             -- Servizi non residenti ,istituzionale ,(intra_ue o extra_ue),servizi  anche per i servizi san marino senza iva
                             (inGruppoReport = 'X' And gsezio_ven_tab(j).stringa3 = 'I' And
                             (gsezio_ven_tab(j).stringa5 = 'Y' Or gsezio_ven_tab(j).stringa7 = 'Y' Or gsezio_ven_tab(j).stringa4 = 'Y') And gsezio_ven_tab(j).stringa6 = 'S')
                             )
                              Or
                             -- Servizi istituzionale split payment
                             (inGruppoReport = 'P' And gsezio_ven_tab(j).stringa3 = 'I' And
                             gsezio_ven_tab(j).stringa8 = 'Y')
                            )  Then

                                 CNRCTB260.insDettaglioPerLiquidazione(repID,
                                                                       aCdCdsOrigine,
                                                                       aCdUoOrigine,
                                                                       aEsercizio,
                                                                       aCodiceSezionale,
                                                                       aDataInizio,
                                                                       aDataFine,
                                                                       aTipoRegistroAltro,
                                                                       id_utente,
                                                                       inGruppoReport);
                         End If;

                     END LOOP;

                  END IF;

               END LOOP;

            END;

      ---------------------------------------------------------------------------------------------
      -- Inserimento nella tabella REPORT STATO di una riga (solo per liquidazione definitiva)

      ELSIF aPasso = 3 THEN

            CNRCTB255.inserisciInReportStato(aCdCdsOrigine,
                                             aCdUoOrigine,
                                             aEsercizio,
                                             aCdTipoSezionale,
                                             aDataInizio,
                                             aDataFine,
                                             aTipoRegistro,
                                             inGruppoReport,
                                             aTipoReportStato,
                                             id_utente);

      END IF;

   END LOOP;

END liquidazioneDefinitiva;

-- =================================================================================================
-- Memorizzazione parametri di uso della procedura di stampa
-- =================================================================================================
PROCEDURE valorizzaParametri
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoStampa VARCHAR2,
    inTipoRegistro VARCHAR2,
    inGruppoReport VARCHAR2
   ) IS
   i BINARY_INTEGER;
   j BINARY_INTEGER;
   lerrMsgNotFound VARCHAR2(200);
   ltrovatiRecord INTEGER;
   ltrovatiRecordEsig INTEGER;
   aStatement VARCHAR2(2000);
   aCdAnag ANAGRAFICO.cd_anag%TYPE;

   aRecTipoSezionale TIPO_SEZIONALE%ROWTYPE;
   aRecAnagrafico ANAGRAFICO%ROWTYPE;

   gen_cv GenericCurTyp;
   UOENTE unita_organizzativa%rowtype:= CNRCTB020.GETUOENTE(inEsercizio);
BEGIN
   -------------------------------------------------------------------------------------------------
   -- Azzeramento tabella generale dei parametri

   gparametri_tab.DELETE;
   gsezio_acq_tab.DELETE;
   gsezio_ven_tab.DELETE;
   gtrimestri_tab.DELETE;
   gmesi_tab.DELETE;

   -------------------------------------------------------------------------------------------------
   -- Riempimento della tabella mesi e trimestri

   CalcolaMesiTrimestri;

   ------------------------------------------------------------------------------------------------
   -- Valorizzazione parametri generali

   FOR i IN 1 .. 8

   LOOP

      BEGIN

         -- Memorizzazione codice IVA di riferimento per righe di tipo istituzionale per fatturazione
         -- passiva promiscua. NON RICHIESTO ALLO STATO ATTUALE

         IF    i = 1 THEN

               ----------------------------------------------------------------------
               -- Tabella gparametri_tab
               -- riga 1 = codice IVA istituzionale per promiscuo
               -- riga 1 stringa 1 = CODICE_IVA_PROMISCUO_ISTITUZIONALE = NULL
               -- riga 1 stringa 2 = DESCR_CODICE_IVA_PROMISCUO_ISTITUZIONALE = NULL
               -- riga 1 stringa 3 = VALORE = NULL
               -- riga 1 stringa 4 = NULL
               ----------------------------------------------------------------------

               lerrMsgNotFound:='Identificativo codice IVA istituzionale per promiscuo non trovato';
--
--             SELECT A.VAL01 INTO gparametri_tab(i).stringa1
--             FROM   CONFIGURAZIONE_CNR A
--             WHERE  A.CD_CHIAVE_PRIMARIA = 'CODICE_IVA_PROMISCUO_ISTITUZIONALE';
--
--
--             SELECT A.VAL01 INTO gparametri_tab(i).stringa2
--             FROM   CONFIGURAZIONE_CNR A
--             WHERE  A.CD_CHIAVE_SECONDARIA = 'DESCR_CODICE_IVA_PROMISCUO_ISTITUZIONALE';

               gparametri_tab(i).stringa1:='';
               gparametri_tab(i).stringa2:='';
               gparametri_tab(i).stringa3:=gparametri_tab(i).stringa1;
               gparametri_tab(i).stringa4:=gparametri_tab(i).stringa2;

         -- Memorizzazione identificativo della moneta ITALIA per la sua esclusione in sede di
         -- stampa dei registri

         ELSIF i = 2 THEN

               ----------------------------------------------------------------------
               -- Tabella gparametri_tab
               -- riga 2 = Identificativo moneta ITALIA
               -- riga 2 stringa 1 = 'EURO'
               ----------------------------------------------------------------------

               lerrMsgNotFound:='Identificativo moneta ITALIA non trovato';

               gparametri_tab(i).stringa1:= 'EURO';

         -- Determinazione dei riferimenti ai sezionali (VENDITE)

         ELSIF i = 3 THEN
               IF (inTipoRegistro = 'V' OR inTipoRegistro = '*') THEN
                  j:=0;
                  lerrMsgNotFound:='Riferimenti ai sezionali vendita in stampa non trovati';

                  -- Esame del parametro in input e memorizzazione dei registri in input
                  -- Estrazione di tutti i sezionali di interesse

                  aStatement:=componiStatementSezionale(inCdCdsOrigine,
                                                        inCdUoOrigine,
                                                        inEsercizio,
                                                        inCdTipoSezionale,
                                                        inTipoStampa,
                                                        'V',
                                                        inGruppoReport);

                  BEGIN

                     OPEN gen_cv FOR
                          aStatement;

                     LOOP

                        FETCH gen_cv INTO
                              aRecTipoSezionale.cd_tipo_sezionale,
                              aRecTipoSezionale.ds_tipo_sezionale,
                              aRecTipoSezionale.ti_istituz_commerc,
                              aRecTipoSezionale.fl_san_marino_senza_iva,
                              aRecTipoSezionale.fl_intra_ue,
                              aRecTipoSezionale.ti_bene_servizio,
                              aRecTipoSezionale.fl_extra_ue,
                              aRecTipoSezionale.fl_split_payment;

                        EXIT WHEN gen_cv%NOTFOUND;

                        ltrovatiRecord:=0;
                        ltrovatiRecordEsig:=0;

                        -- Memorizzazione della descrizione del sezionale di ingresso.

                        IF inCdTipoSezionale = aRecTipoSezionale.cd_tipo_sezionale THEN
                           gparametri_tab(i).stringa1:=NVL(aRecTipoSezionale.ds_tipo_sezionale,' ');
                        ELSE
                           gparametri_tab(i).stringa1:='TUTTI I SEZIONALI';
                        END IF;

                        -- Verifica che per quel sezionale esistano record in stampa si esclude l'elaborazione
                        -- della liquidazione di massa e la gestione delle liquidazioni al centro

                        IF (
                              (inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA OR
                               inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA_PRV OR
                               inTipoStampa = TI_ELAB_LIQUIDAZIONE OR
                               inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF
                              ) AND
                             inCdCdsOrigine = UOENTE.cd_unita_padre
                           ) THEN

                           ltrovatiRecord:=0;
                           ltrovatiRecordEsig:=0;

                        ELSE

                           BEGIN

                              SELECT COUNT(*) INTO ltrovatiRecord
                              FROM   DUAL
                              WHERE  EXISTS
                                        (SELECT 1
                                         FROM   V_REGISTRO_IVA_VENDITE
                                         WHERE  cd_cds_origine = inCdCdsOrigine AND
                                                cd_uo_origine = inCdUoOrigine AND
                                                esercizio = inEsercizio AND
                                                cd_tipo_sezionale = aRecTipoSezionale.cd_tipo_sezionale  AND
                                                (data_emissione BETWEEN inDataInizio AND inDataFine));

                              IF (inTipoStampa = 'DIFFERITA' OR
                                  inTipoStampa = 'LIQUIDAZIONE' OR
                                  inTipoStampa = 'LIQUIDAZIONE_DEF') THEN

                                 SELECT COUNT(*) INTO ltrovatiRecordEsig
                                 FROM   DUAL
                                 WHERE  EXISTS
                                           (SELECT 1
                                            FROM   V_LIQUID_IVA_VENDITE_ESIG
                                            WHERE  cd_cds_origine = inCdCdsOrigine AND
                                                   cd_uo_origine = inCdUoOrigine AND
                                                   esercizio = inEsercizio AND
                                                   cd_tipo_sezionale = aRecTipoSezionale.cd_tipo_sezionale AND
                                                   (
                                                       (data_esigibilita IS NULL AND
                                                        data_emissione <= inDataFine)
                                                    OR
                                                       (data_esigibilita IS NOT NULL)
                                                   )
                                            );

                              END IF;

                           END;

                        END IF;

                        -- Si memorizzano i sezionali da elaborare sulla matrice dei sezionali di vendita alla riga J°
                        -- Si memorizza il fatto che il sezionale contenga o meno valori contabili

                        j:=j + 1;
                        gsezio_ven_tab(j).stringa1:=aRecTipoSezionale.cd_tipo_sezionale;
                        gsezio_ven_tab(j).stringa2:=aRecTipoSezionale.ds_tipo_sezionale;
                        gsezio_ven_tab(j).stringa3:=aRecTipoSezionale.ti_istituz_commerc;
                        gsezio_ven_tab(j).stringa4:=aRecTipoSezionale.fl_san_marino_senza_iva;
                        gsezio_ven_tab(j).stringa5:=aRecTipoSezionale.fl_intra_ue;
                        gsezio_ven_tab(j).stringa6:=aRecTipoSezionale.ti_bene_servizio;
                        -- RP
                        gsezio_ven_tab(j).stringa7:=aRecTipoSezionale.fl_extra_ue;
                        gsezio_ven_tab(j).stringa8:=aRecTipoSezionale.fl_split_payment;
                        gsezio_ven_tab(j).intero:=0;

                        IF (ltrovatiRecord + ltrovatiRecordEsig) > 0 THEN
                           gsezio_ven_tab(j).intero:=1;
                        END IF;

                     END LOOP;

                     CLOSE gen_cv;

                  END;

               END IF;

         -- Determinazione dei riferimenti ai sezionali (ACQUISTI)

         ELSIF i = 4 THEN

               IF (inTipoRegistro = 'A' OR inTipoRegistro = '*') THEN
                  j:=0;
                  lerrMsgNotFound:='Riferimenti ai sezionali acquisti in stampa non trovati';

                  -- Esame del parametro in input e memorizzazione dei registri in input
                  -- Estrazione di tutti i sezionali di interesse

                  aStatement:=componiStatementSezionale(inCdCdsOrigine,
                                                        inCdUoOrigine,
                                                        inEsercizio,
                                                        inCdTipoSezionale,
                                                        inTipoStampa,
                                                        'A',
                                                        inGruppoReport);
                  BEGIN

                     OPEN gen_cv FOR
                          aStatement;

                     LOOP

                        FETCH gen_cv INTO
                              aRecTipoSezionale.cd_tipo_sezionale,
                              aRecTipoSezionale.ds_tipo_sezionale,
                              aRecTipoSezionale.ti_istituz_commerc,
                              aRecTipoSezionale.fl_san_marino_senza_iva,
                              aRecTipoSezionale.fl_intra_ue,
                              aRecTipoSezionale.ti_bene_servizio,
                              aRecTipoSezionale.fl_extra_ue,
                              aRecTipoSezionale.fl_split_payment;

                        EXIT WHEN gen_cv%NOTFOUND;

                        ltrovatiRecord:=0;
                        ltrovatiRecordEsig:=0;

                        -- Memorizzazione della descrizione del sezionale di ingresso.

                        IF inCdTipoSezionale = aRecTipoSezionale.cd_tipo_sezionale THEN
                           gparametri_tab(i).stringa1:=NVL(aRecTipoSezionale.ds_tipo_sezionale,' ');
                        ELSE
                           gparametri_tab(i).stringa1:='TUTTI I SEZIONALI';
                        END IF;

                        -- Verifica che per quel sezionale esistano record in stampa si esclude l'elaborazione
                        -- della liquidazione di massa e la gestione delle liquidazioni al centro

                        IF (
                              (inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA OR
                               inTipoStampa = TI_ELAB_LIQUIDAZIONE_MASSA_PRV OR
                               inTipoStampa = TI_ELAB_LIQUIDAZIONE OR
                               inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF
                              ) AND
                             inCdCdsOrigine = UOENTE.cd_unita_padre
                           ) THEN

                           ltrovatiRecord:=0;
                           ltrovatiRecordEsig:=0;

                        ELSE

                           BEGIN

                              SELECT COUNT(*) INTO ltrovatiRecord
                              FROM   DUAL
                              WHERE  EXISTS
                                        (SELECT 1
                                         FROM   V_REGISTRO_IVA_ACQUISTI
                                         WHERE  cd_cds_origine = inCdCdsOrigine AND
                                                cd_uo_origine = inCdUoOrigine AND
                                                esercizio = inEsercizio AND
                                                cd_tipo_sezionale = aRecTipoSezionale.cd_tipo_sezionale  AND
                                                (data_registrazione BETWEEN inDataInizio AND inDataFine));

                           END;
                              IF (inTipoStampa = 'DIFFERITA' OR
                                  inTipoStampa = 'LIQUIDAZIONE' OR
                                  inTipoStampa = 'LIQUIDAZIONE_DEF') THEN

                                 SELECT COUNT(*) INTO ltrovatiRecordEsig
                                 FROM   DUAL
                                 WHERE  EXISTS
                                           (SELECT 1
                                            FROM   V_LIQUID_IVA_ACQUISTI_ESIG
                                            WHERE  cd_cds_origine = inCdCdsOrigine AND
                                                   cd_uo_origine = inCdUoOrigine AND
                                                   esercizio = inEsercizio AND
                                                   cd_tipo_sezionale = aRecTipoSezionale.cd_tipo_sezionale AND
                                                   (
                                                       (data_esigibilita IS NULL AND
                                                        data_emissione <= inDataFine)
                                                    OR
                                                       (data_esigibilita IS NOT NULL)
                                                   )
                                            );
                              END IF;

                       END IF;

                        -- Si memorizzano i sezionali da elaborare sulla matrice dei sezionali di vendita alla riga J°
                        -- Si memorizza il fatto che il sezionale contenga o meno valori contabili

                        j:=j + 1;
                        gsezio_acq_tab(j).stringa1:=aRecTipoSezionale.cd_tipo_sezionale;
                        gsezio_acq_tab(j).stringa2:=aRecTipoSezionale.ds_tipo_sezionale;
                        gsezio_acq_tab(j).stringa3:=aRecTipoSezionale.ti_istituz_commerc;
                        gsezio_acq_tab(j).stringa4:=aRecTipoSezionale.fl_san_marino_senza_iva;
                        gsezio_acq_tab(j).stringa5:=aRecTipoSezionale.fl_intra_ue;
                        gsezio_acq_tab(j).stringa6:=aRecTipoSezionale.ti_bene_servizio;
                        -- RP
                        gsezio_acq_tab(j).stringa7:=aRecTipoSezionale.fl_extra_ue;
                        gsezio_acq_tab(j).stringa8:=aRecTipoSezionale.fl_split_payment;
                        gsezio_acq_tab(j).intero:=0;

                        IF (ltrovatiRecord + ltrovatiRecordEsig) > 0 THEN
                           gsezio_acq_tab(j).intero:=1;
                        END IF;

                     END LOOP;

                     CLOSE gen_cv;

                  END;

               END IF;

         -- Indicatore di esercizio di riferimento in Euro o meno

         ELSIF i = 5 THEN

               gparametri_tab(i).stringa1:='Y';

         -- Indicatore di prevista gestione del prorata

         ELSIF i = 6 THEN

               lerrMsgNotFound:='Identificativo attivazione prorata non trovato';

               gparametri_tab(i).stringa1:=CNRCTB015.getVal01PerChiave(inEsercizio,
                                                                       K_PRIMA_GSTIVA,
                                                                       K_SECONDA_PRORATA_GSTIVA);

         -- Decodifica unitא organizzativa

         ELSIF i = 7 THEN

               lerrMsgNotFound:='Identificativo nome unita organizzativa non trovato';

               SELECT A.ds_unita_organizzativa INTO gparametri_tab(i).stringa1
               FROM   UNITA_ORGANIZZATIVA A
               WHERE  A.cd_unita_organizzativa = inCdUoOrigine;

         -- Recupero dati dell'anagrafico ente per intestazione

         ELSIF i = 8 THEN

               lerrMsgNotFound:='Identificativo anagrafico ente non trovato';

               aCdAnag:=CNRCTB015.getIm01PerChiave(CNRCTB080.CODICE_ANAG_ENTE_KEY1,
                                                   CNRCTB080.CODICE_ANAG_ENTE_KEY2);

               aRecAnagrafico:=CNRCTB080.getAnagDaCdAnag(aCdAnag);
               gparametri_tab(i).stringa1:=aRecAnagrafico.ragione_sociale;
               gparametri_tab(i).stringa2:=aRecAnagrafico.partita_iva;

         END IF;

      EXCEPTION
         WHEN NO_DATA_FOUND Then
              IBMERR001.RAISE_ERR_GENERICO (lerrMsgNotFound);
      END;

   END LOOP;

END valorizzaParametri;

-- =================================================================================================
-- Composizione statement per selezione su SEZIONALE JOIN TIPO_SEZIONALE
-- =================================================================================================
FUNCTION componiStatementSezionale
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    inCdTipoSezionale VARCHAR2,
    inTipoStampa VARCHAR2,
    aTipoRegistro VARCHAR2,
    inGruppoReport VARCHAR2
   ) RETURN VARCHAR2 IS
   aStatement VARCHAR2(2000);

BEGIN
   IF inCdTipoSezionale = '*' THEN

      -- E' richiesta l'elaborazione per tutti i sezionali

      aStatement:='SELECT DISTINCT A.cd_tipo_sezionale, B.ds_tipo_sezionale, B.ti_istituz_commerc, ' ||
                  'B.fl_san_marino_senza_iva, B.fl_intra_ue, B.ti_bene_servizio, b.fl_extra_ue, ' ||
                  'b.fl_split_payment ' ||
                  'FROM   SEZIONALE A, TIPO_SEZIONALE B ' ||
                  'WHERE  A.cd_cds = ' || '''' || inCdCdsOrigine || '''' || ' AND ' ||
                         'A.cd_unita_organizzativa = ' || '''' || inCdUoOrigine || '''' || ' AND ' ||
                         'A.esercizio = ' || inEsercizio  || ' AND ' ||
                         'B.cd_tipo_sezionale = A.cd_tipo_sezionale ' || ' AND ' ||
                         'B.ti_acquisti_vendite = ' || '''' || aTipoRegistro || '''';

      -- Si aggiunge il filtro sul gruppo sezionali in elaborazione in caso di riepilogativi per UO e liquidazione

      IF (inTipoStampa = TI_ELAB_RIEPILOGATIVO_UO OR
          inTipoStampa = TI_ELAB_LIQUIDAZIONE OR
          inTipoStampa = TI_ELAB_LIQUIDAZIONE_DEF) THEN
         IF    inGruppoReport = 'C' THEN
               aStatement:=aStatement || ' AND ' ||
                           'B.ti_istituz_commerc = ' || '''C''';
         ELSIF inGruppoReport = 'I' THEN
               aStatement:=aStatement || ' AND ' ||
                           'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                           'B.fl_intra_ue = ' || '''Y''' || ' AND ' ||
                           'B.ti_bene_servizio = ' || '''B''';
         ELSIF inGruppoReport = 'S' THEN
               aStatement:=aStatement || ' AND ' ||
                           'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                           'B.fl_san_marino_senza_iva = ' || '''Y''' || ' AND ' ||
                           'B.ti_bene_servizio = ' || '''B''';
         Elsif inGruppoReport = 'X' THEN
               aStatement:=aStatement || ' AND ' ||
                           'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                           '(B.fl_intra_ue = ' || '''Y''' || ' OR ' ||
                           ' B.fl_san_marino_senza_iva = ' || '''Y''' || ' OR ' ||
                           ' B.fl_extra_ue = ' || '''Y''' || ') AND ' ||
                           'B.ti_bene_servizio = ' || '''S''';
         Elsif inGruppoReport = 'P' THEN
               aStatement:=aStatement || ' AND ' ||
                           'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                           'B.fl_split_payment = ' || '''Y''';
         END IF;
      END IF;

      -- Si estraggono tutti i sezionali in caso di liquidazione di massa

      IF inTipoStampa IN (TI_ELAB_LIQUIDAZIONE_MASSA, TI_ELAB_LIQUIDAZIONE_MASSA_PRV) THEN
         aStatement:=aStatement || ' AND ' ||
                     '( ' ||
                          'B.ti_istituz_commerc = ' || '''C''' || ' OR ' ||
                            '(' ||
                                'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                                'B.fl_intra_ue = ' || '''Y''' || ' AND ' ||
                                'B.ti_bene_servizio = ' || '''B''' ||
                            ')' || ' OR ' ||
                            '(' ||
                                'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                                'B.fl_san_marino_senza_iva = ' || '''Y''' || ' AND ' ||
                                'B.ti_bene_servizio = ' || '''B''' ||
                            ')' || ' OR ' ||
                            '(' ||
                                'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                                '(B.fl_intra_ue = ' || '''Y''' || ' OR B.fl_extra_ue = ' || '''Y''' || ' OR B.fl_san_marino_senza_iva = ' || '''Y''' || ') AND ' ||
                                'B.ti_bene_servizio = ' || '''S''' ||
                            ')' || ' OR ' ||
                            '(' ||
                                'B.ti_istituz_commerc = ' || '''I''' || ' AND ' ||
                                'B.fl_split_payment = ' || '''Y'''||
                            ')' ||
                     ')';
      END IF;

      -- Si aggiunge il filtro sui soli registri commerciali in caso di stampa iva differita

      IF inTipoStampa = TI_ELAB_IVA_DIFFERITA THEN
         aStatement:=aStatement || ' AND ' ||
                     'B.ti_istituz_commerc = ' || '''C''';
      END IF;

   ELSE
      -- Si processa un singolo sezionale

      aStatement:='SELECT DISTINCT A.cd_tipo_sezionale, B.ds_tipo_sezionale, B.ti_istituz_commerc, ' ||
                  'B.fl_san_marino_senza_iva, B.fl_intra_ue, B.ti_bene_servizio, b.fl_extra_ue, ' ||
                  'b.fl_split_payment ' ||
                  'FROM   SEZIONALE A, TIPO_SEZIONALE B ' ||
                  'WHERE  A.cd_cds = ' || '''' || inCdCdsOrigine || '''' || ' AND ' ||
                         'A.cd_unita_organizzativa = ' || '''' || inCdUoOrigine || '''' || ' AND ' ||
                         'A.esercizio = ' || inEsercizio  || ' AND ' ||
                         'A.cd_tipo_sezionale = ' || '''' || inCdTipoSezionale || '''' || ' AND ' ||
                         'B.cd_tipo_sezionale = A.cd_tipo_sezionale ' || ' AND ' ||
                         'B.ti_acquisti_vendite = ' || '''' || aTipoRegistro || '''';

   END IF;

   RETURN aStatement;

END componiStatementSezionale;

-- =================================================================================================
-- Aggiornamento dello stato del registro da B ad C
-- =================================================================================================
PROCEDURE conferma_registro
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aEsercizio NUMBER,
    aCodiceSezionale VARCHAR2,
    aDataInizio DATE,
    aDataFine DATE,
    aUtente VARCHAR2
   ) IS
   aTipoAzione CHAR(1);

BEGIN

   aTipoAzione:='C';

   CNRCTB265.confermaAnnullaRegistro(aCdCds,
                                     aCdUo,
                                     aEsercizio,
                                     aCodiceSezionale,
                                     aDataInizio,
                                     aDataFine,
                                     aUtente,
                                     aTipoAzione);

END CONFERMA_REGISTRO;

-- =================================================================================================
-- Annullamento della stampa definitiva di un registro IVA
-- =================================================================================================
PROCEDURE annulla_registro
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aEsercizio NUMBER,
    aCodiceSezionale VARCHAR2,
    aDataInizio DATE,
    aDataFine DATE,
    aUtente VARCHAR2
   ) IS
   aTipoAzione CHAR(1);

BEGIN

   aTipoAzione:='A';

   CNRCTB265.confermaAnnullaRegistro(aCdCds,
                                     aCdUo,
                                     aEsercizio,
                                     aCodiceSezionale,
                                     aDataInizio,
                                     aDataFine,
                                     aUtente,
                                     aTipoAzione);

END annulla_registro;

-- =================================================================================================
-- Costruisci array mesi e trimestri
-- =================================================================================================
PROCEDURE CalcolaMesiTrimestri
   AS
   idMese VARCHAR2(20);
   idTrimestre VARCHAR2(20);
   i BINARY_INTEGER;

BEGIN

   FOR i IN 1 .. 12

   LOOP

      BEGIN

         IF    i = 1 THEN
               idMese:='GENNAIO';
               idTrimestre:='I TRIMESTRE';
         ELSIF i = 2 THEN
               idMese:='FEBBRAIO';
               idTrimestre:='I TRIMESTRE';
         ELSIF i = 3 THEN
               idMese:='MARZO';
               idTrimestre:='I TRIMESTRE';
         ELSIF i = 4 THEN
               idMese:='APRILE';
               idTrimestre:='II TRIMESTRE';
         ELSIF i = 5 THEN
               idMese:='MAGGIO';
               idTrimestre:='II TRIMESTRE';
         ELSIF i = 6 THEN
               idMese:='GIUGNO';
               idTrimestre:='II TRIMESTRE';
         ELSIF i = 7 THEN
               idMese:='LUGLIO';
               idTrimestre:='III TRIMESTRE';
         ELSIF i = 8 THEN
               idMese:='AGOSTO';
               idTrimestre:='III TRIMESTRE';
         ELSIF i = 9 THEN
               idMese:='SETTEMBRE';
               idTrimestre:='III TRIMESTRE';
         ELSIF i = 10 THEN
               idMese:='OTTOBRE';
               idTrimestre:='IV TRIMESTRE';
         ELSIF i = 11 THEN
               idMese:='NOVEMBRE';
               idTrimestre:='IV TRIMESTRE';
         ELSIF i = 12 THEN
               idMese:='DICEMBRE';
               idTrimestre:='IV TRIMESTRE';
         END IF;

         gmesi_tab(i).stringa1:=idMese;
         gtrimestri_tab(i).stringa1:=idTrimestre;

      END;

   END LOOP;

END CalcolaMesiTrimestri;

END CNRCTB250; -- PACKAGE END;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy