expsigladb.Package.CNRMIG400_BODY.sql Maven / Gradle / Ivy
--------------------------------------------------------
-- DDL for Package Body CNRMIG400
--------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY "CNRMIG400" AS
-- =================================================================================================
-- Recupero del codice cds di CIR da SCI
-- =================================================================================================
PROCEDURE getUoCdsDaSci
(aCdTitSci VARCHAR2,
aCdUbicazioneSci VARCHAR2,
aEsercizio NUMBER,
aCdCds IN OUT VARCHAR2,
aCdUo IN OUT VARCHAR2
) IS
aRecUnitaOrganizzativa UNITA_ORGANIZZATIVA%ROWTYPE;
BEGIN
-- Recupero del codice unità organizzativa da CNR_TIT_UBICAZIONE_UO
BEGIN
SELECT cd_uo_cir INTO aCdUo
FROM CNR_TIT_UBICAZIONE_UO
WHERE cd_tit_sci = aCdTitSci AND
cd_ubicazione_sci = aCdUbicazioneSci;
EXCEPTION
WHEN others THEN
IBMERR001.RAISE_ERR_GENERICO ('Impossibile recuperare codice UO di CIR da CNR_TIT_UBICAZIONE_UO');
END;
-- Recupero dell'unità organizzativa valida
aRecUnitaOrganizzativa:=CNRCTB020.getUoValida(aEsercizio,
aCdUo);
-- Verifico che si tratti di UO
IF aRecUnitaOrganizzativa.fl_cds = 'Y' THEN
IBMERR001.RAISE_ERR_GENERICO ('E'' indicato un codice Cds invece di una UO in CNR_TIT_UBICAZIONE_UO');
END IF;
-- Valorizza Cds
aCdCds:=aRecUnitaOrganizzativa.cd_unita_padre;
END getUoCdsDaSci;
-- =================================================================================================
-- Controllo esistenza tipo ammortamento
-- =================================================================================================
PROCEDURE checkTiAmmortamento
(aCdCategoriaGruppo VARCHAR2,
aTiAmmortamento CHAR,
aEsercizio NUMBER
) IS
aRecAssTipoAmmCatGrupInvent ASS_TIPO_AMM_CAT_GRUP_INV%ROWTYPE;
BEGIN
SELECT * INTO aRecAssTipoAmmCatGrupInvent
FROM ASS_TIPO_AMM_CAT_GRUP_INV
WHERE ti_ammortamento = aTiAmmortamento AND
cd_categoria_gruppo = aCdCategoriaGruppo AND
esercizio_competenza = aEsercizio;
EXCEPTION
WHEN others THEN
IBMERR001.RAISE_ERR_GENERICO ('Impossibile validare il tipo ammortamento');
END checkTiAmmortamento;
-- =================================================================================================
-- Inserimento record CNR_INVENTARIO_BENI_MIG
-- =================================================================================================
PROCEDURE insCnrInventarioBeniMig
(aRecCnrInventarioBeniMig CNR_INVENTARIO_BENI_MIG%ROWTYPE) IS
BEGIN
INSERT INTO CNR_INVENTARIO_BENI_MIG
(pg_caricamento,
id_bene_origine,
fl_crea_bene,
cir_cd_cds,
cir_cd_uo,
cir_pg_inventario,
cir_nr_inventario,
cir_progressivo,
cir_ds_bene,
cir_cd_categoria_gruppo,
cir_ti_ammortamento,
cir_fl_ammortamento,
cir_cd_condizione_bene,
cir_ti_commerc_istituz,
cir_valore_iniziale,
cir_valore_ammortizzato,
cir_variazione_piu,
cir_variazione_meno,
cir_imponibile_ammortamento,
cir_cd_ubicazione,
cir_etichetta,
cir_esercizio_carico_bene,
cir_stato_coge,
cir_stato_coan,
stato,
dt_creazione)
VALUES (aRecCnrInventarioBeniMig.pg_caricamento,
aRecCnrInventarioBeniMig.id_bene_origine,
aRecCnrInventarioBeniMig.fl_crea_bene,
aRecCnrInventarioBeniMig.cir_cd_cds,
aRecCnrInventarioBeniMig.cir_cd_uo,
aRecCnrInventarioBeniMig.cir_pg_inventario,
aRecCnrInventarioBeniMig.cir_nr_inventario,
aRecCnrInventarioBeniMig.cir_progressivo,
aRecCnrInventarioBeniMig.cir_ds_bene,
aRecCnrInventarioBeniMig.cir_cd_categoria_gruppo,
aRecCnrInventarioBeniMig.cir_ti_ammortamento,
aRecCnrInventarioBeniMig.cir_fl_ammortamento,
aRecCnrInventarioBeniMig.cir_cd_condizione_bene,
aRecCnrInventarioBeniMig.cir_ti_commerc_istituz,
aRecCnrInventarioBeniMig.cir_valore_iniziale,
aRecCnrInventarioBeniMig.cir_valore_ammortizzato,
aRecCnrInventarioBeniMig.cir_variazione_piu,
aRecCnrInventarioBeniMig.cir_variazione_meno,
aRecCnrInventarioBeniMig.cir_imponibile_ammortamento,
aRecCnrInventarioBeniMig.cir_cd_ubicazione,
aRecCnrInventarioBeniMig.cir_etichetta,
aRecCnrInventarioBeniMig.cir_esercizio_carico_bene,
aRecCnrInventarioBeniMig.cir_stato_coge,
aRecCnrInventarioBeniMig.cir_stato_coan,
aRecCnrInventarioBeniMig.stato,
aRecCnrInventarioBeniMig.dt_creazione);
END insCnrInventarioBeniMig;
-- =================================================================================================
-- Inserimento record CNR_INVENTARIO_BENI_MIG_DETT
-- =================================================================================================
PROCEDURE insCnrInventarioBeniMigDett
(aPgCaricamento NUMBER,
aPgMovimento NUMBER,
aRecCnrInventarioBeniMigOri CNR_INVENTARIO_BENI_MIG_ORI%ROWTYPE) IS
BEGIN
INSERT INTO CNR_INVENTARIO_BENI_MIG_DETT
(pg_caricamento,
id_bene_origine,
pg_movimento,
cd_tit_sci,
cd_ubicazione_sci,
ti_movimento,
ds_bene,
cd_categoria_gruppo,
ti_ammortamento,
fl_ammortamento,
cd_condizione_bene,
importo,
fl_forza_valore_iniziale,
valore_ammortizzato,
esercizio_carico_bene,
esercizio_coep_bene)
VALUES (aPgCaricamento,
aRecCnrInventarioBeniMigOri.id_bene_origine,
aPgMovimento,
aRecCnrInventarioBeniMigOri.cd_tit_sci,
aRecCnrInventarioBeniMigOri.cd_ubicazione_sci,
aRecCnrInventarioBeniMigOri.ti_movimento,
aRecCnrInventarioBeniMigOri.ds_bene,
aRecCnrInventarioBeniMigOri.cd_categoria_gruppo,
aRecCnrInventarioBeniMigOri.ti_ammortamento,
aRecCnrInventarioBeniMigOri.fl_ammortamento,
aRecCnrInventarioBeniMigOri.cd_condizione_bene,
aRecCnrInventarioBeniMigOri.importo,
aRecCnrInventarioBeniMigOri.fl_forza_valore_iniziale,
aRecCnrInventarioBeniMigOri.valore_ammortizzato,
aRecCnrInventarioBeniMigOri.esercizio_carico_bene,
aRecCnrInventarioBeniMigOri.esercizio_coep_bene);
END insCnrInventarioBeniMigDett;
-- =================================================================================================
-- Inserimento record CNR_INVENTARIO_BENI_MIG_SCARTO
-- =================================================================================================
PROCEDURE insCnrInventarioBeniMigScarto
(aPgCaricamento NUMBER,
aPgMovimento NUMBER,
aData DATE,
aErrore VARCHAR2,
aRecCnrInventarioBeniMigOri CNR_INVENTARIO_BENI_MIG_ORI%ROWTYPE) IS
BEGIN
INSERT INTO CNR_INVENTARIO_BENI_MIG_SCARTO
(pg_caricamento,
id_bene_origine,
pg_movimento,
cd_tit_sci,
cd_ubicazione_sci,
ti_movimento,
ds_bene,
cd_categoria_gruppo,
ti_ammortamento,
fl_ammortamento,
cd_condizione_bene,
importo,
fl_forza_valore_iniziale,
valore_ammortizzato,
esercizio_carico_bene,
esercizio_coep_bene,
dt_creazione,
nota_errore)
VALUES (aPgCaricamento,
aRecCnrInventarioBeniMigOri.id_bene_origine,
aPgMovimento,
aRecCnrInventarioBeniMigOri.cd_tit_sci,
aRecCnrInventarioBeniMigOri.cd_ubicazione_sci,
aRecCnrInventarioBeniMigOri.ti_movimento,
aRecCnrInventarioBeniMigOri.ds_bene,
aRecCnrInventarioBeniMigOri.cd_categoria_gruppo,
aRecCnrInventarioBeniMigOri.ti_ammortamento,
aRecCnrInventarioBeniMigOri.fl_ammortamento,
aRecCnrInventarioBeniMigOri.cd_condizione_bene,
aRecCnrInventarioBeniMigOri.importo,
aRecCnrInventarioBeniMigOri.fl_forza_valore_iniziale,
aRecCnrInventarioBeniMigOri.valore_ammortizzato,
aRecCnrInventarioBeniMigOri.esercizio_carico_bene,
aRecCnrInventarioBeniMigOri.esercizio_coep_bene,
aData,
aErrore);
END insCnrInventarioBeniMigScarto;
-- =================================================================================================
-- Controllo globale di consistenza importi
-- =================================================================================================
PROCEDURE checkConsistenzaImporti
(inImAssestato NUMBER,
inImImponibileAmmortamento NUMBER,
inImValoreAmmortizzato NUMBER
) IS
BEGIN
IF (inImAssestato < 0 OR
inImImponibileAmmortamento < 0 OR
inImValoreAmmortizzato < 0) THEN
IBMERR001.RAISE_ERR_GENERICO
('L''assestato o l''imponibile ammortamento o il valore ammortizzato risultano negativi');
END IF;
IF inImImponibileAmmortamento > inImAssestato THEN
IBMERR001.RAISE_ERR_GENERICO
('L''imponibile ammortamento risulta superiore all''assestato');
END IF;
IF inImValoreAmmortizzato > inImImponibileAmmortamento THEN
IBMERR001.RAISE_ERR_GENERICO
('Il valore ammortizzato non può essere superiore all''imponibile ammortamento');
END IF;
END checkConsistenzaImporti;
-- =================================================================================================
-- Controllo globale di consistenza importi
-- =================================================================================================
PROCEDURE checkConsistenzaImportiBase
(aRecCnrInventarioBeniMig CNR_INVENTARIO_BENI_MIG%ROWTYPE,
aRecInventarioBeni INVENTARIO_BENI%ROWTYPE,
aFlEsisteCarico CHAR
) IS
aImAssestato NUMBER(15,2);
aImImponibileAmmortamento NUMBER(15,2);
aImValoreAmmortizzato NUMBER(15,2);
BEGIN
aImAssestato:=aRecCnrInventarioBeniMig.cir_valore_iniziale + aRecCnrInventarioBeniMig.cir_variazione_piu -
aRecCnrInventarioBeniMig.cir_variazione_meno;
aImImponibileAmmortamento:=aRecCnrInventarioBeniMig.cir_imponibile_ammortamento;
aImValoreAmmortizzato:=aRecCnrInventarioBeniMig.cir_valore_ammortizzato;
IF aFlEsisteCarico = 'N' THEN
aImAssestato:=aImAssestato + aRecInventarioBeni.valore_iniziale + aRecInventarioBeni.variazione_piu -
aRecInventarioBeni.variazione_meno;
aImImponibileAmmortamento:=aImImponibileAmmortamento + aRecInventarioBeni.imponibile_ammortamento;
aImValoreAmmortizzato:=aImValoreAmmortizzato + aRecInventarioBeni.valore_ammortizzato;
END IF;
checkConsistenzaImporti(aImAssestato,
aImImponibileAmmortamento,
aImValoreAmmortizzato);
END checkConsistenzaImportiBase;
-- =================================================================================================
-- Cancellazione record da CNR_INVENTARIO_BENI_MIG_ORI
-- =================================================================================================
PROCEDURE delCnrInventarioBeniMigOri
(aPgCaricamento NUMBER) IS
aConta INTEGER;
aIdBeneOrigine VARCHAR2(30);
gen_cv GenericCurTyp;
BEGIN
aConta:=0;
-------------------------------------------------------------------------------------------------
-- Cancellazione da CNR_INVENTARIO_BENI_MIG
BEGIN
OPEN gen_cv FOR
SELECT id_bene_origine
FROM CNR_INVENTARIO_BENI_MIG
WHERE pg_caricamento = aPgCaricamento;
LOOP
FETCH gen_cv INTO
aIdBeneOrigine;
EXIT WHEN gen_cv%NOTFOUND;
aConta:=aConta + 1;
DELETE FROM CNR_INVENTARIO_BENI_MIG_ORI
WHERE id_bene_origine = aIdBeneOrigine;
IF aConta > 200 THEN
COMMIT;
END IF;
END LOOP;
CLOSE gen_cv;
COMMIT;
END;
-------------------------------------------------------------------------------------------------
-- Cancellazione da CNR_INVENTARIO_BENI_MIG
aConta:=0;
BEGIN
OPEN gen_cv FOR
SELECT DISTINCT id_bene_origine
FROM CNR_INVENTARIO_BENI_MIG_SCARTO
WHERE pg_caricamento = aPgCaricamento;
LOOP
FETCH gen_cv INTO
aIdBeneOrigine;
EXIT WHEN gen_cv%NOTFOUND;
aConta:=aConta + 1;
DELETE FROM CNR_INVENTARIO_BENI_MIG_ORI
WHERE id_bene_origine = aIdBeneOrigine;
IF aConta > 200 THEN
COMMIT;
END IF;
END LOOP;
CLOSE gen_cv;
COMMIT;
END;
END delCnrInventarioBeniMigOri;
-- =================================================================================================
-- Esecuzione migrazione base
-- =================================================================================================
PROCEDURE eseguiMigraBeniBase
(aPgCaricamento NUMBER
) IS
flEsisteCarico CHAR(1);
eseguiLock CHAR(1);
aCdCds UNITA_ORGANIZZATIVA.cd_unita_organizzativa%TYPE;
aCdUo UNITA_ORGANIZZATIVA.cd_unita_organizzativa%TYPE;
aPgInventario NUMBER(10);
aEsercizio NUMBER(4);
i BINARY_INTEGER;
aRecInventarioBeni INVENTARIO_BENI%ROWTYPE;
aRecCnrInventarioBeniMig CNR_INVENTARIO_BENI_MIG%ROWTYPE;
aRecCnrInventarioBeniMigDett CNR_INVENTARIO_BENI_MIG_DETT%ROWTYPE;
aRecCategoriaGruppoInvent CATEGORIA_GRUPPO_INVENT%ROWTYPE;
aRecUbicazioneBene UBICAZIONE_BENE%ROWTYPE;
BEGIN
-------------------------------------------------------------------------------------------------
-- Inizializzazioni
flEsisteCarico:='N';
eseguiLock:='Y';
aCdCds:=NULL;
aCdUo:=NULL;
aRecInventarioBeni:=NULL;
aRecCnrInventarioBeniMig:=NULL;
aRecCnrInventarioBeniMigDett:=NULL;
-------------------------------------------------------------------------------------------------
-- Controlli base
-- Controllo che la matrice beni sia piena
IF beniDaMigrareOri_tab.COUNT = 0 THEN
IBMERR001.RAISE_ERR_GENERICO ('Matrice gruppo beni da migrare vuota');
END IF;
-- Si controlla se il primo record riguarda un carico o una variazione di valore
IF (beniDaMigrareOri_tab(1).ti_movimento IS NULL OR
(beniDaMigrareOri_tab(1).ti_movimento != 'C' AND
beniDaMigrareOri_tab(1).ti_movimento != 'V')) THEN
IBMERR001.RAISE_ERR_GENERICO ('L''attributo ti_movimento del primo record non è correttamente valorizzato (C/V)');
ELSE
IF beniDaMigrareOri_tab(1).ti_movimento = 'C' THEN
flEsisteCarico:='Y';
END IF;
END IF;
-- Recupero il record bene con parametro id_bene_origine.
-- Se non esiste carico allora deve esistere il bene altrimenti il bene non deve esistere
IF flEsisteCarico = 'N' THEN
aRecInventarioBeni:=CNRCTB400.getInventarioBeni(beniDaMigrareOri_tab(1).id_bene_origine,
eseguiLock);
ELSE
IF CNRCTB400.checkEsisteBene(beniDaMigrareOri_tab(1).id_bene_origine) = 'Y' THEN
IBMERR001.RAISE_ERR_GENERICO
('Esiste un record per carico bene e lo stesso id_bene_origine è già presente in INVENTARIO_BENI');
END IF;
END IF;
-- Recupero dell'esercizio
IF flEsisteCarico = 'N' THEN
aEsercizio:=aRecInventarioBeni.esercizio_carico_bene;
ELSE
IF beniDaMigrareOri_tab(1).esercizio_coep_bene < 2004 THEN
IBMERR001.RAISE_ERR_GENERICO ('La migrazione beni deve riferirsi alla COEP almeno per l''esercizio 2004');
ELSE
aEsercizio:=beniDaMigrareOri_tab(1).esercizio_coep_bene;
END IF;
END IF;
-------------------------------------------------------------------------------------------------
-- Recupero Cds, UO e pg_inventario
getUoCdsDaSci(beniDaMigrareOri_tab(1).cd_tit_sci,
beniDaMigrareOri_tab(1).cd_ubicazione_sci,
aEsercizio,
aCdCds,
aCdUo);
aPgInventario:=CNRCTB400.getPgInventario(aCdCds,
aCdUo);
IF (flEsisteCarico = 'N' AND
aPgInventario != aRecInventarioBeni.pg_inventario) THEN
IBMERR001.RAISE_ERR_GENERICO
('L''identificativo inventario definito dalla variazione in caricamento è diverso da quello ' ||
'del bene referenziato');
END IF;
-------------------------------------------------------------------------------------------------
-- Composizione base del record di CNR_INVENTARIO_BENI_MIG
aRecCnrInventarioBeniMig.pg_caricamento:=aPgCaricamento;
aRecCnrInventarioBeniMig.id_bene_origine:=beniDaMigrareOri_tab(1).id_bene_origine;
aRecCnrInventarioBeniMig.cir_cd_cds:=aCdCds;
aRecCnrInventarioBeniMig.cir_cd_uo:=aCdUo;
aRecCnrInventarioBeniMig.cir_pg_inventario:=aPgInventario;
aRecCnrInventarioBeniMig.cir_valore_iniziale:=0;
aRecCnrInventarioBeniMig.cir_valore_ammortizzato:=0;
aRecCnrInventarioBeniMig.cir_variazione_piu:=0;
aRecCnrInventarioBeniMig.cir_variazione_meno:=0;
aRecCnrInventarioBeniMig.cir_imponibile_ammortamento:=0;
aRecCnrInventarioBeniMig.cir_esercizio_carico_bene:=aEsercizio;
aRecCnrInventarioBeniMig.cir_stato_coge:=CNRCTB100.STATO_COEP_EXC;
aRecCnrInventarioBeniMig.cir_stato_coan:=CNRCTB100.STATO_COEP_EXC;
aRecCnrInventarioBeniMig.stato:=STATO_INIZIALE;
aRecCnrInventarioBeniMig.dt_creazione:=dataOdierna;
IF flEsisteCarico = 'N' THEN
aRecCnrInventarioBeniMig.fl_crea_bene:='N';
aRecCnrInventarioBeniMig.cir_nr_inventario:=aRecInventarioBeni.nr_inventario;
aRecCnrInventarioBeniMig.cir_progressivo:=aRecInventarioBeni.progressivo;
aRecCnrInventarioBeniMig.cir_ds_bene:=aRecInventarioBeni.ds_bene;
aRecCnrInventarioBeniMig.cir_cd_categoria_gruppo:=aRecInventarioBeni.cd_categoria_gruppo;
aRecCnrInventarioBeniMig.cir_ti_ammortamento:=aRecInventarioBeni.ti_ammortamento;
aRecCnrInventarioBeniMig.cir_fl_ammortamento:=aRecInventarioBeni.fl_ammortamento;
aRecCnrInventarioBeniMig.cir_cd_ubicazione:=aRecInventarioBeni.cd_ubicazione;
aRecCnrInventarioBeniMig.cir_etichetta:=aRecInventarioBeni.etichetta;
aRecCnrInventarioBeniMig.cir_cd_condizione_bene:=aRecInventarioBeni.cd_condizione_bene;
aRecCnrInventarioBeniMig.cir_ti_commerc_istituz:=aRecInventarioBeni.ti_commerciale_istituzionale;
ELSE
aRecCnrInventarioBeniMig.fl_crea_bene:='Y';
aRecCnrInventarioBeniMig.cir_nr_inventario:=0;
aRecCnrInventarioBeniMig.cir_progressivo:=0;
-- Controllo descrizione bene
IF beniDaMigrareOri_tab(1).ds_bene IS NULL THEN
IBMERR001.RAISE_ERR_GENERICO ('Manca l''indicazione della descrizione del bene');
ELSE
aRecCnrInventarioBeniMig.cir_ds_bene:=beniDaMigrareOri_tab(1).ds_bene;
END IF;
-- Controllo categoria gruppo
aRecCategoriaGruppoInvent:=CNRCTB400.getCategoriaGruppoInvent(beniDaMigrareOri_tab(1).cd_categoria_gruppo);
IF aRecCategoriaGruppoInvent.fl_gestione_inventario = 'N' THEN
IBMERR001.RAISE_ERR_GENERICO ('La categoria gruppo di riferimento non è per gestione inventario');
ELSE
IF aRecCategoriaGruppoInvent.livello = 0 THEN
IBMERR001.RAISE_ERR_GENERICO ('Deve essere indicata una categoria gruppo e non una categoria inventariale');
ELSE
aRecCnrInventarioBeniMig.cir_cd_categoria_gruppo:=aRecCategoriaGruppoInvent.cd_categoria_gruppo;
END IF;
END IF;
-- Controllo flag ammortamento
IF beniDaMigrareOri_tab(1).fl_ammortamento IS NULL THEN
aRecCnrInventarioBeniMig.cir_fl_ammortamento:=aRecCategoriaGruppoInvent.fl_ammortamento;
ELSE
IF (beniDaMigrareOri_tab(1).fl_ammortamento = 'Y' AND
aRecCategoriaGruppoInvent.fl_ammortamento = 'N') THEN
IBMERR001.RAISE_ERR_GENERICO
('Il bene è definito come ammortizzabile in una categoria gruppo che non è ammortizzabile');
ELSE
aRecCnrInventarioBeniMig.cir_fl_ammortamento:=beniDaMigrareOri_tab(1).fl_ammortamento;
END IF;
END IF;
-- Controllo tipo ammortamento
IF beniDaMigrareOri_tab(1).ti_ammortamento IS NULL THEN
aRecCnrInventarioBeniMig.cir_ti_ammortamento:=beniDaMigrareOri_tab(1).ti_ammortamento;
ELSE
IF aRecCnrInventarioBeniMig.cir_fl_ammortamento = 'N' THEN
IBMERR001.RAISE_ERR_GENERICO
('E'' stato definito un tipo ammortamento per un bene che non deve essere ammortizzato');
ELSE
checkTiAmmortamento(aRecCnrInventarioBeniMig.cir_cd_categoria_gruppo,
beniDaMigrareOri_tab(1).ti_ammortamento,
aEsercizio);
aRecCnrInventarioBeniMig.cir_ti_ammortamento:=beniDaMigrareOri_tab(1).ti_ammortamento;
END IF;
END IF;
-- Ubicazione
aRecCnrInventarioBeniMig.cir_cd_ubicazione:=CNRCTB400.getCdUbicazioneDefault(aCdCds,
aCdUo);
-- Etichetta
aRecCnrInventarioBeniMig.cir_etichetta:=aCdUo || '-' || beniDaMigrareOri_tab(1).id_bene_origine || '-000';
-- Condizione bene
IF beniDaMigrareOri_tab(1).cd_condizione_bene IS NULL THEN
aRecCnrInventarioBeniMig.cir_cd_condizione_bene:=CONDIZIONE_BENE_DEFAULT;
ELSE
aRecCnrInventarioBeniMig.cir_cd_condizione_bene:=beniDaMigrareOri_tab(1).cd_condizione_bene;
END IF;
-- Commerciale/Istituzionale
aRecCnrInventarioBeniMig.cir_ti_commerc_istituz:=CNRCTB100.TI_ISTITUZIONALE;
END IF;
-------------------------------------------------------------------------------------------------
-- Inserimento record su CNR_INVENTARIO_BENI_MIG
insCnrInventarioBeniMig(aRecCnrInventarioBeniMig);
-------------------------------------------------------------------------------------------------
-- Ciclo lettura matrice beni in migrazione
FOR i IN 1 .. beniDaMigrareOri_tab.COUNT
LOOP
-- Controllo importo a zero
IF beniDaMigrareOri_tab(i).importo = 0 THEN
IBMERR001.RAISE_ERR_GENERICO ('Importo a zero non ammesso');
END IF;
-- Valorizzo valore iniziale e variazioni più e meno
IF beniDaMigrareOri_tab(i).ti_movimento = 'C' THEN
IF beniDaMigrareOri_tab(i).importo < 0 THEN
IBMERR001.RAISE_ERR_GENERICO ('L''importo definito per un movimento di carico non può essere negativo');
END IF;
aRecCnrInventarioBeniMig.cir_valore_iniziale:=aRecCnrInventarioBeniMig.cir_valore_iniziale +
beniDaMigrareOri_tab(i).importo;
ELSE
IF beniDaMigrareOri_tab(i).fl_forza_valore_iniziale = 'Y' THEN
aRecCnrInventarioBeniMig.cir_valore_iniziale:=aRecCnrInventarioBeniMig.cir_valore_iniziale +
beniDaMigrareOri_tab(i).importo;
ELSE
IF beniDaMigrareOri_tab(i).importo < 0 THEN
aRecCnrInventarioBeniMig.cir_variazione_meno:=aRecCnrInventarioBeniMig.cir_variazione_meno +
ABS(beniDaMigrareOri_tab(i).importo);
ELSE
aRecCnrInventarioBeniMig.cir_variazione_piu:=aRecCnrInventarioBeniMig.cir_variazione_piu +
beniDaMigrareOri_tab(i).importo;
END IF;
END IF;
END IF;
-- Imponibile ammortamento. E' pari all'assestato valore iniziale + variazioni solo per i beni dal
-- 2000 in avanti e se il bene è ammortizzabile
IF beniDaMigrareOri_tab(i).esercizio_carico_bene > 1999 THEN
IF flEsisteCarico = 'N' THEN
IF aRecInventarioBeni.fl_ammortamento = 'Y' THEN
aRecCnrInventarioBeniMig.cir_imponibile_ammortamento:=aRecCnrInventarioBeniMig.cir_imponibile_ammortamento +
beniDaMigrareOri_tab(i).importo;
END IF;
ELSE
IF aRecCnrInventarioBeniMig.cir_fl_ammortamento = 'Y' THEN
aRecCnrInventarioBeniMig.cir_imponibile_ammortamento:=aRecCnrInventarioBeniMig.cir_imponibile_ammortamento +
beniDaMigrareOri_tab(i).importo;
END IF;
END IF;
END IF;
-- Valore ammortizzato. Si legge solo per i beni con esercizio carico dal 2000 in avanti e se il bene è
-- ammortizzabile
IF beniDaMigrareOri_tab(i).esercizio_carico_bene > 1999 THEN
IF beniDaMigrareOri_tab(i).valore_ammortizzato != 0 THEN
IF flEsisteCarico = 'N' THEN
IF aRecInventarioBeni.fl_ammortamento = 'Y' THEN
aRecCnrInventarioBeniMig.cir_valore_ammortizzato:=aRecCnrInventarioBeniMig.cir_valore_ammortizzato +
beniDaMigrareOri_tab(i).valore_ammortizzato;
ELSE
IBMERR001.RAISE_ERR_GENERICO ('E'' definito un importo ammortizzato per un bene non ammortizzabile');
END IF;
ELSE
IF aRecCnrInventarioBeniMig.cir_fl_ammortamento = 'Y' THEN
aRecCnrInventarioBeniMig.cir_valore_ammortizzato:=aRecCnrInventarioBeniMig.cir_valore_ammortizzato +
beniDaMigrareOri_tab(i).valore_ammortizzato;
ELSE
IBMERR001.RAISE_ERR_GENERICO ('E'' definito un importo ammortizzato per un bene non ammortizzabile');
END IF;
END IF;
END IF;
END IF;
-- Inserimento record in CNR_INVENTARIO_BENI_MIG_DETT
insCnrInventarioBeniMigDett(aPgCaricamento,
i,
beniDaMigrareOri_tab(i));
END LOOP;
-------------------------------------------------------------------------------------------------
-- Controllo globale di consistenza includendo anche il valore presente sul bene
checkConsistenzaImportiBase(aRecCnrInventarioBeniMig,
aRecInventarioBeni,
flEsisteCarico);
-------------------------------------------------------------------------------------------------
-- Aggiornamento dei campi valore su CNR_INVENTARIO_BENI_MIG
BEGIN
UPDATE CNR_INVENTARIO_BENI_MIG
SET cir_valore_iniziale = aRecCnrInventarioBeniMig.cir_valore_iniziale,
cir_variazione_piu = aRecCnrInventarioBeniMig.cir_variazione_piu,
cir_variazione_meno = aRecCnrInventarioBeniMig.cir_variazione_meno,
cir_imponibile_ammortamento = aRecCnrInventarioBeniMig.cir_imponibile_ammortamento,
cir_valore_ammortizzato = aRecCnrInventarioBeniMig.cir_valore_ammortizzato
WHERE pg_caricamento = aRecCnrInventarioBeniMig.pg_caricamento AND
id_bene_origine = aRecCnrInventarioBeniMig.id_bene_origine;
EXCEPTION
WHEN others THEN
IBMERR001.RAISE_ERR_GENERICO ('Errore in aggiornamento valori su CNR_INVENTARIO_BENI_MIG');
END;
COMMIT;
END eseguiMigraBeniBase;
-- =================================================================================================
-- Esecuzione scarto migrazione base
-- =================================================================================================
PROCEDURE eseguiScartoBeniBase
(aPgCaricamento NUMBER,
aErrore VARCHAR2,
aNumero NUMBER
) IS
i BINARY_INTEGER;
BEGIN
FOR i IN 1 .. beniDaMigrareOri_tab.COUNT
LOOP
insCnrInventarioBeniMigScarto(aPgCaricamento,
aNUmero + i,
dataOdierna,
aErrore,
beniDaMigrareOri_tab(i));
END LOOP;
COMMIT;
END eseguiScartoBeniBase;
-- =================================================================================================
-- Caricamento dati sulla tabella di appoggio CNR_INVENTARIO_BENI_MIG con i dati presenti nella tabella
-- CNR_INVENTARIO_BENI_MIG_ORI
-- =================================================================================================
PROCEDURE caricaBeniBase
(aPgCaricamento NUMBER,
aNumRecLetto IN OUT NUMBER,
aNumRecScritto IN OUT NUMBER,
aNumRecScarto IN OUT NUMBER
) IS
memIdBeneOrigine CNR_INVENTARIO_BENI_MIG_ORI.id_bene_origine%TYPE;
aFlMigrazione CHAR(1);
aMessaggioErrore VARCHAR2(4000);
i BINARY_INTEGER;
aRecCnrInventarioBeniMigOri CNR_INVENTARIO_BENI_MIG_ORI%ROWTYPE;
gen_cv GenericCurTyp;
BEGIN
-------------------------------------------------------------------------------------------------
-- Valorizzazioni iniziali
memIdBeneOrigine:=NULL;
-------------------------------------------------------------------------------------------------
-- Ciclo principale lettura CNR_INVENTARIO_BENI_MIG_ORI
BEGIN
OPEN gen_cv FOR
SELECT *
FROM CNR_INVENTARIO_BENI_MIG_ORI
ORDER BY id_bene_origine,
ti_movimento;
LOOP
BEGIN
FETCH gen_cv INTO
aRecCnrInventarioBeniMigOri;
EXIT WHEN gen_cv%NOTFOUND;
aNumRecLetto:=aNumRecLetto + 1;
-- E' il primo record letto
IF memIdBeneOrigine IS NULL THEN
memIdBeneOrigine:=aRecCnrInventarioBeniMigOri.id_bene_origine;
beniDaMigrareOri_tab.DELETE;
i:=0;
END IF;
-- Se l'identificativo del bene origine è diverso da quello memorizzato allora indico l'esecuzione
-- della migrazione
IF aRecCnrInventarioBeniMigOri.id_bene_origine != memIdBeneOrigine THEN
aFlMigrazione:='Y';
END IF;
-- Esecuzione della migrazione e azzeramento della tabella per memorizzare la nuova occorrenza
BEGIN
IF aFlMigrazione = 'Y' THEN
eseguiMigraBeniBase(aPgCaricamento);
aNumRecScritto:=aNumRecScritto + beniDaMigrareOri_tab.COUNT;
beniDaMigrareOri_tab.DELETE;
i:=0;
END IF;
EXCEPTION
WHEN others THEN
aMessaggioErrore:=SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK,1,3900);
ROLLBACK;
eseguiScartoBeniBase(aPgCaricamento,
aMessaggioErrore,
aNumRecScarto);
aNumRecScarto:=aNumRecScarto + beniDaMigrareOri_tab.COUNT;
beniDaMigrareOri_tab.DELETE;
i:=0;
END;
-- Memorizzo sulla tabella di appoggio i beni
aFlMigrazione:='N';
i:=i + 1;
memIdBeneOrigine:=aRecCnrInventarioBeniMigOri.id_bene_origine;
beniDaMigrareOri_tab(i).cd_tit_sci:=aRecCnrInventarioBeniMigOri.cd_tit_sci;
beniDaMigrareOri_tab(i).cd_ubicazione_sci:=aRecCnrInventarioBeniMigOri.cd_ubicazione_sci;
beniDaMigrareOri_tab(i).id_bene_origine:=aRecCnrInventarioBeniMigOri.id_bene_origine;
beniDaMigrareOri_tab(i).ti_movimento:=aRecCnrInventarioBeniMigOri.ti_movimento;
beniDaMigrareOri_tab(i).ds_bene:=aRecCnrInventarioBeniMigOri.ds_bene;
beniDaMigrareOri_tab(i).cd_categoria_gruppo:=aRecCnrInventarioBeniMigOri.cd_categoria_gruppo;
beniDaMigrareOri_tab(i).esercizio_carico_bene:=aRecCnrInventarioBeniMigOri.esercizio_carico_bene;
beniDaMigrareOri_tab(i).esercizio_coep_bene:=aRecCnrInventarioBeniMigOri.esercizio_coep_bene;
beniDaMigrareOri_tab(i).importo:=aRecCnrInventarioBeniMigOri.importo;
beniDaMigrareOri_tab(i).fl_forza_valore_iniziale:=aRecCnrInventarioBeniMigOri.fl_forza_valore_iniziale;
beniDaMigrareOri_tab(i).valore_ammortizzato:=aRecCnrInventarioBeniMigOri.valore_ammortizzato;
beniDaMigrareOri_tab(i).ti_ammortamento:=aRecCnrInventarioBeniMigOri.ti_ammortamento;
beniDaMigrareOri_tab(i).fl_ammortamento:=aRecCnrInventarioBeniMigOri.fl_ammortamento;
beniDaMigrareOri_tab(i).cd_condizione_bene:=aRecCnrInventarioBeniMigOri.cd_condizione_bene;
END;
END LOOP;
CLOSE gen_cv;
BEGIN
eseguiMigraBeniBase(aPgCaricamento);
aNumRecScritto:=aNumRecScritto + beniDaMigrareOri_tab.COUNT;
beniDaMigrareOri_tab.DELETE;
i:=0;
EXCEPTION
WHEN others THEN
aMessaggioErrore:=SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK,1,3900);
ROLLBACK;
eseguiScartoBeniBase(aPgCaricamento,
aMessaggioErrore,
aNumRecScarto);
aNumRecScarto:=aNumRecScarto + beniDaMigrareOri_tab.COUNT;
beniDaMigrareOri_tab.DELETE;
i:=0;
END;
END;
END caricaBeniBase;
-- =================================================================================================
-- Main prima fase della migrazione beni.
-- Caricamento dati sulla tabella di appoggio CNR_INVENTARIO_BENI_MIG da CNR_INVENTARIO_BENI_MIG_ORI
-- =================================================================================================
PROCEDURE migrazioneBeniBase IS
aPgCaricamento NUMBER(10);
aPgLog INTEGER;
aNumRecLetto NUMBER(10);
aNumRecScritto NUMBER(10);
aNumRecScarto NUMBER(10);
BEGIN
-------------------------------------------------------------------------------------------------
-- Valorizzazioni iniziali
dataOdierna:=SYSDATE;
aEsercizioBase:=TO_NUMBER(TO_CHAR(dataOdierna,'YYYY'));
aNumRecLetto:=0;
aNumRecScritto:=0;
aNumRecScarto:=0;
-------------------------------------------------------------------------------------------------
-- Recupero informazioni base
-- Acquisizione semaforo applicativo
CNRCTB800.acquisisciSemStaticoCds(0, '*', SEMAFORO, aUtente);
-- Recupero progressivo log
aPgLog:= IBMUTL200.LOGSTART('MIGRAZIONE INVENTARIO - FASE BASE' , aUtente, NULL, NULL);
-- Recupero del progressivo di caricamento. Si recupera il valore da CNR_INVENTARIO_BENI_MIG e
-- da CNR_INVENTARIO_BENI_MIG_SCARTO e si seleziona il maggiore dei due
SELECT MAX(valore) INTO aPgCaricamento
FROM (SELECT NVL(MAX(pg_caricamento),0) valore
FROM CNR_INVENTARIO_BENI_MIG
UNION ALL
SELECT NVL(MAX(pg_caricamento),0) valore
FROM CNR_INVENTARIO_BENI_MIG_SCARTO);
aPgCaricamento:=aPgCaricamento + 1;
-------------------------------------------------------------------------------------------------
-- Migrazione beni
caricaBeniBase(aPgCaricamento,
aNumRecLetto,
aNumRecScritto,
aNumRecScarto);
-- Controllo esecuzione della migrazione
IF aNumRecLetto = 0 THEN
IBMERR001.RAISE_ERR_GENERICO
('Nessun record elaborato, non sono stati trovati beni in CNR_INVENTARIO_BENI_MIG_ORI');
END IF;
COMMIT;
-- Messaggio di operazione completata ad utente
IF aNumRecScarto = 0 THEN
IBMUTL200.logInf(aPgLog,
FASE_UNO || ' ' || TO_CHAR(dataOdierna,'DD/MM/YYYY HH:MI:SS') || ' ' ||
'Operazione completata con successo',
'Record letti ' || LPAD(aNumRecLetto,10,' ') || ' ' ||
'Record scritti ' || LPAD(aNumRecScritto,10,' ') || ' ' ||
'Record scartati ' || LPAD(aNumRecScarto,10,' '),
NULL);
ELSE
IBMUTL200.logWar(aPgLog,
FASE_UNO || ' ' || TO_CHAR(dataOdierna,'DD/MM/YYYY HH:MI:SS') || ' ' ||
'Operazione completata con successo ma con errori',
'Record letti ' || LPAD(aNumRecLetto,10,' ') || ' ' ||
'Record scritti ' || LPAD(aNumRecScritto,10,' ') || ' ' ||
'Record scartati ' || LPAD(aNumRecScarto,10,' '),
NULL);
END IF;
-- Cancellazione record da CNR_INVENTARIO_BENI_MIG_ORI
delCnrInventarioBeniMigOri(aPgCaricamento);
CNRCTB800.liberaSemStaticoCds(0, '*', SEMAFORO, aUtente);
EXCEPTION
WHEN others THEN
ROLLBACK;
IBMUTL200.LOGERR(aPgLog,
FASE_UNO || ' ' || TO_CHAR(dataOdierna,'DD/MM/YYYY HH:MI:SS') || ' ' ||
'Operazione in errore',
SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK,1,3900),
NULL);
delCnrInventarioBeniMigOri(aPgCaricamento);
CNRCTB800.liberaSemStaticoCds(0, '*', SEMAFORO, aUtente);
END migrazioneBeniBase;
-- =================================================================================================
-- Esecuzione scarto migrazione completa
-- =================================================================================================
PROCEDURE eseguiScartoBeniCompleta
(aPgCaricamento NUMBER,
aErrore VARCHAR2
) IS
aPgMovimento NUMBER(10);
i BINARY_INTEGER;
aRecCnrInventarioBeniMigDett CNR_INVENTARIO_BENI_MIG_DETT%ROWTYPE;
aRecCnrInventarioBeniMigOri CNR_INVENTARIO_BENI_MIG_ORI%ROWTYPE;
gen_cv_b GenericCurTyp;
BEGIN
-- Recupero del valore massimo del pg_movimento in scarico
BEGIN
SELECT NVL(MAX(pg_movimento),0) INTO aPgMovimento
FROM CNR_INVENTARIO_BENI_MIG_SCARTO
WHERE pg_caricamento = aPgCaricamento;
END;
-- Ciclo per scarto beni
FOR i IN 1 .. beniDaMigrare_tab.COUNT
LOOP
OPEN gen_cv_b FOR
SELECT *
FROM CNR_INVENTARIO_BENI_MIG_DETT
WHERE pg_caricamento = beniDaMigrare_tab(i).pg_caricamento AND
id_bene_origine = beniDaMigrare_tab(i).id_bene_origine
ORDER BY pg_caricamento,
id_bene_origine,
pg_movimento;
LOOP
FETCH gen_cv_b INTO
aRecCnrInventarioBeniMigDett;
EXIT WHEN gen_cv_b%NOTFOUND;
aRecCnrInventarioBeniMigOri.cd_tit_sci:=aRecCnrInventarioBeniMigDett.cd_tit_sci;
aRecCnrInventarioBeniMigOri.cd_ubicazione_sci:=aRecCnrInventarioBeniMigDett.cd_ubicazione_sci;
aRecCnrInventarioBeniMigOri.id_bene_origine:=aRecCnrInventarioBeniMigDett.id_bene_origine;
aRecCnrInventarioBeniMigOri.ti_movimento:=aRecCnrInventarioBeniMigDett.ti_movimento;
aRecCnrInventarioBeniMigOri.ds_bene:=aRecCnrInventarioBeniMigDett.ds_bene;
aRecCnrInventarioBeniMigOri.cd_categoria_gruppo:=aRecCnrInventarioBeniMigDett.cd_categoria_gruppo;
aRecCnrInventarioBeniMigOri.esercizio_carico_bene:=aRecCnrInventarioBeniMigDett.esercizio_carico_bene;
aRecCnrInventarioBeniMigOri.esercizio_coep_bene:=aRecCnrInventarioBeniMigDett.esercizio_coep_bene;
aRecCnrInventarioBeniMigOri.importo:=aRecCnrInventarioBeniMigDett.importo;
aRecCnrInventarioBeniMigOri.fl_forza_valore_iniziale:=aRecCnrInventarioBeniMigDett.fl_forza_valore_iniziale;
aRecCnrInventarioBeniMigOri.valore_ammortizzato:=aRecCnrInventarioBeniMigDett.valore_ammortizzato;
aRecCnrInventarioBeniMigOri.ti_ammortamento:=aRecCnrInventarioBeniMigDett.ti_ammortamento;
aRecCnrInventarioBeniMigOri.fl_ammortamento:=aRecCnrInventarioBeniMigDett.fl_ammortamento;
aRecCnrInventarioBeniMigOri.cd_condizione_bene:=aRecCnrInventarioBeniMigDett.cd_condizione_bene;
aPgMovimento:=aPgMovimento + 1;
insCnrInventarioBeniMigScarto(aPgCaricamento,
aPgMovimento,
dataOdierna,
aErrore,
aRecCnrInventarioBeniMigOri);
END LOOP;
CLOSE gen_cv_b;
UPDATE CNR_INVENTARIO_BENI_MIG
SET cir_stato_coge = CNRCTB100.STATO_COEP_EXC,
cir_stato_coan = CNRCTB100.STATO_COEP_EXC,
stato = STATO_ERRORE
WHERE pg_caricamento = beniDaMigrare_tab(i).pg_caricamento AND
id_bene_origine = beniDaMigrare_tab(i).id_bene_origine;
END LOOP;
COMMIT;
END eseguiScartoBeniCompleta;
-- =================================================================================================
-- Crea struttura base del record INVENTARIO_BENI
-- =================================================================================================
FUNCTION buildRecInventarioBeni
(aRecCnrInventarioBeniMig CNR_INVENTARIO_BENI_MIG%ROWTYPE
) RETURN INVENTARIO_BENI%ROWTYPE IS
aNrInventarioMax INVENTARIO_BENI.nr_inventario%TYPE;
aNrInventario INVENTARIO_BENI.nr_inventario%TYPE;
aRecInventarioBeni INVENTARIO_BENI%ROWTYPE;
BEGIN
-- Recupero del numero inventario iniziale di numerazione dei beni non da migrazione
aNrInventarioMax:=CNRCTB400.getNrInventarioIniziale(aRecCnrInventarioBeniMig.cir_pg_inventario);
-- Trovo il valore massimo del numeratore beni attualmente in archivio per un dato inventario e che
-- derivi da migrazione
SELECT NVL(MAX(nr_inventario),0) INTO aNrInventario
FROM INVENTARIO_BENI
WHERE pg_inventario = aRecCnrInventarioBeniMig.cir_pg_inventario AND
nr_inventario < aNrInventarioMax;
aNrInventario:=aNrInventario + 1;
-- Costruzione del record INVENTARIO_BENI
aRecInventarioBeni:=NULL;
aRecInventarioBeni.pg_inventario:=aRecCnrInventarioBeniMig.cir_pg_inventario;
aRecInventarioBeni.nr_inventario:=aNrInventario;
aRecInventarioBeni.progressivo:=0;
aRecInventarioBeni.ds_bene:=aRecCnrInventarioBeniMig.cir_ds_bene;
aRecInventarioBeni.cd_categoria_gruppo:=aRecCnrInventarioBeniMig.cir_cd_categoria_gruppo;
aRecInventarioBeni.ti_ammortamento:=aRecCnrInventarioBeniMig.cir_ti_ammortamento;
aRecInventarioBeni.fl_ammortamento:=aRecCnrInventarioBeniMig.cir_fl_ammortamento;
aRecInventarioBeni.cd_condizione_bene:=aRecCnrInventarioBeniMig.cir_cd_condizione_bene;
aRecInventarioBeni.ti_commerciale_istituzionale:=aRecCnrInventarioBeniMig.cir_ti_commerc_istituz;
aRecInventarioBeni.valore_iniziale:=0;
aRecInventarioBeni.valore_ammortizzato:=0;
aRecInventarioBeni.variazione_piu:=0;
aRecInventarioBeni.variazione_meno:=0;
aRecInventarioBeni.imponibile_ammortamento:=0;
aRecInventarioBeni.valore_alienazione:=0;
aRecInventarioBeni.fl_totalmente_scaricato:='N';
aRecInventarioBeni.cd_cds:=aRecCnrInventarioBeniMig.cir_cd_cds;
aRecInventarioBeni.cd_unita_organizzativa:=aRecCnrInventarioBeniMig.cir_cd_uo;
aRecInventarioBeni.cd_ubicazione:=aRecCnrInventarioBeniMig.cir_cd_ubicazione;
aRecInventarioBeni.dt_validita_variazione:=TRUNC(dataOdierna);
aRecInventarioBeni.dacr:=dataOdierna;
aRecInventarioBeni.utcr:=aUtente;
aRecInventarioBeni.duva:=dataOdierna;
aRecInventarioBeni.utuv:=aUtente;
aRecInventarioBeni.pg_ver_rec:=1;
aRecInventarioBeni.etichetta:=aRecCnrInventarioBeniMig.cir_etichetta;
aRecInventarioBeni.esercizio_carico_bene:=aRecCnrInventarioBeniMig.cir_esercizio_carico_bene;
aRecInventarioBeni.id_bene_origine:=aRecCnrInventarioBeniMig.id_bene_origine;
aRecInventarioBeni.fl_migrato:='Y';
RETURN aRecInventarioBeni;
END buildRecInventarioBeni;
-- =================================================================================================
-- Esecuzione migrazione base
-- =================================================================================================
PROCEDURE eseguiMigraBeniCompleta
(aLineaAttivita VARCHAR2
) IS
aFlCreaBene CHAR(1);
eseguiLock CHAR(1);
aStatoInvApCh CHAR(1);
aDataRif DATE;
i BINARY_INTEGER;
aRecInventarioBeni INVENTARIO_BENI%ROWTYPE;
aRecCdr CDR%ROWTYPE;
BEGIN
-------------------------------------------------------------------------------------------------
-- Inizializzazioni
aFlCreaBene:='N';
eseguiLock:='Y';
aDataRif:=TRUNC(dataOdierna);
-------------------------------------------------------------------------------------------------
-- Controlli base
-- Controllo che la matrice beni sia piena
IF beniDaMigrare_tab.COUNT = 0 THEN
IBMERR001.RAISE_ERR_GENERICO ('Matrice gruppo beni da migrare vuota');
END IF;
-- Si controlla se il primo record riguarda un carico o una variazione di valore
IF beniDaMigrare_tab(1).fl_crea_bene = 'Y' THEN
aFlCreaBene:='Y';
END IF;
-- Recupero il record bene
-- Se non devo creare il bene allora questo non deve esistere altrimenti il bene non deve esistere.
-- Si costruisce la struttura base del record INVENTARIO_BENI
IF aFlCreaBene = 'N' THEN
aRecInventarioBeni:=CNRCTB400.getInventarioBeni(beniDaMigrare_tab(1).cir_pg_inventario,
beniDaMigrare_tab(1).cir_nr_inventario,
beniDaMigrare_tab(1).cir_progressivo,
eseguiLock);
ELSE
IF CNRCTB400.checkEsisteBene(beniDaMigrare_tab(1).id_bene_origine) = 'Y' THEN
IBMERR001.RAISE_ERR_GENERICO
('Esiste un record per carico bene e lo stesso id_bene_origine è già presente in INVENTARIO_BENI');
END IF;
aRecInventarioBeni:=buildRecInventarioBeni(beniDaMigrare_tab(1));
END IF;
-------------------------------------------------------------------------------------------------
-- Inserimento record su INVENTARIO_BENI
-- Controllo stato aperto/chiuso dell'inventario
IF aDataRif > TO_DATE('3112' || aRecInventarioBeni.esercizio_carico_bene, 'DDMMYYYY') THEN
aDataRif:=TO_DATE('3112' || aRecInventarioBeni.esercizio_carico_bene, 'DDMMYYYY');
END IF;
aStatoInvApCh:=CNRCTB400.checkStatoInventApCh(aRecInventarioBeni.pg_inventario,
aRecInventarioBeni.esercizio_carico_bene,
aDataRif);
IF aStatoInvApCh = 'C' THEN
IBMERR001.RAISE_ERR_GENERICO
('L''inventario ' || aRecInventarioBeni.pg_inventario || ' risulta non aperto alla data per l''esercizio ' || aRecInventarioBeni.esercizio_carico_bene);
END IF;
-- Inserimento del record bene
IF aFlCreaBene = 'Y' THEN
insInventarioBeni(aRecInventarioBeni);
END IF;
-------------------------------------------------------------------------------------------------
-- Ciclo lettura matrice beni in migrazione
FOR i IN 1 .. beniDaMigrare_tab.COUNT
LOOP
aRecInventarioBeni.valore_iniziale:=aRecInventarioBeni.valore_iniziale + beniDaMigrare_tab(i).cir_valore_iniziale;
aRecInventarioBeni.variazione_piu:=aRecInventarioBeni.variazione_piu + beniDaMigrare_tab(i).cir_variazione_piu;
aRecInventarioBeni.variazione_meno:=aRecInventarioBeni.variazione_meno + beniDaMigrare_tab(i).cir_variazione_meno;
aRecInventarioBeni.imponibile_ammortamento:=aRecInventarioBeni.imponibile_ammortamento +
beniDaMigrare_tab(i).cir_imponibile_ammortamento;
aRecInventarioBeni.valore_ammortizzato:=aRecInventarioBeni.valore_ammortizzato +
beniDaMigrare_tab(i).cir_valore_ammortizzato;
-- Aggiornamento CNR_INVENTARIO_BENI_MIG
UPDATE CNR_INVENTARIO_BENI_MIG
SET cir_nr_inventario = aRecInventarioBeni.nr_inventario,
cir_stato_coge = CNRCTB100.STATO_COEP_INI,
cir_stato_coan = CNRCTB100.STATO_COEP_INI,
stato = STATO_MIGRATO
WHERE pg_caricamento = beniDaMigrare_tab(i).pg_caricamento AND
id_bene_origine = beniDaMigrare_tab(i).id_bene_origine;
END LOOP;
-------------------------------------------------------------------------------------------------
-- Controllo globale di consistenza includendo anche il valore presente sul bene
checkConsistenzaImporti(aRecInventarioBeni.valore_iniziale + aRecInventarioBeni.variazione_piu - aRecInventarioBeni.variazione_meno,
aRecInventarioBeni.imponibile_ammortamento,
aRecInventarioBeni.valore_ammortizzato);
-------------------------------------------------------------------------------------------------
-- Aggiornamento dei campi valore su INVENTARIO_BENI
BEGIN
IF aFlCreaBene = 'Y' THEN
UPDATE INVENTARIO_BENI
SET valore_iniziale = aRecInventarioBeni.valore_iniziale,
variazione_piu = aRecInventarioBeni.variazione_piu,
variazione_meno = aRecInventarioBeni.variazione_meno,
imponibile_ammortamento = aRecInventarioBeni.imponibile_ammortamento,
valore_ammortizzato = aRecInventarioBeni.valore_ammortizzato
WHERE pg_inventario = aRecInventarioBeni.pg_inventario AND
nr_inventario = aRecInventarioBeni.nr_inventario AND
progressivo = aRecInventarioBeni.progressivo;
ELSE
UPDATE INVENTARIO_BENI
SET valore_iniziale = aRecInventarioBeni.valore_iniziale,
variazione_piu = aRecInventarioBeni.variazione_piu,
variazione_meno = aRecInventarioBeni.variazione_meno,
imponibile_ammortamento = aRecInventarioBeni.imponibile_ammortamento,
valore_ammortizzato = aRecInventarioBeni.valore_ammortizzato,
duva = dataOdierna,
utuv = aUtente,
pg_ver_rec = pg_ver_rec + 1
WHERE pg_inventario = aRecInventarioBeni.pg_inventario AND
nr_inventario = aRecInventarioBeni.nr_inventario AND
progressivo = aRecInventarioBeni.progressivo;
END IF;
EXCEPTION
WHEN others THEN
IBMERR001.RAISE_ERR_GENERICO ('Errore in aggiornamento valori su INVENTARIO_BENI');
END;
-------------------------------------------------------------------------------------------------
-- Costruzione record INVENTARIO_UTILIZZATORI_LA
IF aFlCreaBene = 'Y' THEN
BEGIN
aRecCdr:=CNRCTB020.getCDRResponsabileUO(beniDaMigrare_tab(1).cir_cd_uo);
INSERT INTO INVENTARIO_UTILIZZATORI_LA
(pg_inventario, nr_inventario,
progressivo, cd_utilizzatore_cdr,
cd_linea_attivita, percentuale_utilizzo_cdr, percentuale_utilizzo_la,
dacr, utcr, duva, utuv, pg_ver_rec)
VALUES (aRecInventarioBeni.pg_inventario, aRecInventarioBeni.nr_inventario,
aRecInventarioBeni.progressivo, aRecCdr.cd_centro_responsabilita,
aLineaAttivita, 100, 100,
dataOdierna, aUtente, dataOdierna, aUtente, 1);
EXCEPTION
WHEN others THEN
IBMERR001.RAISE_ERR_GENERICO ('Errore in aggiornamento valori su INVENTARIO_UTILIZZATORI_LA');
END;
END IF;
COMMIT;
END eseguiMigraBeniCompleta;
-- =================================================================================================
-- Caricamento dati per migrazione beni in INVENTARIO_BENI e INVENTARIO_UTILIZZATORI_LA a partire
-- dalla tabella CNR_INVENTARIO_BENI_MIG
-- =================================================================================================
PROCEDURE caricaBeniCompleta
(aPgCaricamento NUMBER,
aCdCds VARCHAR2,
aCdUo VARCHAR2,
aPgInventario NUMBER,
aLineaAttivita VARCHAR2,
aNumRecLetto IN OUT NUMBER,
aNumRecScritto IN OUT NUMBER,
aNumRecScarto IN OUT NUMBER
) IS
memIdBeneOrigine CNR_INVENTARIO_BENI_MIG.id_bene_origine%TYPE;
aFlMigrazione CHAR(1);
aMessaggioErrore VARCHAR2(4000);
i BINARY_INTEGER;
aRecCnrInventarioBeniMig CNR_INVENTARIO_BENI_MIG%ROWTYPE;
gen_cv GenericCurTyp;
BEGIN
-------------------------------------------------------------------------------------------------
-- Valorizzazioni iniziali
memIdBeneOrigine:=NULL;
-------------------------------------------------------------------------------------------------
-- Ciclo principale lettura CNR_INVENTARIO_BENI_MIG
BEGIN
IF (aCdCds IS NULL AND
aCdUo IS NULL AND
aPgInventario IS NULL) THEN
OPEN gen_cv FOR
SELECT *
FROM CNR_INVENTARIO_BENI_MIG
WHERE stato = STATO_INIZIALE
ORDER BY id_bene_origine,
pg_caricamento;
ELSIF (aCdCds IS NOT NULL AND
aCdUo IS NOT NULL AND
aPgInventario IS NULL) THEN
OPEN gen_cv FOR
SELECT *
FROM CNR_INVENTARIO_BENI_MIG
WHERE stato = STATO_INIZIALE AND
cir_cd_cds = aCdCds AND
cir_cd_uo = aCdUo
ORDER BY id_bene_origine,
pg_caricamento;
ELSIF (aCdCds IS NULL AND
aCdUo IS NULL AND
aPgInventario IS NOT NULL) THEN
OPEN gen_cv FOR
SELECT *
FROM CNR_INVENTARIO_BENI_MIG
WHERE stato = STATO_INIZIALE AND
cir_pg_inventario = aPgInventario
ORDER BY id_bene_origine,
pg_caricamento;
ELSIF (aCdCds IS NOT NULL AND
aCdUo IS NOT NULL AND
aPgInventario IS NOT NULL) THEN
OPEN gen_cv FOR
SELECT *
FROM CNR_INVENTARIO_BENI_MIG
WHERE stato = STATO_INIZIALE AND
cir_pg_inventario = aPgInventario AND
cir_cd_cds = aCdCds AND
cir_cd_uo = aCdUo
ORDER BY id_bene_origine,
pg_caricamento;
END IF;
LOOP
BEGIN
FETCH gen_cv INTO
aRecCnrInventarioBeniMig;
EXIT WHEN gen_cv%NOTFOUND;
aNumRecLetto:=aNumRecLetto + 1;
-- E' il primo record letto
IF memIdBeneOrigine IS NULL THEN
memIdBeneOrigine:=aRecCnrInventarioBeniMig.id_bene_origine;
beniDaMigrare_tab.DELETE;
i:=0;
END IF;
-- Se l'identificativo del bene origine è diverso da quello memorizzato allora indico l'esecuzione
-- della migrazione
IF aRecCnrInventarioBeniMig.id_bene_origine != memIdBeneOrigine THEN
aFlMigrazione:='Y';
END IF;
-- Esecuzione della migrazione e azzeramento della tabella per memorizzare la nuova occorrenza
BEGIN
IF aFlMigrazione = 'Y' THEN
eseguiMigraBeniCompleta(aLineaAttivita);
aNumRecScritto:=aNumRecScritto + beniDaMigrare_tab.COUNT;
beniDaMigrare_tab.DELETE;
i:=0;
END IF;
EXCEPTION
WHEN others THEN
aMessaggioErrore:=SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK,1,3900);
ROLLBACK;
eseguiScartoBeniCompleta(aPgCaricamento,
aMessaggioErrore);
aNumRecScarto:=aNumRecScarto + beniDaMigrare_tab.COUNT;
beniDaMigrare_tab.DELETE;
i:=0;
END;
-- Memorizzo sulla tabella di appoggio i beni
aFlMigrazione:='N';
i:=i + 1;
memIdBeneOrigine:=aRecCnrInventarioBeniMig.id_bene_origine;
beniDaMigrare_tab(i).pg_caricamento:=aRecCnrInventarioBeniMig.pg_caricamento;
beniDaMigrare_tab(i).id_bene_origine:=aRecCnrInventarioBeniMig.id_bene_origine;
beniDaMigrare_tab(i).fl_crea_bene:=aRecCnrInventarioBeniMig.fl_crea_bene;
beniDaMigrare_tab(i).cir_cd_cds:=aRecCnrInventarioBeniMig.cir_cd_cds;
beniDaMigrare_tab(i).cir_cd_uo:=aRecCnrInventarioBeniMig.cir_cd_uo;
beniDaMigrare_tab(i).cir_pg_inventario:=aRecCnrInventarioBeniMig.cir_pg_inventario;
beniDaMigrare_tab(i).cir_nr_inventario:=aRecCnrInventarioBeniMig.cir_nr_inventario;
beniDaMigrare_tab(i).cir_progressivo:=aRecCnrInventarioBeniMig.cir_progressivo;
beniDaMigrare_tab(i).cir_ds_bene:=aRecCnrInventarioBeniMig.cir_ds_bene;
beniDaMigrare_tab(i).cir_cd_categoria_gruppo:=aRecCnrInventarioBeniMig.cir_cd_categoria_gruppo;
beniDaMigrare_tab(i).cir_ti_ammortamento:=aRecCnrInventarioBeniMig.cir_ti_ammortamento;
beniDaMigrare_tab(i).cir_fl_ammortamento:=aRecCnrInventarioBeniMig.cir_fl_ammortamento;
beniDaMigrare_tab(i).cir_cd_condizione_bene:=aRecCnrInventarioBeniMig.cir_cd_condizione_bene;
beniDaMigrare_tab(i).cir_ti_commerc_istituz:=aRecCnrInventarioBeniMig.cir_ti_commerc_istituz;
beniDaMigrare_tab(i).cir_valore_iniziale:=aRecCnrInventarioBeniMig.cir_valore_iniziale;
beniDaMigrare_tab(i).cir_valore_ammortizzato:=aRecCnrInventarioBeniMig.cir_valore_ammortizzato;
beniDaMigrare_tab(i).cir_variazione_piu:=aRecCnrInventarioBeniMig.cir_variazione_piu;
beniDaMigrare_tab(i).cir_variazione_meno:=aRecCnrInventarioBeniMig.cir_variazione_meno;
beniDaMigrare_tab(i).cir_imponibile_ammortamento:=aRecCnrInventarioBeniMig.cir_imponibile_ammortamento;
beniDaMigrare_tab(i).cir_cd_ubicazione:=aRecCnrInventarioBeniMig.cir_cd_ubicazione;
beniDaMigrare_tab(i).cir_etichetta:=aRecCnrInventarioBeniMig.cir_etichetta;
beniDaMigrare_tab(i).cir_esercizio_carico_bene:=aRecCnrInventarioBeniMig.cir_esercizio_carico_bene;
beniDaMigrare_tab(i).cir_stato_coge:=aRecCnrInventarioBeniMig.cir_stato_coge;
beniDaMigrare_tab(i).cir_stato_coan:=aRecCnrInventarioBeniMig.cir_stato_coan;
beniDaMigrare_tab(i).stato:=aRecCnrInventarioBeniMig.stato;
beniDaMigrare_tab(i).dt_creazione:=aRecCnrInventarioBeniMig.dt_creazione;
END;
END LOOP;
CLOSE gen_cv;
BEGIN
eseguiMigraBeniCompleta(aLineaAttivita);
aNumRecScritto:=aNumRecScritto + beniDaMigrare_tab.COUNT;
beniDaMigrare_tab.DELETE;
i:=0;
EXCEPTION
WHEN others THEN
aMessaggioErrore:=SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK,1,3900);
ROLLBACK;
eseguiScartoBeniCompleta(aPgCaricamento,
aMessaggioErrore);
aNumRecScarto:=aNumRecScarto + beniDaMigrare_tab.COUNT;
beniDaMigrare_tab.DELETE;
i:=0;
END;
END;
END caricaBeniCompleta;
-- =================================================================================================
-- Migrazione dei beni in stato 'I' (iniziale) presenti sulla tabella INVENTARIO_BENI_MIG in CIR
-- =================================================================================================
PROCEDURE migrazioneBeniCompleta
(aCdCds VARCHAR2,
aCdUo VARCHAR2,
aPgInventario NUMBER) IS
aPgCaricamento NUMBER(10);
aPgLog INTEGER;
aNumRecLetto NUMBER(10);
aNumRecScritto NUMBER(10);
aNumRecScarto NUMBER(10);
aLineaAttivita VARCHAR2(100);
BEGIN
-------------------------------------------------------------------------------------------------
-- Valorizzazioni iniziali
dataOdierna:=SYSDATE;
aEsercizioBase:=TO_NUMBER(TO_CHAR(dataOdierna,'YYYY'));
aNumRecLetto:=0;
aNumRecScritto:=0;
aNumRecScarto:=0;
-------------------------------------------------------------------------------------------------
-- Controlla parametri
IF (
(aCdCds IS NULL AND
aCdUo IS NOT NULL)
OR
(aCdCds IS NOT NULL AND
aCdUo IS NULL)
) THEN
IBMERR001.RAISE_ERR_GENERICO
('L''identificativo del Cds e della UO devono essere entrambi valorizzati o nulli');
END IF;
-------------------------------------------------------------------------------------------------
-- Recupero informazioni base
-- Acquisizione semaforo applicativo
CNRCTB800.acquisisciSemStaticoCds(0, '*', SEMAFORO, aUtente);
-- Recupero progressivo log
aPgLog:= IBMUTL200.LOGSTART('MIGRAZIONE INVENTARIO - FASE CARICAMENTO IN CIR' , aUtente, NULL, NULL);
-- Recupero del progressivo di caricamento. Si recupera il valore da CNR_INVENTARIO_BENI_MIG e
-- da CNR_INVENTARIO_BENI_MIG_SCARTO e si seleziona il maggiore dei due
SELECT MAX(valore) INTO aPgCaricamento
FROM (SELECT NVL(MAX(pg_caricamento),0) valore
FROM CNR_INVENTARIO_BENI_MIG
UNION ALL
SELECT NVL(MAX(pg_caricamento),0) valore
FROM CNR_INVENTARIO_BENI_MIG_SCARTO);
aPgCaricamento:=aPgCaricamento + 1;
-- Recupero dela linea di attività per la valorizzazione dell'utilizzatore
aLineaAttivita:=CNRCTB015.getVal01PerChiave(0,
CONFIG_CNR_KEY1,
CONFIG_CNR_KEY2);
IF aLineaAttivita IS NULL THEN
IBMERR001.RAISE_ERR_GENERICO
('La linea attività speciale per migrazione beni non è valorizzata in CONFIGURAZIONE_CNR');
END IF;
-------------------------------------------------------------------------------------------------
-- Migrazione beni
caricaBeniCompleta(aPgCaricamento,
aCdCds,
aCdUo,
aPgInventario,
aLineaAttivita,
aNumRecLetto,
aNumRecScritto,
aNumRecScarto);
-- Controllo esecuzione della migrazione
IF aNumRecLetto = 0 THEN
IBMERR001.RAISE_ERR_GENERICO
('Nessun record elaborato, non sono stati trovati beni in CNR_INVENTARIO_BENI');
END IF;
COMMIT;
-- Messaggio di operazione completata ad utente
IF aNumRecScarto = 0 THEN
IBMUTL200.logInf(aPgLog,
FASE_DUE || ' ' || TO_CHAR(dataOdierna,'DD/MM/YYYY HH:MI:SS') || ' ' ||
'Operazione completata con successo',
'Record letti ' || LPAD(aNumRecLetto,10,' ') || ' ' ||
'Record scritti ' || LPAD(aNumRecScritto,10,' ') || ' ' ||
'Record scartati ' || LPAD(aNumRecScarto,10,' '),
NULL);
ELSE
IBMUTL200.logWar(aPgLog,
FASE_DUE || ' ' || TO_CHAR(dataOdierna,'DD/MM/YYYY HH:MI:SS') || ' ' ||
'Operazione completata con successo ma con errori',
'Record letti ' || LPAD(aNumRecLetto,10,' ') || ' ' ||
'Record scritti ' || LPAD(aNumRecScritto,10,' ') || ' ' ||
'Record scartati ' || LPAD(aNumRecScarto,10,' '),
NULL);
END IF;
-- Cancellazione record da CNR_INVENTARIO_BENI_MIG
-- delCnrInventarioBeniMigOri(aPgCaricamento);
CNRCTB800.liberaSemStaticoCds(0, '*', SEMAFORO, aUtente);
EXCEPTION
WHEN others THEN
ROLLBACK;
IBMUTL200.LOGERR(aPgLog,
FASE_DUE || ' ' || TO_CHAR(dataOdierna,'DD/MM/YYYY HH:MI:SS') || ' ' ||
'Operazione in errore',
SUBSTR(DBMS_UTILITY.FORMAT_ERROR_STACK,1,3900),
NULL);
-- delCnrInventarioBeniMigOri(aPgCaricamento);
CNRCTB800.liberaSemStaticoCds(0, '*', SEMAFORO, aUtente);
END migrazioneBeniCompleta;
PROCEDURE insInventarioBeni
(aRecInventarioBeni INVENTARIO_BENI%Rowtype) IS
BEGIN
INSERT INTO INVENTARIO_BENI
(pg_inventario,
nr_inventario,
progressivo,
ds_bene,
cd_categoria_gruppo,
ti_ammortamento,
fl_ammortamento,
cd_condizione_bene,
ti_commerciale_istituzionale,
valore_iniziale,
valore_ammortizzato,
variazione_piu,
variazione_meno,
imponibile_ammortamento,
valore_alienazione,
fl_totalmente_scaricato,
collocazione,
cd_cds,
cd_unita_organizzativa,
cd_ubicazione,
cd_assegnatario,
dt_validita_variazione,
dacr,
utcr,
duva,
utuv,
pg_ver_rec,
etichetta,
esercizio_carico_bene,
id_bene_origine,
fl_migrato)
VALUES (aRecInventarioBeni.pg_inventario,
aRecInventarioBeni.nr_inventario,
aRecInventarioBeni.progressivo,
aRecInventarioBeni.ds_bene,
aRecInventarioBeni.cd_categoria_gruppo,
aRecInventarioBeni.ti_ammortamento,
aRecInventarioBeni.fl_ammortamento,
aRecInventarioBeni.cd_condizione_bene,
aRecInventarioBeni.ti_commerciale_istituzionale,
aRecInventarioBeni.valore_iniziale,
aRecInventarioBeni.valore_ammortizzato,
aRecInventarioBeni.variazione_piu,
aRecInventarioBeni.variazione_meno,
aRecInventarioBeni.imponibile_ammortamento,
aRecInventarioBeni.valore_alienazione,
aRecInventarioBeni.fl_totalmente_scaricato,
aRecInventarioBeni.collocazione,
aRecInventarioBeni.cd_cds,
aRecInventarioBeni.cd_unita_organizzativa,
aRecInventarioBeni.cd_ubicazione,
aRecInventarioBeni.cd_assegnatario,
aRecInventarioBeni.dt_validita_variazione,
aRecInventarioBeni.dacr,
aRecInventarioBeni.utcr,
aRecInventarioBeni.duva,
aRecInventarioBeni.utuv,
aRecInventarioBeni.pg_ver_rec,
aRecInventarioBeni.etichetta,
aRecInventarioBeni.esercizio_carico_bene,
aRecInventarioBeni.id_bene_origine,
aRecInventarioBeni.fl_migrato
);
END insInventarioBeni;
END;
© 2015 - 2024 Weber Informatics LLC | Privacy Policy