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

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

There is a newer version: 6.6.11
Show newest version
CREATE OR REPLACE Function func_PRT_S_SP_RICLASSIFICATO
--
-- Date: 06/08/2004
-- Version: 1.1
--
-- Vista di stampa Stato Patrimoniale Riclassificato
--
-- History:
--
-- Date: 28/07/2004
-- Version: 1.0
-- Creazione
--
-- Date: 06/08/2004
-- Version: 1.1
-- Modificati il nome della view e della procedure, eliminato il nome dello
-- schema, corretta l'indicazione dei parametri nel documento, aggiunto history
-- nella procedure
--
-- Body
--
(ATTPAS         IN VARCHAR2,
 IST_COMM       IN VARCHAR2,
 inEs           in number,
 CDS            in varchar2,
 uo             in varchar2
) Return VARCHAR is

 aId    number;
 i      number;
 INDICE NUMBER := 0;
 aNum1  number;
 LIV1   VARCHAR2(10);
 LIV2   VARCHAR2(10);
 LIV3   VARCHAR2(10);
 LIV4   VARCHAR2(10);
 PARZ1  NUMBER(20,3);
 TOT1   NUMBER(20,3);
 PARZ2  NUMBER(20,3);
 TOT2   NUMBER(20,3);
 TOT_INCR1  NUMBER(20,3);
 TOT_INCR2  NUMBER(20,3);
 DARE1  NUMBER(20,3);
 AVERE1 NUMBER(20,3);
 DARE2  NUMBER(20,3);
 AVERE2 NUMBER(20,3);
 M1     NUMBER;
 M2     NUMBER;
 M3     NUMBER;
 M4     NUMBER;
 FLAG_TOT VARCHAR2(1);

ANNO_PREC NUMBER;

 CONTO_AVANZO   VOCE_EP.CD_VOCE_EP%TYPE;
 STATO_PATR     VOCE_EP.CD_VOCE_EP%TYPE;

 CONTO_AVANZO_AP   VOCE_EP.CD_VOCE_EP%TYPE;
 STATO_PATR_AP     VOCE_EP.CD_VOCE_EP%TYPE;

CURSOR SCHEMA_SP_RICLASSIFICATO IS
 SELECT *
 FROM   CNR_GRUPPO_EP
 WHERE  CD_PIANO_GRUPPI = ATTPAS
 ORDER BY SEQUENZA;

CURSOR CONTI_ASSOCIATI (CONTO_RICLASSIFICATO IN VARCHAR, ANNO_COMP NUMBER) IS
 SELECT ESERCIZIO, CD_VOCE_EP, SEZIONE, SEGNO
 FROM   CNR_ASS_CONTO_GRUPPO_EP
 WHERE  esercizio = ANNO_COMP and
        CD_PIANO_GRUPPI = ATTPAS AND
        CD_GRUPPO_EP = CONTO_RICLASSIFICATO;

CONTI_ASS       CONTI_ASSOCIATI%ROWTYPE;
SCHEMA_SP       SCHEMA_SP_RICLASSIFICATO%ROWTYPE;

begin

ANNO_PREC := INES - 1;

 select IBMSEQ00_CR_PACKAGE.nextval
 into aId
 from dual;

 SELECT VAL01
 INTO   CONTO_AVANZO
 FROM   CONFIGURAZIONE_CNR
 WHERE  ESERCIZIO = INES AND
        CD_UNITA_FUNZIONALE = '*' AND
        CD_CHIAVE_PRIMARIA   = 'VOCEEP_SPECIALE' AND
        CD_CHIAVE_SECONDARIA = 'UTILE_PERDITA_ESERCIZIO';

 SELECT VAL01
 INTO   STATO_PATR
 FROM   CONFIGURAZIONE_CNR
 WHERE  ESERCIZIO = INES AND
        CD_UNITA_FUNZIONALE = '*' AND
        CD_CHIAVE_PRIMARIA   = 'VOCEEP_SPECIALE' AND
        CD_CHIAVE_SECONDARIA = 'STATO_PATRIMONIALE';

 i := 0;

OPEN SCHEMA_SP_RICLASSIFICATO;
LOOP

  FETCH SCHEMA_SP_RICLASSIFICATO INTO SCHEMA_SP;
  EXIT WHEN SCHEMA_SP_RICLASSIFICATO%NOTFOUND;

  PARZ1 := NULL;
  TOT1  := NULL;
  PARZ2 := NULL;
  TOT2  := NULL;

  FLAG_TOT := 'N';

IF SCHEMA_SP.CD_GRUPPO_PADRE IS NULL THEN
  LIV1 := SCHEMA_SP.NOME;
  LIV2 := NULL;
  LIV3 := NULL;
  LIV4 := NULL;
ELSIF SUBSTR(SCHEMA_SP.NOME, 1, 1) BETWEEN 'a' AND 'z' THEN
  LIV1 := NULL;
  LIV2 := NULL;
  LIV3 := NULL;
  LIV4 := SCHEMA_SP.NOME;
ELSIF SUBSTR(SCHEMA_SP.NOME,1,1) in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') THEN
  LIV1 := NULL;
  LIV2 := NULL;
  LIV3 := SCHEMA_SP.NOME;
  LIV4 := NULL;
ELSE
  LIV1 := NULL;
  LIV2 := SCHEMA_SP.NOME;
  LIV3 := NULL;
  LIV4 := NULL;
END IF;

--- GIRO SUI CONTI ASSOCIATI AL CONTO RICLASSIFICATO SOLO PER I MASTRI

IF SCHEMA_SP.FL_MASTRINO = 'Y' THEN

   OPEN CONTI_ASSOCIATI (SCHEMA_SP.CD_GRUPPO_EP, INES);
   LOOP

     FETCH CONTI_ASSOCIATI INTO CONTI_ASS;
     EXIT WHEN CONTI_ASSOCIATI%NOTFOUND;

---------------------------------------------------------------------------------
------------ INIZIO GIRO SULLE CIFRE DELL'ESERCIZIO IN GESTIONE -----------------
---------------------------------------------------------------------------------

  IF CONTI_ASS.CD_VOCE_EP = CONTO_AVANZO THEN

        SELECT Nvl(sum(DECODE(D.SEZIONE, 'D', D.im_movimento)), 0),
               Nvl(sum(DECODE(D.SEZIONE, 'A', D.im_movimento)), 0)
        INTO   DARE1, AVERE1
        FROM   MOVIMENTO_COGE D, SCRITTURA_PARTITA_DOPPIA T
        WHERE  T.CD_CDS  = D.CD_CDS   AND
               T.ESERCIZIO = D.ESERCIZIO AND
               T.CD_UNITA_ORGANIZZATIVA = D.CD_UNITA_ORGANIZZATIVA and
               T.PG_SCRITTURA = D.PG_SCRITTURA AND
               T.ATTIVA = 'Y' AND
             ((T.CD_CAUSALE_COGE IS NULL) OR
              (T.CD_CAUSALE_COGE = 'DETERMINAZIONE_UTILE_PERDITA' AND CONTI_ASS.CD_VOCE_EP = CONTO_AVANZO)) AND
               T.CD_CDS = Decode(CDS, '*', T.CD_CDS, CDS) and
               T.ESERCIZIO  = INES                 AND
               T.CD_UNITA_ORGANIZZATIVA = Decode(uo, '*', T.CD_UNITA_ORGANIZZATIVA, uo) and
               D.CD_VOCE_EP = CONTI_ASS.CD_VOCE_EP AND
              (NVL(TO_CHAR(D.DT_DA_COMPETENZA_COGE, 'YYYY'), D.ESERCIZIO) = TO_CHAR(INES) OR
               NVL(TO_CHAR(D.DT_A_COMPETENZA_COGE,  'YYYY'), D.ESERCIZIO) = TO_CHAR(INES)) AND
               D.TI_ISTITUZ_COMMERC = Decode(IST_COMM, '*', D.TI_ISTITUZ_COMMERC, IST_COMM)
               AND EXISTS
                (SELECT 1
                 FROM MOVIMENTO_COGE M2
                 WHERE M2.CD_CDS                  = D.CD_CDS                 AND
                       M2.ESERCIZIO               = D.ESERCIZIO              AND
                       M2.CD_UNITA_ORGANIZZATIVA  = D.CD_UNITA_ORGANIZZATIVA AND
                       M2.PG_SCRITTURA            = D.PG_SCRITTURA AND
                       M2.cd_voce_ep = STATO_PATR);

  ELSE

        SELECT Nvl(sum(DECODE(D.SEZIONE, 'D', D.im_movimento)), 0),
               Nvl(sum(DECODE(D.SEZIONE, 'A', D.im_movimento)), 0)
        INTO   DARE1, AVERE1
        FROM   MOVIMENTO_COGE D, SCRITTURA_PARTITA_DOPPIA T
        WHERE  T.CD_CDS  = D.CD_CDS   AND
               T.ESERCIZIO = D.ESERCIZIO AND
               T.CD_UNITA_ORGANIZZATIVA = D.CD_UNITA_ORGANIZZATIVA and
               T.PG_SCRITTURA = D.PG_SCRITTURA AND
               T.ATTIVA = 'Y' AND
             ((T.CD_CAUSALE_COGE IS NULL) OR
              (T.CD_CAUSALE_COGE != 'CHIUSURA_CONTO_ECONOMICO' AND
               T.CD_CAUSALE_COGE != 'CHIUSURA_STATO_PATRIMONIALE' AND
               T.CD_CAUSALE_COGE != 'DETERMINAZIONE_UTILE_PERDITA')) AND
               T.CD_CDS = Decode(CDS, '*', T.CD_CDS, CDS) and
               T.ESERCIZIO  = INES                 AND
               T.CD_UNITA_ORGANIZZATIVA = Decode(uo, '*', T.CD_UNITA_ORGANIZZATIVA, uo) and
               D.CD_VOCE_EP = CONTI_ASS.CD_VOCE_EP AND
               D.TI_ISTITUZ_COMMERC = Decode(IST_COMM, '*', D.TI_ISTITUZ_COMMERC, IST_COMM);

  END IF;

  IF CONTI_ASS.SEZIONE = 'D' THEN
     IF CONTI_ASS.SEGNO = '+' THEN
          PARZ1 := NVL(PARZ1, 0) + (NVL(DARE1, 0) - NVL(AVERE1, 0));
     ELSIF CONTI_ASS.SEGNO = '-' THEN
          PARZ1 := NVL(PARZ1, 0) - (NVL(DARE1, 0) - NVL(AVERE1, 0));
     END IF;

  ELSIF CONTI_ASS.SEZIONE = 'A' THEN

     IF CONTI_ASS.SEGNO = '+' THEN
          PARZ1 := NVL(PARZ1, 0) + (NVL(AVERE1, 0) - NVL(DARE1, 0));
     ELSIF CONTI_ASS.SEGNO = '-' THEN
          PARZ1 := NVL(PARZ1, 0) - (NVL(AVERE1, 0) - NVL(DARE1, 0));
     END IF;
  END IF;

  TOT1  := NULL;

-------------- FINE GIRO SULLE CIFRE DELL'ESERCIZIO IN GESTIONE -----------------
------------ E INIZIO GIRO SULLE CIFRE DELL'ESERCIZIO PRECEDENTE  ---------------

  IF CONTI_ASS.CD_VOCE_EP = CONTO_AVANZO THEN

        SELECT Nvl(sum(DECODE(D.SEZIONE, 'D', D.im_movimento)), 0),
               Nvl(sum(DECODE(D.SEZIONE, 'A', D.im_movimento)), 0)
        INTO   DARE2, AVERE2
        FROM   MOVIMENTO_COGE D, SCRITTURA_PARTITA_DOPPIA T
        WHERE  T.CD_CDS  = D.CD_CDS   AND
               T.ESERCIZIO = D.ESERCIZIO AND
               T.CD_UNITA_ORGANIZZATIVA = D.CD_UNITA_ORGANIZZATIVA and
               T.PG_SCRITTURA = D.PG_SCRITTURA AND
               T.ATTIVA = 'Y' AND
             ((T.CD_CAUSALE_COGE IS NULL) OR
              (T.CD_CAUSALE_COGE = 'DETERMINAZIONE_UTILE_PERDITA' AND CONTI_ASS.CD_VOCE_EP = CONTO_AVANZO)) AND
               T.CD_CDS = Decode(CDS, '*', T.CD_CDS, CDS) and
               T.ESERCIZIO  = ANNO_PREC                 AND
               T.CD_UNITA_ORGANIZZATIVA = Decode(uo, '*', T.CD_UNITA_ORGANIZZATIVA, uo) and
               D.CD_VOCE_EP = CONTI_ASS.CD_VOCE_EP AND
               D.TI_ISTITUZ_COMMERC = Decode(IST_COMM, '*', D.TI_ISTITUZ_COMMERC, IST_COMM)
               AND EXISTS
                (SELECT 1
                 FROM MOVIMENTO_COGE M2
                 WHERE M2.CD_CDS                  = D.CD_CDS                 AND
                       M2.ESERCIZIO               = D.ESERCIZIO              AND
                       M2.CD_UNITA_ORGANIZZATIVA  = D.CD_UNITA_ORGANIZZATIVA AND
                       M2.PG_SCRITTURA            = D.PG_SCRITTURA AND
                       M2.cd_voce_ep = STATO_PATR);

  ELSE

        SELECT Nvl(sum(DECODE(D.SEZIONE, 'D', D.im_movimento)), 0),
               Nvl(sum(DECODE(D.SEZIONE, 'A', D.im_movimento)), 0)
        INTO   DARE2, AVERE2
        FROM   MOVIMENTO_COGE D, SCRITTURA_PARTITA_DOPPIA T
        WHERE  T.CD_CDS  = D.CD_CDS   AND
               T.ESERCIZIO = D.ESERCIZIO AND
               T.CD_UNITA_ORGANIZZATIVA = D.CD_UNITA_ORGANIZZATIVA and
               T.PG_SCRITTURA = D.PG_SCRITTURA AND
               T.ATTIVA = 'Y' AND
             ((T.CD_CAUSALE_COGE IS NULL) OR
              (T.CD_CAUSALE_COGE != 'CHIUSURA_CONTO_ECONOMICO' AND
               T.CD_CAUSALE_COGE != 'CHIUSURA_STATO_PATRIMONIALE' AND
               T.CD_CAUSALE_COGE != 'DETERMINAZIONE_UTILE_PERDITA')) AND
               T.CD_CDS = Decode(CDS, '*', T.CD_CDS, CDS) and
               T.ESERCIZIO  = ANNO_PREC                 AND
               T.CD_UNITA_ORGANIZZATIVA = Decode(uo, '*', T.CD_UNITA_ORGANIZZATIVA, uo) and
               D.CD_VOCE_EP = CONTI_ASS.CD_VOCE_EP AND
               D.TI_ISTITUZ_COMMERC = Decode(IST_COMM, '*', D.TI_ISTITUZ_COMMERC, IST_COMM);
  END IF;

        IF CONTI_ASS.SEZIONE = 'D' THEN
           IF CONTI_ASS.SEGNO = '+' THEN
                PARZ2 := NVL(PARZ2, 0) + (NVL(DARE2, 0) - NVL(AVERE2, 0));
           ELSIF CONTI_ASS.SEGNO = '-' THEN
                PARZ2 := NVL(PARZ2, 0) - (NVL(DARE2, 0) - NVL(AVERE2, 0));
           END IF;

        ELSIF CONTI_ASS.SEZIONE = 'A' THEN

           IF CONTI_ASS.SEGNO = '+' THEN
                PARZ2 := NVL(PARZ2, 0) + (NVL(AVERE2, 0) - NVL(DARE2, 0));
           ELSIF CONTI_ASS.SEGNO = '-' THEN
                PARZ2 := NVL(PARZ2, 0) - (NVL(AVERE2, 0) - NVL(DARE2, 0));
           END IF;
        END IF;

        TOT2  := NULL;

---------------------------------------------------------------------------------
-------------- FINE GIRO SULLE CIFRE DELL'ESERCIZIO PRECEDENTE ------------------
---------------------------------------------------------------------------------

   END LOOP;
   CLOSE CONTI_ASSOCIATI;

ELSIF SCHEMA_SP.FORMULA IS NOT NULL THEN

   PARZ1 := NULL;
   PARZ2 := NULL;

   TOT1 := NULL;
   TOT2 := NULL;

   FLAG_TOT := 'S';

---------------------------------------------------------------------------------
------------------------ CALCOLO DEI TOTALI CON LA FORMULA ----------------------
---------------------------------------------------------------------------------

   INDICE := 0;

   LOOP

     INDICE := INDICE + 1;

     SELECT INSTR(SCHEMA_SP.FORMULA, '[', 1, INDICE) INTO M1 FROM DUAL;
     SELECT INSTR(SCHEMA_SP.FORMULA, ']', 1, INDICE) INTO M2 FROM DUAL;
     SELECT INSTR(SCHEMA_SP.FORMULA, ',', 1, INDICE) INTO M3 FROM DUAL;
     SELECT INSTR(SCHEMA_SP.FORMULA, '}', 1, INDICE) INTO M4 FROM DUAL;

     IF M1 > 0 THEN

      SELECT SUM(NVL(PARZIALE_I_ANNO, 0)), SUM(NVL(PARZIALE_II_ANNO, 0))
      INTO   TOT_INCR1, TOT_INCR2
      FROM   PRT_VPG_BIL_RICLASSIFICATO
      WHERE  CONTO_RICLASS = SUBSTR(SCHEMA_SP.FORMULA, M3+1, M4-(M3+1))
        And id = aId;

      IF SUBSTR(SCHEMA_SP.FORMULA, M1+1, M2-(M1+1)) = '+' THEN
            TOT1 :=  NVL(TOT1, 0) + TOT_INCR1;
            TOT2 :=  NVL(TOT2, 0) + TOT_INCR2;
      ELSIF SUBSTR(SCHEMA_SP.FORMULA, M1+1, M2-(M1+1)) = '-' THEN
            TOT1 :=  NVL(TOT1, 0) - TOT_INCR1;
            TOT2 :=  NVL(TOT2, 0) - TOT_INCR2;
      END IF;

     END IF;

   EXIT WHEN M1 = 0;

   END LOOP;

ELSE
   PARZ1 := NULL;
   PARZ2 := NULL;

   TOT1  := NULL;
   TOT2  := NULL;
END IF;

I := I + 1;

-- inserimento dello schema di riclassificazione NELLA VIEW (FISSO)

insert into PRT_VPG_BIL_RICLASSIFICATO (ID, CHIAVE, TIPO, SEQUENZA,
        ORDINE, CONTO_RICLASS, I_LIVELLO, II_LIVELLO, III_LIVELLO, IV_LIVELLO,
        DESCRIZIONE, PARZIALE_I_ANNO, TOTALE_I_ANNO, PARZIALE_II_ANNO, TOTALE_II_ANNO,
        SN_TOTALE)
VALUES (aId, 'chiave', 't', i, SCHEMA_SP.SEQUENZA, SCHEMA_SP.CD_GRUPPO_EP,
        LIV1, LIV2, LIV3, LIV4, SCHEMA_SP.DS_GRUPPO_EP, PARZ1, TOT1, PARZ2, TOT2, FLAG_TOT);

END LOOP; -- FINE LOOP PRINCIPALE SULLO SCHEMA DI RICLASSIFICAZIONE
CLOSE SCHEMA_SP_RICLASSIFICATO;
Return To_Char(aId);
End;
/






© 2015 - 2024 Weber Informatics LLC | Privacy Policy