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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB220" is

 function buildCallString(aBS buono_carico_scarico_dett%rowtype, aUser varchar2) return varchar2 is
  aStatement varchar2(2000);
 begin
  if aBS.ti_documento = 'S' then
   aStatement:='-- DISMISSIONE BENE DUREVOLE';
  else
   aStatement:='-- CARICO BENE DUREVOLE';
  end if;
  aStatement:=   aStatement||'
  declare
     aBS buono_carico_scarico_dett%rowtype;
  begin ';
     aStatement:=aStatement||'
     select * into aBS from buono_carico_scarico_dett where
	        esercizio = '||aBS.esercizio||'
		and pg_inventario = '||aBS.pg_inventario||'
		and ti_documento = '''||aBS.ti_documento||'''
		and pg_buono_c_s = '||aBS.pg_buono_c_s||'
		and nr_inventario = '||aBS.nr_inventario||'
		and progressivo = '||aBS.progressivo||'
		for update nowait;';

  if aBS.ti_documento = 'S' then
   aStatement:=aStatement||'      CNRCTB205.regDismBeneDurevoleCOGE(aBS, '''||aUser||''',sysdate);';
  else
   aStatement:=aStatement||'      CNRCTB205.regCaricBeneDurevoleCOGE(aBS, '''||aUser||''',sysdate);';
  end if;
  aStatement:=   aStatement||'
  end;';
  return aStatement;
 end;

 function buildCallString
    (aCdCds VARCHAR2,
     aCdUo VARCHAR2,
     aEsercizio NUMBER,
     aCdCatGrp VARCHAR2,
     aUser VARCHAR2
    ) RETURN VARCHAR2 IS
  aStatement varchar2(2000);
  aCnrInventBeniMig CNR_INVENTARIO_BENI_MIG%ROWTYPE;
 begin
  aStatement:='-- MIGRAZIONE BENE DUREVOLE';
  aStatement:=aStatement ||
     'declare
       aCnrInventBeniMig CNR_INVENTARIO_BENI_MIG%ROWTYPE;
      begin ';
  aStatement:=aStatement ||
              'SELECT cd_unita_organizzativa, ' ||
                     'cd_categoria_gruppo, ' ||
	             'SUM(valore_iniziale) valore_iniziale, ' ||
	             'SUM(valore_ammortizzato) valore_ammortizzato, ' ||
                     'stato_coge ' ||
              'INTO   aCnrInventBeniMig.cir_cd_uo, ' ||
                     'aCnrInventBeniMig.cir_cd_categoria_gruppo, ' ||
                     'aCnrInventBeniMig.cir_valore_iniziale, ' ||
                     'aCnrInventBeniMig.cir_valore_ammortizzato, ' ||
                     'aCnrInventBeniMig.stato ' ||
              'FROM   INVENTARIO_BENI INV,BUONO_CARICO_SCARICO_DETT DETT ' ||
              'WHERE  cd_cds = ' || '''' || aCdCds || '''' || ' AND ' ||
               	     'inv.pg_inventario = dett.pg_inventario and '||
                     'inv.nr_inventario = dett.nr_inventario and '||
                     'inv.progressivo   = dett.progressivo   and '||
                     'inv.fl_migrato = '||''''||'Y'||''''||' and '||
                     'dett.ti_documento = '||''''||'C'||''''||' and '||
                     'inv.dacr       like dett.dacr          and '||
                     'cd_unita_organizzativa = ' || '''' || aCdUo || '''' || ' AND ' ||
                     'esercizio_carico_bene = ' || aEsercizio || ' AND ' ||
                     'cd_categoria_gruppo = ' || '''' || aCdCatGrp || '''' || ' AND ' ||
                     'stato_coge IN (' || '''' || CNRCTB100.STATO_COEP_INI || '''' || ',' ||
                                             '''' || CNRCTB100.STATO_COEP_DA_RIP || '''' || ') ' ||
              'GROUP BY cd_unita_organizzativa, cd_categoria_gruppo, stato_coge ; ';

  aStatement:=aStatement ||
              '  CNRCTB205.regMigrazioneBeniCoge(' || aEsercizio || ',' ||
                                                 '''' || aCdCds || '''' || ',' ||
                                                 '''' || aCdUo || '''' || ',' ||
                                                 '''' || aCnrInventBeniMig.cir_cd_categoria_gruppo || '''' || ',' ||
                                                 aCnrInventBeniMig.cir_valore_iniziale || ',' ||
                                                 aCnrInventBeniMig.cir_valore_ammortizzato || ',' ||
                                                 '''' || aUser || '''' || ',' || sysdate ||','|| '''' || aCnrInventBeniMig.stato || '''' ||  '); ';
  aStatement:=aStatement || 'end;';

  return aStatement;
 end;


 function buildCallString(aTsta V_DOC_ULT_COGE_TSTA%rowtype, aUser varchar2) return varchar2 is
  aStatement varchar2(2000);
 begin
  aStatement:='-- COEP ULTIMI TEMPLATE
    declare
     aTsta V_DOC_ULT_COGE_TSTA%rowtype;
	begin ';
  aStatement:=aStatement||'
     select * into aTsta from V_DOC_ULT_COGE_TSTA where
	        esercizio = '||aTsta.esercizio||'
		and cd_tipo_documento_cont = '''||aTsta.cd_tipo_documento_cont||'''
		and cd_cds = '''||aTsta.cd_cds||'''
		and pg_documento_cont = '||aTsta.pg_documento_cont||';
     CNRCTB205.regDocPagCoge(aTsta, '''||aUser||''',sysdate);
    end;';
  return aStatement;
 end;

 function buildCallStringCoan(aTsta V_DOC_AMM_COGE_TSTA%rowtype, aUser varchar2) return varchar2 is
  aStatement varchar2(2000);
 begin
  aStatement:='-- COAN TEMPLATE
	begin ';
     aStatement:=aStatement||'
     CNRCTB210.regDocAmmCoan('||aTsta.ESERCIZIO||',
  	  							   '''||aTsta.CD_CDS||''',
  								   '''||aTsta.CD_UNITA_ORGANIZZATIVA||''',
  								   '''||aTsta.CD_TIPO_DOCUMENTO||''',
  								   '||aTsta.PG_NUMERO_DOCUMENTO||',
								   '''||aUser||''',sysdate);
   end;';
  return aStatement;
 end;

 function buildCallStringCoep(aTsta V_DOC_AMM_COGE_TSTA%rowtype, aUser varchar2) return varchar2 is
  aStatement varchar2(2000);
 begin
  aStatement:='-- COEP PRIMI TEMPLATE
    declare
     aTsta V_DOC_AMM_COGE_TSTA%rowtype;
	begin ';
  aStatement:=aStatement||'
     select * into aTsta from V_DOC_AMM_COGE_TSTA where
	        esercizio = '||aTsta.esercizio||'
		and cd_tipo_documento = '''||aTsta.cd_tipo_documento||'''
		and cd_cds = '''||aTsta.cd_cds||'''
		and cd_unita_organizzativa = '''||aTsta.cd_unita_organizzativa||'''
		and pg_numero_documento = '||aTsta.pg_numero_documento||';
     CNRCTB205.regDocAmmCoge(aTsta, '''||aUser||''',sysdate);
    end;';
  return aStatement;
 end;

 function buildCallStringAnnEsChiuso(aEsAnn number, aTsta V_DOC_AMM_COGE_TSTA%rowtype, aUser varchar2) return varchar2 is
  aStatement varchar2(2000);
 begin
  aStatement:='-- COEP PRIMI TEMPLATE
    declare
     aTsta V_DOC_AMM_COGE_TSTA%rowtype;
	 aEsAnn number(4):='||aEsAnn||';
	begin ';
  aStatement:=aStatement||'
     select * into aTsta from V_DOC_AMM_COGE_TSTA where
	        esercizio = '||aTsta.esercizio||'
		and cd_tipo_documento = '''||aTsta.cd_tipo_documento||'''
		and cd_cds = '''||aTsta.cd_cds||'''
		and cd_unita_organizzativa = '''||aTsta.cd_unita_organizzativa||'''
		and pg_numero_documento = '||aTsta.pg_numero_documento||';
     CNRCTB205.REGANNULLADOCESCHIUSOCOGE(aEsAnn,aTsta, '''||aUser||''', sysdate);
    end;';
  return aStatement;
 end;

 function buildCallStringRigheAnnEsChiu(aEsAnn number, aRigheAnn V_DOC_AMM_COGE_RIGHE_ANNULLATE%rowtype, aUser varchar2) return varchar2 is
  aStatement varchar2(2000);
 begin
  aStatement:='-- COEP PRIMI TEMPLATE
    declare
       aRigheAnn V_DOC_AMM_COGE_RIGHE_ANNULLATE%rowtype;
       aEsAnn number(4):='||aEsAnn||';
    begin ';
     aStatement:=aStatement||'
     select * into aRigheAnn from V_DOC_AMM_COGE_RIGHE_ANNULLATE where
	        esercizio = '||aRigheAnn.esercizio||'
		and cd_tipo_documento = '''||aRigheAnn.cd_tipo_documento||'''
		and cd_cds = '''||aRigheAnn.cd_cds||'''
		and cd_unita_organizzativa = '''||aRigheAnn.cd_unita_organizzativa||'''
		and pg_numero_documento = '||aRigheAnn.pg_numero_documento||';
     CNRCTB205.REGANNULLARIGHEDOCESCHIUSOCOGE(aEsAnn,aRigheAnn, '''||aUser||''', sysdate);
    end;';
  return aStatement;
 end;




 -- Solleva eccezione se la chiusura economica è in corso
 procedure checkChiusuraEconomicaInCorso(aEs number, aCdCds varchar2) is
 begin
	if(CNRCTB800.isSemStaticoCdsBloccato(aEs, aCdCds, CNRCTB200.SEMAFORO_CHIUSURA)) then
        IBMERR001.RAISE_ERR_GENERICO('Operazioni di chiusura economica in corso su cds:'||aCdCds||' es.:'||aEs);
	end if;
 end;

 procedure job_registraCogeCoan(job number, pg_exec number, next_date date, aEs number, aCdCds varchar2, aData VARCHAR2) is
  aStringa varchar2(4000);
  aTSNow date;
  aUser varchar2(20);
  aChekLock CHAR(1);
  aChekUpdate CHAR(1);
  aMan mandato%rowtype;
  aRev reversale%rowtype;
  aDocCoan V_COAN_DOCUMENTI%rowtype;
 begin
  IBMUTL015.setRbsBig;
  aTSNow:=sysdate;
  aUser:=IBMUTL200.getUserFromLog(pg_exec);

  -- Aggiorna le info di testata del log
  IBMUTL210.logStartExecutionUpd(pg_exec, TIPO_LOG_JOB_COGE, job, 'Batch di registrazione economica. CDS: '||nvl(aCdCds,'UNDEF')||' Start:'||to_char(aTSNow,'YYYY/MM/DD HH-MI-SS'));

  if aCdCds is null then
   IBMERR001.RAISE_ERR_GENERICO('CDS non specificato');
  end if;

  for aCDS in (select cd_unita_organizzativa from v_unita_organizzativa_valida where
       esercizio = aEs
   and cd_unita_organizzativa = decode(aCdCds,'*',cd_unita_organizzativa,aCdCds)
   and fl_cds = 'Y'
   order by cd_unita_organizzativa
  ) loop
   -- Fix del 20040924 Richiesta 843
   CNRCTB204.checkChiusuraEsercizio(aEs, aCDS.cd_unita_organizzativa);
   IBMUTL015.rollbackRbsBig;

-- 06/06/2005 eliminato per consentire i RATEI (tra l'altro già previsti)

--   if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aCDS.cd_unita_organizzativa)='Y') then
--    IBMUTL015.rollbackRbsBig;
--    IBMUTL200.logErr(pg_exec, null,'Esercizio economico precedente non chiuso definitivamente','XX-'||aCDS.cd_unita_organizzativa);
--   else

    IBMUTL015.rollbackRbsBig;
    for aUO in (select cd_unita_organizzativa from v_unita_organizzativa_valida where
         esercizio = aEs
     and cd_unita_padre = aCDS.cd_unita_organizzativa
     and fl_cds = 'N'
     order by cd_unita_organizzativa
    ) loop
     for aTsta in (select * from V_DOC_AMM_COGE_TSTA where
           esercizio = aEs
           and dt_registrazione <= nvl(to_date(aData,'dd/mm/yyyy'),dt_registrazione) 
   	   and cd_cds_origine = aCDS.cd_unita_organizzativa
	   and cd_uo_origine = aUO.cd_unita_organizzativa
       and
	  (
         stato_coge in (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP )
       or stato_coan in (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP )
	  )
     ) loop
      BEGIN
       -- Scrittura dei movimenti COGE
       if aTsta.stato_coge in (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP ) then
   	    CNRCTB205.regDocAmmCoge(aTsta, aUser, sysdate);
        checkChiusuraEconomicaInCorso(aTsta.esercizio, aTsta.cd_cds_origine);
	    IBMUTL015.commitRbsBig;
        IBMUTL200.logInf(pg_exec, 'COPEPOK',buildCallStringCoep(aTsta,aUser),'EP-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTsta));
  	   end if;
      EXCEPTION WHEN OTHERS THEN
       IBMUTL015.rollbackRbsBig;
  	   IBMUTL200.logErr(pg_exec, DBMS_UTILITY.FORMAT_ERROR_STACK,buildCallStringCoep(aTsta,aUser),'EP-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTsta));
      END;

      BEGIN
       if aTsta.stato_coan in (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP ) then
  	    CNRCTB210.regDocAmmCoan(aTsta.ESERCIZIO, aTsta.CD_CDS, aTsta.CD_UNITA_ORGANIZZATIVA, aTsta.CD_TIPO_DOCUMENTO, aTsta.PG_NUMERO_DOCUMENTO, aUser, sysdate);
        checkChiusuraEconomicaInCorso(aTsta.esercizio, aTsta.cd_cds_origine);
        IBMUTL015.commitRbsBig;
        IBMUTL200.logInf(pg_exec, 'COANOK',buildCallStringCoan(aTsta,aUser),'AN-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTsta));
	   end if;
	  EXCEPTION WHEN OTHERS THEN
       IBMUTL015.rollbackRbsBig;
  	   IBMUTL200.logErr(pg_exec, DBMS_UTILITY.FORMAT_ERROR_STACK,buildCallStringCoan(aTsta,aUser),'AN-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTsta));
      END;
     END LOOP; -- Fine loop su docs UO
    END LOOP; -- Fine loop su UO
--   end if;
  END LOOP; -- Fine loop su CDS

  -- Migrazione inventario beni

  for aCDS in (select * from v_unita_organizzativa_valida where
       esercizio = aEs
   and cd_unita_organizzativa = decode(aCdCds,'*',cd_unita_organizzativa,aCdCds)
   and fl_cds = 'Y'
   order by cd_unita_organizzativa
  ) loop
   -- Fix del 20040924 Richiesta 843
   CNRCTB204.checkChiusuraEsercizio(aEs, aCDS.cd_unita_organizzativa);
   IBMUTL015.rollbackRbsBig;
   if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aCDS.cd_unita_organizzativa)='Y') then
    IBMUTL015.rollbackRbsBig;
    IBMUTL200.logErr(pg_exec, null,'Esercizio economico precedente non chiuso definitivamente','XX-'||aCDS.cd_unita_organizzativa);
   else
    IBMUTL015.rollbackRbsBig;


     for aBeneMig in (SELECT cd_unita_organizzativa,
                            cd_categoria_gruppo,
                            sum(valore_iniziale) valore_iniziale,
                            sum(valore_ammortizzato) valore_ammortizzato,
                            stato_coge
                     FROM   INVENTARIO_BENI inv,buono_carico_Scarico_Dett dett,buono_carico_scarico
                     WHERE  cd_cds 		  = aCDS.cd_unita_organizzativa AND
                            esercizio_carico_bene = aEs And
                            fl_migrato 		  = 'Y'  and
                            inv.pg_inventario 	  = dett.pg_inventario and
                            inv.nr_inventario 	  = dett.nr_inventario and
                            inv.progressivo   	  = dett.progressivo   and
                            inv.dacr             like dett.dacr        and
                            buono_carico_scarico.pg_inventario = dett.pg_inventario  and
        										buono_carico_scarico.ti_documento = dett.ti_documento and
        										buono_carico_scarico.esercizio = dett.esercizio and
        										buono_carico_scarico.pg_buono_c_s = dett.pg_buono_c_s  and
                            buono_carico_scarico.data_registrazione <= nvl(to_date(aData,'dd/mm/yyyy'),buono_carico_scarico.data_registrazione)  and
                            Stato_coge in(CNRCTB100.STATO_COEP_DA_RIP,CNRCTB100.STATO_COEP_INI)
                     GROUP BY cd_unita_organizzativa, cd_categoria_gruppo,stato_coge
                     ORDER BY cd_unita_organizzativa, cd_categoria_gruppo,stato_coge
    ) Loop
     BEGIN
      CNRCTB205.regMigrazioneBeniCoge(aEs,
                                      aCDS.cd_unita_organizzativa,
                                      aBeneMig.cd_unita_organizzativa,
                                      aBeneMig.cd_categoria_gruppo,
                                      aBeneMig.valore_iniziale,
                                      aBeneMig.valore_ammortizzato,
                                      aUser,
                                      Sysdate,
                                      aBeneMig.stato_COGE);
      checkChiusuraEconomicaInCorso(aEs, aCDS.cd_unita_organizzativa);
      IBMUTL015.commitRbsBig;
      IBMUTL200.logInf(pg_exec,
                       'MIGBDOK',
                       buildCallString(aCDS.cd_unita_organizzativa, aBeneMig.cd_unita_organizzativa, aEs,
                                       aBeneMig.cd_categoria_gruppo, aUser),
                       'DS-' || aCDS.cd_unita_organizzativa || 'MB-Migrazione Beni:' || aEs || '-' || aBeneMig.cd_unita_organizzativa || '-' ||aBeneMig.cd_categoria_gruppo);
     EXCEPTION WHEN OTHERS THEN
      IBMUTL015.rollbackRbsBig;
 	  IBMUTL200.logErr(pg_exec,
                           DBMS_UTILITY.FORMAT_ERROR_STACK,
                           buildCallString(aCDS.cd_unita_organizzativa, aBeneMig.cd_unita_organizzativa, aEs,
                                           aBeneMig.cd_categoria_gruppo, aUser),
                           'MB-Migrazione Beni:' || aEs || '-' || aBeneMig.cd_unita_organizzativa || '-' ||aBeneMig.cd_categoria_gruppo);
     END;
    end loop;
   end if;
  end loop; -- End loop CDS

  -- Dismissioni di beni durevoli
  for aCDS in (select * from v_unita_organizzativa_valida where
       esercizio = aEs
   and cd_unita_organizzativa = decode(aCdCds,'*',cd_unita_organizzativa,aCdCds)
   and fl_cds = 'Y'
   order by cd_unita_organizzativa
  ) loop
   -- Fix del 20040924 Richiesta 843
   CNRCTB204.checkChiusuraEsercizio(aEs, aCDS.cd_unita_organizzativa);
   IBMUTL015.rollbackRbsBig;
   if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aCDS.cd_unita_organizzativa)='Y') then
    IBMUTL015.rollbackRbsBig;
    IBMUTL200.logErr(pg_exec, null,'Esercizio economico precedente non chiuso definitivamente','XX-'||aCDS.cd_unita_organizzativa);
   else
    IBMUTL015.rollbackRbsBig;
    for aInv in (select distinct pg_inventario from inventario_beni where cd_cds = aCDS.cd_unita_organizzativa) loop
     for aBS in (select * from buono_carico_scarico_dett bcs where
                     esercizio = aEs
				 and pg_inventario = aInv.pg_inventario
				 and ti_documento = 'S' and
				 ( bcs.pg_inventario,bcs.ti_documento,bcs.esercizio,bcs.pg_buono_c_s) in
				 (select buono_carico_scarico.pg_inventario ,buono_carico_scarico.ti_documento ,buono_carico_scarico.esercizio,buono_carico_scarico.pg_buono_c_s 
				 from buono_carico_scarico
          where 
             buono_carico_scarico.data_registrazione <= nvl(to_date(aData,'dd/mm/yyyy'),buono_carico_scarico.data_registrazione))
				 and (stato_coge in (CNRCTB100.STATO_COEP_INI,CNRCTB100.STATO_COEP_DA_RIP) Or
				      stato_coge_quote in (CNRCTB100.STATO_COEP_INI,CNRCTB100.STATO_COEP_DA_RIP))
     ) loop
      BEGIN
       CNRCTB205.regDismBeneDurevoleCOGE(aBS, aUser, sysdate);
       checkChiusuraEconomicaInCorso(aBS.esercizio, aCDS.cd_unita_organizzativa);
       IBMUTL015.commitRbsBig;
       IBMUTL200.logInf(pg_exec,'DISBDOK',buildCallString(aBS,aUser),'DS-'||aCDS.cd_unita_organizzativa||'DB-Dismissioni per inventario:'||CNRCTB204.getDescDocumento(aBS));
      EXCEPTION WHEN OTHERS THEN
       IBMUTL015.rollbackRbsBig;
  	   IBMUTL200.logErr(pg_exec, DBMS_UTILITY.FORMAT_ERROR_STACK,buildCallString(aBS,aUser),'DB-Dismissioni per inventario:'||CNRCTB204.getDescDocumento(aBS));
      END;
     end loop; -- End loop bs_scarico_dett
    end loop; -- End loop inventario
   end if;
  end loop; -- End loop CDS

  -- Carico di beni durevoli
  for aCDS in (select * from v_unita_organizzativa_valida where
       esercizio = aEs
   and cd_unita_organizzativa = decode(aCdCds,'*',cd_unita_organizzativa,aCdCds)
   and fl_cds = 'Y'
   order by cd_unita_organizzativa
  ) loop
   -- Fix del 20040924 Richiesta 843
   CNRCTB204.checkChiusuraEsercizio(aEs, aCDS.cd_unita_organizzativa);
   IBMUTL015.rollbackRbsBig;
   if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aCDS.cd_unita_organizzativa)='Y') then
    IBMUTL015.rollbackRbsBig;
    IBMUTL200.logErr(pg_exec, null,'Esercizio economico precedente non chiuso definitivamente','XX-'||aCDS.cd_unita_organizzativa);
   else
    IBMUTL015.rollbackRbsBig;
    for aInv in (select distinct pg_inventario from inventario_beni where cd_cds = aCDS.cd_unita_organizzativa) loop
     for aBS in (select * from buono_carico_scarico_dett bcs where
                     esercizio = aEs
				 and pg_inventario = aInv.pg_inventario
				 and ti_documento = 'C' and
				  ( bcs.pg_inventario,bcs.ti_documento,bcs.esercizio,bcs.pg_buono_c_s) in
				 (select buono_carico_scarico.pg_inventario ,buono_carico_scarico.ti_documento ,buono_carico_scarico.esercizio,buono_carico_scarico.pg_buono_c_s 
				 from buono_carico_scarico
          where 
             buono_carico_scarico.data_registrazione <= nvl(to_date(aData,'dd/mm/yyyy'),buono_carico_scarico.data_registrazione))
				 and stato_coge in (CNRCTB100.STATO_COEP_INI,CNRCTB100.STATO_COEP_DA_RIP)
     ) loop
      BEGIN
       CNRCTB205.REGCARICBENEDUREVOLECOGE(aBS, aUser, sysdate);
       checkChiusuraEconomicaInCorso(aBS.esercizio, aCDS.cd_unita_organizzativa);
       IBMUTL015.commitRbsBig;
       IBMUTL200.logInf(pg_exec,'CARBDOK',buildCallString(aBS,aUser),'DS-'||aCDS.cd_unita_organizzativa||'CB-Carico in inventario:'||CNRCTB204.getDescDocumento(aBS));
      EXCEPTION WHEN OTHERS THEN
       IBMUTL015.rollbackRbsBig;
  	   IBMUTL200.logErr(pg_exec, DBMS_UTILITY.FORMAT_ERROR_STACK,buildCallString(aBS,aUser),'CB-Carico in inventario:'||CNRCTB204.getDescDocumento(aBS));
      END;
     end loop; -- End loop bs_carico_dett
    end loop; -- End loop inventario
   end if;
  end loop; -- End loop CDS


  -- Scritture ULTIME e SINGOLE (eseguite solo su documenti esitati o annullati)
  --  IBMUTL210.logStartExecutionUpd(pg_exec, job, 'Batch di registrazione economica (ultimi documenti). Start:'||to_char(aTSNow,'YYYY/MM/DD HH-MI-SS'));
  for aCDS in (select cd_unita_organizzativa from v_unita_organizzativa_valida where
       esercizio = aEs
   and cd_unita_organizzativa = decode(aCdCds,'*',cd_unita_organizzativa,aCdCds)
   and fl_cds = 'Y'
   order by cd_unita_organizzativa
  ) loop
   -- Fix del 20040924 Richiesta 843
   CNRCTB204.checkChiusuraEsercizio(aEs, aCDS.cd_unita_organizzativa);
   IBMUTL015.rollbackRbsBig;
   if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aCDS.cd_unita_organizzativa)='Y') then
    IBMUTL015.rollbackRbsBig;
    IBMUTL200.logErr(pg_exec, null,'Esercizio economico precedente non chiuso definitivamente','XX-'||aCDS.cd_unita_organizzativa);
   else
    IBMUTL015.rollbackRbsBig;
    for aTstaUlt in (select * from V_DOC_ULT_COGE_TSTA where
         esercizio = aEs
     and cd_cds_origine = aCDS.cd_unita_organizzativa
     and ((stato in (CNRCTB038.STATO_AUT_ANN) and DT_EMISSIONE_DOCUMENTO_CONT <= nvl(to_date(aData,'dd/mm/yyyy'),DT_EMISSIONE_DOCUMENTO_CONT))     
     or   (stato in (CNRCTB038.STATO_AUT_ESI) and DT_ESITO_DOCUMENTO_CONT <= nvl(to_date(aData,'dd/mm/yyyy'),DT_ESITO_DOCUMENTO_CONT))) 
     and stato_coge in (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP)
	   and cd_tipo_documento_cont in (CNRCTB018.TI_DOC_MAN,CNRCTB018.TI_DOC_REV)
    ) loop
     BEGIN
   	  CNRCTB205.regDocPagCoge(aTstaUlt, aUser, sysdate);
      checkChiusuraEconomicaInCorso(aTstaUlt.esercizio, aTstaUlt.cd_cds_origine);
      IBMUTL015.commitRbsBig;
      IBMUTL200.logInf(pg_exec, 'COEPUOK',buildCallString(aTstaUlt,aUser),'EU-'||aCDS.cd_unita_organizzativa||'.000'||CNRCTB204.getDescDocumento(aTstaUlt));
     EXCEPTION WHEN OTHERS THEN
      IBMUTL015.rollbackRbsBig;
  	  IBMUTL200.logErr(pg_exec, DBMS_UTILITY.FORMAT_ERROR_STACK,buildCallString(aTstaUlt,aUser),'EU-'||aCDS.cd_unita_organizzativa||'.000'||CNRCTB204.getDescDocumento(aTstaUlt));
     END;
    END LOOP; -- fine loop su documenti
   end if;
  END LOOP; -- fine loop su CDS
  IBMUTL200.logInf(pg_exec,'FINE','Termine esecuzione','Termine esecuzione');
 END;

Procedure job_registraAnnCogeEsChiuso(job number, pg_exec number, next_date date, aEsAnn number, aCdCds varchar2) is
  aStringa      VARCHAR2(4000);
  aTSNow        DATE;
  aUser         VARCHAR2(20);
  aChekLock     CHAR(1);
  aChekUpdate   CHAR(1);
  aEs           NUMBER(4);
  aNum          NUMBER;
  aTestata      v_doc_amm_coge_tsta%Rowtype;

Begin
  IBMUTL015.setRbsBig;
  aTSNow:=sysdate;
  aUser:=IBMUTL200.getUserFromLog(pg_exec);

  -- Aggiorna le info di testata del log
  IBMUTL210.logStartExecutionUpd(pg_exec, TIPO_LOG_JOB_COGE, job, 'Batch di registrazione economica annullamento doc esercizio chiuso. Es:'||aEsAnn||' CDS: '||nvl(aCdCds,'UNDEF')||' Start:'||to_char(aTSNow,'YYYY/MM/DD HH-MI-SS'));

  if aEsAnn is null then
   IBMERR001.RAISE_ERR_GENERICO('Esercizio di annullamento non specificato');
  end if;

  if aCdCds is null then
   IBMERR001.RAISE_ERR_GENERICO('CDS non specificato');
  end if;

-- loop sugli esercizi

For aEsRT in (select esercizio from esercizio_base where
         esercizio < aEsAnn
	 and esercizio >= CNRCTB008.ESERCIZIO_PARTENZA
     order by esercizio desc) loop -- loop sugli esercizi (comincia dall'esercizio precedente)

   aEs := aEsRT.esercizio;


-- per ogni esercizio loop sui cds

   For aCDS in (Select  cd_unita_organizzativa
                From    v_unita_organizzativa_valida
                Where   esercizio = aEs And
                        cd_unita_organizzativa = decode(aCdCds,'*',cd_unita_organizzativa,aCdCds) And
                        fl_cds = 'Y'
                Order by cd_unita_organizzativa) Loop -- loop sui CDS

   Begin
    Select 1 into aNum
    From   v_unita_organizzativa_valida
    Where  cd_unita_organizzativa = aCDS.cd_unita_organizzativa And
           esercizio = aEsAnn And
           fl_cds='Y';

   if not CNRCTB008.ISESERCIZIOAPERTOOCHIUSO(aEsAnn, aCDS.cd_unita_organizzativa) then
     IBMERR001.RAISE_ERR_GENERICO('L''esercizio ('||aEsAnn||') per il cds '||aCDS.cd_unita_organizzativa||' in cui è stato anullato il documento non è ancora aperto o chiuso');
   end if;

   IBMUTL015.rollbackRbsBig;
   CNRCTB204.checkChiusuraEsercizio(aEsAnn, aCDS.cd_unita_organizzativa);

   if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs, aCDS.cd_unita_organizzativa)='Y') then
     IBMUTL015.rollbackRbsBig;
     IBMUTL200.logErr(pg_exec, null,'Esercizio economico '||aEs||' non chiuso definitivamente per il cds:'||aCDS.cd_unita_organizzativa,'XX-'||aCDS.cd_unita_organizzativa);
   else
     IBMUTL015.rollbackRbsBig;

-- per ogni esercizio e cds loop sulle UO

     For aUO in (Select cd_unita_organizzativa
                 From   v_unita_organizzativa_valida
                 Where  esercizio = aEs And
                        cd_unita_padre = aCDS.cd_unita_organizzativa And
                        fl_cds = 'N'
                 Order by cd_unita_organizzativa) Loop -- loop sulle UO

      IBMUTL015.rollbackRbsBig;

-- per ogni esercizio, cds e uo loop sui documenti con SELEZIONE SUI DOCUMENTI

-- ANNULLAMENTO TOTALE, QUELLO VECCHIO

      For aTsta In (Select *
                    From   V_DOC_AMM_COGE_TSTA
                    Where  esercizio = aEs And
                           cd_cds_origine = aCDS.cd_unita_organizzativa And
                           cd_uo_origine = aUO.cd_unita_organizzativa And
                           stato_coge in (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP ) And
                           (stato_cofi = CNRCTB100.STATO_GEN_COFI_ANN or fl_congelata = 'Y')) Loop -- loop sui documenti

-- chiamata vera e propria di annullamento

       Begin
        IBMUTL015.rollbackRbsBig;
	CNRCTB205.REGANNULLADOCESCHIUSOCOGE(aEsAnn,aTsta, aUser, sysdate);
	IBMUTL015.commitRbsBig;
        IBMUTL200.logInf(pg_exec, 'ANNDOCESCH',buildCallStringAnnEsChiuso(aEsAnn,aTsta,aUser),'EP-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTsta));
       Exception WHEN OTHERS THEN
        IBMUTL015.rollbackRbsBig;
  	IBMUTL200.logErr(pg_exec, DBMS_UTILITY.FORMAT_ERROR_STACK,buildCallStringAnnEsChiuso(aEsAnn,aTsta,aUser),'EP-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTsta));
       End;

      End Loop; -- Fine loop su docs UO

-- FINE ANNULLAMENTO TOTALE, QUELLO VECCHIO

-- STANI 03.05.2007 AGGIUNTA CONTABILIZZAZIONE DELL'ANNULLAMENTO DELLE RIGHE (loop direttamente sulle righe)

      For aRigheAnn In
                   (Select R.*
                    From   V_DOC_AMM_COGE_TSTA T, V_DOC_AMM_COGE_RIGHE_ANNULLATE R
                    Where  R.esercizio              = aEs                          And
                           R.cd_cds_origine         = aCDS.cd_unita_organizzativa  And
                           R.cd_uo_origine          = aUO.cd_unita_organizzativa   And
                           T.CD_CDS                 = R.CD_CDS                     And
                           T.CD_UNITA_ORGANIZZATIVA = R.CD_UNITA_ORGANIZZATIVA     And
                           T.ESERCIZIO              = R.ESERCIZIO                  And
                           T.CD_TIPO_DOCUMENTO      = R.CD_TIPO_DOCUMENTO          And
                           T.PG_NUMERO_DOCUMENTO    = R.PG_NUMERO_DOCUMENTO        And
                           R.stato_coge in (CNRCTB100.STATO_COEP_INI, CNRCTB100.STATO_COEP_DA_RIP)) Loop -- loop sui documenti

        Select *
        Into   aTestata
        From   v_doc_amm_coge_tsta
        Where  CD_TIPO_DOCUMENTO      = aRigheAnn.CD_TIPO_DOCUMENTO And
               CD_CDS                 = aRigheAnn.CD_CDS And
               CD_UNITA_ORGANIZZATIVA = aRigheAnn.CD_UNITA_ORGANIZZATIVA And
               ESERCIZIO              = aRigheAnn.ESERCIZIO And
               PG_NUMERO_DOCUMENTO    = aRigheAnn.PG_NUMERO_DOCUMENTO;

-- chiamata vera e propria di annullamento delle righe

       Begin
        IBMUTL015.rollbackRbsBig;
	CNRCTB205.regAnnullaRigheDocEsChiusoCOGE(aEsAnn, aRigheAnn, aUser, sysdate);
	IBMUTL015.commitRbsBig;
        IBMUTL200.logInf(pg_exec, 'ANNDOCRIGHEESCH', buildCallStringRigheAnnEsChiu(aEsAnn,aRigheAnn,aUser),'EP-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTestata));
       Exception WHEN OTHERS THEN
        IBMUTL015.rollbackRbsBig;
  	IBMUTL200.logErr(pg_exec, DBMS_UTILITY.FORMAT_ERROR_STACK,buildCallStringRigheAnnEsChiu(aEsAnn,aRigheAnn,aUser),'EP-'||aUO.cd_unita_organizzativa||CNRCTB204.getDescDocumento(aTestata));
       End;

      End Loop; -- Fine loop su docs UO

-- FINE ANNULLAMENTO RIGHE, QUELLO NUOVO


     END LOOP; -- Fine loop su UO

    END IF;

   Exception when NO_DATA_FOUND Then
     Null; -- scarto i cds non più validi e vado avanti.
--     IBMERR001.RAISE_ERR_GENERICO('(2) Il cds '||aCDS.cd_unita_organizzativa||' non è più valido nell''esercizio ('||aEsAnn||') in cui è stato richiesto di anullare il documento');
   End;

   END LOOP; -- Fine loop su CDS

  END LOOP; -- Fine loop su esercizio

  IBMUTL200.logInf(pg_exec,'FINE','Termine esecuzione','Termine esecuzione');
 END;


end;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy