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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB120" IS

--==================================================================================================
-- Lettura di una testata di fattura passiva dai riferimento documento del terzo
--==================================================================================================
FUNCTION getTstFatturaDaRifTerzo
   (
    aCdTerzoFat VARCHAR2,
    aEsercizioFat NUMBER,
    aTiFat VARCHAR2,
    aNumeroFat VARCHAR2,
    eseguiLock CHAR
   ) RETURN FATTURA_PASSIVA%ROWTYPE IS
   aRecFatturaPassiva FATTURA_PASSIVA%ROWTYPE;

BEGIN

   BEGIN
      IF eseguiLock = 'Y' THEN

         SELECT * INTO aRecFatturaPassiva
         FROM   FATTURA_PASSIVA
         WHERE  cd_terzo = aCdTerzoFat AND
							  esercizio_fattura_fornitore = aEsercizioFat AND
                ti_fattura = aTiFat AND
                nr_fattura_fornitore = aNumeroFat
         				FOR UPDATE NOWAIT;
      ELSE
         SELECT * INTO aRecFatturaPassiva
         FROM   FATTURA_PASSIVA
         WHERE  cd_terzo = aCdTerzoFat AND
								esercizio_fattura_fornitore = aEsercizioFat AND
                ti_fattura = aTiFat AND
                nr_fattura_fornitore = aNumeroFat;
      END IF;

      RETURN aRecFatturaPassiva;

   EXCEPTION
      WHEN NO_DATA_FOUND then
           IBMERR001.RAISE_ERR_GENERICO
              ('Riferimento a fattura fornitore, terzo: '|| aCdTerzoFat ||' numero: ' || aEsercizioFat || '/' || aNumeroFat ||
               'non trovato');
   END;

END getTstFatturaDaRifTerzo;

--==================================================================================================
-- Ritorna un codice di sezionale acquisti ordinario
--==================================================================================================
FUNCTION getSezionaleOrdinarioAcq
   (
    aCdCds VARCHAR2,
    aUo VARCHAR2,
    aTipoIstitComm VARCHAR2,
    aEsercizio NUMBER
   ) RETURN SEZIONALE.cd_tipo_sezionale%TYPE IS
   aCdSezionale SEZIONALE.cd_tipo_sezionale%TYPE;
   aTipoFattura CHAR(1);

BEGIN

   aTipoFattura:=CNRCTB100.TI_FATT_FATTURA;

   SELECT A.cd_tipo_sezionale INTO aCdSezionale
   FROM   SEZIONALE A,
          TIPO_SEZIONALE B
   WHERE  A.cd_cds = aCdCds AND
          A.cd_unita_organizzativa = aUo AND
          A.ti_fattura = aTipoFattura AND
          A.esercizio = aEsercizio AND
          B.cd_tipo_sezionale = A.cd_tipo_sezionale AND
          B.ti_Acquisti_vendite = 'A' AND
          B.ti_istituz_commerc = aTipoIstitComm AND
          B.fl_ordinario = 'Y';

   RETURN aCdSezionale;

   EXCEPTION
      WHEN NO_DATA_FOUND then
           IBMERR001.RAISE_ERR_GENERICO
              ('Non trovato il riferimento al sezionale in generazione della fattura');

END getSezionaleOrdinarioAcq;

--==================================================================================================
-- Ritorna un record di TIPO_SEZIONALE dato un sezionale
--==================================================================================================
FUNCTION getTipoSezionale
   (
    aCdSezionale VARCHAR2
   ) RETURN TIPO_SEZIONALE%ROWTYPE IS
   aRecTipoSezionale TIPO_SEZIONALE%ROWTYPE;

BEGIN

   SELECT * INTO aRecTipoSezionale
   FROM   TIPO_SEZIONALE
   WHERE  cd_tipo_sezionale = aCdSezionale;

   RETURN aRecTipoSezionale;

EXCEPTION

   WHEN NO_DATA_FOUND THEN
        IBMERR001.RAISE_ERR_GENERICO
           ('Non trovato alcun riferimento al TIPO_SEZIONALE per il sezionale ' ||  aCdSezionale);

END getTipoSezionale;

--==================================================================================================
-- Elimina una intera fattura
--==================================================================================================
PROCEDURE eliminaFatturaPassiva
   (
    aCdCds FATTURA_PASSIVA.cd_cds%TYPE,
    aCdUo FATTURA_PASSIVA.cd_unita_organizzativa%TYPE,
    aEsercizio FATTURA_PASSIVA.esercizio%TYPE,
    aPgFattura FATTURA_PASSIVA.pg_fattura_passiva%TYPE
   ) IS

BEGIN

   DELETE FROM FATTURA_PASSIVA_RIGA
   WHERE cd_cds = aCdCds AND
         cd_unita_organizzativa = aCdUo AND
         esercizio = aEsercizio AND
         pg_fattura_passiva = aPgFattura;


   DELETE FROM FATTURA_PASSIVA
   WHERE cd_cds = aCdCds AND
         cd_unita_organizzativa = aCdUo AND
         esercizio = aEsercizio AND
         pg_fattura_passiva = aPgFattura;

END eliminaFatturaPassiva;


 procedure creaFattura(aFatt in out fattura_passiva%rowtype, aListRighe in out CNRCTB100.fattPassRigaList) is
  aNextNum number;
 begin
  aNextNum:=CNRCTB100.getNextNum(aFatt.cd_cds, aFatt.esercizio, aFatt.cd_unita_organizzativa, CNRCTB100.TI_FATTURA_PASSIVA, aFatt.utcr, aFatt.dacr);
  aFatt.pg_fattura_passiva:=aNextNum;
  aFatt.duva:=aFatt.dacr;
  aFatt.utuv:=aFatt.utcr;
  aFatt.pg_ver_rec:=1;
  CNRCTB100.INS_FATTURA_PASSIVA(aFatt);
  for i in 1 .. aListRighe.count loop
   aListRighe(i).pg_fattura_passiva:=aFatt.pg_fattura_passiva;
   aListRighe(i).progressivo_riga:=i;
   aListRighe(i).duva:=aFatt.dacr;
   aListRighe(i).utuv:=aFatt.utcr;
   aListRighe(i).pg_ver_rec:=1;
   CNRCTB100.INS_FATTURA_PASSIVA_RIGA(aListRighe(i));
  end loop;
 end;

-- =================================================================================================
-- Lettura del protocollo iva corrente dai diversi sezionali dati gli identificativi della UO,
-- l'esercizio e un tipo sezionale.
-- =================================================================================================
PROCEDURE getProtCorrenteSezionale
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aEsercizio NUMBER,
    aCdTipoSezionale VARCHAR2,
    eseguiLock CHAR,
    aProtCorrenteFT IN OUT NUMBER,
    aProtCorrenteNC IN OUT NUMBER,
    aProtCorrenteND IN OUT NUMBER,
    aProtCorrentePG IN OUT NUMBER
   ) IS

   aRecSezionale SEZIONALE%ROWTYPE;
   gen_cv GenericCurTyp;

BEGIN

   aProtCorrenteFT:=-1;
   aProtCorrenteNC:=-1;
   aProtCorrenteND:=-1;
   aProtCorrentePG:=-1;

   BEGIN

      IF eseguiLock = 'Y' THEN

         OPEN gen_cv FOR

              SELECT *
              FROM   SEZIONALE
              WHERE  cd_cds = aCdCds AND
                     cd_unita_organizzativa = aCdUo AND
                     esercizio = aEsercizio AND
                     cd_tipo_sezionale = aCdTipoSezionale
              FOR UPDATE NOWAIT;

      ELSE

         OPEN gen_cv FOR

              SELECT *
              FROM   SEZIONALE
              WHERE  cd_cds = aCdCds AND
                     cd_unita_organizzativa = aCdUo AND
                     esercizio = aEsercizio AND
                     cd_tipo_sezionale = aCdTipoSezionale;

      END IF;

      LOOP

         FETCH gen_cv INTO
               aRecSezionale;

         EXIT WHEN gen_cv%NOTFOUND;

         IF    aRecSezionale.ti_fattura = 'F' THEN
               aProtCorrenteFT:=aRecSezionale.corrente;
         ELSIF aRecSezionale.ti_fattura = 'C' THEN
               aProtCorrenteNC:=aRecSezionale.corrente;
         ELSIF aRecSezionale.ti_fattura = 'D' THEN
               aProtCorrenteND:=aRecSezionale.corrente;
         ELSIF aRecSezionale.ti_fattura = 'T' THEN
               aProtCorrentePG:=aRecSezionale.corrente;
         END IF;

      END LOOP;

      CLOSE gen_cv;

   END;

END getProtCorrenteSezionale;

-- =================================================================================================
-- Aggiornamento del valore corrente sul sezionale
-- =================================================================================================
PROCEDURE upgSezionalePgCorrente
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aEsercizio NUMBER,
    aCdTipoSezionale VARCHAR2,
    aProtocolloFT NUMBER,
    aProtocolloNC NUMBER,
    aProtocolloND NUMBER,
    aProtocolloPG NUMBER
   ) IS
   i BINARY_INTEGER;
   aProtocolloTmp NUMBER(10);
   aTipoFattura CHAR(1);

BEGIN

   FOR i IN 1 .. 4

   LOOP

      IF    i = 1 THEN
            aProtocolloTmp:=aProtocolloFT;
            aTipoFattura:=CNRCTB100.TI_FATT_FATTURA;
      ELSIF i = 2 THEN
            aProtocolloTmp:=aProtocolloNC;
            aTipoFattura:=CNRCTB100.TI_FATT_NOTA_C;
      ELSIF i = 3 THEN
            aProtocolloTmp:=aProtocolloND;
            aTipoFattura:=CNRCTB100.TI_FATT_NOTA_D;
      ELSIF i = 4 THEN
            aProtocolloTmp:=aProtocolloPG;
            aTipoFattura:='T';
      END IF;

      UPDATE  SEZIONALE
      SET     corrente = aProtocolloTmp
      WHERE   cd_cds = aCdCds AND
              cd_unita_organizzativa = aCdUo AND
              esercizio = aEsercizio AND
              cd_tipo_sezionale = aCdTipoSezionale AND
              ti_fattura = aTipoFattura;

   END LOOP;

END upgSezionalePgCorrente;

-- =================================================================================================
-- Ritorna Y o N a seconda che la U.O. abbia o meno definito i sezionali
-- =================================================================================================
FUNCTION getUoHaSezionali
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aEsercizio NUMBER
   ) RETURN VARCHAR2 IS
   flHaSezionali CHAR(1);
   aNumeroSezionali INTEGER;

BEGIN

   flHaSezionali:='N';

   BEGIN

      SELECT COUNT(*) INTO aNumeroSezionali
      FROM   SEZIONALE
      WHERE  cd_cds = aCdCds AND
             cd_unita_organizzativa = aCdUo AND
             esercizio = aEsercizio;

   END;

   IF aNumeroSezionali > 0 THEN
      flHaSezionali:='Y';
   END IF;

   RETURN flHaSezionali;

END getUoHaSezionali;

-- =================================================================================================
-- Recupero dell'informazione che una fattura attiva è gestita ad esigibilità differita con i dati
-- relativi alla sua inclusione in una stampa definitiva di registri IVA o liquidazione
-- =================================================================================================
FUNCTION getFtAttivaDiffConIva
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aEsercizio NUMBER,
    aPgFattura NUMBER,
    aPgriga NUMBER,
    eseguiLock VARCHAR2
   ) RETURN VARCHAR2 IS
   attivaGestioneDifferita CHAR(1);
   aDtInizioStmRegistro DATE;
   aDtInizioStmLiquidazione DATE;
   aRecFatturaAttiva FATTURA_ATTIVA%ROWTYPE;

BEGIN

   attivaGestioneDifferita:='N';
   aDtInizioStmRegistro:=NULL;
   aDtInizioStmLiquidazione:=NULL;

   -------------------------------------------------------------------------------------------------
   -- Recupero della testata della fattura attiva in elaborazione

   BEGIN

      SELECT * INTO aRecFatturaAttiva
      FROM   FATTURA_ATTIVA
      WHERE  cd_cds = aCdCds AND
             cd_unita_organizzativa = aCdUo AND
             esercizio = aEsercizio AND
             pg_fattura_attiva = aPgFattura
      FOR UPDATE NOWAIT;

   EXCEPTION

      WHEN no_data_found THEN
           IBMERR001.RAISE_ERR_GENERICO ('Non trovato il riferimento alla fattura attiva');

   END;

   -------------------------------------------------------------------------------------------------
   -- Controllo l'attivazione della gestione iva differita

   -- Se la fattura non è per iva differita esco

   IF aRecFatturaAttiva.fl_liquidazione_differita = 'N' THEN
      RETURN attivaGestioneDifferita;
   END IF;

   -- Verifico se la fattura è già stata stampata sul registro IVA o è stata liquidata

   CNRCTB255.getIsFatturaElaborataIva(aRecFatturaAttiva.cd_cds_origine,
                                      aRecFatturaAttiva.cd_uo_origine,
                                      aRecFatturaAttiva.esercizio,
                                      aRecFatturaAttiva.pg_fattura_attiva,
                                      aPgRiga,
                                      CNRCTB100.TI_FATTURA_ATTIVA,
                                      aRecFatturaAttiva.cd_cds,
                                      aRecFatturaAttiva.cd_unita_organizzativa,
                                      aDtInizioStmRegistro,
                                      aDtInizioStmLiquidazione);

   -- Se la fattura è già stata liquidata non attivo la gestione per iva differita

   IF aDtInizioStmLiquidazione IS NOT NULL THEN
      RETURN attivaGestioneDifferita;
   END IF;

   -- Attivo la gestione

   attivaGestioneDifferita:='Y';

   RETURN attivaGestioneDifferita;

END getFtAttivaDiffConIva;
-- =================================================================================================
-- Recupero dell'informazione che una fattura attiva è gestita ad esigibilità differita con i dati
-- relativi alla sua inclusione in una stampa definitiva di registri IVA o liquidazione
-- =================================================================================================
FUNCTION getFtDiffConIvaPassiva
   (
    aCdCds VARCHAR2,
    aCdUo VARCHAR2,
    aEsercizio NUMBER,
    aPgFattura NUMBER,
    aPgRiga NUMBER,
    eseguiLock VARCHAR2
   ) RETURN VARCHAR2 IS
   attivaGestioneDifferita CHAR(1);
   aDtInizioStmRegistro DATE;
   aDtInizioStmLiquidazione DATE;
   aRecFattura FATTURA_PASSIVA%ROWTYPE;

BEGIN

   attivaGestioneDifferita:='N';
   aDtInizioStmRegistro:=NULL;
   aDtInizioStmLiquidazione:=NULL;

   -------------------------------------------------------------------------------------------------
   -- Recupero della testata della fattura  in elaborazione

   BEGIN

      SELECT * INTO aRecFattura
      FROM   FATTURA_PASSIVA
      WHERE  cd_cds = aCdCds AND
             cd_unita_organizzativa = aCdUo AND
             esercizio = aEsercizio AND
             pg_fattura_passiva = aPgFattura
      FOR UPDATE NOWAIT;

   EXCEPTION

      WHEN no_data_found THEN
           IBMERR001.RAISE_ERR_GENERICO ('Non trovato il riferimento alla fattura passiva');

   END;

   -------------------------------------------------------------------------------------------------
   -- Controllo l'attivazione della gestione iva differita

   -- Se la fattura non è per iva differita esco

   IF aRecFattura.fl_liquidazione_differita = 'N' THEN
      RETURN attivaGestioneDifferita;
   END IF;

   -- Verifico se la fattura è già stata stampata sul registro IVA o è stata liquidata

   CNRCTB255.getIsFatturaElaborataIva(aRecFattura.cd_cds_origine,
                                      aRecFattura.cd_uo_origine,
                                      aRecFattura.esercizio,
                                      aRecFattura.pg_fattura_passiva,
                                      aPgRiga,
                                      CNRCTB100.TI_FATTURA_PASSIVA,
                                      aRecFattura.cd_cds,
                                      aRecFattura.cd_unita_organizzativa,
                                      aDtInizioStmRegistro,
                                      aDtInizioStmLiquidazione);

   -- Se la fattura è già stata liquidata non attivo la gestione per iva differita

   IF aDtInizioStmLiquidazione IS NOT NULL THEN
      RETURN attivaGestioneDifferita;
   END IF;

   -- Attivo la gestione

   attivaGestioneDifferita:='Y';

   RETURN attivaGestioneDifferita;

END getFtDiffConIvaPassiva;
--==================================================================================================
-- Lettura di una testata di fattura passiva dai riferimento al compenso
--==================================================================================================
FUNCTION getFatturaRiferimento
   (	 aEsercizio NUMBER,
       aCdCds VARCHAR2,
       aCdUo VARCHAR2,
       aCompenso NUMBER,
       eseguiLock CHAR
   ) RETURN FATTURA_PASSIVA%ROWTYPE IS
   aRecFatturaPassiva FATTURA_PASSIVA%ROWTYPE;
BEGIN
		 IF eseguiLock = 'Y' THEN
   	     SELECT * INTO aRecFatturaPassiva
         FROM   FATTURA_PASSIVA
         WHERE  esercizio_compenso  = aEsercizio AND
							  cds_compenso = aCdCds AND
                uo_compenso = aCdUo AND
                pg_compenso = aCompenso
         				FOR UPDATE NOWAIT;
      ELSE
         SELECT * INTO aRecFatturaPassiva
           FROM   FATTURA_PASSIVA
           WHERE  esercizio_compenso  = aEsercizio AND
							  cds_compenso = aCdCds AND
                uo_compenso = aCdUo AND
                pg_compenso = aCompenso;
      END IF;

    RETURN aRecFatturaPassiva;
	 --Non intercetto il no_data_Found perchè se non presenti i riferimenti al compenso richiamo la vecchia CNRCTB120.getTstFatturaDaRifTerzo

END getFatturaRiferimento;
END;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy