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

expsigladb.Function.iseligibileribalt.fnc Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
CREATE OR REPLACE FUNCTION         isEligibileRibalt(aTiGestione char,aCdCdsDoc varchar2,aEsDoc number,aEsOriDoc number,aPgDoc number) RETURN CHAR IS
--==================================================================================================
--
-- Date: 12/07/2006
-- Version: 1.5
--
-- Estrazione documenti ribaltabili a nuovo esercizio (obb/acc)
--
-- History:
--
-- Date: 10/04/2003
-- Version: 1.0
-- Creazione function
--
-- Date: 01/07/2003
-- Version: 1.1
-- Tolto il controllo sul fatto che si tratti di obb./acc. cori
--
-- Date: 03/07/2003
-- Version: 1.2
-- Controllo che nel caso il doc non apra la pgiro cds, il doc che apre la partita non sia
-- libero da man/rev o con man/rev non riscontrati
--
-- Date: 04/07/2003
-- Version: 1.3
-- Esclusi dal ribaltamento accertamenti ACR_SIST
--
-- Date: 06/08/2003
-- Version: 1.4
-- Aggiunta documentazione
--
-- Date: 12/07/2006
-- Version: 1.5
-- Gestione Impegni/Accertamenti Residui:
-- aggiunto il parametro di ingresso aEsOriDoc: Esercizio Originale Impegno/Accertamento
--
-- Body:
--
--==================================================================================================
 aImRisc number(15,2);
 aImDoc number(15,2);
 aEsOriAcc number(4);
 aEsOriObb number(4);
 aPgAcc number(10);
 aPgObb number(10);
 aNum number;
begin
-- I seguenti documenti contabili:
-- - Impegni e impegni residui, su partita di giro o meno
-- - Accertamenti e accertamenti residui, su partita di giro o meno
-- - Accertamenti pluriennali
-- - Obbligazioni e obbligazioni pluriennali nel bilancio cds
-- possono essere riportati all'esercizio successivo se sono soddisfatte le seguenti condizioni:
-- 1. la somma degli importi associati a documenti contabili (mandati/reversali) delle scadenze
--    ? pari all'importo riscontrato di tali documenti
-- 2. l'importo totale del documento contabile ? maggiore dell'importo riscontrato
-- Se le condizioni 1. e 2. non sono soddisfatte allora il documento non ? riportabile
--
-- Per annotazioni su partita di giro nbel bilancio CdS valgono le seguenti regole:
-- Se valgono le condizioni 1. e 2.
-- - se il documento apre la partita di giro allora il documento ? riportabile
-- - se il documento non apre la partita di giro, e la controparte non ? associata
--   a documenti contabili allora il documento non ? riportabile (lo ? la controparte)
-- - se il documento non apre la partita di giro, e la controparte ? completamente
--   riscontrata (condizione 1.), allora ? riportabile
-- - se il documento non apre la partita di giro, e la controparte non ? comple-
--   tamente riscontrata, allora non ? riportabile
 if aTiGestione = 'S' then
  for aDocDett in (
   select a.esercizio_originale, a.pg_obbligazione, a.fl_pgiro, a.im_obbligazione, a.cd_tipo_documento_cont, sum(b.im_associato_doc_contabile) im_associato_doc_contabile from
    obbligazione a,
	obbligazione_scadenzario b
   where
	       a.cd_cds = aCdCdsDoc
       and a.esercizio = aEsDoc
       and a.esercizio_originale = aEsOriDoc
	   and a.pg_obbligazione = aPgDoc
	   and a.cd_cds = b.cd_cds
	   and a.esercizio = b.esercizio
	   and a.esercizio_originale = b.esercizio_originale
	   and a.pg_obbligazione = b.pg_obbligazione
       and a.DT_CANCELLAZIONE is null
	   and riportato = 'N'
   group by
    a.esercizio_originale, a.pg_obbligazione, a.fl_pgiro, a.im_obbligazione, a.cd_tipo_documento_cont
  ) loop
   aImRisc:=getIm_riscontrato (aEsDoc,aCdCdsDoc,aEsOriDoc,aPgDoc,aTiGestione);
   if
        aDocDett.im_associato_doc_contabile = aImRisc
    and aDocDett.im_obbligazione > aImRisc
   then
    if aDocDett.fl_pgiro = 'Y' and aDocDett.cd_tipo_documento_cont not in ('IMP','IMP_RES') then
     begin
	  select esercizio_ori_accertamento, pg_accertamento into aEsOriAcc, aPgAcc from ass_obb_acr_pgiro where
	       cd_cds = aCdCdsDoc
       and esercizio = aEsDoc
       and esercizio_ori_obbligazione = aEsOriDoc
	   and pg_obbligazione = aPgDoc
	   and ti_origine = 'S';
      return 'Y';
 	 exception when NO_DATA_FOUND then
	  select esercizio_ori_accertamento, pg_accertamento into aEsOriAcc, aPgAcc from ass_obb_acr_pgiro where
	       cd_cds = aCdCdsDoc
       and esercizio = aEsDoc
       and esercizio_ori_obbligazione = aEsOriDoc
	   and pg_obbligazione = aPgDoc
	   and ti_origine = 'E';

      select Sum(im_associato_doc_contabile)
      into   aImDoc
      from   accertamento_scadenzario
      Where  cd_cds = aCdCdsDoc And
             esercizio = aEsDoc And
             esercizio_originale = aEsOriAcc And
             pg_accertamento = aPgAcc;

      if
       aImDoc = 0
      then
	   return 'N';
      else
       aImRisc:=getIm_riscontrato (aEsDoc,aCdCdsDoc,aEsOriAcc,aPgAcc,'E');
	   -- Se il doc che ha aperto la partita di giro ? incassato e riscontrato torno Y altrimenti N
	   if aImDoc = aImRisc then
   	    return 'Y';
       else
	    return 'N';
	   end if;
	  end if;
 	 end;
    end if;
   return 'Y';
   end if;
  end loop;
  return 'N';
 else
-- =======================
-- PARTE ENTRATE
-- =======================
  for aDocDett in (
   select a.esercizio_originale, a.pg_accertamento, a.fl_pgiro, a.im_accertamento, a.cd_tipo_documento_cont, sum(b.im_associato_doc_contabile) im_associato_doc_contabile from
    accertamento a,
	accertamento_scadenzario b
   where
	       a.cd_cds = aCdCdsDoc
       and a.esercizio = aEsDoc
       and a.esercizio_originale = aEsOriDoc
	   and a.pg_accertamento = aPgDoc
	   and a.cd_cds = b.cd_cds
	   and a.esercizio = b.esercizio
	   and a.esercizio_originale = b.esercizio_originale
	   and a.pg_accertamento = b.pg_accertamento
       and a.DT_CANCELLAZIONE is null
	   and riportato = 'N'
   group by
    a.esercizio_originale, a.pg_accertamento, a.fl_pgiro, a.im_accertamento, a.cd_tipo_documento_cont
  ) Loop

  If aDocDett.cd_tipo_documento_cont = 'ACR_SIST' then
  	 return 'N';
  Else

   aImRisc := getIm_riscontrato (aEsDoc,aCdCdsDoc,aEsOriDoc,aPgDoc,aTiGestione);

   If aDocDett.im_associato_doc_contabile = aImRisc And aDocDett.im_accertamento > aImRisc Then

     If aDocDett.fl_pgiro = 'Y' and aDocDett.cd_tipo_documento_cont not in ('ACR','ACR_RES') then

      Begin
	  select esercizio_ori_obbligazione, pg_obbligazione
	  into   aEsOriObb, aPgObb from ass_obb_acr_pgiro
	  Where  cd_cds = aCdCdsDoc And
	         esercizio = aEsDoc And
	         esercizio_ori_accertamento = aEsOriDoc And
	         pg_accertamento = aPgDoc And
	         ti_origine = 'E';
          return 'Y';
      Exception
        When NO_DATA_FOUND Then

	  Select esercizio_ori_obbligazione, pg_obbligazione into aEsOriObb, aPgObb
	  From   ass_obb_acr_pgiro
	  Where  cd_cds = aCdCdsDoc And
	         esercizio = aEsDoc And
	         esercizio_ori_accertamento = aEsOriDoc And
	         pg_accertamento = aPgDoc And
	         ti_origine = 'S';

          Select Sum(im_associato_doc_contabile)
          Into   aImDoc
          From   obbligazione_scadenzario
          Where  cd_cds = aCdCdsDoc And
                 esercizio = aEsDoc And
                 esercizio_originale = aEsOriObb And
                 pg_obbligazione = aPgObb;

          If aImDoc = 0 then
             Return 'N';
          Else
             aImRisc:=getIm_riscontrato (aEsDoc,aCdCdsDoc,aEsOriObb,aPgObb,'S');
	      -- Se il doc che ha aperto la partita di giro ? pagato e riscontrato torno Y altrimenti N
	      If aImDoc = aImRisc then
   	         Return 'Y';
              Else
	         Return 'N';
	      End If;
	  End if;
      End;

    End If;  -- aDocDett.fl_pgiro = 'Y' and aDocDett.cd_tipo_documento_cont not in ('ACR','ACR_RES') then

    Return 'Y';

   End If; -- aDocDett.im_associato_doc_contabile = aImRisc And aDocDett.im_accertamento > aImRisc Then

  end if;
  end loop;
  return 'N';
 end if;
 return 'N';
end;
/






© 2015 - 2024 Weber Informatics LLC | Privacy Policy