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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB215" is

 function getDesc(aDocPassivo v_doc_passivo_obbligazione%rowtype) return varchar2 is
  aStringa varchar2(1000);
 begin
  aStringa:='';
  aStringa:=aStringa||' Cds:'||aDocPassivo.CD_CDS;
  aStringa:=aStringa||' Uo:'||aDocPassivo.CD_UNITA_ORGANIZZATIVA;
  aStringa:=aStringa||' Es:'||aDocPassivo.ESERCIZIO;
  aStringa:=aStringa||' Tipo:'||aDocPassivo.CD_TIPO_DOCUMENTO_AMM;
  aStringa:=aStringa||' Pg_doc:'||aDocPassivo.PG_DOCUMENTO_AMM;
  return aStringa;
 end;

 function getDesc(aDocPassivo v_doc_attivo_accertamento%rowtype) return varchar2 is
  aStringa varchar2(1000);
 begin
  aStringa:='';
  aStringa:=aStringa||' Cds:'||aDocPassivo.CD_CDS;
  aStringa:=aStringa||' Uo:'||aDocPassivo.CD_UNITA_ORGANIZZATIVA;
  aStringa:=aStringa||' Es:'||aDocPassivo.ESERCIZIO;
  aStringa:=aStringa||' Tipo:'||aDocPassivo.CD_TIPO_DOCUMENTO_AMM;
  aStringa:=aStringa||' Pg_doc:'||aDocPassivo.PG_DOCUMENTO_AMM;
  return aStringa;
 end;

 procedure aggiornaStatoCOGECOAN(aDocPassivo v_doc_passivo_obbligazione%rowtype, inCoge boolean, inCoan boolean, aUtente varchar2, aTSNow date, aPgStorico number) is
  aStatement varchar2(2000);
  aBase varchar2(500);
  aWhere varchar2(2000);
 begin
  aBase:= 'update '||CNRCTB100.GETTABELLA(aDocPassivo.cd_tipo_documento_amm)||' set ';
  aWhere:=CNRCTB100.GETTSTAWHERECONDFORKEY(
                                                           aDocPassivo.cd_tipo_documento_amm,
                                                           aDocPassivo.cd_cds,
                                                           aDocPassivo.esercizio,
                                                           aDocPassivo.cd_unita_organizzativa,
                                                           aDocPassivo.pg_documento_amm);
  if inCoge or inCoan then
   -- Lock del documento
   CNRCTB100.LOCKDOCAMM(
    aDocPassivo.cd_tipo_documento_amm,
    aDocPassivo.cd_cds,
    aDocPassivo.esercizio,
    aDocPassivo.cd_unita_organizzativa,
    aDocPassivo.pg_documento_amm
   );
   if
    CNRCTB105.ISRIPORTATO(
       aDocPassivo.cd_cds
	 , aDocPassivo.cd_unita_organizzativa
	 , aDocPassivo.esercizio
	 , aDocPassivo.pg_documento_amm
	 , aDocPassivo.cd_tipo_documento_amm
    )='Y'
   then
    -- Fix del 02/11/2004
    -- Errore n. 846
    -- Se l'esercizio COEP del cds di origine del documento è chiuso definitivamente
	-- il documento amministrativo non è messo "da riprocessare" e non viene sollevata eccezione
    if CNRCTB200.ISCHIUSURACOEPDEF(aDocPassivo.esercizio, aDocPassivo.cd_cds_origine)='Y' then
	 return;
	end if;
    IBMERR001.RAISE_ERR_GENERICO(
	    'Tentativo di aggiornare lo stato coge o coan in "da riprocessare" per documento amministrativo riportato a nuovo esercizio. '
	 || getDesc(aDocPassivo)
	);
   end if;
  end if;
  if inCoge then
   aStatement:=aBase||' stato_coge = '''||CNRCTB100.STATO_COEP_DA_RIP||''' ';
   if aPgStorico is null then
    aStatement:=aStatement||', pg_ver_rec = pg_ver_rec+1 ';
   end if;
   aStatement:=aStatement||aWhere||' and stato_coge = '''||CNRCTB100.STATO_COEP_CON||''' ';
   execute immediate aStatement;
  end if;
  if inCoan then
   aStatement:=aBase||' stato_coan = '''||CNRCTB100.STATO_COEP_DA_RIP||''' ';
   if aPgStorico is null then
    aStatement:=aStatement||', pg_ver_rec = pg_ver_rec+1 ';
   end if;
   aStatement:=aStatement||aWhere||' and stato_coan = '''||CNRCTB100.STATO_COEP_CON||''' ';
   execute immediate aStatement;
  end if;
 end;

Procedure aggiornaStatoCOGECOAN(aDocAttivo v_doc_attivo_accertamento%rowtype, inCoge boolean, inCoan boolean, aUtente varchar2, aTSNow date, aPgStorico number) is
  aStatement varchar2(2000);
  aBase varchar2(500);
  aWhere varchar2(2000);

Begin
  aBase:= 'update '||CNRCTB100.GETTABELLA(aDocAttivo.cd_tipo_documento_amm)||' set ';
  aWhere:=CNRCTB100.GETTSTAWHERECONDFORKEY(
                                                            aDocAttivo.cd_tipo_documento_amm,
                                                            aDocAttivo.cd_cds,
                                                            aDocAttivo.esercizio,
                                                            aDocAttivo.cd_unita_organizzativa,
                                                            aDocAttivo.pg_documento_amm);
If inCoge or inCoan then
   -- Lock del documento
   CNRCTB100.LOCKDOCAMM(
    aDocAttivo.cd_tipo_documento_amm,
    aDocAttivo.cd_cds,
    aDocAttivo.esercizio,
    aDocAttivo.cd_unita_organizzativa,
    aDocAttivo.pg_documento_amm);

   If CNRCTB105.ISRIPORTATO(
       aDocAttivo.cd_cds
	 , aDocAttivo.cd_unita_organizzativa
	 , aDocAttivo.esercizio
	 , aDocAttivo.pg_documento_amm
	 , aDocAttivo.cd_tipo_documento_amm)='Y' Then

    -- Errore n. 846
    -- Se l'esercizio COEP del cds di origine del documento è chiuso definitivamente
    -- il documento amministrativo non è messo "da riprocessare" e non viene sollevata eccezione

    if CNRCTB200.ISCHIUSURACOEPDEF(aDocAttivo.esercizio, aDocAttivo.cd_cds_origine) = 'Y' then
	 return;
    end if;

    IBMERR001.RAISE_ERR_GENERICO(
 'Tentativo di aggiornare lo stato coge o coan in "da riprocessare" per documento amministrativo '||
 'riportato a nuovo esercizio. '|| getDesc(aDocAttivo));
   End if;

End if;

If inCoge then
   aStatement:=aBase||' stato_coge = '''||CNRCTB100.STATO_COEP_DA_RIP||''' ';
   if aPgStorico is null then
    aStatement:=aStatement||', pg_ver_rec = pg_ver_rec+1 ';
   end if;
   aStatement:=aStatement||aWhere||' and stato_coge = '''||CNRCTB100.STATO_COEP_CON||''' ';
   execute immediate aStatement;
End if;

If inCoan then
   aStatement:=aBase||' stato_coan = '''||CNRCTB100.STATO_COEP_DA_RIP||''' ';
   if aPgStorico is null then
    aStatement:=aStatement||', pg_ver_rec = pg_ver_rec+1 ';
   end if;
   aStatement:=aStatement||aWhere||' and stato_coan = '''||CNRCTB100.STATO_COEP_CON||''' ';
   execute immediate aStatement;
End if;

End;

 procedure doRiprocAcc(
  aEs number,
  aCdCds varchar2,
  aEsOri number,
  aPgAccertamento number,
  aPgStorico number default null
 ) is
  aAcc accertamento%rowtype;
 begin
  begin
   select * into aAcc from accertamento where
        cd_cds = aCdCds
    and esercizio = aEs
    and esercizio_originale = aEsOri
    and pg_accertamento = aPgAccertamento for update nowait;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Accertamento in modifica non trovato');
  end;
  doRiproc(aAcc, aPgStorico);
 end;

 procedure doRiprocObb(
  aEs number,
  aCdCds varchar2,
  aEsOri number,
  aPgObbligazione number,
  aPgStorico number default null
 ) is
  aObb obbligazione%rowtype;
 begin
  begin
   select * into aObb from obbligazione where
        cd_cds = aCdCds
    and esercizio = aEs
    and esercizio_originale = aEsOri
    and pg_obbligazione = aPgObbligazione for update nowait;
  exception when NO_DATA_FOUND then
      If cnrutil.isLabelObbligazione() Then
        IBMERR001.RAISE_ERR_GENERICO('Obbligazione in modifica non trovata');
   	  Else
        IBMERR001.RAISE_ERR_GENERICO('Impegno in modifica non trovato');
  	  End If;
  end;
  doRiproc(aObb, aPgStorico);
 end;


 procedure doRiproc(aObb obbligazione%rowtype, aPgStorico number default null) is
  aObbS          obbligazione_s%rowtype;
  aScadS         obbligazione_scadenzario_s%rowtype;
  aScadVoceS     obbligazione_scad_voce_s%rowtype;
  isScadCambiata boolean:=false;
  isEVCambiato   boolean:=false;

 begin
  -- Legge dallo storico l'obbligazione
  begin
   if aPgStorico is null then
       select * into aObbS from obbligazione_s a where
            cd_cds = aObb.cd_cds
    	and esercizio = aObb.esercizio
    	and esercizio_originale = aObb.esercizio_originale
    	and pg_obbligazione = aObb.pg_obbligazione
    	and pg_storico_ = (select max(pg_storico_) from obbligazione_s where
               cd_cds = a.cd_cds
    	   and esercizio = a.esercizio
    	   and esercizio_originale = a.esercizio_originale
    	   and pg_obbligazione = a.pg_obbligazione
        );
   else
       select * into aObbS from obbligazione_s a where
            cd_cds = aObb.cd_cds
    	and esercizio = aObb.esercizio
    	and esercizio_originale = aObb.esercizio_originale
    	and pg_obbligazione = aObb.pg_obbligazione
    	and pg_storico_ = aPgStorico;
   end if;
  exception when NO_DATA_FOUND then
   return;
  end;

  -- Se la voce del piano è cambiata devo riprocessare in economica e analitica ?

  isEVCambiato := false;
  if aObb.cd_elemento_voce != aObbS.cd_elemento_voce then
   isEVCambiato:=true;
  end if;

  for aScad in (select * from obbligazione_scadenzario where
        cd_cds = aObb.cd_cds
	and esercizio = aObb.esercizio
	and esercizio_originale = aObb.esercizio_originale
	and pg_obbligazione = aObb.pg_obbligazione for update nowait) loop

   isScadCambiata:=false;

   -- Se l'importo collegato a documenti amministrativi è 0 non devo verificare eventuali modifiche dei dettagli
   if aScad.im_associato_doc_amm <> 0 then
    begin
     select * into aScadS from obbligazione_scadenzario_s where
          cd_cds = aScad.cd_cds
      and esercizio = aScad.esercizio
      and esercizio_originale = aScad.esercizio_originale
      and pg_obbligazione = aScad.pg_obbligazione
      and pg_obbligazione_scadenzario = aScad.pg_obbligazione_scadenzario
      and pg_storico_ = aObbS.pg_storico_
      and im_scadenza = aScad.im_scadenza;
    exception when NO_DATA_FOUND then
     isScadCambiata:=true;
    end;


    -- Verifica il cambiamento dei dati analitici

    -- Leggo le ripartizioni della scadenza eliminate solo se isScadCambiata è ancora a false
	if not isScadCambiata then
        for aScadVoceEl in (Select *
                            From   obbligazione_scad_voce_s aEl
                            Where  cd_cds = aScad.cd_cds And
                                   esercizio = aScad.esercizio And
                                   esercizio_originale = aScad.esercizio_originale And
                                   pg_obbligazione = aScad.pg_obbligazione And
                                   pg_obbligazione_scadenzario = aScad.pg_obbligazione_scadenzario And
                                   pg_storico_ = aObbS.pg_storico_ And
                                   not exists (Select 1
                                               From  obbligazione_scad_voce
                                               Where cd_cds = aEl.cd_cds And
                                                     esercizio = aEl.esercizio And
                                                     esercizio_originale = aEl.esercizio_originale And
                                                     pg_obbligazione = aEl.pg_obbligazione And
                                                     pg_obbligazione_scadenzario = aEl.pg_obbligazione_scadenzario And
                                                     ti_appartenenza = aEl.ti_appartenenza And
                                                     ti_gestione = aEl.ti_gestione And
                                                     cd_voce = aEl.cd_voce And
                                                     cd_centro_responsabilita = aEl.cd_centro_responsabilita And
                                                     cd_linea_attivita = aEl.cd_linea_attivita)) loop
         isScadCambiata:=true;
    	end loop;
    end if;

    -- Analizzo le ripartizioni attuali della scadenza solo se isScadCambiata è ancora a false
	if not isScadCambiata then
        for aScadVoce in (select * from obbligazione_scad_voce where
             cd_cds = aScad.cd_cds
         and esercizio = aScad.esercizio
    	 and esercizio_originale = aScad.esercizio_originale
         and pg_obbligazione = aScad.pg_obbligazione
         and pg_obbligazione_scadenzario = aScad.pg_obbligazione_scadenzario for update nowait) loop
    	 begin
    	  -- Leggo dallo storico la scad voce corrispondente
    	  select * into aScadVoceS from obbligazione_scad_voce_s where
               cd_cds = aScadVoce.cd_cds
           and esercizio = aScadVoce.esercizio
    	   and esercizio_originale = aScadVoce.esercizio_originale
           and pg_obbligazione = aScadVoce.pg_obbligazione
           and pg_obbligazione_scadenzario = aScadVoce.pg_obbligazione_scadenzario
       	   and pg_storico_ = aObbS.pg_storico_
           and ti_appartenenza = aScadVoce.ti_appartenenza
           and ti_gestione = aScadVoce.ti_gestione
           and cd_voce = aScadVoce.cd_voce
           and cd_centro_responsabilita = aScadVoce.cd_centro_responsabilita
           and cd_linea_attivita = aScadVoce.cd_linea_attivita
           and im_voce = aScadVoce.im_voce;
         exception when NO_DATA_FOUND then
          isScadCambiata:=true;
         end;
        end loop;
    end if;
	-- leggo i documenti per aggiornare lo stato di modifica COEP
	if isScadCambiata or isEVCambiato then
     for aDocPassivo in (select * from v_doc_passivo_obbligazione where
           cd_cds_obbligazione = aScad.cd_cds
	   and esercizio_obbligazione = aScad.esercizio
	   and esercizio_ori_obbligazione = aScad.esercizio_originale
	   and pg_obbligazione = aScad.pg_obbligazione
       and pg_obbligazione_scadenzario = aScad.pg_obbligazione_scadenzario) loop
      -- Se è cambiato l'elemento voce da riproc. sia in analitica che in economica
	  if isEVCambiato then
	   aggiornaStatoCOGECOAN(aDocPassivo,true,true,aObb.utuv,aObb.duva,aPgStorico);
      else
       -- Se non è cambiato l'elemento voce ma solo la spaccatura analitica, devo riprocessare solo in analitica

	   if isScadCambiata Then
            -- 29.03.2007 L'AGGIORNAMENTO DELLO STATO_COAN BLOCCAVA ALCUNE OPERAZIONI (TRA CUI L'EMISSIONE DI NOTE CREDITO)
            -- LA MODIFICA PULITA ANDREBBE FATTA CONTROLLANDO CHE LA RIPARTIZIONE PER CDR TRA PRIMA E DOPO E' DIVERSA
	    Null;
--	    aggiornaStatoCOGECOAN(aDocPassivo,false, True, aObb.utuv,aObb.duva,aPgStorico);
	   end if;
	  end if;
	 end loop;
	end if;
   end if;
  end loop;
 end;

 procedure doRiproc(aAcc accertamento%rowtype, aPgStorico number default null) is
  aAccS accertamento_s%rowtype;
  aScadS accertamento_scadenzario_s%rowtype;
  aScadVoceS accertamento_scad_voce_s%rowtype;
  isScadCambiata boolean:=false;
  isEVCambiato boolean:=false;
 begin
  -- Legge dallo storico l'accertamento
Dbms_Output.PUT_LINE ('A');
  begin
   if aPgStorico is null then
       select * into aAccS from accertamento_s a where
            cd_cds = aAcc.cd_cds
    	and esercizio = aAcc.esercizio
    	and esercizio_originale = aAcc.esercizio_originale
    	and pg_accertamento = aAcc.pg_accertamento
    	and pg_storico_ = (select max(pg_storico_) from accertamento_s where
               cd_cds = a.cd_cds
    	   and esercizio = a.esercizio
    	   and esercizio_originale = a.esercizio_originale
    	   and pg_accertamento = a.pg_accertamento
        );
   else
       select * into aAccS from accertamento_s a where
            cd_cds = aAcc.cd_cds
    	and esercizio = aAcc.esercizio
    	and esercizio_originale = aAcc.esercizio_originale
    	and pg_accertamento = aAcc.pg_accertamento
    	and pg_storico_ = aPgStorico;
    end if;
  exception when NO_DATA_FOUND then
Dbms_Output.PUT_LINE ('B');
   return;
  end;

  -- Se la voce del piano è cambiata devo riprocessare in economica e analitica ?

  isEVCambiato:=false;
  if aAcc.cd_elemento_voce != aAccS.cd_elemento_voce then
   isEVCambiato:=true;
  end if;

Dbms_Output.PUT_LINE ('C');
  for aScad in (select * from accertamento_scadenzario where
        cd_cds = aAcc.cd_cds
	and esercizio = aAcc.esercizio
	and esercizio_originale = aAcc.esercizio_originale
	and pg_accertamento = aAcc.pg_accertamento for update nowait) loop

   isScadCambiata:=false;

   -- Se l'importo collegato a documenti amministrativi è 0 non devo verificare eventuali modifiche dei dettagli
   if aScad.im_associato_doc_amm <> 0 then
    begin
     select * into aScadS from accertamento_scadenzario_s where
          cd_cds = aScad.cd_cds
      and esercizio = aScad.esercizio
      and esercizio_originale = aScad.esercizio_originale
      and pg_accertamento = aScad.pg_accertamento
      and pg_accertamento_scadenzario = aScad.pg_accertamento_scadenzario
 	  and pg_storico_ = aAccS.pg_storico_
	  and im_scadenza = aScad.im_scadenza;
    exception when NO_DATA_FOUND then
     isScadCambiata:=true;
    end;

Dbms_Output.PUT_LINE ('D');
    -- Verifica il cambiamento dei dati analitici

    -- Leggo le ripartizioni della scadenza eliminate solo se isScadCambiata è ancora a false
	if not isScadCambiata then
        for aScadVoceEl in (select * from accertamento_scad_voce_s aEl where
               cd_cds = aScad.cd_cds
           and esercizio = aScad.esercizio
    	   and esercizio_originale = aScad.esercizio_originale
           and pg_accertamento = aScad.pg_accertamento
           and pg_accertamento_scadenzario = aScad.pg_accertamento_scadenzario
       	   and pg_storico_ = aAccS.pg_storico_
    	   and not exists (select 1 from accertamento_scad_voce where
                   cd_cds = aEl.cd_cds
               and esercizio = aEl.esercizio
               and esercizio_originale = aEl.esercizio_originale
               and pg_accertamento = aEl.pg_accertamento
               and pg_accertamento_scadenzario = aEl.pg_accertamento_scadenzario
               and cd_centro_responsabilita = aEl.cd_centro_responsabilita
               and cd_linea_attivita = aEl.cd_linea_attivita
    	   )) loop
         isScadCambiata:=true;
    	end loop;
    end if;

    -- Analizzo le ripartizioni attuali della scadenza solo se isScadCambiata è ancora a false
	if not isScadCambiata then
        for aScadVoce in (select * from accertamento_scad_voce where
             cd_cds = aScad.cd_cds
         and esercizio = aScad.esercizio
    	 and esercizio_originale = aScad.esercizio_originale
         and pg_accertamento = aScad.pg_accertamento
         and pg_accertamento_scadenzario = aScad.pg_accertamento_scadenzario for update nowait) loop
    	 begin
    	  -- Leggo dallo storico la scad voce corrispondente
    	  select * into aScadVoceS from accertamento_scad_voce_s where
               cd_cds = aScadVoce.cd_cds
           and esercizio = aScadVoce.esercizio
    	   and esercizio_originale = aScadVoce.esercizio_originale
           and pg_accertamento = aScadVoce.pg_accertamento
           and pg_accertamento_scadenzario = aScadVoce.pg_accertamento_scadenzario
       	   and pg_storico_ = aAccS.pg_storico_
           and cd_centro_responsabilita = aScadVoce.cd_centro_responsabilita
           and cd_linea_attivita = aScadVoce.cd_linea_attivita
           and im_voce = aScadVoce.im_voce;
         exception when NO_DATA_FOUND then
          isScadCambiata:=true;
         end;
        end loop;
    end if;
	-- leggo i documenti per aggiornare lo stato di modifica COEP
	if isScadCambiata or isEVCambiato then
     for aDocAttivo in (select * from v_doc_attivo_accertamento where
           cd_cds_accertamento = aScad.cd_cds
	   and esercizio_accertamento = aScad.esercizio
	   and esercizio_ori_accertamento = aScad.esercizio_originale
	   and pg_accertamento = aScad.pg_accertamento
       and pg_accertamento_scadenzario = aScad.pg_accertamento_scadenzario) loop
      -- switch sul tipo di documento
	  if isEVCambiato then
	   aggiornaStatoCOGECOAN(aDocAttivo,true,true,aAcc.utuv,aAcc.duva,aPgStorico);
      else
       if isScadCambiata Then
         -- 29.03.2007 L'AGGIORNAMENTO DELLO STATO_COAN BLOCCAVA ALCUNE OPERAZIONI (TRA CUI L'EMISSIONE DI NOTE CREDITO)
         -- LA MODIFICA PULITA ANDREBBE FATTA CONTROLLANDO CHE LA RIPARTIZIONE PER CDR TRA PRIMA E DOPO E' DIVERSA
         Null;
--	    aggiornaStatoCOGECOAN(aDocAttivo,false,true,aAcc.utuv,aAcc.duva,aPgStorico);
	   end if;
	  end if;
	 end loop;
	end if;
   end if;
  end loop;
 end;
end;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy