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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB930" AS

-- =================================================================================================
-- Controllo congruenza parametri in input
-- =================================================================================================
PROCEDURE chkParametriInput
   (
    inEsercizio NUMBER,
    inRepID INTEGER,
    inUtente VARCHAR2
   ) IS

   numero INTEGER;

BEGIN

   -------------------------------------------------------------------------------------------------
   -- Verifica congruenza parametri.
   --   aEsercizio, aCdAnag, repID e aUtente non possono essere nulli
   --   aCdAnag può essere nullo o valorizzato

   IF (inEsercizio IS NULL OR
       inRepID IS NULL OR
       inUtente IS NULL) THEN
      IBMERR001.RAISE_ERR_GENERICO
         ('Valorizzazione parametri in input errata. ' ||
          'Un identificativo (esercizio, codice anagrafico, identificativo report, id utente) risulta non valorizzato');
   END IF;


END chkParametriInput;

-- =================================================================================================
-- Costruzione del file
-- =================================================================================================
PROCEDURE scriviFileOutput
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inUtente VARCHAR2
   ) IS

   --mioCLOB CLOB;
   aStringaChiave1 VARCHAR2(5);
   aStringaChiave2 VARCHAR2(8);
   aStringaChiave3 VARCHAR2(6);
   aStringa VARCHAR2(4000);
   aDifferenza INTEGER;

   aStringaImporto VARCHAR2(10);

   i BINARY_INTEGER;

   --aRecBframeBlob BFRAME_BLOB%ROWTYPE;
   aRecEstrazione770 vpg_certificazione_770%ROWTYPE;

   gen_cur GenericCurType;
 -- Variabili usate
   aContatore NUMBER(9);
   aTi_entita varchar2(1);
   aCodiceFiscale varchar2(20);
   aCognome varchar2(200);
   aNome varchar2(200);
   aSesso varchar2(1);
   aDataNascita varchar2(8);
   aComuneNascita varchar2(100);
   aProvinciaNascita varchar2(2);
   aCittadinanzaStatoEstero number(3);
   aRagioneSociale varchar2(200);
   aSpazi varchar2(100);
   aComuneDomicilio varchar2(200);
   aProvinciaDomicilio varchar2(2);
   aIndirizzo varchar2(200);
   aCodiceComuneDomicilio varchar2(200);
   aIdentificativoFiscale varchar2(25);
BEGIN
--pipe.send_message('1');
   -------------------------------------------------------------------------------------------------
   -- Inizializzazione CLOB

   aRecBframeBlob.cd_tipo:=IDTIPOBLOB;
   aRecBframeBlob.path:='fileout770/' || inEsercizio || '/';
   If inTiModello = 'S' then
       aRecBframeBlob.filename:='FILEOUT_770_SEMPLIFICATO_'||inQuadro||'_'|| inRepID || '.DAT';
       aRecBframeBlob.ds_file:='FILE OUTPUT ESTRAZIONE 770 SEMPLIFICATO - QUADRO '||inQuadro;
   Else
       aRecBframeBlob.filename:='FILEOUT_770_ORDINARIO_'||inQuadro||'_'|| inRepID || '.DAT';
       aRecBframeBlob.ds_file:='FILE OUTPUT ESTRAZIONE 770 ORDINARIO - QUADRO '||inQuadro;
   End If;
   aRecBframeBlob.ti_visibilita:='U';
   aRecBframeBlob.ds_utente:='FILE OUTPUT ESTRAZIONE 770';
--pipe.send_message('2');
   IBMUTL005.ShIniCBlob(aRecBframeBlob.cd_tipo,
                        aRecBframeBlob.path,
                        aRecBframeBlob.filename,
                        aRecBframeBlob.ti_visibilita,
                        aRecBframeBlob.ds_file,
                        aRecBframeBlob.ds_utente,
                        inUtente,
                        mioCLOB);

--pipe.send_message('3');
   If inTiModello = 'S' then
      If inQuadro = 'SC' then
            scriviFileQuadroSC(inEsercizio,
                               inTiModello,
                               inQuadro,
                               inRepID,
                               inUtente);
                               --aRecBframeBlob,
                               --mioCLOB);
      Elsif inQuadro = 'SY' then
            scriviFileQuadroSY(inEsercizio,
                               inTiModello,
                               inQuadro,
                               inRepID,
                               inUtente);
      Elsif inQuadro = 'SCSY' then
          scriviFileQuadroSCSY(inEsercizio,
                               inTiModello,
                               inQuadro,
                               inRepID,
                               inUtente );
      End If;
   Elsif inTiModello = 'O' then
      If inQuadro = 'SF' then
            scriviFileQuadroSF(inEsercizio,
                               inTiModello,
                               inQuadro,
                               inRepID,
                               inUtente);
      Elsif inQuadro = 'SH' then
            scriviFileQuadroSH(inEsercizio,
                               inTiModello,
                               inQuadro,
                               inRepID,
                               inUtente);
      End If;
   End If;

   -------------------------------------------------------------------------------------------------
   -- Chiusura CLOB

   IBMUTL005.ShCloseClob(aRecBframeBlob.cd_tipo,
                         aRecBframeBlob.path,
                         aRecBframeBlob.filename,
                         mioCLOB);

END scriviFileOutput;
-- =================================================================================================
-- Costruzione del quadro SC
-- =================================================================================================
PROCEDURE scriviFileQuadroSC
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inUtente VARCHAR2--,
   ) IS

   --mioCLOB CLOB;
   aStringaChiave1 VARCHAR2(5);
   aStringaChiave2 VARCHAR2(8);
   aStringaChiave3 VARCHAR2(6);
   aStringa VARCHAR2(4000);
   aDifferenza INTEGER;

   aStringaImporto VARCHAR2(10);

   i BINARY_INTEGER;

   aRecEstrazione770 vpg_certificazione_770%ROWTYPE;

   gen_cur GenericCurType;
 -- Variabili usate
   aContatore NUMBER(9);
   aTi_entita varchar2(1);
   aCodiceFiscale varchar2(20);
   aCognome varchar2(200);
   aNome varchar2(200);
   aSesso varchar2(1);
   aDataNascita varchar2(8);
   aComuneNascita varchar2(100);
   aProvinciaNascita varchar2(2);
   aCittadinanzaStatoEstero number(3);
   aRagioneSociale varchar2(200);
   aSpazi varchar2(100);
   aComuneDomicilio varchar2(200);
   aProvinciaDomicilio varchar2(2);
   aIndirizzo varchar2(200);
   aCodiceComuneDomicilio varchar2(200);
   aIdentificativoFiscale varchar2(25);
BEGIN
--pipe.send_message('4');
   -------------------------------------------------------------------------------------------------
   -- Scrittura CLOB (file output estrazione 770)

   BEGIN

      -- Valorizzazione costanti della chiave file -------------------------------------------------
      aContatore :=1;
      aTi_entita :=' ';
      aCodiceFiscale :=' ';
      aCognome :=' ';
      aNome :=' ';
      aSesso :=' ';
      aDataNascita := '00000000';
      aComuneNascita :=' ';
      aProvinciaNascita :=' ';
      aCittadinanzaStatoEstero :=0;
      aRagioneSociale :=' ';
      aSpazi :=' ';
      aComuneDomicilio :=' ';
      aProvinciaDomicilio :=' ';
      aIndirizzo :=' ';
      aCodiceComuneDomicilio := ' ';
      aIdentificativoFiscale :=' ';
--pipe.send_message('5');
      -- Ciclo elaborazione dati 770 ---------------------------------------------------------------

      OPEN gen_cur FOR

           SELECT *
           FROM   vpg_certificazione_770
           where inTiModello ='S'
             and inQuadro = 'SC'
           Order By ID, CHIAVE, TIPO;
      LOOP
         FETCH gen_cur INTO
               aRecEstrazione770;

         EXIT WHEN gen_cur%NOTFOUND;

      IF  (aRecEstrazione770.nome IS NULL AND
           aRecEstrazione770.COGNOME IS NULL AND
           aRecEstrazione770.RAGIONE_SOCIALE IS NULL) THEN

          -- Creazione del record d'estrazione del 770
             aStringa:=NULL;
             aStringa:= ' SC0';
             aStringa:= aStringa || '80054330586     ';  -- codice fiscale dichiatrante
             aStringa:= aStringa || '                ';  -- codice fiscale sostituto
             -- Persona fisica o giuridica
             IF aTi_entita = 'F' THEN   --persona fisica
                aStringa:=aStringa || '1';
                aStringa:= aStringa || '       ';    -- progressivo telematico
                aStringa:= aStringa || '       ';    -- rfu
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');         -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aCognome), 1, 24), 24, ' ');        -- cognome
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aNome), 1, 20), 20, ' ');           -- nome
                aStringa:=aStringa || RPAD(SUBSTR(aSesso, 1, 1), 1, ' ');                   -- sesso
                aStringa:=aStringa || RPAD(SUBSTR(aDataNascita, 1, 8), 8, '0');             -- data nascita
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneNascita), 1, 40), 40, ' ');  -- comune nascita
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aProvinciaNascita), 1, 2), 2, ' '); -- provincia nascita
             ELSE    --persona giuridica
                aStringa:=aStringa || '2';
                aStringa:= aStringa || '       ';   -- progressivo telematico
                aStringa:= aStringa || '       ';   -- rfu
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');   -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aRagioneSociale), 1, 60), 60, ' ');    -- denominazione
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 35), 35, ' ');   -- spazi
             END IF;

             aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneDomicilio), 1, 40), 40, ' ');  -- comune domicilio fiscale
             aStringa:=aStringa || RPAD(SUBSTR(Upper(aProvinciaDomicilio), 1, 2), 2, ' ');   -- provincia domicilio fiscale
             aStringa:=aStringa || '  ';  -- codice regione
             aStringa:=aStringa || RPAD(' ', 4, ' ');  -- codice comune (dovrebbe essere valorizzato solo in casi da noi non gestiti)
             --aStringa:=aStringa || RPAD(SUBSTR(aCodiceComuneDomicilio, 1, 4), 4, ' '); -- codice comune domicilio
             aStringa:=aStringa || RPAD(SUBSTR(Upper(aIndirizzo), 1, 40), 40, ' ');   -- indirizzo
             aStringa:=aStringa || '0';   -- eventi eccezionali
             aStringa:=aStringa || RPAD(SUBSTR(Upper(aIdentificativoFiscale), 1, 25), 25, ' ');   -- identificativo fiscale
             -- per i percipienti esteri occorre ripetere il comune e l'indirizzo
             if aCittadinanzaStatoEstero != '0' THEN
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneDomicilio), 1, 40), 40, ' ');  -- comune domicilio fiscale
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aIndirizzo), 1, 40), 40, ' ');   -- indirizzo
             else
                aStringa:=aStringa || RPAD(' ', 80, ' ');
             end if;
             aStringa:=aStringa || LPAD(aCittadinanzaStatoEstero, 3, '0');   -- cittadinanza stato estero
             aStringa:=aStringa || '0';-- erede
             IF aRecEstrazione770.CD_TI_COMPENSO IS NULL THEN
                aStringa:=aStringa || RPAD(' ', 1, ' ');   -- causale
             ELSE
                aStringa:=aStringa || RPAD(SUBSTR(aRecEstrazione770.CD_TI_COMPENSO, 1, 1), 1, ' ');    -- causale
             END IF;
             aStringa:= aStringa || '0000';   -- anno
             aStringa:= aStringa || '0';   -- anticipazione
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.im_Lordo * 100), 16, '0');   -- lordo

             IF aRecEstrazione770.CD_TRATTAMENTO IS NULL THEN
                aStringa:= aStringa ||  LPAD('0', 16, '0');   -- somma no rit a regime convezionale
             ELSE
               IF SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) LIKE 'T017%'
                  and aRecEstrazione770.im_Lordo = aRecEstrazione770.im_netto THEN
                    aStringa:=aStringa || LPAD((aRecEstrazione770.im_lordo  *100), 16, '0');
               ELSE
                    aStringa:= aStringa ||  LPAD('0', 16, '0');
               END IF;
             END IF;
             If aRecEstrazione770.IM_NON_SOGG_RIT is not null and aRecEstrazione770.IM_NON_SOGG_RIT > 0 then
                aStringa:= aStringa || '3';
             Else
                aStringa:= aStringa || '0';
             End if;
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_NON_SOGG_RIT * 100), 16, '0');-- somma non soggetta a ritenute
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IMPONIBILE_FI * 100), 16, '0');-- imponibile

             IF  aRecEstrazione770.TI_RITENUTA = 'A' THEN
                  aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 16, '0');  -- Ritenute a titolo di acconto
                  aStringa:= aStringa ||  LPAD('0', 16, '0');
             ELSE
                 aStringa:= aStringa ||  LPAD('0', 16, '0');
                 aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 16, '0');   -- Ritenute a titolo di imposta
             END if;
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Ritenute sospese
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Addizionale regionale a titolo d'acconto
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Addizionale regionale a titolo d'imposta
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Addizionale regionale sospesa
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Addizionale comunale a titolo d'acconto
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Addizionale comunale a titolo d'imposta
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Addizionale comunale sospesa
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Imponibile anni precedenti
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Ritenute anni precedenti
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_CONTRIBUTI_ENTE * 100), 16, '0');-- Contributi a carico Ente
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_CONTRIBUTI * 100), 16, '0');-- Contributi a carico Percipiente
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_NON_SOGG_INPS * 100), 16, '0');-- Spese Rimborsate(quota esente inps)
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Ritenute Rimborsate
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Somme corrisposte prima della data del fallimento
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Somme corrisposte dal curatore/commissario
             aStringa:= aStringa ||  LPAD('0', 177, '0');-- Redditi erogati da altri soggetti
             aStringa:= aStringa || RPAD(' ', 2497, ' '); -- spazio
             aStringa:= aStringa || RPAD(' ', 1, ' ');-- tipo operazione
             aStringa:= aStringa || RPAD(' ', 1, ' ');-- flag validazione
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- codice caricamento
             aStringa:= aStringa || RPAD(' ', 7, ' '); -- codice utente
             aStringa:= aStringa || RPAD(' ', 74, ' ');-- spazio
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 1
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 2
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 3


             IF LENGTH(aStringa) != 3500 THEN
                  IBMERR001.RAISE_ERR_GENERICO
                     ('Errore in lunghezza file in output tipo record 770 lunghezza ' || LENGTH(aStringa));
             END IF;
             -- Scrittura CLOB
             IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                 aRecBframeBlob.path,
                                 aRecBframeBlob.filename,
                                 mioCLOB,
                                 aStringa);
      ELSE

            IF aRecEstrazione770.TI_ENTITA IS NULL THEN
               aTi_entita :='G';
            ELSE
               aTi_entita:= aRecEstrazione770.TI_ENTITA;
            END IF;

            IF aRecEstrazione770.CODICE_FISCALE IS NULL THEN
               IF  aTi_entita = 'G' THEN
                  IF aRecEstrazione770.PARTITA_IVA IS NULL THEN
                      aContatore := aContatore + 1;
                      aCodiceFiscale := 'ESTERO*' || LPAD (aContatore, 9, '0');
                  ELSE
                      aCodiceFiscale := aRecEstrazione770.PARTITA_IVA;
                  END IF;
               ELSE
                  aContatore := aContatore + 1;
                  aCodiceFiscale := 'ESTERO*' || LPAD (aContatore, 9, '0');
               END IF;
            ELSE
               aCodiceFiscale := aRecEstrazione770.CODICE_FISCALE;
            END IF;

            IF aRecEstrazione770.COGNOME IS NULL THEN
               aCognome :=' ';
            ELSE
               aCognome:= aRecEstrazione770.COGNOME;
            END IF;

            IF aRecEstrazione770.NOME IS NULL THEN
               aNome :=' ';
            ELSE
               aNome:= aRecEstrazione770.NOME;
            END IF;

            IF aRecEstrazione770.TI_SESSO IS NULL THEN
               aSesso :=' ';
            ELSE
               aSesso:= aRecEstrazione770.TI_SESSO;
            END IF;

            IF aRecEstrazione770.DT_NASCITA IS NULL THEN
               aDataNascita:=0;
            ELSE
               aDataNascita:=TO_CHAR(aRecEstrazione770.DT_NASCITA, 'DD') ||
                             TO_CHAR(aRecEstrazione770.DT_NASCITA, 'MM') ||
                             TO_CHAR(aRecEstrazione770.DT_NASCITA, 'YYYY');
            END IF;

            IF aRecEstrazione770.DS_COMUNE_NASCITA IS NULL THEN
               aComuneNascita := ' ';
            ELSE
               aComuneNascita:= aRecEstrazione770.DS_COMUNE_NASCITA;
            END IF;

            IF aRecEstrazione770.CD_PROVINCIA_NASCITA IS NULL THEN
               aProvinciaNascita := ' ';
            ELSE
               aProvinciaNascita:= aRecEstrazione770.CD_PROVINCIA_NASCITA;
            END IF;

            IF aRecEstrazione770.CD_NAZIONE_770 IS NULL Or aRecEstrazione770.CD_NAZIONE_770='*' THEN
               aCittadinanzaStatoEstero := '0';
            ELSE
               aCittadinanzaStatoEstero:= aRecEstrazione770.CD_NAZIONE_770;
            END IF;

            IF aRecEstrazione770.RAGIONE_SOCIALE IS NULL THEN
               aRagioneSociale:= ' ';
            ELSE
               aRagioneSociale:= aRecEstrazione770.RAGIONE_SOCIALE;
            END IF;

            IF aRecEstrazione770.DS_COMUNE_FISCALE IS NULL THEN
               aComuneDomicilio := ' ';
            ELSE
               aComuneDomicilio:= aRecEstrazione770.DS_COMUNE_FISCALE;
            END IF;

            IF aRecEstrazione770.CD_PROVINCIA_FISCALE IS NULL THEN
               aProvinciaDomicilio := ' ';
            ELSE
               aProvinciaDomicilio:= aRecEstrazione770.CD_PROVINCIA_FISCALE;
            END IF;

            IF aRecEstrazione770.VIA_NUM_FISCALE IS NULL THEN
               aIndirizzo := ' ';
            ELSE
               aIndirizzo:= aRecEstrazione770.VIA_NUM_FISCALE;
            END IF;

            IF aRecEstrazione770.DS_COMUNE_FISCALE IS NULL THEN
               aCodiceComuneDomicilio := ' ';
            ELSE
               aCodiceComuneDomicilio:= aRecEstrazione770.DS_COMUNE_FISCALE;
            END IF;

            IF aRecEstrazione770.ID_FISCALE_ESTERO IS NULL THEN
               aIdentificativoFiscale := ' ';
            ELSE
               aIdentificativoFiscale:= aRecEstrazione770.ID_FISCALE_ESTERO;
            END IF;
      END IF;


   END LOOP;

   CLOSE gen_cur;
   END;

END scriviFileQuadroSC;
-- =================================================================================================
-- Costruzione del quadro SF
-- =================================================================================================
PROCEDURE scriviFileQuadroSF
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inUtente VARCHAR2--,
    --aRecBframeBlob BFRAME_BLOB%ROWTYPE,
    --inCLOB CLOB
   ) IS

   --mioCLOB CLOB;
   aStringaChiave1 VARCHAR2(5);
   aStringaChiave2 VARCHAR2(8);
   aStringaChiave3 VARCHAR2(6);
   aStringa VARCHAR2(4000);
   aDifferenza INTEGER;

   aStringaImporto VARCHAR2(10);

   i BINARY_INTEGER;

   --aRecBframeBlob BFRAME_BLOB%ROWTYPE;
   aRecEstrazione770 vpg_certificazione_770%ROWTYPE;

   gen_cur GenericCurType;
 -- Variabili usate
   aContatore NUMBER(9);
   aTi_entita varchar2(1);
   aCodiceFiscale varchar2(20);
   aCognome varchar2(200);
   aNome varchar2(200);
   aSesso varchar2(1);
   aDataNascita varchar2(8);
   aComuneNascita varchar2(100);
   aProvinciaNascita varchar2(2);
   aCittadinanzaStatoEstero number(3);
   aRagioneSociale varchar2(200);
   aSpazi varchar2(100);
   aComuneDomicilio varchar2(200);
   aProvinciaDomicilio varchar2(2);
   aIndirizzo varchar2(200);
   aCodiceComuneDomicilio varchar2(200);
   aIdentificativoFiscale varchar2(25);
BEGIN
--pipe.send_message('4');
   -------------------------------------------------------------------------------------------------
   -- Inizializzazione CLOB
/*
   aRecBframeBlob.cd_tipo:=IDTIPOBLOB;
   aRecBframeBlob.path:='fileout770/' || inEsercizio || '/';
   If inTiModello = 'S' then
       aRecBframeBlob.filename:='FILEOUT_770_SEMPLIFICATO_' || inRepID || '.DAT';
       aRecBframeBlob.ds_file:='FILE OUTPUT ESTRAZIONE 770 SEMPLIFICATO';
   Else
       aRecBframeBlob.filename:='FILEOUT_770_ORDINARIO_' || inRepID || '.DAT';
       aRecBframeBlob.ds_file:='FILE OUTPUT ESTRAZIONE 770 ORDINARIO';
   End If;
   aRecBframeBlob.ti_visibilita:='U';
   aRecBframeBlob.ds_utente:='FILE OUTPUT ESTRAZIONE 770';

   IBMUTL005.ShIniCBlob(aRecBframeBlob.cd_tipo,
                        aRecBframeBlob.path,
                        aRecBframeBlob.filename,
                        aRecBframeBlob.ti_visibilita,
                        aRecBframeBlob.ds_file,
                        aRecBframeBlob.ds_utente,
                        inUtente,
                        mioCLOB);
*/
   -------------------------------------------------------------------------------------------------
   -- Scrittura CLOB (file output estrazione 770)

   BEGIN

      -- Valorizzazione costanti della chiave file -------------------------------------------------
      aContatore :=1;
      aTi_entita :=' ';
      aCodiceFiscale :=' ';
      aCognome :=' ';
      aNome :=' ';
      aSesso :=' ';
      aDataNascita := '00000000';
      aComuneNascita :=' ';
      aProvinciaNascita :=' ';
      aCittadinanzaStatoEstero :=0;
      aRagioneSociale :=' ';
      aSpazi :=' ';
      aComuneDomicilio :=' ';
      aProvinciaDomicilio :=' ';
      aIndirizzo :=' ';
      aCodiceComuneDomicilio := ' ';
      aIdentificativoFiscale :=' ';
--pipe.send_message('5');
      -- Ciclo elaborazione dati 770 ---------------------------------------------------------------

      OPEN gen_cur FOR

           SELECT *
           FROM  vpg_certificazione_770
           where inTiModello = 'O'
             and inQuadro = 'SF'
           Order By ID, CHIAVE, TIPO;
      LOOP
         FETCH gen_cur INTO
               aRecEstrazione770;

         EXIT WHEN gen_cur%NOTFOUND;

      IF  (aRecEstrazione770.nome IS NULL AND
           aRecEstrazione770.COGNOME IS NULL AND
           aRecEstrazione770.RAGIONE_SOCIALE IS NULL) THEN

          -- Creazione del record d'estrazione del 770
             aStringa:=NULL;
             aStringa:= ' SF0';
             aStringa:= aStringa || '80054330586     ';  -- codice fiscale dichiarante
             aStringa:= aStringa || '                ';  -- codice fiscale sostituto
             -- Persona fisica o giuridica
             IF aTi_entita = 'F' THEN   --persona fisica
                aStringa:=aStringa || '1';
                aStringa:=aStringa || RPAD(' ', 14, ' ');    -- rfu
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');         -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aCognome), 1, 24), 24, ' ');        -- cognome
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aNome), 1, 20), 20, ' ');           -- nome
                aStringa:=aStringa || RPAD(SUBSTR(aSesso, 1, 1), 1, ' ');                   -- sesso
                aStringa:=aStringa || RPAD(SUBSTR(aDataNascita, 1, 8), 8, '0');             -- data nascita
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneNascita), 1, 40), 40, ' ');  -- comune nascita
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aProvinciaNascita), 1, 2), 2, ' '); -- provincia nascita
             ELSE    --persona giuridica
                aStringa:=aStringa || '2';
                aStringa:=aStringa || RPAD(' ', 14, ' ');    -- rfu
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');   -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aRagioneSociale), 1, 60), 60, ' ');    -- denominazione
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 35), 35, ' ');   -- spazi
             END IF;

             aStringa:=aStringa || LPAD(aCittadinanzaStatoEstero, 3, '0');   -- cittadinanza stato estero
             aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneDomicilio), 1, 40), 40, ' ');  -- comune domicilio fiscale
             aStringa:=aStringa || RPAD(SUBSTR(Upper(aProvinciaDomicilio), 1, 2), 2, ' ');   -- provincia domicilio fiscale
             aStringa:=aStringa || RPAD(SUBSTR(Upper(aIndirizzo), 1, 40), 40, ' ');   -- indirizzo
             aStringa:=aStringa || RPAD(' ', 4, ' ');
             aStringa:=aStringa || RPAD(' ', 2, ' ');   -- rfu
             aStringa:=aStringa || RPAD(SUBSTR(Upper(aIdentificativoFiscale), 1, 25), 25, ' ');   -- identificativo fiscale
             IF aRecEstrazione770.CD_TI_COMPENSO IS NULL THEN
                aStringa:=aStringa || RPAD(' ', 1, ' ');   -- causale
             ELSE
                aStringa:=aStringa || RPAD(SUBSTR(aRecEstrazione770.CD_TI_COMPENSO, 1, 1), 1, ' ');    -- causale
             END IF;
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.im_Lordo * 100), 16, '0');   -- lordo
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_NON_SOGG_RIT * 100), 16, '0');-- somma non soggetta a ritenute

             aStringa:= aStringa ||  LPAD((nvl(aRecEstrazione770.ALIQUOTA,0) * 1000), 6, '0');-- aliquota
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 16, '0');  -- Ritenuta

             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Ritenute sospese
             aStringa:= aStringa ||  LPAD('0', 16, '0');-- Rimborsi
             --Dati del rappresentante
             aStringa:= aStringa || RPAD(' ', 1, ' ');  -- tipo
             aStringa:= aStringa || RPAD(' ', 16, ' '); -- codice fiscale
             aStringa:= aStringa || RPAD(' ', 24, ' '); -- cognome
             aStringa:= aStringa || RPAD(' ', 20, ' '); -- nome
             aStringa:= aStringa || RPAD(' ', 1, ' ');  -- sesso
             aStringa:= aStringa || LPAD('0', 8, '0');  -- data nascita
             aStringa:= aStringa || RPAD(' ', 40, ' ');  -- comune nascita
             aStringa:= aStringa || RPAD(' ', 2, ' ');  -- provincia nascita
             aStringa:= aStringa || RPAD(' ', 40, ' ');  -- comune domicilio fiscale
             aStringa:= aStringa || RPAD(' ', 2, ' ');  -- provincia
             aStringa:= aStringa || RPAD(' ', 40, ' ');  -- indirizzo
             aStringa:= aStringa || LPAD('0', 3, '0');  -- codice stato estero

             aStringa:= aStringa || RPAD(' ', 2921, ' '); -- spazio
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- codice caricamento
             aStringa:= aStringa || RPAD(' ', 7, ' '); -- codice utente


             IF LENGTH(aStringa) != 3500 THEN
                  IBMERR001.RAISE_ERR_GENERICO
                     ('Errore in lunghezza file in output tipo record 770 lunghezza ' || LENGTH(aStringa));
             END IF;
             -- Scrittura CLOB
             IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                 aRecBframeBlob.path,
                                 aRecBframeBlob.filename,
                                 mioCLOB,
                                 aStringa);
      ELSE

            IF aRecEstrazione770.TI_ENTITA IS NULL THEN
               aTi_entita :='G';
            ELSE
               aTi_entita:= aRecEstrazione770.TI_ENTITA;
            END IF;

            IF aRecEstrazione770.CODICE_FISCALE IS NULL THEN
               IF  aTi_entita = 'G' THEN
                  IF aRecEstrazione770.PARTITA_IVA IS NULL THEN
                      aContatore := aContatore + 1;
                      aCodiceFiscale := 'ESTERO*' || LPAD (aContatore, 9, '0');
                  ELSE
                      aCodiceFiscale := aRecEstrazione770.PARTITA_IVA;
                  END IF;
               ELSE
                  aContatore := aContatore + 1;
                  aCodiceFiscale := 'ESTERO*' || LPAD (aContatore, 9, '0');
               END IF;
            ELSE
               aCodiceFiscale := aRecEstrazione770.CODICE_FISCALE;
            END IF;

            IF aRecEstrazione770.COGNOME IS NULL THEN
               aCognome :=' ';
            ELSE
               aCognome:= aRecEstrazione770.COGNOME;
            END IF;

            IF aRecEstrazione770.NOME IS NULL THEN
               aNome :=' ';
            ELSE
               aNome:= aRecEstrazione770.NOME;
            END IF;

            IF aRecEstrazione770.TI_SESSO IS NULL THEN
               aSesso :=' ';
            ELSE
               aSesso:= aRecEstrazione770.TI_SESSO;
            END IF;

            IF aRecEstrazione770.DT_NASCITA IS NULL THEN
               aDataNascita:=0;
            ELSE
               aDataNascita:=TO_CHAR(aRecEstrazione770.DT_NASCITA, 'DD') ||
                             TO_CHAR(aRecEstrazione770.DT_NASCITA, 'MM') ||
                             TO_CHAR(aRecEstrazione770.DT_NASCITA, 'YYYY');
            END IF;

            IF aRecEstrazione770.DS_COMUNE_NASCITA IS NULL THEN
               aComuneNascita := ' ';
            ELSE
               aComuneNascita:= aRecEstrazione770.DS_COMUNE_NASCITA;
            END IF;

            IF aRecEstrazione770.CD_PROVINCIA_NASCITA IS NULL THEN
               aProvinciaNascita := ' ';
            ELSE
               aProvinciaNascita:= aRecEstrazione770.CD_PROVINCIA_NASCITA;
            END IF;

            IF aRecEstrazione770.CD_NAZIONE_770 IS NULL Or aRecEstrazione770.CD_NAZIONE_770='*' THEN
               aCittadinanzaStatoEstero := '0';
            ELSE
               aCittadinanzaStatoEstero:= aRecEstrazione770.CD_NAZIONE_770;
            END IF;

            IF aRecEstrazione770.RAGIONE_SOCIALE IS NULL THEN
               aRagioneSociale:= ' ';
            ELSE
               aRagioneSociale:= aRecEstrazione770.RAGIONE_SOCIALE;
            END IF;

            IF aRecEstrazione770.DS_COMUNE_FISCALE IS NULL THEN
               aComuneDomicilio := ' ';
            ELSE
               aComuneDomicilio:= aRecEstrazione770.DS_COMUNE_FISCALE;
            END IF;

            IF aRecEstrazione770.CD_PROVINCIA_FISCALE IS NULL THEN
               aProvinciaDomicilio := ' ';
            ELSE
               aProvinciaDomicilio:= aRecEstrazione770.CD_PROVINCIA_FISCALE;
            END IF;

            IF aRecEstrazione770.VIA_NUM_FISCALE IS NULL THEN
               aIndirizzo := ' ';
            ELSE
               aIndirizzo:= aRecEstrazione770.VIA_NUM_FISCALE;
            END IF;

            IF aRecEstrazione770.DS_COMUNE_FISCALE IS NULL THEN
               aCodiceComuneDomicilio := ' ';
            ELSE
               aCodiceComuneDomicilio:= aRecEstrazione770.DS_COMUNE_FISCALE;
            END IF;

            IF aRecEstrazione770.ID_FISCALE_ESTERO IS NULL THEN
               aIdentificativoFiscale := ' ';
            ELSE
               aIdentificativoFiscale:= aRecEstrazione770.ID_FISCALE_ESTERO;
            END IF;
      END IF;


   END LOOP;

   CLOSE gen_cur;
   END;
/*
   -------------------------------------------------------------------------------------------------
   -- Chiusura CLOB

   IBMUTL005.ShCloseClob(aRecBframeBlob.cd_tipo,
         aRecBframeBlob.path,
                         aRecBframeBlob.filename,
       mioCLOB);
*/
END scriviFileQuadroSF;
-- =================================================================================================
-- Costruzione del quadro SH
-- =================================================================================================
PROCEDURE scriviFileQuadroSH
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inUtente VARCHAR2--,
    --aRecBframeBlob BFRAME_BLOB%ROWTYPE,
    --inCLOB CLOB
   ) IS

   --mioCLOB CLOB;
   aStringaChiave1 VARCHAR2(5);
   aStringaChiave2 VARCHAR2(8);
   aStringaChiave3 VARCHAR2(6);
   aStringa VARCHAR2(4000);

   i BINARY_INTEGER;

   --aRecBframeBlob BFRAME_BLOB%ROWTYPE;
   aRecEstrazione770 vpg_certificazione_770%ROWTYPE;
   gen_cur GenericCurType;
 -- Variabili usate
   contaDettagli number;
BEGIN
--pipe.send_message('4');
   -------------------------------------------------------------------------------------------------
   -- Inizializzazione CLOB
/*
   aRecBframeBlob.cd_tipo:=IDTIPOBLOB;
   aRecBframeBlob.path:='fileout770/' || inEsercizio || '/';
   If inTiModello = 'S' then
       aRecBframeBlob.filename:='FILEOUT_770_SEMPLIFICATO_' || inRepID || '.DAT';
       aRecBframeBlob.ds_file:='FILE OUTPUT ESTRAZIONE 770 SEMPLIFICATO';
   Else
       aRecBframeBlob.filename:='FILEOUT_770_ORDINARIO_' || inRepID || '.DAT';
       aRecBframeBlob.ds_file:='FILE OUTPUT ESTRAZIONE 770 ORDINARIO';
   End If;
   aRecBframeBlob.ti_visibilita:='U';
   aRecBframeBlob.ds_utente:='FILE OUTPUT ESTRAZIONE 770';

   IBMUTL005.ShIniCBlob(aRecBframeBlob.cd_tipo,
                        aRecBframeBlob.path,
                        aRecBframeBlob.filename,
                        aRecBframeBlob.ti_visibilita,
                        aRecBframeBlob.ds_file,
                        aRecBframeBlob.ds_utente,
                        inUtente,
                        mioCLOB);
*/
   -------------------------------------------------------------------------------------------------
   -- Scrittura CLOB (file output estrazione 770)

   BEGIN

      -- Valorizzazione costanti della chiave file -------------------------------------------------
      contaDettagli :=0;

--pipe.send_message('5');
      -- Ciclo elaborazione dati 770 ---------------------------------------------------------------

      OPEN gen_cur FOR

           SELECT *
           FROM  vpg_certificazione_770
           where inTiModello = 'O'
             and inQuadro = 'SH'
             and tipo = 'B'
           Order By ID, CHIAVE, TIPO;
      LOOP
         FETCH gen_cur INTO
               aRecEstrazione770;

         EXIT WHEN gen_cur%NOTFOUND;
         contaDettagli := contaDettagli + 1;
         if contaDettagli = 1 then
          -- Creazione del record d'estrazione del 770
             aStringa:=NULL;
             aStringa:= ' SH0';
             aStringa:= aStringa || '80054330586     ';  -- codice fiscale dichiarante
             aStringa:= aStringa || '                ';  -- codice fiscale sostituto
             aStringa:= aStringa || '7';   --prospetto G
             aStringa:=aStringa || RPAD(' ', 14, ' ');    -- rfu
         end if;
         aStringa:= aStringa ||  LPAD((aRecEstrazione770.IMPONIBILE_FI * 100), 16, '0');   -- somme soggette a ritenute
         aStringa:= aStringa ||  LPAD((nvl(aRecEstrazione770.ALIQUOTA,0) * 1000), 6, '0'); -- aliquota
         aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 16, '0');     -- Ritenuta operata

         if contaDettagli = 3 then
             aStringa:= aStringa || RPAD(' ', 3318, ' '); -- spazio
             aStringa:= aStringa || RPAD(' ', 10, ' ');   -- codice caricamento
             aStringa:= aStringa || RPAD(' ', 7, ' ');    -- codice utente
             contaDettagli := 0;

             IF LENGTH(aStringa) != 3500 THEN
                  IBMERR001.RAISE_ERR_GENERICO
                     ('Errore in lunghezza file in output tipo record 770 lunghezza ' || LENGTH(aStringa));
             END IF;
             -- Scrittura CLOB
             IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                 aRecBframeBlob.path,
                                 aRecBframeBlob.filename,
                                 mioCLOB,
                                 aStringa);
         end if;

   END LOOP;

   if contaDettagli < 3 and contaDettagli > 0 then    -- se è 3 non devo fare più nulla
       if contaDettagli = 1 then  -- devo aggiungere zeri per dettagli 2 e 3
             aStringa:= aStringa || LPAD('0', 16, '0');   -- somme soggette a ritenute
             aStringa:= aStringa || LPAD('0', 6, '0');    -- aliquota
             aStringa:= aStringa || LPAD('0', 16, '0');     -- Ritenuta operata
             aStringa:= aStringa || LPAD('0', 16, '0');   -- somme soggette a ritenute
             aStringa:= aStringa || LPAD('0', 6, '0');    -- aliquota
             aStringa:= aStringa || LPAD('0', 16, '0');     -- Ritenuta operata
       elsif contaDettagli = 2 then  -- devo aggiungere zeri per dettaglio 3
             aStringa:= aStringa || LPAD('0', 16, '0');   -- somme soggette a ritenute
             aStringa:= aStringa || LPAD('0', 6, '0');    -- aliquota
             aStringa:= aStringa || LPAD('0', 16, '0');     -- Ritenuta operata
       end if;

       aStringa:= aStringa || RPAD(' ', 3318, ' '); -- spazio
       aStringa:= aStringa || RPAD(' ', 10, ' ');   -- codice caricamento
       aStringa:= aStringa || RPAD(' ', 7, ' ');    -- codice utente

       IF LENGTH(aStringa) != 3500 THEN
             IBMERR001.RAISE_ERR_GENERICO
                ('Errore in lunghezza file in output tipo record 770 lunghezza ' || LENGTH(aStringa));
       END IF;
       -- Scrittura CLOB
       IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                           aRecBframeBlob.path,
                           aRecBframeBlob.filename,
                           mioCLOB,
                           aStringa);
   end if;
   CLOSE gen_cur;
   END;
/*
   -------------------------------------------------------------------------------------------------
   -- Chiusura CLOB

   IBMUTL005.ShCloseClob(aRecBframeBlob.cd_tipo,
         aRecBframeBlob.path,
                         aRecBframeBlob.filename,
       mioCLOB);
*/
END scriviFileQuadroSH;
-- =================================================================================================
-- Costruzione del quadro SY
-- =================================================================================================
PROCEDURE scriviFileQuadroSY
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inUtente VARCHAR2
   ) IS

   aStringaChiave1 VARCHAR2(5);
   aStringaChiave2 VARCHAR2(8);
   aStringaChiave3 VARCHAR2(6);
   aStringa VARCHAR2(4000);
   aDifferenza INTEGER;

   aStringaImporto VARCHAR2(10);

   i BINARY_INTEGER;

   aRecEstrazione770 vpg_certificazione_770%ROWTYPE;

   gen_cur GenericCurType;
 -- Variabili usate
   aCodiceFiscale varchar2(20);

BEGIN
--pipe.send_message('4');
   BEGIN

      -- Valorizzazione costanti della chiave file -------------------------------------------------
      aCodiceFiscale :=' ';

      -- Ciclo elaborazione dati 770 ---------------------------------------------------------------

      OPEN gen_cur FOR

           SELECT *
           FROM  vpg_certificazione_770
           where inTiModello = 'S'
             and inQuadro = 'SY'
           Order By ID, CHIAVE, TIPO,CF_PI_PIGNORATO;
      LOOP
         FETCH gen_cur INTO
               aRecEstrazione770;

         EXIT WHEN gen_cur%NOTFOUND;

      IF  (aRecEstrazione770.nome IS NULL AND
           aRecEstrazione770.COGNOME IS NULL AND
           aRecEstrazione770.RAGIONE_SOCIALE IS NULL) THEN      -- record di tipo B

          -- Creazione del record d'estrazione del 770
             aStringa:=NULL;
             aStringa:= ' SY0';
             aStringa:= aStringa || '80054330586     ';  -- codice fiscale dichiarante
             aStringa:= aStringa || '                ';  -- codice fiscale sostituto
             aStringa:= aStringa || '1';                 -- prospetto
             aStringa:=aStringa || RPAD(' ', 14, ' ');   -- rfu
             aStringa:=aStringa || '0';                  -- tipo invio

             aStringa:=aStringa || RPAD(SUBSTR(nvl(aRecEstrazione770.CF_PI_PIGNORATO,' '), 1, 16), 16, ' ');   -- codice fiscale pignorato
             aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');   -- codice fiscale

             aStringa:= aStringa ||  LPAD((aRecEstrazione770.im_Lordo * 100), 16, '0');   -- somma erogata
             aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 16, '0');  -- ritenuta operata

             If aRecEstrazione770.IM_RITENUTE > 0 then
                  aStringa:=aStringa || '0';
             Else
                  aStringa:=aStringa || '1';
             End if;

             aStringa:= aStringa || RPAD(' ', 3383, ' '); -- spazio


             IF LENGTH(aStringa) != 3500 THEN
                  IBMERR001.RAISE_ERR_GENERICO
                     ('Errore in lunghezza file in output tipo record 770 lunghezza ' || LENGTH(aStringa));
             END IF;
             -- Scrittura CLOB
             IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                 aRecBframeBlob.path,
                                 aRecBframeBlob.filename,
                                 mioCLOB,
                                 aStringa);
      ELSE    -- record di tipo A
            IF aRecEstrazione770.CODICE_FISCALE IS NULL THEN
                 aCodiceFiscale := aRecEstrazione770.PARTITA_IVA;
            ELSE
                 aCodiceFiscale := aRecEstrazione770.CODICE_FISCALE;
            END IF;
      END IF;
   END LOOP;

   CLOSE gen_cur;
   END;

END scriviFileQuadroSY;
-- =================================================================================================
-- Estrazione dati per stampa 770
-- =================================================================================================
PROCEDURE estrazione770Interna
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inUtente VARCHAR2,
    pg_exec NUMBER
   ) IS
   tc IBMPRT000.t_cursore;
BEGIN

   -------------------------------------------------------------------------------------------------
   -- Inizializzazione variabili

   dataOdierna:=sysdate;

   -------------------------------------------------------------------------------------------------
   -- Inserimento in VPG_CERTIFICAZIONE_770
   If inTiModello = 'S' then
          IBMUTL200.LOGINF(pg_exec,
                           'Estrazione dati 770 - ',
                           'FASE 1',
                           'FASE 1 - Modello Semplificato - Quadro: '||inQuadro);
   Elsif inTiModello = 'O' then
          IBMUTL200.LOGINF(pg_exec,
                           'Estrazione dati 770 - ',
                           'FASE 1',
                           'FASE 1 - Modello Ordinario - Quadro: '||inQuadro);
   End If;


    SPG_CERTIFICAZIONE_770(tc,
                          inEsercizio,
                          inTiModello,
                          inQuadro,
                          '%',
                          null);
   -------------------------------------------------------------------------------------------------
   -- Costruzione del file

   IBMUTL200.LOGINF(pg_exec,
                    'Estrazione dati 770 - Dettaglio elaborazione',
                    'FASE 2',
                    'FASE 2 - creazione CLOB (file output)');

   scriviFileOutput(inEsercizio,
                    inTiModello,
                    inQuadro,
                    inRepID,
                    inUtente);

   IBMUTL200.LOGINF(pg_exec,
                    'Estrazione dati 770 - Dettaglio elaborazione',
                    'FASE 3',
                    'FASE 3 - Fine caricamento');

END estrazione770Interna;


-- =================================================================================================
-- Guscio per gestione estrazione 770 in batch
-- =================================================================================================
PROCEDURE job_estrazione770
   (
    job NUMBER,
    pg_exec NUMBER,
    next_date DATE,
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inMsgError VARCHAR2,
    inUtente VARCHAR2
   ) IS
   aStringa VARCHAR2(2000);
   i BINARY_INTEGER;

BEGIN

   -- Lancio start esecuzione log

   aStringa:=inMsgError;

   IBMUTL210.logStartExecutionUpd(pg_exec, IDTIPOLOG, job, 'Richiesta utente:' || inUtente,
                                  'Estrazione dati 770. Start:' || TO_CHAR(sysdate,'YYYY/MM/DD HH-MI-SS'));

   BEGIN

      estrazione770Interna(inEsercizio,
                           inTiModello,
                           inQuadro,
                           inRepID,
                          -- aStringa,
                           inUtente,
                           pg_exec);

      COMMIT;

      -- Messaggio di operazione completata ad utente

      IBMUTL205.LOGINF('Estrazione dati 770',
                       'Estrazione dati 770 ' || TO_CHAR(sysdate,'DD/MM/YYYY HH:MI:SS'),
                       'Operazione completata con successo',
                       inUtente);

   EXCEPTION

      WHEN others THEN
           ROLLBACK;

      -- Messaggio di attenzione ad utente

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

      -- 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,
                             'Estrazione dati 770- Dettaglio errori',
                             'Errore : ' || errori_tab(i).tStringaErr,
                             'Identificativo = ' || errori_tab(i).tStringaKey);

         END LOOP;

      END IF;

   END;

END job_estrazione770;

-- =================================================================================================
-- Main estrazione 770 Standard
-- =================================================================================================
PROCEDURE estrazione770
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inMsgError IN OUT VARCHAR2,
    inUtente VARCHAR2
   ) IS

   aProcedure VARCHAR2(2000);
   aStringa VARCHAR2(2000);

   --inTiModello VARCHAR2(1);
   --inQuadro VARCHAR2(2);

BEGIN

   --inTiModello := 'O';
   --inQuadro    := 'SH';

   -------------------------------------------------------------------------------------------------
   -- Controllo congruenza parametri in input

   chkParametriInput(inEsercizio,
                     inRepID,
                     inUtente);

   -------------------------------------------------------------------------------------------------
   -- Valorizza parametri

   aStringa:=inMsgError;

   -------------------------------------------------------------------------------------------------
   -- Attivazione della gestione batch per estrazione 770

   aProcedure:='CNRCTB930.job_estrazione770(job, ' ||
                                            'pg_exec, ' ||
                                            'next_date, ' ||
                                            inEsercizio || ',''' ||
                                            inTiModello || ''','''||
                                            inQuadro || ''',' ||
                                            inRepID || ',''' ||
                                            aStringa || ''',' ||
                                            '''' || inUtente || ''');';

   IBMUTL210.CREABATCHDINAMICO('Estrazione dati 770',
                               aProcedure,
                               inUtente);

   IBMUTL001.deferred_commit;

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

END estrazione770;
-- Nuovo quadro
PROCEDURE scriviFileQuadroSCSY
   (
    inEsercizio NUMBER,
    inTiModello VARCHAR2,
    inQuadro VARCHAR2,
    inRepID INTEGER,
    inUtente VARCHAR2
   ) IS

   aStringa_interna_sdoppia VARCHAR2(5000);
   aStringa_sdoppia VARCHAR2(5000);
   aStringa_prima_sdoppia VARCHAR2(5000);
   aStringa_finale VARCHAR2(5000);
   aStringa_anag VARCHAR2(5000);
   aStringa VARCHAR2(5000);
   aStringa1 VARCHAR2(5000);
   aStringa2 VARCHAR2(5000);
   aStringa3 VARCHAR2(5000);
   --mioCLOB_sc1 CLOB;
   --mioCLOB_sc2 CLOB;
   --aRecBframeBlob_sc1 BFRAME_BLOB%ROWTYPE;
   --aRecBframeBlob_sc2 BFRAME_BLOB%ROWTYPE;
   --aRecBframeBlob_sc BFRAME_BLOB%ROWTYPE;
   i BINARY_INTEGER;

   aRecEstrazione770 vpg_certificazione_770%ROWTYPE;
   gen_cur GenericCurType;
 -- Variabili usate
   aContatore NUMBER(9);
   aTi_entita varchar2(1);
   aCdAnag varchar2(6);

   aCodiceFiscale varchar2(20);
   aCognome varchar2(200);
   aNome varchar2(200);
   aSesso varchar2(1);
   aDataNascita varchar2(8);
   aComuneNascita varchar2(100);
   aProvinciaNascita varchar2(2);
   aCittadinanzaStatoEstero number(3);
   aRagioneSociale varchar2(200);
   aSpazi varchar2(100);
   aComuneDomicilio varchar2(200);
   aProvinciaDomicilio varchar2(2);
   aIndirizzo varchar2(200);
   aCodiceComuneDomicilio varchar2(200);
   aIdentificativoFiscale varchar2(25);
   aCodiceFiscalePignorato varchar2(20);
   aImportoLordo number;
BEGIN
   -------------------------------------------------------------------------------------------------
   BEGIN
      -- Valorizzazione costanti della chiave file -------------------------------------------------
      aContatore :=1;
      aTi_entita :=' ';
      aCodiceFiscale :=' ';
      aCodiceFiscalePignorato :=' ';
      aCognome :=' ';
      aNome :=' ';
      aSesso :=' ';
      aCdAnag:=' ';
      aDataNascita := '00000000';
      aComuneNascita :=' ';
      aProvinciaNascita :=' ';
      aCittadinanzaStatoEstero :=0;
      aRagioneSociale :=' ';
      aSpazi :=' ';
      aComuneDomicilio :=' ';
      aProvinciaDomicilio :=' ';
      aIndirizzo :=' ';
      aCodiceComuneDomicilio := ' ';
      aIdentificativoFiscale :=' ';

      -- Ciclo elaborazione dati 770 ---------------------------------------------------------------
    OPEN gen_cur FOR

           SELECT *
           FROM   vpg_certificazione_770
           where TI_MODELLO ='S'
             and (CD_QUADRO = 'SC' or
             (cd_quadro ='SY'  and
             not exists(Select 1 from vpg_certificazione_770 vpg
              where vpg.TI_MODELLO ='S'    and
                    vpg_certificazione_770.cd_anag=vpg.cd_anag   and
                    vpg.CD_QUADRO = 'SC')))
           Order By ID, CHIAVE, TIPO;
      LOOP
         FETCH gen_cur INTO
               aRecEstrazione770;

         EXIT WHEN gen_cur%NOTFOUND;
        -- pipe.send_message('nome '||aRecEstrazione770.nome||' '||aRecEstrazione770.CD_NAZIONE_770);
      IF  (aRecEstrazione770.nome IS NULL AND
           aRecEstrazione770.COGNOME IS NULL AND
           aRecEstrazione770.RAGIONE_SOCIALE IS NULL) THEN

          -- Creazione del record d'estrazione del 770
             aStringa:=NULL;
             aStringa:= ' SC0';
             aStringa:= aStringa || '80054330586     ';  -- codice fiscale dichiatrante
             aStringa:= aStringa || '                ';  -- codice fiscale sostituto
             -- Persona fisica o giuridica
             IF aTi_entita = 'F' THEN   --persona fisica
                aStringa:=aStringa || '1';
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');         -- codice fiscale
                aStringa:=aStringa || RPAD(' ', 16, ' '); --Filler
                aStringa:= aStringa || '00';  -- progressivo rapporto Numerico di 2
                aStringa:= aStringa || '0';   -- Filler di 1 - vale zero
                aStringa:= aStringa || '0000';   -- Tipo posizione numerico di 4 - vale zero
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aCognome), 1, 60), 60, ' ');        -- cognome
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aNome), 1, 20), 20, ' ');           -- nome
                aStringa:=aStringa || RPAD(SUBSTR(aSesso, 1, 1), 1, ' ');                   -- sesso
                aStringa:=aStringa || RPAD(SUBSTR(aDataNascita, 1, 8), 8, '0');             -- data nascita
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneNascita), 1, 40), 40, ' ');  -- comune nascita
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aProvinciaNascita), 1, 2), 2, ' '); -- provincia nascita
             ELSE    --persona giuridica
                aStringa:=aStringa || '2';
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');   -- codice fiscale
                aStringa:=aStringa || RPAD(' ', 16, ' '); --filler
                aStringa:= aStringa || '00';  -- progressivo rapporto Numerico di 2
                aStringa:= aStringa || '0';   -- Filler di 1 - vale zero
                aStringa:= aStringa || '0000';   -- Tipo posizione numerico di 4 - vale zero
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aRagioneSociale), 1, 60), 60, ' ');    -- denominazione
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 20), 20, ' ');           -- nome
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 1), 1, ' ');                   -- sesso
                aStringa:=aStringa || RPAD(SUBSTR(aDataNascita, 1, 8), 8, '0');             -- data nascita inizializzata a '00000000'
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 40), 40, ' ');  -- comune nascita
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 2), 2, ' '); -- provincia nascita
             END IF;
              aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 2), 2, ' '); -- categorie particolari
              aStringa:=aStringa || '0';  -- eventi eccezionali
              aStringa:=aStringa || '0';  -- esclusione precompilata
        if(aCittadinanzaStatoEstero!=0) then
              aStringa:=aStringa || RPAD(' ', 40, ' ');  -- comune domicilio fiscale
              aStringa:=aStringa || RPAD(' ', 2, ' ');   -- provincia domicilio fiscale
        ELSE
              aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneDomicilio), 1, 40), 40, ' ');  -- comune domicilio fiscale
              aStringa:=aStringa || RPAD(SUBSTR(Upper(aProvinciaDomicilio), 1, 2), 2, ' ');   -- provincia domicilio fiscale
        END IF;
              aStringa:=aStringa || RPAD(' ', 4, ' ');  -- codice comune (dovrebbe essere valorizzato solo in casi da noi non gestiti)
              --aStringa:=aStringa || RPAD(SUBSTR(aCodiceComuneDomicilio, 1, 4), 4, ' '); -- codice comune domicilio
              --aStringa:=aStringa || RPAD(SUBSTR(Upper(aIndirizzo), 1, 40), 40, ' ');   -- indirizzo
              aStringa:=aStringa || RPAD(' ', 4, ' ');  -- codice comune fusione 2017 N
              aStringa:=aStringa || RPAD(' ', 40, ' ');   --comune

              aStringa:=aStringa || RPAD(' ', 2, ' ');   -- provincia domicilio fiscale
              aStringa:=aStringa || RPAD(' ', 4, ' ');  -- codice comune (dovrebbe essere valorizzato solo in casi da noi non gestiti)
              aStringa:=aStringa || RPAD(' ', 4, ' ');  -- codice comune (dovrebbe essere valorizzato solo in casi da noi non gestiti)
              aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 16), 16, ' ');   -- codice fiscale rappresentante incapace

             -- per i percipienti esteri occorre ripetere il comune e l'indirizzo

             if(aCittadinanzaStatoEstero!=0) then
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aIdentificativoFiscale), 1, 25), 25, ' ');   -- identificativo fiscale
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aComuneDomicilio), 1, 40), 40, ' ');  -- comune domicilio fiscale
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aIndirizzo), 1, 40), 40, ' ');   -- indirizzo
                aStringa:=aStringa ||  ' ';   -- schumaker
                aStringa:=aStringa ||LPAD(aCittadinanzaStatoEstero, 3, '0');
             else
                aStringa:=aStringa || RPAD(' ', 106, ' ');
                aStringa:=aStringa ||  '000';   -- codice stato estero numeri di 3
             end if;
             aStringa:=aStringa ||  'A';   -- livello totalizzazione  vale 'A' autonomo
             -- fino a 438 caratteri
               aStringa:= aStringa || RPAD('CONSIGLIO NAZIONALE DELL', 24, ' ');
               aStringa:= aStringa || RPAD('E RICERCHE', 24, ' ');
               aStringa:= aStringa || RPAD(' ', 48, ' ');
               aStringa:= aStringa || LPAD('0', 10, '0'); -- calce
             -- fino a 544 caratteri
               aStringa:= aStringa || RPAD('ROMA', 24, ' '); -- caaf comune
               aStringa:= aStringa || RPAD('RM', 2, ' '); -- caaf prov
               aStringa:= aStringa || RPAD('00185', 5, ' '); -- caaf cap
               aStringa:= aStringa || RPAD('PIAZZALE ALDO MORO 7', 35, ' '); -- caaf ind
               aStringa:= aStringa || RPAD('T0649931 F064', 13, ' '); -- caaf tel
               aStringa:= aStringa || RPAD('9933306', 13, ' '); -- caaf fax
               aStringa:= aStringa || RPAD('[email protected]', 60, ' '); -- caaf mail
               aStringa:= aStringa || RPAD('721909', 6, ' '); -- codice attività
               aStringa:= aStringa || RPAD(' ', 3, ' '); -- codice sede
              --  aStringa:= aStringa || RPAD(' ', 150, ' ');
              -- fino a 705 caratteri

               aStringa:= aStringa || LPAD(to_char(trunc(sysdate),'DDMMYYYY'), 8, '0'); -- data stampa
               aStringa:= aStringa || RPAD('LA PRESIDENTE MARIA CHIARA CARROZZA', 50, ' ');
               aStringa:= aStringa || RPAD(' ', 3, ' ');

               aStringa:= aStringa || LPAD('0', 6, '0'); -- num pagina
               aStringa:= aStringa || RPAD(' ', 78, ' ');
               aStringa:= aStringa || LPAD('0', 5, '0'); -- cap
               aStringa:= aStringa || RPAD(' ', 121, ' ');
               aStringa:= aStringa || LPAD('0', 5, '0'); -- cap laser
               aStringa:= aStringa || RPAD(' ', 5, ' ');
               aStringa:= aStringa || LPAD('0', 5, '0');
               aStringa:= aStringa || LPAD(inEsercizio, 4, '0'); -- anno denuncia
               aStringa:= aStringa || RPAD(' ', 132, ' ');
             -- fino a 1127 caratteri
               aStringa:= aStringa || LPAD('0', 5, '0'); -- progressivo cert.
               aStringa:= aStringa || RPAD(' ', 24, ' ');
               aStringa:= aStringa || '0'; -- FLAG conferma certificazione ????

               aStringa:= aStringa || RPAD(' ', 2722, ' ');
               aStringa:= aStringa || RPAD(' ', 1, ' ');-- flag validazione
               aStringa:= aStringa || RPAD(' ', 10, ' ');-- codice caricamento
               aStringa:= aStringa || RPAD(' ', 7, ' '); -- codice utente

               aStringa:= aStringa || RPAD('9410', 4, ' '); -- codice cliente fisso
               aStringa:= aStringa || RPAD('0000', 4, ' ');--CODICE CRD
               aStringa:= aStringa || RPAD('999999', 10, ' ');--CODICE ROTTURA 1
              aStringa:= aStringa || RPAD(' ', 10, ' ');--CODICE ROTTURA 2
              aStringa:= aStringa || RPAD(' ', 10, ' ');--CODICE ROTTURA 3
              aStringa:= aStringa || RPAD(SUBSTR(Upper(aCognome), 1, 24), 24, ' ');--DATO ORDINATO
              aStringa:= aStringa || RPAD('9410', 4, ' ');--CP  -- fisso da tracciato
              aStringa:= aStringa || RPAD(aCdAnag, 6, ' ');--Ni  -- anagrafica
              aStringa:= aStringa || 'R';-- ROTTURA 1
              aStringa:= aStringa || RPAD(' ', 1, ' ');-- ROTTURA 2

               --aStringa:= aStringa || RPAD(' ', 74, ' ');-- spazio
               aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 1
               aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 2
               aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 3
               --pipe.send_message('sc0');

               IF LENGTH(aStringa) != 4000 THEN
                  IBMERR001.RAISE_ERR_GENERICO
                     ('Errore in lunghezza file in output tipo record 770 lunghezza sc0 ' || LENGTH(aStringa));
                END IF;
                aStringa_anag := aStringa;
             -- Scrittura CLOB
              IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                 aRecBframeBlob.path,
                                 aRecBframeBlob.filename,
                                 mioCLOB,
                                 aStringa);

              -- Creazione del record d'estrazione del 770 SC1
             aStringa:= ' SC1';
             aStringa:= aStringa || '80054330586     ';  -- codice fiscale dichiatrante
             aStringa:= aStringa || '                ';  -- codice fiscale sostituto

             IF aTi_entita = 'F' THEN   --persona fisica
                aStringa:=aStringa || '1';
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');         -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 16), 16, ' ');   -- filler
                aStringa:= aStringa || '00';  -- progressivo rapporto Numerico di 2
                aStringa:= aStringa || '0';   -- Filler di 1 - vale zero
                aStringa:= aStringa || '0001';   -- Tipo posizione numerico di 4 - vale uno per il primo modulo??
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aCognome), 1, 60), 60, ' ');        -- cognome
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aNome), 1, 20), 20, ' ');           -- nome
             ELSE    --persona giuridica
                aStringa:=aStringa || '2';
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');   -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 16), 16, ' ');   -- filler
                aStringa:= aStringa || '00';  -- progressivo rapporto Numerico di 2
                aStringa:= aStringa || '0';   -- Filler di 1 - vale zero
                aStringa:= aStringa || '0001';   -- Tipo posizione numerico di 4 - vale uno per il primo modulo??
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aRagioneSociale), 1, 60), 60, ' ');    -- denominazione
                aStringa:= aStringa || RPAD(' ', 20, ' '); -- nome
             end if;
             if(aRecEstrazione770.cd_quadro='SC') then
                 IF aRecEstrazione770.CD_TI_COMPENSO IS NULL THEN
                    aStringa:=aStringa || RPAD(' ', 2, ' ');   -- causale
                 ELSE
                    aStringa:=aStringa || RPAD(SUBSTR(aRecEstrazione770.CD_TI_COMPENSO, 1, 2), 2, ' ');    -- causale
                 END IF;
             else
                aStringa:=aStringa || RPAD(' ', 2, ' ');   -- causale
             end if;
             aStringa:= aStringa || '    ';   -- anno
             aStringa:= aStringa || ' ';   -- anticipazione --cambiato su scarto di data manager

             aStringa_prima_sdoppia := aStringa;
             aStringa_sdoppia := null;
             aStringa := '';
             aStringa1 := '';
             aStringa2 := '';
             aStringa3 := '';

             if(aRecEstrazione770.cd_quadro='SC') then
              -- Se l'imponibile fiscale è superiore al lordo mettiamo l'imponibile fiscale su importo lordo
              -- caso Rivalsa Inps
                    if(aRecEstrazione770.IMPONIBILE_FI > aRecEstrazione770.im_Lordo) then
                  aStringa1:= aStringa1 ||  LPAD((aRecEstrazione770.IMPONIBILE_FI * 100), 12, '0');   -- lordo
                else
                  aStringa1:= aStringa1 ||  LPAD((aRecEstrazione770.im_Lordo * 100), 12, '0');   -- lordo
                end if;
                IF aRecEstrazione770.CD_TRATTAMENTO IS NULL THEN
                    aStringa2:= aStringa2 ||  LPAD('0', 12, '0');   -- somma no rit a regime convezionale
                ELSE
                    -- Trattamenti con convenzione
                   IF (SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) LIKE 'T017%' or SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) LIKE 'R017%') and aRecEstrazione770.im_Lordo = aRecEstrazione770.im_netto THEN
                          aStringa2:=aStringa2 || LPAD((aRecEstrazione770.im_lordo*100), 12, '0');
                       ELSE
                        aStringa2:= aStringa2 ||  LPAD('0', 12, '0');
                       END IF;
                END IF;

                If aRecEstrazione770.IM_NON_SOGG_RIT is not null and aRecEstrazione770.IM_NON_SOGG_RIT > 0 then
                  IF (SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) LIKE 'T017%' or SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) LIKE 'R017%') and aRecEstrazione770.im_Lordo = aRecEstrazione770.im_netto THEN
                      aStringa:= aStringa1||aStringa2 || '0';
                      aStringa:= aStringa||LPAD('0', 12, '0');--somma non soggetta a ritenute
                  else
                      -- NON E' CM e Regime Forfettario e Legge 388 ma ha IM_NON_SOGG_RIT!=0
                      IF (SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) NOT in ('T255','T256','T257','T259','T159','T155','T156','T157','T260','T091','T191')) then

                          aStringa:= aStringa1||aStringa2 || '8';
                          aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_NON_SOGG_RIT * 100), 12, '0');-- somma non soggetta a ritenute
                      else
                        -- CM e Regime Forfettario e Legge 388 ma ha IM_NON_SOGG_RIT!=0
                          IF (SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) in ('T255','T256','T257','T259','T159','T155','T156','T157','T260','T091','T191')) then
                            aImportoLordo := aRecEstrazione770.IM_LORDO - aRecEstrazione770.IM_NON_SOGG_RIT;
                                            aStringa := LPAD((aImportoLordo * 100), 12, '0') || aStringa2;
                            aStringa:= aStringa || '7';
                            aStringa:= aStringa ||  LPAD(((aRecEstrazione770.IM_LORDO - aRecEstrazione770.IM_NON_SOGG_RIT) * 100), 12, '0');-- somma non soggetta a ritenute

                            aImportoLordo := aRecEstrazione770.IM_NON_SOGG_RIT;
                                            aStringa_sdoppia := LPAD((aImportoLordo * 100), 12, '0') || aStringa2;
                            aStringa_sdoppia:= aStringa_sdoppia || '8';
                            aStringa_sdoppia:= aStringa_sdoppia ||  LPAD((aRecEstrazione770.IM_NON_SOGG_RIT * 100), 12, '0');-- somma non soggetta a ritenute
                          else
                            aStringa:= aStringa1||aStringa2  || '0';
                            aStringa:= aStringa ||  LPAD('0', 12, '0');--somma non soggetta a ritenute
                          end if;
                      end if;
                  end if;
                  Else
                  -- CM e Regime Forfettario e Legge 388
                      IF (SUBSTR(aRecEstrazione770.CD_TRATTAMENTO, 1, 4) in ('T255','T256','T257','T259','T159','T155','T156','T157','T260','T091','T191')) then
              aStringa:= aStringa1||aStringa2  || '7';
              aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_LORDO * 100), 12, '0');-- somma non soggetta a ritenute
              else
                      aStringa:= aStringa1||aStringa2  || '0';
                    aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_NON_SOGG_RIT * 100), 12, '0');-- somma non soggetta a ritenute
                    End if;
                  End if;
                  aStringa:= aStringa ||  LPAD((aRecEstrazione770.IMPONIBILE_FI * 100), 12, '0');-- imponibile
                  if aStringa_sdoppia is not null then
                    aStringa_sdoppia:= aStringa_sdoppia ||  LPAD((aRecEstrazione770.IMPONIBILE_FI * 100), 12, '0');-- imponibile
                  end if;
            else --'SY'
                   aStringa:= aStringa ||  LPAD('0', 12, '0');--lordo
                   aStringa:= aStringa ||  LPAD('0', 12, '0'); -- somma no rit a regime convezionale
                   aStringa:= aStringa || '0';
                   aStringa:= aStringa ||  LPAD('0', 12, '0');-- somma non soggetta a ritenute
                   aStringa:= aStringa ||  LPAD('0', 12, '0');-- imponibile
            end if;

            aStringa_interna_sdoppia := aStringa;

            aStringa := '';

            if(aRecEstrazione770.cd_quadro='SC') then
               IF  aRecEstrazione770.TI_RITENUTA = 'A' THEN
                    aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 12, '0');  -- Ritenute a titolo di acconto
                    aStringa:= aStringa ||  LPAD('0', 12, '0');
               ELSE
                   aStringa:= aStringa ||  LPAD('0', 12, '0');
                   aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 12, '0');   -- Ritenute a titolo di imposta
               END if;
            else -- SY
              aStringa:= aStringa ||  LPAD('0', 12, '0');-- Ritenute a titolo di acconto
              aStringa:= aStringa ||  LPAD('0', 12, '0');-- Ritenute a titolo di imposta
            end if;

             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Ritenute sospese
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Addizionale regionale a titolo d'acconto
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Addizionale regionale a titolo d'imposta
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Addizionale regionale sospesa
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Addizionale comunale a titolo d'acconto
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Addizionale comunale a titolo d'imposta
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Addizionale comunale sospesa
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Imponibile anni precedenti
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Ritenute anni precedenti
             if(aRecEstrazione770.cd_quadro='SC') then
                aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_NON_SOGG_INPS * 100), 12, '0');-- Spese Rimborsate(quota esente inps)
             else
                 aStringa:= aStringa ||  LPAD('0', 12, '0');-- Spese Rimborsate(quota esente inps)
             end if;
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Ritenute Rimborsate

             --???????
             if(aRecEstrazione770.cd_quadro='SC' and nvl(aRecEstrazione770.IM_CONTRIBUTI_ENTE,0)!= 0) then --da testare 21/02/2017
                --aStringa:= aStringa || 'A';--RPAD(' ', 1, ' ');-- codice ente previdenziale ??
                aStringa:=  aStringa || RPAD(SUBSTR('80078750587', 1, 16), 16, ' ');   -- codice fiscale  ente previdenziale
                aStringa:=  aStringa || RPAD('Istituto Nazionale Previdenza Sociale - INPS', 40, ' ');-- denominazione ente previdenziale ??
              else
                --aStringa:= aStringa || RPAD(' ', 1, ' ');-- codice ente previdenziale ??
                aStringa:= aStringa || RPAD(' ', 16, ' ');-- CF ente previdenziale ??
                aStringa:= aStringa || RPAD(' ', 40, ' ');-- denominazione ente previdenziale ??

              end if;
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- codice azienda ??
             aStringa:= aStringa || RPAD(' ', 1, ' ');-- categoria ??
             if(aRecEstrazione770.cd_quadro='SC') then
                 aStringa:= aStringa || LPAD((aRecEstrazione770.IM_CONTRIBUTI_ENTE * 100), 12, '0')||'+';-- Contributi a carico Ente
                 aStringa:= aStringa || LPAD((aRecEstrazione770.IM_CONTRIBUTI * 100), 12, '0')||'+';-- Contributi a carico Percipiente
                 aStringa:= aStringa ||' ';-- altri contributi ???-cambiato su scarto di data manager
                 aStringa:= aStringa || LPAD('0', 12, '0')||'+'; -- importo altri contributi
                 aStringa:= aStringa || LPAD((aRecEstrazione770.IM_CONTRIBUTI_ENTE* 100)+(aRecEstrazione770.IM_CONTRIBUTI * 100), 12, '0')||'+';-- contributi dovuti ???
                 aStringa:= aStringa || LPAD((aRecEstrazione770.IM_CONTRIBUTI_ENTE* 100)+(aRecEstrazione770.IM_CONTRIBUTI * 100), 12, '0')||'+';-- contributi versati???
             else --SY
                  aStringa:= aStringa || LPAD('0', 12, '0')||'+';
                  aStringa:= aStringa || LPAD('0', 12, '0')||'+';
                  aStringa:= aStringa ||' ';-- altri contributi ??? --cambiato su scarto di data manager
                  aStringa:= aStringa || LPAD('0', 12, '0')||'+';
                  aStringa:= aStringa || LPAD('0', 12, '0')||'+';
                  aStringa:= aStringa || LPAD('0', 12, '0')||'+';
             end if;

             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme corrisposte prima della data del fallimento
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme corrisposte dal curatore/commissario

             aStringa:= aStringa ||  RPAD(' ', 16, ' ');-- Redditi erogati da altri soggetti
             aStringa:= aStringa ||  LPAD('0', 120, '0');-- numerici non valorizzati

             aStringa:= aStringa || RPAD(' ', 16, ' ');-- CF operazioni straordinarie ??
             aStringa:= aStringa || RPAD(' ', 3200, ' '); -- spazio
             aStringa:= aStringa || RPAD(' ', 1, ' ');-- flag validazione
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- codice caricamento
             aStringa:= aStringa || RPAD(' ', 7, ' '); -- codice utente

             aStringa:= aStringa || RPAD(' ', 75, ' ');-- spazio
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 1
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 2
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 3

             aStringa_finale := aStringa_prima_sdoppia||aStringa_interna_sdoppia||aStringa;

             --pipe.send_message('sc1');
             IF LENGTH(aStringa_finale) != 4000 THEN
                  IBMERR001.RAISE_ERR_GENERICO
                     ('Errore in lunghezza file in output tipo record 770 lunghezza sc1 ' || LENGTH(aStringa_finale));
             END IF;
               IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                 aRecBframeBlob.path,
                                 aRecBframeBlob.filename,
                                 mioCLOB,
                                 aStringa_finale);
                if aStringa_sdoppia is not null then
                   IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                     aRecBframeBlob.path,
                                     aRecBframeBlob.filename,
                                     mioCLOB,
                                     aStringa_anag);
                    aStringa_finale := aStringa_prima_sdoppia||aStringa_sdoppia||aStringa;
                    IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                     aRecBframeBlob.path,
                                     aRecBframeBlob.filename,
                                     mioCLOB,
                                     aStringa_finale);
                end if;

      -- nuovo sc2 21/02/2017
       if(aRecEstrazione770.cd_quadro='SY') then
             aStringa:=NULL;

             aStringa:= ' SC2';
             aStringa:= aStringa || '80054330586     ';  -- codice fiscale dichiatrante
             aStringa:= aStringa || '                ';  -- codice fiscale sostituto

             IF aTi_entita = 'F' THEN   --persona fisica
                aStringa:=aStringa || '1';
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');         -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 16), 16, ' ');   -- filler
                aStringa:= aStringa || '00';  -- progressivo rapporto Numerico di 2
                aStringa:= aStringa || '0';   -- Filler di 1 - vale zero
                aStringa:= aStringa || '0001';   -- Tipo posizione numerico di 4 - vale uno per il primo modulo??
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aCognome), 1, 60), 60, ' ');        -- cognome
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aNome), 1, 20), 20, ' ');           -- nome
             ELSE    --persona giuridica
                aStringa:=aStringa || '2';
                aStringa:=aStringa || RPAD(SUBSTR(aCodiceFiscale, 1, 16), 16, ' ');   -- codice fiscale
                aStringa:=aStringa || RPAD(SUBSTR(aSpazi, 1, 16), 16, ' ');   -- filler
                aStringa:= aStringa || '00';  -- progressivo rapporto Numerico di 2
                aStringa:= aStringa || '0';   -- Filler di 1 - vale zero
                aStringa:= aStringa || '0001';   -- Tipo posizione numerico di 4 - vale uno per il primo modulo??
                aStringa:=aStringa || RPAD(SUBSTR(Upper(aRagioneSociale), 1, 60), 60, ' ');    -- denominazione
                aStringa:= aStringa || RPAD(' ', 20, ' '); -- nome
             end if;

              aStringa:= aStringa || RPAD(' ', 16, ' ');-- CF operazioni straordinarie pignoramenti??
              aStringa:= aStringa || RPAD(' ', 16, ' ');-- CF operazioni esproprio ??

             -- pignoramenti   ????
             --*****

           if(aRecEstrazione770.cd_quadro='SY') then
                   aStringa:=aStringa || RPAD(SUBSTR(aRecEstrazione770.cf_pi_pignorato, 1, 16), 16, ' ');   -- codice fiscale pignorato
                   aStringa:= aStringa ||  LPAD(((aRecEstrazione770.im_Lordo -aRecEstrazione770.IM_NON_SOGG_RIT)* 100), 12, '0');   -- somma erogata
                   aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_RITENUTE * 100), 12, '0');  -- ritenuta operata
                   aStringa:= aStringa ||  LPAD((aRecEstrazione770.IM_NON_SOGG_RIT * 100), 12, '0');  -- ritenuta operata
             else
                 aStringa:= aStringa || RPAD(' ', 16, ' ');-- CF  pignorato??
                 aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate
                 aStringa:= aStringa ||  LPAD('0', 12, '0');-- ritenute
                 aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate non tassate
             end if;
             -- pignoramenti  riservato soggetto erogatore ????
             aStringa:= aStringa || RPAD(' ', 16, ' ');-- CF  pignorato??
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- ritenute
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate non tassate

             -- somme corrisposta a titolo di indennità  ??
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- ritenute

             -- somme corrisposta altre indennità  ??
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- ritenute

             -- somme corrisposta esproprio  ??
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- ritenute

             -- somme corrisposta  altre indennità  e interessi??
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- Somme erogate
             aStringa:= aStringa ||  LPAD('0', 12, '0');-- ritenute

             aStringa:= aStringa || RPAD(' ', 3490, ' '); -- spazio
             aStringa:= aStringa || RPAD(' ', 1, ' ');-- flag validazione
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- codice caricamento
             aStringa:= aStringa || RPAD(' ', 7, ' '); -- codice utente

             aStringa:= aStringa || RPAD(' ', 74, ' ');-- spazio
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 1
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 2
             aStringa:= aStringa || RPAD(' ', 10, ' ');-- sezionamento 3
             --pipe.send_message('sc1');
             IF LENGTH(aStringa) != 4000 THEN
                  IBMERR001.RAISE_ERR_GENERICO
                     ('Errore in lunghezza file in output tipo record 770 lunghezza sc2 ' || LENGTH(aStringa));
             END IF;
                  IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
                                 aRecBframeBlob.path,
                                 aRecBframeBlob.filename,
                                 mioCLOB,
                                 aStringa);
           end if;
      -- fine nuovo sc2
      ELSE
       --pipe.send_message('else nome '||aRecEstrazione770.nome||' '||aRecEstrazione770.CD_NAZIONE_770);
          --pipe.send_message('tipo A');
            IF aRecEstrazione770.TI_ENTITA IS NULL THEN
               aTi_entita :='G';
            ELSE
               aTi_entita:= aRecEstrazione770.TI_ENTITA;
            END IF;

            IF aRecEstrazione770.CODICE_FISCALE IS NULL THEN
               IF  aTi_entita = 'G' THEN
                  IF aRecEstrazione770.PARTITA_IVA IS NULL THEN
                      aContatore := aContatore + 1;
                      aCodiceFiscale := 'ESTERO*' || LPAD (aContatore, 9, '0');
                  ELSE
                      aCodiceFiscale := aRecEstrazione770.PARTITA_IVA;
                  END IF;
               ELSE
                  aContatore := aContatore + 1;
                  aCodiceFiscale := 'ESTERO*' || LPAD (aContatore, 9, '0');
               END IF;
            ELSE
               aCodiceFiscale := aRecEstrazione770.CODICE_FISCALE;
            END IF;

            IF aRecEstrazione770.COGNOME IS NULL THEN
               aCognome :=' ';
            ELSE
               aCognome:= aRecEstrazione770.COGNOME;
            END IF;

            IF aRecEstrazione770.NOME IS NULL THEN
               aNome :=' ';
            ELSE
               aNome:= aRecEstrazione770.NOME;
            END IF;

            IF aRecEstrazione770.TI_SESSO IS NULL THEN
               aSesso :=' ';
            ELSE
               aSesso:= aRecEstrazione770.TI_SESSO;
            END IF;

            IF aRecEstrazione770.DT_NASCITA IS NULL THEN
               aDataNascita:=0;
            ELSE
               aDataNascita:=TO_CHAR(aRecEstrazione770.DT_NASCITA, 'DD') ||
                             TO_CHAR(aRecEstrazione770.DT_NASCITA, 'MM') ||
                             TO_CHAR(aRecEstrazione770.DT_NASCITA, 'YYYY');
            END IF;

            IF aRecEstrazione770.DS_COMUNE_NASCITA IS NULL THEN
               aComuneNascita := ' ';
            ELSE
               aComuneNascita:= aRecEstrazione770.DS_COMUNE_NASCITA;
            END IF;

            IF aRecEstrazione770.CD_PROVINCIA_NASCITA IS NULL THEN
               aProvinciaNascita := ' ';
            ELSE
               aProvinciaNascita:= aRecEstrazione770.CD_PROVINCIA_NASCITA;
            END IF;

            IF aRecEstrazione770.CD_NAZIONE_770 IS NULL Or aRecEstrazione770.CD_NAZIONE_770='*' THEN
               aCittadinanzaStatoEstero := '0';
            ELSE
               aCittadinanzaStatoEstero:= aRecEstrazione770.CD_NAZIONE_770;
            END IF;

            IF aRecEstrazione770.RAGIONE_SOCIALE IS NULL THEN
               aRagioneSociale:= ' ';
            ELSE
               aRagioneSociale:= aRecEstrazione770.RAGIONE_SOCIALE;
            END IF;

            IF aRecEstrazione770.DS_COMUNE_FISCALE IS NULL THEN
               aComuneDomicilio := ' ';
            ELSE
               aComuneDomicilio:= aRecEstrazione770.DS_COMUNE_FISCALE;
            END IF;

            IF aRecEstrazione770.CD_PROVINCIA_FISCALE IS NULL THEN
               aProvinciaDomicilio := ' ';
            ELSE
               aProvinciaDomicilio:= aRecEstrazione770.CD_PROVINCIA_FISCALE;
            END IF;

            IF aRecEstrazione770.VIA_NUM_FISCALE IS NULL THEN
               aIndirizzo := ' ';
            ELSE
               aIndirizzo:= aRecEstrazione770.VIA_NUM_FISCALE;
            END IF;

            IF aRecEstrazione770.DS_COMUNE_FISCALE IS NULL THEN
               aCodiceComuneDomicilio := ' ';
            ELSE
               aCodiceComuneDomicilio:= aRecEstrazione770.DS_COMUNE_FISCALE;
            END IF;

            IF aRecEstrazione770.ID_FISCALE_ESTERO IS NULL THEN
               aIdentificativoFiscale := ' ';
            ELSE
               aIdentificativoFiscale:= aRecEstrazione770.ID_FISCALE_ESTERO;
            END IF;
            if (aRecEstrazione770.CF_PI_PIGNORATO is null) then
               aCodiceFiscalePignorato := ' ';
            else
               aCodiceFiscalePignorato := aRecEstrazione770.CF_PI_PIGNORATO;
            end if;
            if (aRecEstrazione770.CD_ANAG is null) then
               aCdAnag:= ' ';
            else
               aCdAnag := aRecEstrazione770.CD_ANAG;
            end if;

      END IF;


   END LOOP;

   CLOSE gen_cur;
   END;
END scriviFileQuadroSCSY;

-- =================================================================================================

END; -- PACKAGE END;
/




© 2015 - 2024 Weber Informatics LLC | Privacy Policy