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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB207" is
 procedure annullaScaricaCDPSuPdgGestione(aEsercizio number, aMese number, aCdUO varchar2, aUser varchar2) is
  aTSNow date;
  aScrittura scrittura_analitica%rowtype;
  aListaMovimenti CNRCTB200.movAnalitList;
  aUO unita_organizzativa%rowtype;
  aStipCoan stipendi_coan%rowtype;
  aOldScrittura scrittura_analitica%rowtype;
 begin
  aTSNow:=sysdate;

  aUO:=CNRCTB020.GETUOVALIDA(aEsercizio,aCdUO);

  -- L'esercizio contabile deve essere aperto per il cds origine del documento
  if not CNRCTB008.ISESERCIZIOAPERTO(aEsercizio, aUO.cd_unita_padre)
  then
   IBMERR001.RAISE_ERR_GENERICO('L''esercizio contabile ('||aEsercizio||') non è aperto per il cds:'||aUO.cd_unita_padre);
  end if;

  -- L'esercizio economico precedente deve essere chiuso definitivamente
  if not (CNRCTB200.ISCHIUSURACOEPDEF(aEsercizio-1, aUO.cd_unita_padre)='Y') then
   IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente non è chiuso definitivamente per il cds: '||aUO.cd_unita_padre);
  end if;

  -- Check che il mese corrente sia stato scaricato
  begin
   select * into aStipCoan from stipendi_coan where
        esercizio = aEsercizio
    and mese= aMese
    and cd_cds = aUO.cd_unita_padre
    and cd_uo = aUO.cd_unita_organizzativa for update nowait;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Scarico dei costi stipendiali su piano di gestione in gestione non ancora effettuato.');
  end;

  -- Check che il mese successivo non sia già stato scaricato
  if aMese < 13 then
   begin
    select * into aStipCoan from stipendi_coan where
         esercizio = aEsercizio
     and mese= aMese + 1
     and cd_cds = aUO.cd_unita_padre
     and cd_uo = aUO.cd_unita_organizzativa;
    IBMERR001.RAISE_ERR_GENERICO('Scarico dei costi stipendiali su piano di gestione in gestione già effettuato per mese successivo al corrente.');
   exception when NO_DATA_FOUND then
    null;
   end;
  end if;

  aScrittura.esercizio := aEsercizio;
  aScrittura.cd_cds := aUO.cd_unita_padre;
  aScrittura.cd_unita_organizzativa := aUO.cd_unita_organizzativa;
  aScrittura.pg_scrittura := aStipCoan.pg_scrittura_an;
  CNRCTB200.getScritturaANLock(aScrittura, aListaMovimenti);
  aOldScrittura:=aScrittura;
  CNRCTB200.CREASCRITTSTORNOCOAN(aScrittura,aListaMovimenti,aUser,aTSNow);

  -- Cleanup degli arrotondamenti
  for aAssCdpMeseRnd in (select * from ass_cdp_mese_round where
       esercizio = aOldScrittura.esercizio
   and cd_cds = aOldScrittura.cd_cds
   and cd_unita_organizzativa = aOldScrittura.cd_unita_organizzativa
   and pg_scrittura = aOldScrittura.pg_scrittura
   and mese = aMese
   for update nowait) loop
    null;
  end loop;
  delete from ass_cdp_mese_round where
       esercizio = aOldScrittura.esercizio
   and cd_cds = aOldScrittura.cd_cds
   and cd_unita_organizzativa = aOldScrittura.cd_unita_organizzativa
   and pg_scrittura = aOldScrittura.pg_scrittura
   and mese = aMese;

  -- Leggo il CDR

  -- Lettura lockante e aggiornamento dello stato di scarico in ASS_CDP_LA
  for aAssCdpLa in (select * from ass_cdp_la where
       esercizio = aEsercizio
   and mese = aMese
   and cd_centro_responsabilita in (
    select cd_centro_responsabilita from cdr where
	   cd_unita_organizzativa = aUO.cd_unita_organizzativa
   )
   for update nowait
  ) loop
   null;
  end loop;

  update ass_cdp_la set
      stato = CNRCTB060.STATO_CDP_NON_SCARICATO
	 ,utuv=aUser
	 ,duva=aTSNow
	 ,pg_ver_rec=pg_ver_rec+1
  where
       esercizio = aEsercizio
   and cd_centro_responsabilita in (
    select cd_centro_responsabilita from cdr where
	   cd_unita_organizzativa = aUO.cd_unita_organizzativa
  );

  delete from stipendi_coan where
        esercizio = aEsercizio
    and mese= aMese
    and cd_cds = aUO.cd_unita_padre
    and cd_uo = aUO.cd_unita_organizzativa;

 end;

-- Funzione di accantonamento dei rotti di scarico

 procedure fill_round_table(aASSCDPLA V_CDP_SPACCATO_CDR_LA_VOCE%rowtype, aVoceEp VOCE_EP%rowtype, aTSNow date, aUser varchar2) is
  aAssCdpMeseRnd ASS_CDP_MESE_ROUND%rowtype;
 begin
    if
	     aASSCDPLA.IM_RND_A1 = 0
	then
     return;
	end if;
	aAssCdpMeseRnd:=null;
    aAssCdpMeseRnd.ESERCIZIO:=aASSCDPLA.ESERCIZIO;
    aAssCdpMeseRnd.CD_CDR_ROOT:=aASSCDPLA.CD_CDR_ROOT;
    aAssCdpMeseRnd.CD_VOCE_EP:=aVoceEp.CD_VOCE_EP;
    aAssCdpMeseRnd.MESE:=aASSCDPLA.MESE;
    begin
	 select * into aAssCdpMeseRnd from ass_cdp_mese_round where
	      ESERCIZIO=aAssCdpMeseRnd.esercizio
      and CD_CDR_ROOT=aAssCdpMeseRnd.cd_cdr_root
      and CD_VOCE_EP=aAssCdpMeseRnd.cd_voce_ep
      and MESE=aAssCdpMeseRnd.MESE
	  for update nowait;
     update ass_cdp_mese_round set
      IM_ARR_A1=IM_ARR_A1+aASSCDPLA.im_rnd_a1
	 where
	      ESERCIZIO=aAssCdpMeseRnd.esercizio
      and CD_CDR_ROOT=aAssCdpMeseRnd.cd_cdr_root
      and CD_VOCE_EP=aAssCdpMeseRnd.cd_voce_ep;
	exception when NO_DATA_FOUND then
     aAssCdpMeseRnd.IM_ARR_A1:=aASSCDPLA.im_rnd_a1;
     aAssCdpMeseRnd.IM_ARR_A1_NON_DISTR:=0;
     aAssCdpMeseRnd.DACR:=aTSNow;
     aAssCdpMeseRnd.UTUV:=aUser;
     aAssCdpMeseRnd.UTCR:=aUser;
     aAssCdpMeseRnd.DUVA:=aTSNow;
     aAssCdpMeseRnd.PG_VER_REC:=1;
     ins_ASS_CDP_MESE_ROUND(aAssCdpMeseRnd);
	end;
 end;

 procedure scaricaCDPSuPdgGestione(aEsercizio number, aMese number, aCdUO varchar2, aUser varchar2) is
  aCdr cdr%rowtype;
  aTSNow date;
  aScrittura scrittura_analitica%rowtype;
  aCDRRUO cdr%rowtype;
  aListaMovimenti CNRCTB200.movAnalitList;
  aMov movimento_coan%rowtype;
  aLA linea_attivita%rowtype;
  aLAROUND linea_attivita%rowtype;
  aUO unita_organizzativa%rowtype;
  aAss ass_ev_voceep%rowtype;
  aVoceEp voce_ep%rowtype;
  aStipCoan stipendi_coan%rowtype;
  aNum number;
  movPosizione number;
  vMese VARCHAR2(2);
 Begin
  If (aMese In(1,2,3,4,5,6,7,8,9,10,11,12)) Then
    If (Length(To_Char(aMese)) = 1) Then
      vMese := '0'||aMese;
    Else
      vMese := aMese;
    End If;
  End If;
  aTSNow:=sysdate;

  -- Leggo l'UO

  aUO:=CNRCTB020.GETUOVALIDA(aEsercizio,aCdUO);

  -- Controllo esercizio

  -- L'esercizio contabile deve essere aperto per il cds origine del documento
  if not CNRCTB008.ISESERCIZIOAPERTO(aEsercizio, aUO.cd_unita_padre)
  then
   IBMERR001.RAISE_ERR_GENERICO('L''esercizio contabile ('||aEsercizio||') non è aperto per il cds:'||aUO.cd_unita_padre);
  end if;

  -- L'esercizio economico precedente deve essere chiuso definitivamente
  if not (CNRCTB200.ISCHIUSURACOEPDEF(aEsercizio-1, aUO.cd_unita_padre)='Y') then
   IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente non è chiuso definitivamente per il cds: '||aUO.cd_unita_padre);
  end if;

  -- Check di scarico già effettuato

  begin
   select * into aStipCoan from stipendi_coan where
        esercizio = aEsercizio
    and mese= aMese
    and cd_cds = aUO.cd_unita_padre
    and cd_uo = aUO.cd_unita_organizzativa
	for update nowait;
    if aStipCoan.pg_scrittura_an is not null then
     IBMERR001.RAISE_ERR_GENERICO('Scarico dei costi stipendiali su piano di gestione in gestione già effettuato.');
    end if;
  exception when NO_DATA_FOUND then
   null;
  end;

  -- Check che lo scarico per il mese precedente sia già stato effettuato (mese corrente > 1)

  if aMese > 1 then
   begin
    select * into aStipCoan from stipendi_coan where
         esercizio = aEsercizio
     and mese=aMese-1
     and cd_cds = aUO.cd_unita_padre
     and cd_uo = aUO.cd_unita_organizzativa;
   exception when NO_DATA_FOUND then
    IBMERR001.RAISE_ERR_GENERICO('Scarico dei costi stipendiali su piano di gestione in gestione non ancora effettuato per il mese precedente');
   end;
  end if;

  -- Lettura lockante e aggiornamento dello stato di scarico in ASS_CDP_LA

  for aAssCdpLaTemp in (select * from ass_cdp_la where
       esercizio = aEsercizio
   and mese = aMese
   and cd_centro_responsabilita in (
    select cd_centro_responsabilita from cdr where
	   cd_unita_organizzativa = aUO.cd_unita_organizzativa
   )
   for update nowait
  ) loop
   null;
  end loop;

  -- Lock di CDP

  for aCDPMese in (
   select a.id_matricola from costo_del_dipendente a where exists (select 1 from ass_cdp_la b where
        b.esercizio = a.esercizio
    and b.mese = a.mese
    and b.id_matricola = a.id_matricola
    and b.cd_centro_responsabilita in (
     select cd_centro_responsabilita from cdr where
	    cd_unita_organizzativa = aUO.cd_unita_organizzativa
    )
   )
   and a.esercizio = aEsercizio
   and a.mese = aMese
   for update of a.id_matricola
  )loop
   null;
  end loop;

  -- Il totale di scarico configurato dei dipendenti dell'UO e 100%  (comprendento le quote verso altre UO accettate)

  select count(*) into aNum from V_CDP_TOT_PRC where
         esercizio = aEsercizio
     and mese = aMese
	 and cd_unita_organizzativa = aUO.cd_unita_organizzativa
	 and (
	         prc_a1 < 100
		  or prc_a2 < 100
		  or prc_a3 < 100
		 );
  if aNum > 0 then
   IBMERR001.RAISE_ERR_GENERICO('La configurazione di scarico dei dipendenti dell''UO '||aUO.cd_unita_organizzativa||' non e'' completa!');
  end if;

  begin
   select * into aCDRRUO from cdr where
         cd_unita_organizzativa = aUO.cd_unita_organizzativa
	 and to_number(cd_proprio_cdr) = 0;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Cdr di primo livello non trovato per UO:'||aUO.cd_unita_organizzativa);
  end;

  for aASSCDPLAB in (
      select * from V_CDP_SPACCATO_CDR_LA_VOCE where
	          esercizio = aEsercizio
		  and mese = aMese
		  and cd_cdr_root = aCDRRUO.cd_centro_responsabilita order by cd_cdr
  ) loop -- Cicla sulle configurazioni di scarico
   select * into aLA from linea_attivita where
           cd_centro_responsabilita = aASSCDPLAB.cd_cdr
	   and cd_linea_attivita = aASSCDPLAB.cd_linea_attivita;
   begin
    select * into aAss from ass_ev_voceep where
         esercizio = aASSCDPLAB.esercizio
     and ti_appartenenza = aASSCDPLAB.ti_appartenenza
     and ti_gestione = aASSCDPLAB.ti_gestione
     and cd_elemento_voce = aASSCDPLAB.cd_elemento_voce;
   exception when NO_DATA_FOUND then
    IBMERR001.RAISE_ERR_GENERICO('Associazione tra voce del piano finanziaria ed economica non trovata per voce di spesa cds:'||aASSCDPLAB.cd_elemento_voce);
   end;
   aVoceEp:=CNRCTB002.GETVOCEEP(aAss.esercizio, aAss.cd_voce_ep);

   fill_round_table(aASSCDPLAB, aVoceEp, aTSNow, aUser);

   aMov:=null;
   aMov.CD_CDS:=aUO.cd_unita_padre;
   aMov.ESERCIZIO:=aASSCDPLAB.esercizio;
   aMov.CD_UNITA_ORGANIZZATIVA:=aUO.cd_unita_organizzativa;
   aMov.CD_VOCE_EP:=aVoceEp.cd_voce_ep;
   aMov.SEZIONE:=CNRCTB100.IS_DARE;
   aMov.CD_CENTRO_RESPONSABILITA:=aASSCDPLAB.cd_cdr;
   aMov.IM_MOVIMENTO:=aASSCDPLAB.im_a1;
   aMov.CD_TERZO:=null;
   aMov.CD_FUNZIONE:=aLA.cd_funzione;
   aMov.CD_NATURA:=aLA.cd_natura;
   aMov.STATO:=CNRCTB200.STATO_DEFINITIVO;
   aMov.DS_MOVIMENTO:='Stipendi mese n.'||aMese;
   aMov.DACR:=aTSNow;
   aMov.UTCR:=aUser;
   aMov.DUVA:=aTSNow;
   aMov.UTUV:=aUser;
   aMov.PG_VER_REC:=1;
   aMov.CD_LINEA_ATTIVITA:=aLA.cd_linea_attivita;
   aMov.PG_NUMERO_DOCUMENTO:=null;
   aListaMovimenti(aListaMovimenti.count+1):=aMov;
  end loop;

  -- Distribuzione dei rotti su dettagli creati

  -- Imposto la linea di attività da usare per i movimenti dei rotti
  aLAROUND:=aLA;

  for aAssCdpMeseRnd in (select * from ass_cdp_mese_round where
	          esercizio = aEsercizio
		  and cd_cdr_root = aCDRRUO.cd_centro_responsabilita
		  and mese = aMese
		  for update nowait) loop  -- Cicla sulle configurazioni dei ROTTI
   aMov:=null;
   aMov.CD_CDS:=aUO.cd_unita_padre;
   aMov.ESERCIZIO:=aEsercizio;
   aMov.CD_UNITA_ORGANIZZATIVA:=aUO.cd_unita_organizzativa;
   aMov.CD_VOCE_EP:=aAssCdpMeseRnd.cd_voce_ep;
   aMov.SEZIONE:=CNRCTB100.IS_DARE;
   aMov.CD_CENTRO_RESPONSABILITA:=aLAROUND.cd_centro_responsabilita;
   aMov.IM_MOVIMENTO:=round(aAssCdpMeseRnd.im_arr_a1,2);
   aMov.CD_TERZO:=null;
   aMov.CD_FUNZIONE:=aLAROUND.cd_funzione;
   aMov.CD_NATURA:=aLAROUND.cd_natura;
   aMov.STATO:=CNRCTB200.STATO_DEFINITIVO;
   aMov.DS_MOVIMENTO:='Stipendi mese n.'||aMese||' gestione rotti';
   aMov.DACR:=aTSNow;
   aMov.UTCR:=aUser;
   aMov.DUVA:=aTSNow;
   aMov.UTUV:=aUser;
   aMov.PG_VER_REC:=1;
   aMov.CD_LINEA_ATTIVITA:=aLAROUND.cd_linea_attivita;
   aMov.PG_NUMERO_DOCUMENTO:=null;
   aListaMovimenti(aListaMovimenti.count+1):=aMov;
   movPosizione:=aListaMovimenti.count;
   update ass_cdp_mese_round set
	     pg_movimento = movPosizione
	    ,cd_cds = aUO.cd_unita_padre
	    ,cd_unita_organizzativa = aUO.cd_unita_organizzativa
		,im_arr_a1_non_distr = round(aAssCdpMeseRnd.im_arr_a1 - round(aAssCdpMeseRnd.im_arr_a1,2),30)
   where
            ESERCIZIO=aAssCdpMeseRnd.esercizio
        and CD_CDR_ROOT=aAssCdpMeseRnd.CD_CDR_ROOT
        and CD_VOCE_EP=aAssCdpMeseRnd.cd_voce_ep
 	    and MESE=aAssCdpMeseRnd.mese;
  end loop;

  aScrittura.CD_CDS:=aUO.cd_unita_padre;
  aScrittura.ESERCIZIO:=aEsercizio;
  aScrittura.CD_UNITA_ORGANIZZATIVA:=aUO.cd_unita_organizzativa;
  aScrittura.ORIGINE_SCRITTURA:='STIPENDI';
  aScrittura.CD_TERZO:=null;
  aScrittura.CD_TIPO_DOCUMENTO:=null;
  aScrittura.PG_NUMERO_DOCUMENTO:=null;
  aScrittura.CD_COMP_DOCUMENTO:=null;
  aScrittura.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_SINGOLA;
  If (vMese Is Not Null) Then
    aScrittura.DT_CONTABILIZZAZIONE := last_day(to_date('01'||vMese||aesercizio, 'ddmmyyyy')); --Trunc(aTSNow); -- stani
  Else
    aScrittura.DT_CONTABILIZZAZIONE := Trunc(aTSNow); -- stani
  End If;
  aScrittura.DT_CANCELLAZIONE:=null;
  aScrittura.STATO:=CNRCTB200.STATO_DEFINITIVO;
  aScrittura.DS_SCRITTURA:='Contabilizzazione mensile stipendi. Mese n.'||aMese;
  aScrittura.PG_SCRITTURA_ANNULLATA:=null;
  aScrittura.ATTIVA:='Y';
  aScrittura.ESERCIZIO_DOCUMENTO_AMM:=null;
  aScrittura.DACR:=aTSNow;
  aScrittura.UTCR:=aUser;
  aScrittura.DUVA:=aTSNow;
  aScrittura.UTUV:=aUser;
  aScrittura.PG_VER_REC:=1;
  aScrittura.CD_CDS_DOCUMENTO:=null;
  aScrittura.CD_UO_DOCUMENTO:=null;

  CNRCTB200.creaScrittCoan(
   aScrittura,
   aListaMovimenti
  );

  update ass_cdp_mese_round set
	    pg_scrittura = aScrittura.pg_scrittura
  where
            ESERCIZIO=aEsercizio
        and CD_CDR_ROOT=aCDRRUO.cd_centro_responsabilita
 	    and MESE=aMese;

  update ass_cdp_la set
      stato = CNRCTB060.STATO_CDP_SCARICATO
	 ,utuv=aUser
	 ,duva=aTSNow
	 ,pg_ver_rec=pg_ver_rec+1
  where
       esercizio = aEsercizio
   and mese= aMese
   and cd_centro_responsabilita in (
    select cd_centro_responsabilita from cdr where
	   cd_unita_organizzativa = aUO.cd_unita_organizzativa
  );

  -- Aggionramento della testata STIPENDI COEP
  begin
   select * into aStipCoan from stipendi_coan where
        esercizio = aEsercizio
    and mese= aMese
    and cd_cds = aUO.cd_unita_padre
    and cd_uo = aUO.cd_unita_organizzativa;
   update stipendi_coan set
      pg_scrittura_an = aScrittura.pg_scrittura,
	  utuv=aUser,
	  duva=aTSNow,
	  pg_ver_rec=pg_ver_rec+1
   where
        esercizio = aStipCoan.esercizio
	and mese = aStipCoan.mese
	and cd_cds = aStipCoan.cd_cds
	and cd_uo = aStipCoan.cd_uo;
  exception when NO_DATA_FOUND then
   insert into STIPENDI_COAN (
     ESERCIZIO
    ,MESE
    ,CD_CDS
    ,CD_UO
    ,PG_SCRITTURA_AN
    ,DACR
    ,UTCR
    ,DUVA
    ,UTUV
    ,PG_VER_REC
   ) values (
     aEsercizio
    ,aMese
    ,aUO.cd_unita_padre
    ,aUO.cd_unita_organizzativa
    ,aScrittura.pg_scrittura
    ,aTSNow
    ,aUser
    ,aTSNow
    ,aUser
    ,1
    );
  end;
 end;

-- ==============================================
-- ==============================================
-- ==============================================
-- ==============================================
-- ==============================================
--
-- SCRITTURA ECONOMICA COMPENSI (PRIMA SCRITTURA)
--
-- ==============================================
-- ==============================================
-- ==============================================
-- ==============================================
-- ==============================================

 function trovaContoEp(aObb obbligazione%rowtype) return voce_ep%rowtype is
  aAss ass_ev_voceep%rowtype;
  aVoceEp voce_ep%rowtype;
  aVoceSA varchar2(45);
 begin
 -- Recupero conto associato di default
  begin
   select * into aAss from ass_ev_voceep where
        esercizio = aObb.esercizio
    and ti_appartenenza = aObb.ti_appartenenza
    and ti_gestione = aObb.ti_gestione
    and cd_elemento_voce = aObb.cd_elemento_voce;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Associazione tra voce del piano finanziaria ed economica non trovata');
  end;
  return CNRCTB002.GETVOCEEP(aObb.esercizio,aAss.cd_voce_ep);
 end;

 function buildScrPEP(aEs number,aMese number,aComp compenso%rowtype, aUOP unita_organizzativa%rowtype, aCdTerzo number, aUser varchar2, aTSnow date) return scrittura_partita_doppia%rowtype is
  aScrittura scrittura_partita_doppia%rowtype;
 begin
   aScrittura:=null;
   aScrittura.CD_CDS:=aUOP.cd_unita_padre;
   aScrittura.ESERCIZIO:=aEs;
   aScrittura.CD_UNITA_ORGANIZZATIVA:=aUOP.cd_unita_organizzativa;
   aScrittura.PG_SCRITTURA:=null;
   aScrittura.ORIGINE_SCRITTURA:=CNRCTB200.ORIGINE_STIPENDI;
   aScrittura.CD_TIPO_DOCUMENTO:=CNRCTB100.TI_COMPENSO;
   aScrittura.CD_CDS_DOCUMENTO:=aComp.cd_cds;
   aScrittura.CD_UO_DOCUMENTO:=aComp.cd_unita_organizzativa;
   aScrittura.PG_NUMERO_DOCUMENTO:=aComp.pg_compenso;
   aScrittura.DT_CONTABILIZZAZIONE := last_day(to_date('01'||TO_CHAR(LPAD(Replace(Replace(amese, 13, 12), 15, 12), 2, '0'))||To_Char(aes), 'ddmmyyyy')); --Trunc(aTSNow); -- stani
   aScrittura.DT_PAGAMENTO:=null;
   aScrittura.DT_CANCELLAZIONE:=null;
   aScrittura.TI_SCRITTURA:=CNRCTB200.TI_SCRITTURA_PRIMA; -- Si tratta del tipo di scrittura prima o ultima
   aScrittura.CD_TERZO:=aCdTerzo;
   aScrittura.STATO:=CNRCTB200.STATO_DEFINITIVO;
   aScrittura.CD_DIVISA:='EURO';
   aScrittura.COSTO_PLURIENNALE:=null; -- chi lo valorizza e come non e chiaro
   aScrittura.PG_ENTE:=null; -- serve a rinumerare le scritture  livello di ENTE
   aScrittura.DS_SCRITTURA:='Prima scrittura contabilizzazione economica stipendi mese:'||aMese; -- chi lo valorizza e come non e chiaro
   aScrittura.PG_SCRITTURA_ANNULLATA:=null; -- codice della scrittura annullata in effettuazione storno
   aScrittura.ATTIVA:='Y';
   aScrittura.ESERCIZIO_DOCUMENTO_AMM:=aComp.esercizio;
   aScrittura.DACR:=aTSNow;
   aScrittura.UTCR:=aUser;
   return aScrittura;
 end;
procedure regStipendiCOGE(aEs number, aUser varchar2) is
aStip STIPENDI_COFI%rowtype;
begin
 for aStip in (select * from STIPENDI_COFI where
       esercizio = aEs  and
       stato=CNRCTB100.STATO_COM_COFI_TOT_MR
  ) loop
  	regStipendiCOGE(aEs,aStip.mese,aUser);
  end loop;
end;

procedure regStipendiCOGE(aEs number, aMese number, aUser varchar2) is
  aScrittura scrittura_partita_doppia%rowtype;
  aMovimento movimento_coge%rowtype;
  aListaMovimenti CNRCTB200.movimentiList;
  aTSNow date;
  aContoEp voce_ep%rowtype;
  aListaScritture CNRCTB200.scrittureList;
  aListaNuoveScritture CNRCTB200.scrittureList;
  aListaVecchieScritture CNRCTB200.scrittureList;
  aListaNuoviMovimenti CNRCTB200.movimentiList;
  aListaM CNRCTB200.movimentiList;
  aAssPgiro ass_obb_acr_pgiro%rowtype;
  isProcessaCOEP boolean;
  aUO unita_organizzativa%rowtype;
  aObb obbligazione%rowtype;
  aStip stipendi_cofi%rowtype;
  aTotLordoScadenze number(15,2);
  aTotCaricoEnte number(15,2);
  aTotDistribuito number(15,2);
  i number;
  aNumObb number;
  aComp compenso%rowtype;
  aGen documento_generico%rowtype;
  aImporto number(15,2);
  aDocTst v_doc_amm_coge_tsta%rowtype;
  aContoEpCori voce_ep%rowtype;
  aSezCori char(1);
  aContoEpAnag voce_ep%rowtype;
  aEffCori ass_tipo_cori_voce_ep%rowtype;
  aScr scrittura_partita_doppia%rowtype;
  recParametriCNR PARAMETRI_CNR%Rowtype;
 begin
  aTSNow:=sysdate;
  recParametriCNR := CNRUTL001.getRecParametriCnr(aEs);
  -- Carica dalla tabella stipendi_cofi e verifica che la liquidazione mensile sia stata effettuata

  begin
   select * into aStip from stipendi_cofi where
        esercizio=aEs
	and mese=aMese
	and stato=CNRCTB100.STATO_COM_COFI_TOT_MR
   for update nowait;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Liquidazione stipendi mese:'||aMese||'/'||aEs||' non ancora effettuata');
  end;

  -- L'esercizio contabile deve essere aperto per il cds di liquidazione stipendi
  if not CNRCTB008.ISESERCIZIOAPERTO(aEs, aStip.cd_cds_comp)
  then
   IBMERR001.RAISE_ERR_GENERICO('L''esercizio contabile '||aEs||' non è aperto per il cds:'||aStip.cd_cds_comp);
  end if;

  -- L'esercizio economico precedente deve essere chiuso definitivamente
  if not (CNRCTB200.ISCHIUSURACOEPDEF(aEs-1, aStip.cd_cds_comp)='Y') then
   IBMERR001.RAISE_ERR_GENERICO('L''esercizio economico precedente non è chiuso definitivamente per il cds: '||aStip.cd_cds_comp);
  end if;

  -- Carica il compenso parte cori stipendi

  begin
   select * into aComp from compenso where
        pg_compenso=aStip.pg_comp
    and cd_cds=aStip.cd_cds_comp
    and cd_unita_organizzativa=aStip.cd_uo_comp
    and esercizio=aStip.esercizio_comp
   for update nowait;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Compenso fittizio per liquidazione stipendi mese:'||aMese||'/'||aEs||' non trovato');
  end;

  -- Verifica che non sia già stata effettuata questa scrittura

  begin
   select * into aScr from scrittura_partita_doppia where
                origine_scrittura=CNRCTB200.ORIGINE_STIPENDI
			and esercizio = aStip.esercizio
			and CD_CDS = aStip.cd_cds_comp
            and CD_TIPO_DOCUMENTO = CNRCTB100.TI_COMPENSO
            and PG_NUMERO_DOCUMENTO=aStip.pg_comp
            and ESERCIZIO_DOCUMENTO_AMM=aStip.esercizio_comp
            and CD_CDS_DOCUMENTO=aStip.cd_cds_comp
            and CD_UO_DOCUMENTO=aStip.cd_uo_comp;
   IBMERR001.RAISE_ERR_GENERICO('Registrazione economica stipendi mese:'||aMese||'/'||aEs||' già effettuata');
  exception when NO_DATA_FOUND then
   null;
  end;

  -- Carica il doc generico collegato al mandato principale stipendi

  begin
   select * into aGen from documento_generico where
	    cd_cds=aStip.cd_cds_doc_gen
	and cd_unita_organizzativa=aStip.cd_uo_doc_gen
	and esercizio=aStip.esercizio_doc_gen
	and cd_tipo_documento_amm=aStip.cd_tipo_doc_gen
	and pg_documento_generico=aStip.pg_doc_gen
   for update nowait;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Documento generico per liquidazione stipendi mese:'||aMese||'/'||aEs||' non trovato');
  end;

  -- Carico il totale carico ente dei CORI
/* stani per Franca 04.11.2004
  select nvl(sum(ammontare),0) into aTotCaricoEnte from CONTRIBUTO_RITENUTA where
                 pg_compenso=aComp.pg_compenso
             and cd_cds=aComp.cd_cds
             and cd_unita_organizzativa=aComp.cd_unita_organizzativa
             and esercizio=aComp.esercizio
			 and ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE;

  -- Carico il totale

  select nvl(sum(im_totale),0) into aTotLordoScadenze from STIPENDI_COFI_OBB_SCAD where
       esercizio = aEs
   and mese = aMese;

  select count(*) into aNumObb from  STIPENDI_COFI_OBB_SCAD where
       esercizio = aEs
   and mese = aMese;
*/

  i:=0;
/* stani 04.11  aTotDistribuito:=0;*/
  for aStipObb in (select * from STIPENDI_COFI_OBB_SCAD where
       esercizio = aEs
   and mese = aMese
   for update nowait
  ) loop
   i:=i+1;
   select * into aObb from obbligazione where
        cd_cds = aStipObb.cd_cds_obbligazione
    and esercizio = aStipObb.esercizio
    and esercizio_originale = aStipObb.esercizio_ori_obbligazione
    and pg_obbligazione = aStipObb.pg_obbligazione
   for update nowait;
   -- Generazione movimento di default
   aContoEp:=trovaContoEp(aObb);
/*   aImporto:=aStipObb.im_totale * (aTotLordoScadenze-aTotCaricoEnte)/aTotLordoScadenze; stani per Franca 04.11.2004 sostituito aimporto*/
   aImporto:=aStipObb.im_totale;
/*   aTotDistribuito:=aTotDistribuito+aImporto; stani per Franca 04.11*/
   -- Distribuzione dei rotti su ultimo movimento
/* stani per Franca 04.11
    if i=aNumObb then
    aImporto:=aImporto+(aTotLordoScadenze-aTotCaricoEnte)-aTotDistribuito;
   end if;
*/
   CNRCTB204.buildMovPrinc(aObb.cd_cds,aObb.esercizio,aObb.cd_unita_organizzativa,aContoEp,aImporto,CNRCTB100.IS_DARE,aComp.dt_da_competenza_coge,aComp.dt_a_competenza_coge,aObb.cd_terzo,aListaMovimenti,aUser,aTSnow);
   if (recParametriCNR.fl_nuovo_pdg ='Y') then
    	aContoEpAnag:=CNRCTB204.trovaContoContrEp(aObb.esercizio,null,null,null,aContoEp.cd_voce_ep);
   		CNRCTB204.buildMovPrinc(aObb.cd_cds,aObb.esercizio,aObb.cd_unita_organizzativa,aContoEpAnag,aImporto,CNRCTB100.IS_AVERE,aComp.dt_da_competenza_coge,aComp.dt_a_competenza_coge,aObb.cd_terzo,aListaMovimenti,aUser,aTSnow);
   end if;
  end loop;
/* stani per Franca 04.11.2004
  select * into aDocTst from v_doc_amm_coge_tsta where
                 pg_numero_documento=aComp.pg_compenso
             and cd_tipo_documento = CNRCTB100.TI_COMPENSO
             and cd_cds=aComp.cd_cds
             and cd_unita_organizzativa=aComp.cd_unita_organizzativa
             and esercizio=aComp.esercizio;

  -- Evidenzia nella scrittura I SOLI CARICHI ENTE
  for aCori in (select * from v_doc_amm_coge_cori where
                 pg_numero_documento=aComp.pg_compenso
             and cd_tipo_documento = CNRCTB100.TI_COMPENSO
			 and ti_ente_percepiente = CNRCTB100.TI_CARICO_ENTE
             and cd_cds=aComp.cd_cds
             and cd_unita_organizzativa=aComp.cd_unita_organizzativa
             and esercizio=aComp.esercizio
 		   ) loop
   aEffCori:=CNRCTB204.getAssCoriEp(aDocTst,aCori);
   begin
		aContoEpCori:=CNRCTB002.getVoceEp(aEffCori.esercizio, aEffCori.cd_voce_ep);
   exception when OTHERS then
    	IBMERR001.RAISE_ERR_GENERICO('Conto economico: '||aEffCori.cd_voce_ep||' associato a CORI:'||aCori.cd_contributo_ritenuta||'non trovato');
   end;

   aSezCori:=CNRCTB204.getSezione(aDocTst,aCori);
   CNRCTB204.buildMovPrinc(aComp.cd_cds,aComp.esercizio,aComp.cd_unita_organizzativa,aContoEpCori,abs(aCori.ammontare),aSezCori,aComp.dt_da_competenza_coge,aComp.dt_a_competenza_coge,aObb.cd_terzo,aListaMovimenti,aUser,aTSnow);
   end loop;
fine stani per Franca per stipendi 04.11.2004*/

  aUO:=CNRCTB020.GETUOVALIDA(aObb.esercizio,aObb.cd_unita_organizzativa);

  if (recParametriCNR.fl_nuovo_pdg ='N') then
  	aContoEpAnag:=CNRCTB204.trovaContoAnag(aObb.esercizio,aObb.cd_terzo,aStip.cd_tipo_doc_gen,null,null);
  	CNRCTB204.buildChiusuraScrittura(aComp.cd_cds,aComp.esercizio,aComp.cd_unita_organizzativa,aContoEpAnag,aComp.dt_da_competenza_coge,aComp.dt_a_competenza_coge,aObb.cd_terzo,CNRCTB100.TI_ISTITUZIONALE,aListaMovimenti,aUser,aTSnow);
  end if;
  aScrittura:=buildScrPEP(aEs,aMese,aComp,aUO,aObb.cd_terzo,aUser,aTSNow);
  CNRCTB200.CREASCRITTCOGE(aScrittura,aListaMovimenti);
 end;

 procedure ins_ASS_CDP_MESE_ROUND (aDest ASS_CDP_MESE_ROUND%rowtype) is
  begin
   insert into ASS_CDP_MESE_ROUND (
     ESERCIZIO
    ,CD_CDR_ROOT
    ,CD_VOCE_EP
    ,MESE
    ,IM_ARR_A1
    ,IM_ARR_A1_NON_DISTR
    ,CD_CDS
    ,CD_UNITA_ORGANIZZATIVA
    ,PG_SCRITTURA
    ,PG_MOVIMENTO
    ,DACR
    ,UTUV
    ,UTCR
    ,DUVA
    ,PG_VER_REC
   ) values (
     aDest.ESERCIZIO
    ,aDest.CD_CDR_ROOT
    ,aDest.CD_VOCE_EP
    ,aDest.MESE
    ,aDest.IM_ARR_A1
    ,aDest.IM_ARR_A1_NON_DISTR
    ,aDest.CD_CDS
    ,aDest.CD_UNITA_ORGANIZZATIVA
    ,aDest.PG_SCRITTURA
    ,aDest.PG_MOVIMENTO
    ,aDest.DACR
    ,aDest.UTUV
    ,aDest.UTCR
    ,aDest.DUVA
    ,aDest.PG_VER_REC
    );
 end;

end;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy