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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB255" AS

-- =================================================================================================
-- Controllo entrate presenti in tabella REPORT_STATO valorizzando il parametro aCodiceSezionale
-- =================================================================================================
PROCEDURE getStatoReportStatoSiCdSez
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    aCodiceSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2,
    flEsistePeriodo IN OUT INTEGER,
    flEsistePeriodoPrecedente IN OUT INTEGER,
    flEsistePeriodoPrima IN OUT INTEGER,
    flEsistePeriodoDopo IN OUT INTEGER
   ) IS
   aTipoDocumento CHAR(1);
   aDataInizioPrec DATE;
   aDataFinePrec DATE;

BEGIN

   aDataInizioPrec:=IBMUTL001.getAddMonth(inDataInizio, -1);
   aDataFinePrec:=IBMUTL001.getAddMonth(inDataFine, -1);
   flEsistePeriodo:=0;
   flEsistePeriodoPrecedente:=0;
   flEsistePeriodoPrima:=0;
   flEsistePeriodoDopo:=0;
   aTipoDocumento:='*';
   IF (aTipoReportStato = TI_RIEPILOGATIVO_ACQUISTI OR
       aTipoReportStato = TI_RIEPILOGATIVO_VENDITE OR
       aTipoReportStato = TI_LIQUIDAZIONE) THEN
      aTipoDocumento:=inGruppoReport;
   END IF;
--dbms_output.put_line('uo '||inCdUoOrigine);
--dbms_output.put_line('aTipoDocumento '||aTipoDocumento);
--dbms_output.put_line('aTipoReportStato '||aTipoReportStato);
--dbms_output.put_line('aCodiceSezionale '||aCodiceSezionale);
   -------------------------------------------------------------------------------------------------
   -- Esiste un record per il periodo selezionato

   SELECT COUNT(*) INTO flEsistePeriodo
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio = inDataInizio AND
                     dt_fine = inDataFine AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record per il periodo precedente

   SELECT COUNT(*) INTO flEsistePeriodoPrecedente
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio = aDataInizioPrec AND
                     dt_fine = aDataFinePrec AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record in qualsiasi periodo precedente al precedente

   SELECT COUNT(*) INTO flEsistePeriodoPrima
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_fine < aDataInizioPrec AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record in qualsiasi periodo successivo al corrente

   SELECT COUNT(*) INTO flEsistePeriodoDopo
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio > inDataFine AND
                     stato IN ('B','C'));

END getStatoReportStatoSiCdSez;

-- =================================================================================================
-- Controllo entrate presenti in tabella REPORT_STATO senza il parametro aCodiceSezionale
-- =================================================================================================
PROCEDURE getStatoReportStatoNoCdSez
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2,
    flEsistePeriodo IN OUT INTEGER,
    flEsistePeriodoPrecedente IN OUT INTEGER,
    flEsistePeriodoPrima IN OUT INTEGER,
    flEsistePeriodoDopo IN OUT INTEGER
   ) IS
   aTipoDocumento CHAR(1);
   aDataInizioPrec DATE;
   aDataFinePrec DATE;

BEGIN

   aDataInizioPrec:=IBMUTL001.getAddMonth(inDataInizio, -1);
   aDataFinePrec:=IBMUTL001.getAddMonth(inDataFine, -1);
   flEsistePeriodo:=0;
   flEsistePeriodoPrecedente:=0;
   flEsistePeriodoPrima:=0;
   flEsistePeriodoDopo:=0;
   aTipoDocumento:='*';
   IF (aTipoReportStato = TI_RIEPILOGATIVO_ACQUISTI OR
       aTipoReportStato = TI_RIEPILOGATIVO_VENDITE OR
       aTipoReportStato = TI_LIQUIDAZIONE) THEN
      aTipoDocumento:=inGruppoReport;
   END IF;

   -------------------------------------------------------------------------------------------------
   -- Esiste un record per il periodo selezionato
--dbms_output.put_line('uo '||inCdUoOrigine);
--dbms_output.put_line('aTipoDocumento '||aTipoDocumento);
--dbms_output.put_line('aTipoReportStato '||aTipoReportStato);

   SELECT COUNT(*) INTO flEsistePeriodo
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio = inDataInizio AND
                     dt_fine = inDataFine AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record per il periodo precedente

   SELECT COUNT(*) INTO flEsistePeriodoPrecedente
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio = aDataInizioPrec AND
                     dt_fine = aDataFinePrec AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record in qualsiasi periodo precedente al precedente

   SELECT COUNT(*) INTO flEsistePeriodoPrima
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_fine < aDataInizioPrec AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record in qualsiasi periodo successivo al corrente

   SELECT COUNT(*) INTO flEsistePeriodoDopo
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     ti_documento = aTipoDocumento AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio > inDataFine AND
                     stato IN ('B','C'));

END getStatoReportStatoNoCdSez;

-- =================================================================================================
-- Controllo entrate presenti in tabella REPORT_STATO senza il parametro gruppo report
-- =================================================================================================
PROCEDURE getStatoReportStatoNoGruppo
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    aCodiceSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    aTipoReportStato VARCHAR2,
    flEsistePeriodo IN OUT INTEGER,
    flEsistePeriodoPrecedente IN OUT INTEGER,
    flEsistePeriodoPrima IN OUT INTEGER,
    flEsistePeriodoDopo IN OUT INTEGER
   ) IS
   aDataInizioPrec DATE;
   aDataFinePrec DATE;

BEGIN

   aDataInizioPrec:=IBMUTL001.getAddMonth(inDataInizio, -1);
   aDataFinePrec:=IBMUTL001.getAddMonth(inDataFine, -1);
   flEsistePeriodo:=0;
   flEsistePeriodoPrecedente:=0;
   flEsistePeriodoPrima:=0;
   flEsistePeriodoDopo:=0;

   -------------------------------------------------------------------------------------------------
   -- Esiste un record per il periodo selezionato

   SELECT COUNT(*) INTO flEsistePeriodo
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio = inDataInizio AND
                     dt_fine = inDataFine AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record per il periodo precedente

   SELECT COUNT(*) INTO flEsistePeriodoPrecedente
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio = aDataInizioPrec AND
                     dt_fine = aDataFinePrec AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record in qualsiasi periodo precedente al precedente

   SELECT COUNT(*) INTO flEsistePeriodoPrima
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     tipo_report = aTipoReportStato AND
                     dt_fine < aDataInizioPrec AND
                     stato IN ('B','C'));

   -------------------------------------------------------------------------------------------------
   -- Esiste un record in qualsiasi periodo successivo al corrente

   SELECT COUNT(*) INTO flEsistePeriodoDopo
   FROM   DUAL
   WHERE  EXISTS
             (SELECT 1
              FROM   REPORT_STATO
              WHERE  cd_cds = inCdCdsOrigine AND
                     cd_unita_organizzativa = inCdUoOrigine AND
                     cd_tipo_sezionale = aCodiceSezionale AND
                     tipo_report = aTipoReportStato AND
                     dt_inizio > inDataFine AND
                     stato IN ('B','C'));

 END getStatoReportStatoNoGruppo;


-- =================================================================================================
-- Inserimento record in REPORT_DETTAGLIO
-- =================================================================================================
PROCEDURE insReportDettaglio
   (
    aRecReportDettaglio REPORT_DETTAGLIO%ROWTYPE
   ) IS

BEGIN

   INSERT INTO REPORT_DETTAGLIO
          (cd_cds,
           cd_unita_organizzativa,
           esercizio,
           tipo_report,
           cd_tipo_sezionale,
           data_inizio,
           data_fine,
           ti_documento,
           pg_documento,
           cd_cds_altro,
           cd_uo_altro,
           dacr,
           utcr,
           duva,
           utuv,
           pg_ver_rec)
   VALUES (aRecReportDettaglio.cd_cds,
           aRecReportDettaglio.cd_unita_organizzativa,
           aRecReportDettaglio.esercizio,
           aRecReportDettaglio.tipo_report,
           aRecReportDettaglio.cd_tipo_sezionale,
           aRecReportDettaglio.data_inizio,
           aRecReportDettaglio.data_fine,
           aRecReportDettaglio.ti_documento,
           aRecReportDettaglio.pg_documento,
           aRecReportDettaglio.cd_cds_altro,
           aRecReportDettaglio.cd_uo_altro,
           aRecReportDettaglio.dacr,
           aRecReportDettaglio.utcr,
           aRecReportDettaglio.duva,
           aRecReportDettaglio.utuv,
           aRecReportDettaglio.pg_ver_rec);

EXCEPTION

   WHEN DUP_VAL_ON_INDEX THEN
        IBMERR001.RAISE_ERR_GENERICO
           ('Chiave duplicata in inserimento dettaglio fatture su tabella REPORT_DETTAGLIO');

END insReportDettaglio;

-- =================================================================================================
-- Inserimento riga nella tabella REPORT STATO
-- =================================================================================================
PROCEDURE inserisciInReportStato
   (
    inCdCdsOrigine VARCHAR2,
    inCdUoOrigine VARCHAR2,
    inEsercizio NUMBER,
    aCodiceSezionale VARCHAR2,
    inDataInizio DATE,
    inDataFine DATE,
    inTipoRegistro VARCHAR2,
    inGruppoReport VARCHAR2,
    aTipoReportStato VARCHAR2,
    idUtente VARCHAR2
   ) IS
   aTipoDocumento CHAR(1);

BEGIN

   aTipoDocumento:='*';
   IF (aTipoReportStato = TI_RIEPILOGATIVO_ACQUISTI OR
       aTipoReportStato = TI_RIEPILOGATIVO_VENDITE OR
       aTipoReportStato = TI_LIQUIDAZIONE) THEN
      aTipoDocumento:=inGruppoReport;
   END IF;

   -- insert in REPORT_STATO

   INSERT INTO REPORT_STATO
          (cd_cds,
           cd_unita_organizzativa,
           esercizio,
           cd_tipo_Sezionale,
           ti_documento,
           tipo_report,
           dt_inizio,
           dt_fine,
           stato,
           dacr,
           duva,
           utcr,
           utuv,
           pg_ver_rec)
   VALUES (inCdCdsOrigine,
           inCdUoOrigine,
           inEsercizio,
           aCodiceSezionale,
           aTipoDocumento,
           aTipoReportStato,
           inDataInizio,
           inDataFine,
           'B',
           sysdate,
           sysdate,
           idUtente,
           idUtente,
           1);

EXCEPTION

   WHEN DUP_VAL_ON_INDEX THEN
        IBMERR001.RAISE_ERR_GENERICO
           ('Chiave duplicata in inserimento in tabella REPORT_STATO. ' ||
            'La stampa ' || aTipoReportStato || ' risulta già presente in stato definitivo');

END inserisciInReportStato;

-- =================================================================================================
-- Valorizza la data di inizio stampa registro IVA o di liquidazione di una fattura
-- =================================================================================================
PROCEDURE getIsFatturaElaborataIva
   (
    aCdCdsOrigine VARCHAR2,
    aCdUoOrigine VARCHAR2,
    aEsercizio NUMBER,
    aPgFattura NUMBER,
    aPgRiga NUMBER,
    aTipoFattura VARCHAR2,
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aDtInizioStmRegistro IN OUT DATE,
    aDtInizioStmLiquidazione IN OUT DATE
   ) IS
   i BINARY_INTEGER;
   aTipoReport VARCHAR2(50);
   aRecReportDettaglio REPORT_DETTAGLIO%ROWTYPE;

BEGIN

   FOR i IN 1 .. 3

   LOOP

      IF    i = 1 THEN
            aTipoReport:=TI_REGISTRO_VENDITE;
      ELSIF i = 2 THEN
            aTipoReport:=TI_LIQUIDAZIONE_VEN_ESIGIB;
      ELSIF i = 3 THEN
            aTipoReport:=TI_LIQUIDAZIONE_ACQ_ESIGIB;
      END IF;

      BEGIN

         SELECT * INTO aRecReportDettaglio
         FROM   REPORT_DETTAGLIO
         WHERE  cd_cds = aCdCdsOrigine AND
                cd_unita_organizzativa = aCdUoOrigine AND
                esercizio = aEsercizio AND
                tipo_report = aTipoReport And
                (aTipoReport =TI_REGISTRO_VENDITE Or
                pg_riga_documento =aPgRiga ) And
                ti_documento = aTipoFattura AND
                pg_documento = aPgFattura AND
                cd_cds_altro = aCdCds AND
                cd_uo_altro = aCdUo;

      EXCEPTION

         WHEN no_data_found THEN
              aRecReportDettaglio:=NULL;

      END;

      IF    i = 1 THEN
            aDtInizioStmRegistro:=aRecReportDettaglio.data_inizio;
      ELSIF i = 2 THEN
            aDtInizioStmLiquidazione:=aRecReportDettaglio.data_inizio;
       ELSIF i = 3 THEN
            aDtInizioStmLiquidazione:=aRecReportDettaglio.data_inizio;
      END IF;

   END LOOP;

END getIsFatturaElaborataIva;

-- =================================================================================================
-- Valorizza la data di inizio stampa registro IVA o di liquidazione di un sezionale per una data UO
-- =================================================================================================
PROCEDURE getIsSezionaleElaborataIva
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aCdSezionale VARCHAR2,
    aDtInizio DATE,
    aDtFine DATE,
    aTipoDocumentoReportStato VARCHAR2,
    aDtInizioStmRegistro IN OUT DATE,
    aDtInizioStmLiquidazione IN OUT DATE
   ) IS
   i BINARY_INTEGER;
   aTipoReport VARCHAR2(50);
   aTipoDocumento CHAR(1);
   aTipoSezionale VARCHAR2(50);
   aRecReportStato REPORT_STATO%ROWTYPE;

BEGIN

   FOR i IN 1 .. 2

   LOOP

      IF    i = 1 THEN
            aTipoReport:=TI_REGISTRO_VENDITE;
            aTipoDocumento:='*';
            aTipoSezionale:=aCdSezionale;
      ELSIF i = 2 THEN
            aTipoReport:=TI_LIQUIDAZIONE;
            aTipoDocumento:=aTipoDocumentoReportStato;
            aTipoSezionale:='*';
      END IF;

      BEGIN

         SELECT * INTO aRecReportStato
         FROM   REPORT_STATO
         WHERE  cd_cds = aCdCds AND
                cd_unita_organizzativa = aCdUo AND
                cd_tipo_sezionale = aTipoSezionale AND
                ti_documento = aTipoDocumento AND
                tipo_report = aTipoReport AND
                dt_inizio = aDtInizio AND
                dt_fine = aDtFine;

      EXCEPTION

         WHEN no_data_found THEN
              aRecReportStato:=NULL;

      END;

      IF    i = 1 THEN
            aDtInizioStmRegistro:=aRecReportStato.dt_inizio;
      ELSIF i = 2 THEN
            aDtInizioStmLiquidazione:=aRecReportStato.dt_inizio;
      END IF;

   END LOOP;

END getIsSezionaleElaborataIva;

-- =================================================================================================
-- Ritorna un record della REPORT_STATO
-- =================================================================================================
FUNCTION getReportStato
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aCdSezionale VARCHAR2,
    aTiDocumento VARCHAR2,
    aTipoReport VARCHAR2,
    aDtInizio DATE,
    aDtFine DATE,
    aStato VARCHAR2
   ) RETURN REPORT_STATO%ROWTYPE IS
   aRecReportStato REPORT_STATO%ROWTYPE;

BEGIN

   IF aStato IS NULL THEN

      SELECT * INTO aRecReportStato
      FROM   REPORT_STATO
      WHERE  cd_cds = aCdCds AND
             cd_unita_organizzativa = aCdUo AND
             cd_tipo_sezionale = aCdSezionale AND
             ti_documento = aTiDocumento AND
             tipo_report = aTipoReport AND
             dt_inizio = aDtInizio AND
             dt_fine = aDtFine
             FOR UPDATE NOWAIT;

   ELSE

      SELECT * INTO aRecReportStato
      FROM   REPORT_STATO
      WHERE  cd_cds = aCdCds AND
             cd_unita_organizzativa = aCdUo AND
             cd_tipo_sezionale = aCdSezionale AND
             ti_documento = aTiDocumento AND
             tipo_report = aTipoReport AND
             dt_inizio = aDtInizio AND
             dt_fine = aDtFine AND
             stato = aStato
             FOR UPDATE NOWAIT;

   END IF;

   RETURN aRecReportStato;

EXCEPTION

   WHEN NO_DATA_FOUND THEN
        IBMERR001.RAISE_ERR_GENERICO
           ('Non trovato alcun riferimento in tabella REPORT_STATO per il sezionale ' || aCdSezionale ||
            ' UO ' || aCdUo || ' tipo_report ' || aTipoReport);

END getReportStato;

-- =================================================================================================
-- Restituisce il valore minimo dei protocolli iva delle fatture presenti in REPORT_DETTAGLIO
-- dato un record di REPORT_STATO
-- =================================================================================================
PROCEDURE getMinProtocolloIva
   (
    aRecReportStato REPORT_STATO%ROWTYPE,
    aTipoReportStato VARCHAR2,
    aProtocolloFT IN OUT NUMBER,
    aProtocolloNC IN OUT NUMBER,
    aProtocolloND IN OUT NUMBER,
    aProtocolloPG IN OUT NUMBER,
    eseguiUpgSezionale IN OUT CHAR
   ) IS

   aTipoDocumentoAmm VARCHAR2(10);
   cv_ti_fattura CHAR(1);
   cv_protocollo_iva NUMBER(10);
   cv_protocollo_iva_generale NUMBER(10);
   aProtocolloGenerale NUMBER(10);

   gen_cv GenericCurTyp;

BEGIN

   aProtocolloGenerale:=0;

   -------------------------------------------------------------------------------------------------
   -- Lettura del tipo documento portato dal dettaglio

   BEGIN

      SELECT DISTINCT ti_documento INTO aTipoDocumentoAmm
      FROM   REPORT_DETTAGLIO
      WHERE  cd_cds = aRecReportStato.cd_cds AND
             cd_unita_organizzativa = aRecReportStato.cd_unita_organizzativa AND
             esercizio = aRecReportStato.esercizio AND
             tipo_report = aRecReportStato.tipo_report AND
             cd_tipo_Sezionale = aRecReportStato.cd_tipo_Sezionale AND
             data_inizio = aRecReportStato.dt_inizio AND
             data_fine = aRecReportStato.dt_fine;

   EXCEPTION

      WHEN no_data_found THEN
           RETURN;

   END;

   -- Uscita dalla routine se elaboro fatture attive

   IF aTipoDocumentoAmm = CNRCTB100.TI_FATTURA_ATTIVA THEN
      RETURN;
   END IF;

   -- Attivo il flag di aggiornamento dei numeratori sul sezionale

   eseguiUpgSezionale:='Y';

   -------------------------------------------------------------------------------------------------
   -- Lettura record della REPORT_DETTAGLIO

   BEGIN

      IF aTipoDocumentoAmm = CNRCTB100.TI_FATTURA_PASSIVA THEN

         OPEN gen_cv FOR

              SELECT B.ti_fattura, MIN(B.protocollo_iva), MIN(B.protocollo_iva_generale)
              FROM   REPORT_DETTAGLIO A, FATTURA_PASSIVA B
              WHERE  A.cd_cds = aRecReportStato.cd_cds AND
                     A.cd_unita_organizzativa = aRecReportStato.cd_unita_organizzativa AND
                     A.esercizio = aRecReportStato.esercizio AND
                     A.tipo_report = aTipoReportStato AND
                     A.cd_tipo_sezionale =  aRecReportStato.cd_tipo_sezionale AND
	             A.data_inizio = aRecReportStato.dt_inizio AND
                     A.data_fine = aRecReportStato.dt_fine AND
                     B.cd_cds = A.cd_cds_altro AND
                     B.cd_unita_organizzativa = A.cd_uo_altro AND
                     B.esercizio = A.esercizio AND
                     B.pg_fattura_passiva = A.pg_documento
              GROUP BY B.ti_fattura;

      ELSE

         OPEN gen_cv FOR

              SELECT B.ti_fattura, MIN(B.protocollo_iva), MIN(B.protocollo_iva_generale)
              FROM   REPORT_DETTAGLIO A, AUTOFATTURA B
              WHERE  A.cd_cds = aRecReportStato.cd_cds AND
                     A.cd_unita_organizzativa = aRecReportStato.cd_unita_organizzativa AND
                     A.esercizio = aRecReportStato.esercizio AND
                     A.tipo_report = aTipoReportStato AND
                     A.cd_tipo_sezionale =  aRecReportStato.cd_tipo_sezionale AND
	             A.data_inizio = aRecReportStato.dt_inizio AND
                     A.data_fine = aRecReportStato.dt_fine AND
                     B.cd_cds = A.cd_cds_altro AND
                     B.cd_unita_organizzativa = A.cd_uo_altro AND
                     B.esercizio = A.esercizio AND
                     B.pg_autofattura = A.pg_documento
              GROUP BY B.ti_fattura;

      END IF;

      LOOP

         FETCH gen_cv INTO
               cv_ti_fattura,
               cv_protocollo_iva,
               cv_protocollo_iva_generale;

         EXIT WHEN gen_cv%NOTFOUND;

         IF    cv_ti_fattura = CNRCTB100.TI_FATT_FATTURA THEN
               aProtocolloFT:=cv_protocollo_iva;
         ELSIF cv_ti_fattura = CNRCTB100.TI_FATT_NOTA_C THEN
               aProtocolloNC:=cv_protocollo_iva;
         ELSIF cv_ti_fattura = CNRCTB100.TI_FATT_NOTA_D THEN
               aProtocolloND:=cv_protocollo_iva;
         END IF;

         IF (aProtocolloGenerale = 0 OR
             aProtocolloGenerale > cv_protocollo_iva_generale) THEN
            aProtocolloGenerale:=cv_protocollo_iva_generale;
         END IF;

      END LOOP;

      aProtocolloPG:= aProtocolloGenerale;

   END;

END getMinProtocolloIva;

-- =================================================================================================
-- Aggiorna a C tutti i record di REPORT_STATO per stampa registri IVA
-- =================================================================================================
PROCEDURE upgStatoRegistriIva
   (
    aEsercizio NUMBER,
    aDataInizio DATE,
    aDataFine DATE,
    aUtente VARCHAR2
   ) IS

BEGIN

   UPDATE REPORT_STATO
   SET    stato = 'C',
          utuv = aUtente,
          duva = SYSDATE,
          pg_ver_rec = pg_ver_rec +1
   WHERE  esercizio = aEsercizio AND
          tipo_report = TI_REGISTRO_ACQUISTI AND
          dt_inizio = aDataInizio AND
          dt_fine = aDataFine AND
          stato = 'B';

END upgStatoRegistriIva;

END CNRCTB255;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy