campo-sirio/crpa/pmc.sql
alex 137797e17c Patch level : 2.1 nopatch
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Personalizzazione CRPA


git-svn-id: svn://10.65.10.50/trunk@12246 c028cbd2-c16b-5b4b-a496-9718f37d4682
2004-07-15 08:45:25 +00:00

614 lines
22 KiB
MySQL
Executable File
Raw Blame History

CREATE TABLE PRACTOR_LOG (
LOG_ID NUMBER (10) NOT NULL,
TIPO VARCHAR2 (25) NOT NULL,
DATA DATE NOT NULL,
UTENTE VARCHAR2 (240) NOT NULL,
TESTO VARCHAR2 (240),
CONSTRAINT PRACTOR_LOGXP
PRIMARY KEY ( LOG_ID ) )
/
CREATE OR REPLACE PROCEDURE prcLog (vMessage PRACTOR_LOG.testo%TYPE) IS vErrMsg VARCHAR2(100);
BEGIN
INSERT INTO PRACTOR_LOG VALUES (note_seq.NEXTVAL, '-', SYSDATE, USER, vMessage);
-- dbms_output.put_line(vMessage);
EXCEPTION
WHEN OTHERS THEN
vErrMsg := SQLERRM(SQLCODE);
INSERT INTO PRACTOR_LOG VALUES (note_seq.NEXTVAL, '-', SYSDATE, USER, vErrMsg);
END prcLog;
/
CREATE TABLE SMC_PRJDOC_T146 (
UNICO NUMBER,
ARCH VARCHAR2 (10) NOT NULL,
UNICARCH NUMBER NOT NULL,
DTATRASF DATE,
TIPDOC VARCHAR2 (2),
DESDOC VARCHAR2 (100),
NUMDOC VARCHAR2 (20),
DTADOC DATE,
NUMDOCFIS VARCHAR2 (20),
DTADOCFIS DATE,
DTAPERT DATE,
AZIENDA VARCHAR2 (3),
TIPANA VARCHAR2 (1),
CODCF VARCHAR2 (10),
CODVAL VARCHAR2 (3),
CONSTRAINT T146XP
PRIMARY KEY ( ARCH, UNICARCH ) )
/
ALTER TABLE SMC_PRJDOC_T146 ADD CONSTRAINT R011146
FOREIGN KEY (CODVAL)
REFERENCES PMC.VL_T011 (C_VL)
/
CREATE TABLE SMC_PRJDET_T147 (
UNICO NUMBER,
ARCH VARCHAR2 (10) NOT NULL,
UNICARCH NUMBER NOT NULL,
UNICRIGA NUMBER NOT NULL,
CODART VARCHAR2 (15),
DESART VARCHAR2 (70),
QUANT NUMBER,
UNMIS VARCHAR2 (3),
CONSAL VARCHAR2 (1),
IMPVAL NUMBER,
NUMCOMM VARCHAR2 (15),
CODATTCM VARCHAR2 (10),
ELSPESA VARCHAR2 (10),
CENTCOST VARCHAR2 (6),
DTACONS DATE,
RIFRICH VARCHAR2 (20),
RIFORD VARCHAR2 (20),
RIFBOL VARCHAR2 (20),
CODVAL VARCHAR2 (3),
STATO_IMP VARCHAR2 (1),
SEGNO VARCHAR2 (1),
CONSTRAINT T147XP
PRIMARY KEY ( ARCH, UNICARCH, UNICRIGA ) )
/
ALTER TABLE SMC_PRJDET_T147 ADD CONSTRAINT C146147
FOREIGN KEY (ARCH, UNICARCH)
REFERENCES PMC.SMC_PRJDOC_T146 (ARCH, UNICARCH) ON DELETE CASCADE
/
ALTER TABLE SMC_PRJDET_T147 ADD CONSTRAINT R011147
FOREIGN KEY (CODVAL)
REFERENCES PMC.VL_T011 (C_VL)
/
CREATE OR REPLACE TRIGGER SMC_PRJDET_G147_01 BEFORE INSERT ON SMC_PRJDET_T147 FOR EACH ROW
DECLARE
TIPO SMC_PRJDOC_T146.TIPDOC%TYPE;
ATTIVITA SMC_PRJDET_T147.CODATTCM%TYPE;
PROJ PROG_T056.C_PROG%TYPE;
COSTO COSTO_AGRT_T022.P_COSTO%TYPE;
CAMBIORIF VL_T011.I_CB_CONS%TYPE;
CAMBIOPRJ VL_T011.I_CB_CONS%TYPE;
VALPRJ VL_T011.C_VL%TYPE;
ERRMSG PRACTOR_LOG.TESTO%TYPE;
baseERRMSG PRACTOR_LOG.TESTO%TYPE;
TCLASSE COSTO_AGRT_T022.T_CLASSE%TYPE;
numcosti NUMERIC;
CODCURVA CRV_DSBN_T013.C_CRV%TYPE;
DESSPESA CLASSE_DI_COSTO_T043.S_CLASSE%TYPE;
BASEINI DATE;
BASEFIN DATE;
FORINI DATE;
FORFIN DATE;
PELMNT STRU_T087.P_ELMNT%TYPE;
CBS PROG_T056.C_STRU%TYPE;
STIMA COSTO_AGRT_T022.I_STIMA_CMPL%TYPE;
BDG_REV COSTO_AGRT_T022.I_BDG_REV%TYPE;
COMM COSTO_AGRT_T022.I_COMM%TYPE;
ACEM COSTO_AGRT_T022.I_ACEM%TYPE;
CONS COSTO_AGRT_T022.I_CONS%TYPE;
CNTBZ COSTO_AGRT_T022.I_CNTBZ%TYPE;
BEGIN
Prclog('-- Nuovo documento -----------------------------------------------------------------------------------');
Prclog('-- ARCH: '||:NEW.ARCH);
Prclog('-- UNICARCH: '||:NEW.UNICARCH);
Prclog('-- RIGA: '||:NEW.UNICRIGA);
-- Tipo documento
SELECT NVL(TIPDOC,'XX') INTO TIPO FROM SMC_PRJDOC_T146
WHERE
ARCH = :NEW.ARCH
AND UNICARCH = :NEW.UNICARCH;
Prclog('Tipo documento: '||TIPO);
IF TIPO <> 'XX' THEN
-- Ottengo il codice interno del progetto, il codice della valuta e il codice della
-- CBS di progetto. Il campo NUMCOMM del documento contiene il nome
-- del progetto (campo S_PROG_NOM della tabella PROG_T056).
-- Il nome <20> univoco.
SELECT
C_PROG, NVL(C_VL, 'EUR'), C_STRU
INTO
PROJ, VALPRJ, CBS
FROM
PROG_T056
WHERE
S_PROG_NOM = :NEW.NUMCOMM;
-- log
Prclog('Codice progetto: '||PROJ);
Prclog('Codice valuta: '||VALPRJ);
Prclog('Codice CBS: '||CBS);
IF PROJ >= 0 THEN
-- CODICE COSTO
-- Controllo l'esistenza di un costo che abbia l'incrocio
-- corretto fra voce di spesa e attivit<69>
-- ELSPESA <--> S_NOME (voce dispesa ovvero nome del costo)
-- CODATTCM <--> TASK_UID (codice attivit<69>)
SELECT
NVL(COUNT(*),0)
INTO
NUMCOSTI
FROM
COSTO_AGRT_T022
WHERE
C_PROG = PROJ
AND S_NOME = :NEW.ELSPESA
AND TASK_UID = :NEW.CODATTCM;
-- 'SELECT NVL(P_COSTO,-1) INTO COSTO FROM COSTO_AGRT_T022 WHERE C_PROG = '||PROJ||' AND S_NOME = '||:NEW.ELSPESA||' AND TASK_UID = '||:NEW.CODATTCM||';';
IF NUMCOSTI = 0 THEN
-- Valori del costo
STIMA := 0;
BDG_REV := 0;
COMM := 0;
ACEM := 0;
CONS := 0;
CNTBZ := 0;
Prclog('Manca il costo ('||:NEW.ELSPESA||'), procedo all''inserimento.');
-- Codice costo
SELECT S022_P_COSTO.NEXTVAL INTO COSTO FROM dual;
Prclog('Nuovo codice costo: '||COSTO);
-- CODICE CURVA LINEARE (di default uso la curva lineare del progetto)
-- Il campo A_CRV_SIS indica il tipo di curva di sistema.
SELECT NVL(C_CRV, -1) INTO CODCURVA FROM CRV_DSBN_T013
WHERE
C_PROG = PROJ
AND A_CRV_SIS = 4;
Prclog('Codice curva lineare: '||CODCURVA);
-- DESCRIZIONE VOCE DI COSTO
-- Il campo nome contiene il codice della classe di costo,
-- Il campo descrizione contiene la descrizione della classe di costo
SELECT
NVL(S_CLASSE,'<Descrizione classe di costo>') INTO DESSPESA
FROM
CLASSE_DI_COSTO_T043
WHERE
C_CLASSE = :NEW.elspesa;
Prclog('Descrizione classe di costo: '||DESSPESA);
-- DATE RELATIVI ALL'ATTIVITA DI PROJECT
SELECT
NVL(TASK_BASE_START, SYSDATE()), NVL(TASK_BASE_FINISH, SYSDATE()), NVL(TASK_START_DATE, SYSDATE()), NVL(TASK_FINISH_DATE, SYSDATE())
INTO
BASEINI, BASEFIN, FORINI, FORFIN
FROM
MSP_TASKS
WHERE
PROJ_ID = PROJ
AND TASK_UID = :NEW.CODATTCM;
Prclog('Inizio: '||BASEINI||' Fine: '||BASEFIN||' Inizio forecast: '||FORINI||' Fine forecast: '||FORFIN);
-- CAMBIO DEL PROGETTO
SELECT NVL(I_CB_CONS, 1) INTO CAMBIOPRJ FROM VL_T011 WHERE C_VL = VALPRJ;
Prclog('Cambio: '||CAMBIOPRJ);
-- NODO CBS
-- Seleziono il nodo della CBS a cui associare il costo.
-- I nodi della CBS sono stati strutturati in modo che
-- rappresentino le voci di spesa del piano dei costi.
-- I primi due caratteri del nome del costo coincidono
-- con il nome della classe di costo inserita nella CBS.
-- es. voce di spesa (ELSPESA): 211 -- Emolumenti amministratori
-- Nella CBS andr<64> agganciata al nodo (C_ELMNT) 21 -- Stipendi
-- Si suppone che C_ELMNT sia univoco nella CBS. Non esiste per<65>
-- un indice nel database.
SELECT NVL(P_ELMNT,-1), NVL(T_CLASSE, 'C') INTO PELMNT, TCLASSE FROM
STRU_T087
WHERE
C_PROG = PROJ
AND C_STRU = CBS
AND C_ELMNT = SUBSTR(:NEW.ELSPESA,1,2);
--PRCLOG('SELECT NVL(P_ELMNT,-1) INTO PELMNT FROM STRU_T087 WHERE C_PROG = '||PROJ||' AND C_STRU = '''||CBS||''' AND C_ELMNT = SUBSTR('''||:NEW.ELSPESA||''',1,2);');
Prclog('Nodo ('||SUBSTR(:NEW.ELSPESA,1,2)||'): '||PELMNT);
IF PELMNT = -1 THEN
-- ATTACCO IL COSTO ALLA ROOT
SELECT NVL(P_ELMNT,-1) INTO PELMNT FROM
STRU_T087
WHERE
C_PROG = PROJ
AND C_STRU = CBS
AND P_ELMNT_PDR IS NULL;
TCLASSE := 'C';
Prclog('Nodo ('||SUBSTR(:NEW.ELSPESA,1,2)||') non trovato. Root: '||PELMNT);
END IF;
IF PELMNT >= 0 THEN
-- Inserimento
INSERT INTO COSTO_AGRT_T022
(C_PROG, P_COSTO, S_DES, C_VL, C_CRV, D_INI_ORIG, D_FIN_ORIG, D_INI_REVIS, D_FIN_REVIS, PROJ_UID, TASK_UID, F_EARNED, S_NOME, T_CLASSE)
VALUES
(PROJ, COSTO, DESSPESA, VALPRJ, CODCURVA, BASEINI, BASEFIN, FORINI, FORFIN, PROJ, :NEW.CODATTCM, 0, :NEW.ELSPESA, TCLASSE);
-- ASSOCIAZIONE ALLA CBS
INSERT INTO ASCN_STRU_T021
(C_PROG, P_ELMNT, P_COSTO)
VALUES
(PROJ, PELMNT, COSTO);
ELSE
Prclog('Impossibile trovare un nodo nella CBS per il costo ('||SUBSTR(:NEW.ELSPESA,1,2)||').');
END IF; -- pelmnt >= 0
ELSE -- NUMCOSTI = 0
-- il costo esiste: ottengo il codice, il tipo e la stima a completamento
SELECT
NVL(P_COSTO, -1), NVL(T_CLASSE,'C'), NVL(I_STIMA_CMPL, 0), NVL(I_BDG_REV, 0),
NVL(I_COMM, 0), NVL(I_ACEM, 0), NVL(I_CONS, 0), NVL(CNTBZ, 0)
INTO
COSTO, TCLASSE, STIMA, BDG_REV,
COMM, ACEM, CONS, CNTBZ
FROM
COSTO_AGRT_T022
WHERE
C_PROG = PROJ
AND S_NOME = :NEW.ELSPESA
AND TASK_UID = :NEW.CODATTCM;
Prclog('Codice costo: '||COSTO);
END IF;
IF COSTO >= 0 THEN
Prclog('Aggiornamento valori del costo ('||COSTO||').');
-- CAMBIO DEL PROGETTO
SELECT NVL(I_CB_CONS, 0) INTO CAMBIOPRJ FROM VL_T011 WHERE C_VL = VALPRJ;
Prclog('Valore cambio: '||CAMBIOPRJ );
IF CAMBIOPRJ > 0 THEN
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- ORDINE DI ACQUISTO
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'OA' THEN
Prclog ('Tipo documento: OA');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
UPDATE COSTO_AGRT_T022
SET
I_COMM = NVL(I_COMM,0) + NVL(:NEW.IMPVAL, 0),
I_COMM_VL = NVL(I_COMM_VL,0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_COMM_CURR = NVL(I_COMM_CURR,0) + NVL(:NEW.IMPVAL, 0),
I_COMM_CURR_VL = NVL(I_COMM_CURR_VL,0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
COMM := COMM + NVL(:NEW.IMPVAL, 0);
Prclog('Impeganto: '||COMM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- Se l'impegnato supera il budget aumento la stima a finire
IF COMM > STIMA THEN
Prclog('Aggiorno la stima a completamento.');
UPDATE COSTO_AGRT_T022
SET
I_STIMA_CMPL = COMM,
I_STIMA_CMPL_VL = COMM * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- BOLLA DI ENTRATA
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'BA' THEN
Prclog ('Tipo documento: BA');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
UPDATE COSTO_AGRT_T022
SET
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ACEM := ACEM + NVL(:NEW.IMPVAL, 0);
Prclog('Maturato: '||ACEM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- Se l'impegnato supera il budget aumento la stima a finire
IF ACEM > STIMA THEN
Prclog('Aggiorno la stima a completamento.');
UPDATE COSTO_AGRT_T022
SET
I_STIMA_CMPL = ACEM,
I_STIMA_CMPL_VL = ACEM * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- FATTURA DI ACQUISTO
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'FA' THEN
Prclog ('FA');
Prclog ('IMPORTO: '||NVL(:NEW.IMPVAL, 0));
UPDATE COSTO_AGRT_T022
SET
I_CONS = NVL(I_CONS, 0) + NVL(:NEW.IMPVAL, 0),
I_CONS_VL = NVL(I_CONS_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CONS_CURR = NVL(I_CONS_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CONS_CURR_VL = NVL(I_CONS_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
CONS := CONS + NVL(:NEW.IMPVAL, 0);
Prclog('Fatturato: '||CONS||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- Se l'impegnato supera il budget aumento la stima a finire
IF CONS > STIMA THEN
Prclog('Aggiorno la stima a completamento.');
UPDATE COSTO_AGRT_T022
SET
I_STIMA_CMPL = CONS,
I_STIMA_CMPL_VL = CONS * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- Movimento dalla contabilit<69> analitica
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'AN' THEN
Prclog ('Movimento dalla contabilit<69> analitica.');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Segno: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Classe: '||TCLASSE);
IF TCLASSE = 'C' THEN
-- Costo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Operazione: sommo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Operazione: sottraggo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
ELSE
-- Ricavo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Operazione: sottraggo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) - NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) - NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Operazione: sommo contabilizzato e maturato.');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM = NVL(I_ACEM, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_VL = NVL(I_ACEM_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_ACEM_CURR = NVL(I_ACEM_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_ACEM_CURR_VL = NVL(I_ACEM_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
END IF; -- T_CLASSE = 'C'
-- CNTBZ := CNTBZ + NVL(:NEW.IMPVAL, 0);
-- ACEM := ACEM + NVL(:NEW.IMPVAL, 0);
-- Prclog('Contabilizzato: '||CNTBZ||' Maturato: '||ACEM||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- -- Se il maturato o il contabilizzato superano il budget aumento la stima a finire
-- IF CNTBZ < ACEM THEN
-- CNTBZ := ACEM;
-- END IF;
-- IF (CNTBZ > STIMA) THEN
-- Prclog('Aggiorno la stima a completamento.');
-- UPDATE COSTO_AGRT_T022
-- SET
-- I_STIMA_CMPL = CNTBZ,
-- I_STIMA_CMPL_VL = CNTBZ * CAMBIOPRJ
-- WHERE
-- C_PROG = PROJ
-- AND P_COSTO = COSTO;
-- END IF;
:NEW.STATO_IMP := 'I';
END IF;
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
-- Movimento dalla contabilit<69> analitica derivante da un documento.
-- ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
IF TIPO = 'FM' THEN
Prclog ('Movimento dalla contabilit<69> analitica derivante da un documento.');
Prclog ('Importo: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Segno: '||NVL(:NEW.IMPVAL, 0));
Prclog ('Classe: '||TCLASSE);
IF TCLASSE = 'C' THEN
-- Costo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Contabilit<EFBFBD> analitica, Costo, Dare (+).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Contabilit<EFBFBD> analitica, Costo, Avere (-).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
ELSE
-- Ricavo
IF NVL(:NEW.SEGNO, 'D') = 'D' THEN
-- Dare
Prclog ('Contabilit<EFBFBD> analitica, Ricavo, Dare (-).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) - NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) - NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) - NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
ELSE
-- Avere
Prclog ('Contabilit<EFBFBD> analitica, Ricavo, Avere (+).');
UPDATE COSTO_AGRT_T022
SET
I_CNTBZ = NVL(I_CNTBZ, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_VL = NVL(I_CNTBZ_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_CNTBZ_CURR = NVL(I_CNTBZ_CURR, 0) + NVL(:NEW.IMPVAL, 0),
I_CNTBZ_CURR_VL = NVL(I_CNTBZ_CURR_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ,
I_STIMA_CMPL = NVL(I_STIMA_CMPL, 0) + NVL(:NEW.IMPVAL, 0),
I_STIMA_CMPL_VL = NVL(I_STIMA_CMPL_VL, 0) + NVL(:NEW.IMPVAL, 0) * CAMBIOPRJ
WHERE
C_PROG = PROJ
AND P_COSTO = COSTO;
END IF;
END IF; -- T_CLASSE = 'C'
-- CNTBZ := CNTBZ + NVL(:NEW.IMPVAL, 0);
--
-- Prclog('Contabilizzato: '||CNTBZ||' Budget: '||BDG_REV||' Stima a completamento: '||STIMA );
-- -- Se il maturato o il contabilizzato superano il budget aumento la stima a finire
-- IF (CNTBZ > STIMA) THEN
-- Prclog('Aggiorno la stima a completamento.');
-- UPDATE COSTO_AGRT_T022
-- SET
-- I_STIMA_CMPL = CNTBZ,
-- I_STIMA_CMPL_VL = CNTBZ * CAMBIOPRJ
-- WHERE
-- C_PROG = PROJ
-- AND P_COSTO = COSTO;
-- END IF;
:NEW.STATO_IMP := 'I';
END IF; -- TIPO = 'FM
ELSE
PrcLog('Cambio non trovato ('||VALPRJ||').');
END IF; -- CAMBIOPRJ > 0
END IF;
ELSE
Prclog ('Il nome del progetto ('||:NEW.NUMCOMM||') non <20> stato trovato.');
END IF; -- PROJ > 0
else -- Tipo documento
Prclog ('Manca il tipo documento.');
END IF; -- Tipo documento
EXCEPTION
WHEN OTHERS THEN
Prclog ('ERRORE: '|| SQLERRM(SQLCODE));
END;
/