CREATE OR REPLACE PACKAGE pack_imob IS imob_data_operatie date; nNrLuniCurent number; -- an*12+luna curenta nLunaCurenta number; nAnCurent number; dDataCurenta date; -- 01/ll/aaaa type tip_valori_mf is record( data_test date, id_mf number, id_lista_mf number, id_operatie_mf number, id_operatie_prec number, id_calcul_rate number, denumire varchar2(500), data_achizitie date, data_pif date, explicatia varchar2(500), nract number, nr_pif number, procent number, coeficient number, id_tip_imobilizare number, tip_imobilizare varchar2(50), id_tip_amortizare number, tip_amortizare varchar2(50), dns_luni number, cont varchar2(4), acont varchar2(4), cod_mf varchar2(20), id_gestiune number, gestiune varchar2(50), id_lucrare number, nrord varchar2(50), id_responsabil number, responsabil varchar2(50), id_sectie number, sectie varchar2(50), id_sucursala number, sucursala varchar2(100), nr_inventar number, lper_in varchar2(7), lper_fin varchar2(7), amort_max_deductibil number, data_operatie date, id_tip_operatie number, ultima_operatie varchar2(50), cauza varchar2(50), uzura_prec number, dns_ramas number, iesit_din_gest number, cota_an number, cota_luna number, data_expirare date, ultima_rata number, valoare number, valoare_ramasa number, valoare_reziduala number, rata number, --valoare_ramasa_amort number, amort_prec number, --amort_prec_rata number, uzura number, uzura_rata number, rper_in varchar2(7), rper_fin varchar2(7), valoare_rol number, valoare_ramasa_rol number, rata_rol number, ultima_rata_rol number, valoare_achizitie number, valoare_prec number, id_tip_iesire number, tip_iesire varchar2(100), durata_ramasa number); procedure setlunacurenta(v_data IN DATE); function getNrLuniCurent return number; function getDataCurenta return date; PROCEDURE adauga_mf(v_schema IN VARCHAR2, v_data IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_amort_prec IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_id_fact IN NUMBER, v_tip_operatie IN NUMBER, v_explicatia_operatie in varchar2, v_bunCapital in number, v_bazatva in number, v_tva in number, v_id_cotatva in number, v_prorataTva in number); PROCEDURE adauga_mf(v_id_mf IN OUT NUMBER, v_schema IN VARCHAR2, v_data IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_amort_prec IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_id_fact IN NUMBER, v_tip_operatie IN NUMBER, v_explicatia_operatie in varchar2, v_bunCapital in number, v_bazatva in number, v_tva in number, v_id_cotatva in number, v_prorataTva in number); PROCEDURE adauga_mf(v_id_mf IN OUT NUMBER, v_schema IN VARCHAR2, v_data IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_valoare_reziduala IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_amort_prec IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_id_fact IN NUMBER, v_tip_operatie IN NUMBER, v_explicatia_operatie in varchar2, v_bunCapital in number, v_bazatva in number, v_tva in number, v_id_cotatva in number, v_prorataTva in number); PROCEDURE adauga_rata(v_schema IN VARCHAR2, v_id_operatie_mf IN NUMBER, v_id_tip_operatie IN NUMBER, v_id_mf IN NUMBER, v_dns_ramas IN NUMBER, v_data_calcul IN DATE, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_uzura_prec in number, v_fiscala in number); PROCEDURE inreg_majorare(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_valoare IN NUMBER, v_datareeval IN DATE, v_explicatia in varchar2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_bazaTva in number, v_idcotaTva in number, v_Tva in number, v_prorataTva in number); PROCEDURE inreg_reevaluare(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_valoare IN NUMBER, v_amortizare IN NUMBER, v_datareeval IN DATE, v_explicatia in varchar2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_valreev in number); PROCEDURE inreg_schimbdns_reevaluare(v_schema in varchar2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf in number, v_cod IN VARCHAR2, -- codul nou v_dns IN NUMBER, -- dns nou v_valoare in number, -- valoarea noua de inventar v_amortizare in number, -- valoarea noua total amortizata v_uzura IN NUMBER, -- uzura noua totala v_valoare_reziduala IN NUMBER, -- valoarea noua reziduala v_datareeval in date, v_explicatia in varchar2, v_id_util in number, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_valreev in number); PROCEDURE inreg_conservare(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_tip IN NUMBER, v_cauza IN VARCHAR2, v_dataconservare IN DATE, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_bazatva in number, v_idcotatva in number, v_tva in number, v_prorataTva in number); PROCEDURE inreg_schimbdns(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_codnou IN VARCHAR2, v_dnsnou IN NUMBER, v_dataschimbare IN DATE, v_cauza IN VARCHAR2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number); PROCEDURE inreg_gest(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_tip IN NUMBER, v_cauza IN VARCHAR2, v_dataschimbare IN DATE, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_bazatva in number, v_idcotaTva in number, v_tva in number, v_prorataTva in number, v_id_tip_iesire in imob_tipuri_iesire.id%type default null); PROCEDURE inreg_transformare_in_mf(v_schema IN VARCHAR2, v_id_mf IN NUMBER, v_id_mf_nou IN NUMBER, v_datamodificare IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_dns_ramas IN NUMBER, v_valoare_ramasa IN NUMBER, v_valoare_retinuta IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_id_tip_operatie in number DEFAULT 3); FUNCTION getLuniOperatie RETURN NUMBER; procedure schimba_mf(v_id_mf IN NUMBER, v_nract IN NUMBER, v_data_achizitie IN DATE, v_denumire IN VARCHAR2, v_explicatie_n IN VARCHAR2, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_amortizare IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_id_lista_mf IN NUMBER, v_dns_luni IN NUMBER, v_Cod_mf IN VARCHAR2, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_nr_inventar IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_lper_in in VARCHAR2, v_lper_fin in VARCHAR2, v_id_operatie_mf IN NUMBER, v_id_tip_operatie in NUMBER, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_dns_ramas in NUMBER, v_valoare_reziduala IN NUMBER, v_data_operatie in DATE, v_explicatie_o in VARCHAR2, v_uzura_prec in NUMBER, v_id_rata in NUMBER, v_rper_in in VARCHAR2, v_rper_fin in VARCHAR2, v_rata in NUMBER, v_cota_an in NUMBER, v_cota_luna in NUMBER, v_ultima_rata in NUMBER, v_data_ultima_rata in DATE, v_fiscala in NUMBER, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_nrdoc IN IMOB_OPERATII_MF.NRDOC%TYPE DEFAULT NULL, v_datadoc in IMOB_OPERATII_MF.DATADOC%TYPE DEFAULT NULL); procedure sterge_mf(v_id_mf IN NUMBER, v_id_util IN number default null); /* function add_operatie_mf(v_schema IN VARCHAR2, v_id_mf IN NUMBER, v_id_tip_operatie IN NUMBER, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_dns_ramas IN NUMBER, v_data_operatie IN DATE, v_explicatia_operatie IN VARCHAR2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_id_tip_iesire in imob_tipuri_iesire.id%type default null) return number;*/ function add_operatie_mf(v_id_mf IN NUMBER, v_id_tip_operatie IN NUMBER, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_dns_ramas IN NUMBER, v_valoare_reziduala IN NUMBER, v_data_operatie IN DATE, v_explicatia_operatie IN VARCHAR2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_id_tip_iesire in imob_tipuri_iesire.id%type default null) return number; procedure add_in_lista_mf(v_schema IN VARCHAR2, v_id_mf IN NUMBER, v_dns IN NUMBER, v_cod_mf IN VARCHAR2, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_lucrare IN NUMBER, v_id_gestiune IN NUMBER, v_id_sectie IN NUMBER, v_id_responsabil IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_nr_inventar IN NUMBER, v_id_util IN NUMBER, v_data_calcul IN DATE, v_durata IN NUMBER, v_amort_max_deductibil IN NUMBER); procedure adauga_la_transformare(v_id_mf_nou IN NUMBER, v_id_operatie_nou IN NUMBER, v_id_mf_curs IN NUMBER, v_id_operatie_curs IN NUMBER, v_valoare IN NUMBER); procedure undo_in_imobilizare_in_curs(v_id_tip_imobilizare IN NUMBER, v_id_operatie IN NUMBER); procedure recalculat_expirarea(v_schema IN VARCHAR2, v_id_operatie_prec IN NUMBER, v_fiscala IN NUMBER); FUNCTION get_max_id(v_schema IN VARCHAR2, v_tabela IN VARCHAR2, v_nume_id IN VARCHAR2) RETURN NUMBER; procedure CALCUL_SITUATIE_LUNARA(v_datain in date, v_datasf in date, v_cond in varchar2, v_fiscala in number, v_id_sucursala in number, crsMF out PACK_TYPES.tip_cursor); procedure CALCUL_SITUATIE_LUNARA2(v_datain in date, v_datasf in date, v_cond in varchar2, v_fiscala in number, v_id_sucursala in number, v_tip_selectie in number, crsMF out PACK_TYPES.tip_cursor); function valori_calcul(v_schema in varchar2, v_id_sucursala in IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_datain in date, v_datasf in date, v_cond in varchar2, v_fiscala in number) return PACK_TYPES.tip_cursor; function valori_calcul_view(v_id_mf in number, v_data in date, v_fiscala in number) return PACK_TYPES.tip_cursor; procedure sterge_operatie_mf(v_id_operatie IN NUMBER, v_id_operatie_prec IN NUMBER, v_fiscala IN NUMBER); procedure modifica_lista_mf(v_id_mf IN IMOB_LISTA_MF.ID_MF%TYPE, v_id_lista_mf IN IMOB_LISTA_MF.ID_LISTA_MF%TYPE, v_dns_luni IN IMOB_LISTA_MF.DNS_LUNI%TYPE, v_Cod_mf IN IMOB_LISTA_MF.COD_MF%TYPE, v_cont IN IMOB_LISTA_MF.CONT%TYPE, v_acont IN IMOB_LISTA_MF.ACONT%TYPE, v_nr_inventar IN IMOB_LISTA_MF.NR_INVENTAR%TYPE, v_id_gestiune IN IMOB_LISTA_MF.ID_GESTIUNE%TYPE, v_id_responsabil IN IMOB_LISTA_MF.ID_RESPONSABIL%TYPE, v_id_sectie IN IMOB_LISTA_MF.ID_SECTIE%TYPE, v_id_lucrare IN IMOB_LISTA_MF.ID_LUCRARE%TYPE, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_util IN IMOB_LISTA_MF.ID_UTIL%TYPE, v_an IN IMOB_LISTA_MF.AN%TYPE, v_luna IN IMOB_LISTA_MF.LUNA%TYPE, v_an_exp IN IMOB_LISTA_MF.AN%TYPE, v_luna_exp IN IMOB_LISTA_MF.LUNA%TYPE, v_amort_max_deductibil IN IMOB_LISTA_MF.AMORT_MAX_DEDUCTIBIL%TYPE); procedure adauga_buncapital(v_id_mf in imob_bunuricapital.id_mf%type, v_nrdoc in imob_bunuricapital.nrdoc%type, v_datadoc in imob_bunuricapital.datadoc%type, v_bazatva in imob_bunuricapital.bazatva%type, v_tva in imob_bunuricapital.tva%type, v_id_cota_tva in imob_bunuricapital.id_cota_tva%type, v_ajustare in imob_bunuricapital.ajustare%type, v_id_tip_operatie in imob_bunuricapital.id_tip_operatie%type, v_tvaDatorat in imob_bunuricapital.tva_datorat%type, v_prorataTva in imob_bunuricapital.proratatva%type); procedure modifica_buncapital(v_id_mf in imob_bunuricapital.id_mf%type, v_nrdoc in imob_bunuricapital.nrdoc%type, v_datadoc in imob_bunuricapital.datadoc%type, v_bazatva in imob_bunuricapital.bazatva%type, v_tva in imob_bunuricapital.tva%type, v_id_cota_tva in imob_bunuricapital.id_cota_tva%type, v_ajustare in imob_bunuricapital.ajustare%type, v_id_tip_operatie in imob_bunuricapital.id_tip_operatie%type, v_tvaDatorat in imob_bunuricapital.tva_datorat%type, v_id_regbc in imob_bunuricapital.id_regbc%type, v_prorataTva in imob_bunuricapital.proratatva%type); procedure sterge_buncapital(v_id_regbc in imob_bunuricapital.id_regbc%type); FUNCTION verifica_nr_inventar(v_nr_inventar IN IMOB_LISTA_MF.NR_INVENTAR%TYPE, v_data IN DATE, v_id_tip_imobilizare IN NUMBER DEFAULT 1) RETURN NUMBER; END pack_imob; / CREATE OR REPLACE PACKAGE BODY pack_imob is /*TIP OPERATII 1 INTRODUCERE 2 PRELUARE 3 TRANSFORMARE IN MF 4 IESIRE DIN GESTIUNE 5 INTRARE IN GESTIUNE 6 MAJORARE VALOARE INVENTAR 7 REEVALUARE VALOARE INVENTAR 8 SCHIMBARE DNS 9 RECALCULARE RATA 10 CONSERVARE 11 SCOATERE DIN CONSERVARE 12 MODIFICARE CU ISTORIC 13 INCHIDERE 14 DENOMINARE 15 SCHIMBARE DNS + REEVALUARE */ -- 25.03.2013 -- marius.mutu -- + v_amort_max_deductibil in add_in_lista_mf, adauga_transformare, -- 15.05.2014 -- marius.mutu -- + tabel IMOB_TIPURI_IESIRE cu valori predefinite pentru tipul de iesire din gestiune: 1=VANZARE, 2=CASARE, 3=FURT, 4=ALTE -- foloseste la PACK_MG_EVOLUTIE pentru bilant F40 (active imobilizate) - reduceri amortizare provenite din CASARE -- CALCUL_SITUATIE_LUNARA, type tip_valori_mf: + coloane valoare_prec, id_tip_iesire, tip_iesire -- inreg_gest (iesire din gestiune), add_operatie_mf: + v_id_tip_iesire -- marius.atanasiu -- CALCUL_SITUATIE_LUNARA: + parametru v_tip_selectie: 0 (default), 1 = se apeleaza selectul din pack_mg_evolutie cu mai putine coloane -- 09.10.2014 -- marius.mutu -- overloading-ul la IMOB_CALCUL_SITUATIE_LUNARA am redenumit in IMOB_CALCUL_SITUATIE_LUNARA2 pentru ca dadea eroare la ODBC instantclient 11.2 -- nu stia probabil ce declaratie sa foloseasca (in ODBC 10x functiona) -- 12.11.2019 -- marius.mutu -- inreg_majorare - calculez dns_ramas = dns_ramas_anterior - uzura de la ultima operatie, in loc de DNS - uzura totala -- UTMIDIA avea imobilizari la care marise DNS RAMAS, si nu mai corespundea cu DNS -- 16.04.2020 -- marius.mutu -- adauga_mf + id_mf -- 21.05.2020 -- marius.mutu -- schimba_mf - tratare transformare imobilizari in curs in mijloace fixe nu se transmite id_rata -- probabil ca dadea eroare la selectie din imob_calcul_rate si nu se inregistra in imob_operatii si imob_calculc_rate -- nu apare eroare din cauza unui bug in Oracle -- inreg_modificare este acum inreg_transformare_in_mf -- am eliminat adauga_transformare - apelez din inreg_transformare_in_mf -- 09.06.2020 -- marius.mutu -- + setlunacurenta. -- se apeleaza inainte de imob_vsituatie_lunara, imobf_vsituatie_lunara -- 07.07.2021 -- marius.mutu -- add_in_lista_mf trim(v_cod) -- 25.01.2021 -- marius.mutu -- adaugare valoare_reziduala in imob_operatii_mf, imobf_operatii_mf si modificare proceduri -- 28.01.2021 -- marius.mutu -- + PACK_IMOB.calcul_situatie_lunara2 + durata_ramasa -- 02.02.2021 -- pack_imob.tip_valori_mf + durata_ramasa -- 02.04.2021 -- marius.mutu -- inreg_gest, inreg_majorare, inreg_reevaluare, inreg_schimbdns, inreg_conservare -- s-a corectat selectia din view-ul contabil/fiscal -- se lua din cel fiscal, chiar si pentru calculele amortizare contabila. -- 02.06.2021 -- marius.mutu -- adaugare inreg_schimbdns_reevaluare (schimbare DNS si reevaluare) -- corectare valoare ramasa la inreg_schimbdns (era scazuta valoarea reziduala) -- 06.12.2021 -- marius.mutu -- schimba_mf - tratare id_tip_imobilizare = 3 -- imobilizarile in curs nu au operatii si dadea eroare -- 16.02.2022 -- marius.mutu -- sterge_mf - se sterge si din imob_nom_mf -- 23.03.2023 -- + tip_valori_mf.id_operatie_prec pentru ca s-a modificat view-ul imob_vsituatie_lunara -- 28.08.2024 -- schimba_mf - modificarea operatiilor/ratelor se executa si pentru id_tip_imob = 3 (imobilizari in curs) -- am adaugat informatiile lipsa in ROAIMOB > modificare operatie -- 19.02.2026 -- + verifica_nr_inventar - verifica numar inventar duplicat in lista de imobilizari curenta -- schimba_mf + nrdoc, datadoc -- am sters definitia schimba_mf cu parametri vechi -- 19.02.2026 -- schimba_mf + nrdoc, datadoc DEFAULT NULL, pentru ca este apelata din ROACONT - definire rate venituri/cheltuieli in avans -- 24.06.2026 -- inreg_schimbdns - am calculat durata ramasa de calcul = dns nou - uzura totala procedure setlunacurenta(v_data IN DATE) is begin dDataCurenta := v_data; nLunaCurenta := extract(month from v_data); nAnCurent := extract(year from v_data); nNrLuniCurent := nAnCurent * 12 + nLunaCurenta; end; function getNrLuniCurent return number is begin return nNrLuniCurent; end; function getDataCurenta return date is begin return dDataCurenta; end; --------------------------------------------------------------------------------------------- PROCEDURE adauga_mf(v_schema IN VARCHAR2, v_data IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_amort_prec IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_id_fact IN NUMBER, v_tip_operatie IN NUMBER, v_explicatia_operatie in varchar2, v_bunCapital in number, v_bazatva in number, v_tva in number, v_id_cotatva in number, v_prorataTva in number) is v_id_mf number := 0; begin adauga_mf(v_id_mf, v_schema, v_data, v_nract, v_dataact, v_denumire, v_explicatia, v_valoare, v_data_pif, v_nr_pif, v_nr_inventar, v_cod, v_dns, v_uzura, v_amort_prec, v_id_gestiune, v_id_responsabil, v_id_sectie, v_id_lucrare, v_id_sucursala, v_id_tip_amortizare, v_procent, v_coeficient, v_id_tip_imobilizare, v_cont, v_acont, v_id_util, v_amort_max_deductibil, v_id_fact, v_tip_operatie, v_explicatia_operatie, v_bunCapital, v_bazatva, v_tva, v_id_cotatva, v_prorataTva); end adauga_mf; --------------------------------------------------------------------------------------------- PROCEDURE adauga_mf(v_id_mf IN OUT NUMBER, v_schema IN VARCHAR2, v_data IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_amort_prec IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_id_fact IN NUMBER, v_tip_operatie IN NUMBER, v_explicatia_operatie in varchar2, v_bunCapital in number, v_bazatva in number, v_tva in number, v_id_cotatva in number, v_prorataTva in number) is v_valoare_reziduala number := 0; begin adauga_mf(v_id_mf, v_schema, v_data, v_nract, v_dataact, v_denumire, v_explicatia, v_valoare, v_valoare_reziduala, v_data_pif, v_nr_pif, v_nr_inventar, v_cod, v_dns, v_uzura, v_amort_prec, v_id_gestiune, v_id_responsabil, v_id_sectie, v_id_lucrare, v_id_sucursala, v_id_tip_amortizare, v_procent, v_coeficient, v_id_tip_imobilizare, v_cont, v_acont, v_id_util, v_amort_max_deductibil, v_id_fact, v_tip_operatie, v_explicatia_operatie, v_bunCapital, v_bazatva, v_tva, v_id_cotatva, v_prorataTva); end adauga_mf; PROCEDURE adauga_mf(v_id_mf IN OUT NUMBER, v_schema IN VARCHAR2, v_data IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_valoare_reziduala IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_amort_prec IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_id_fact IN NUMBER, v_tip_operatie IN NUMBER, v_explicatia_operatie in varchar2, v_bunCapital in number, v_bazatva in number, v_tva in number, v_id_cotatva in number, v_prorataTva in number) IS v_valoare_ramasa number := 0; v_data_operatie date; v_dns_ramas number := 0; v_id_tip_operatie number := 0; v_scd varchar2(4) := ''; v_id_operatie_mfc number := 0; v_id_operatie_mff number := 0; v_data_calcul date; v_id_tip_iesire imob_tipuri_iesire.id%type; BEGIN --SAVEPOINT A; INSERT /*+APPEND*/ INTO IMOB_NOM_MF (DENUMIRE, EXPLICATIA, DATA_ACHIZITIE, DATA_PIF, ID_TIP_AMORTIZARE, ID_TIP_IMOBILIZARE, ID_UTIL, NRACT, NR_PIF, ID_FACT) VALUES (v_denumire, v_explicatia, v_dataact, v_data_pif, v_id_tip_amortizare, v_id_tip_imobilizare, v_id_util, v_nract, v_nr_pif, v_id_fact) RETURNING ID_MF INTO v_id_mf; -- IF v_id_mf > 0 THEN -- BEGIN v_scd := v_cont; v_data_operatie := v_data; case v_tip_operatie when 1 then -- Introducere v_id_tip_operatie := 1; when 2 then -- Preluare v_id_tip_operatie := 2; when 3 then -- Transformare imobilizare in curs in mijloc fix v_id_tip_operatie := 3; end case; v_valoare_ramasa := v_valoare - v_amort_prec; v_dns_ramas := v_dns - v_uzura; pack_imob.add_in_lista_mf(v_schema, v_id_mf, v_dns, v_cod, v_scd, v_acont, v_id_lucrare, v_id_gestiune, v_id_sectie, v_id_responsabil, v_id_sucursala, v_nr_inventar, v_id_util, v_data_operatie, v_dns_ramas, v_amort_max_deductibil); -- amortizare contabila v_id_operatie_mfc := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_data_operatie, v_explicatia_operatie, v_id_util, 0, v_data, v_nract, v_id_tip_iesire); -- amortizare fiscala v_id_operatie_mff := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_data_operatie, v_explicatia_operatie, v_id_util, 1, v_data, v_nract, v_id_tip_iesire); IF v_id_tip_imobilizare <> 3 THEN IF (extract(year from v_data_pif) * 12 + extract(month from v_data_pif) = extract(year from v_data_operatie) * 12 + extract(month from v_data_operatie)) AND v_uzura = 0 THEN v_data_calcul := add_months(v_data_operatie, 1); ELSE v_data_calcul := v_data_operatie; END IF; -- amortizare contabila pack_imob.adauga_rata(v_schema, v_id_operatie_mfc, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_data_calcul, v_valoare, v_valoare_ramasa, v_uzura, 0); -- amortizare fiscala pack_imob.adauga_rata(v_schema, v_id_operatie_mff, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_data_calcul, v_valoare, v_valoare_ramasa, v_uzura, 1); END IF; if v_bunCapital = 1 then pack_imob.adauga_buncapital(v_id_mf, v_nract, v_dataact, v_bazatva, v_tva, v_id_cotatva, 0, v_tip_operatie, 0, v_prorataTva); end if; -- EXCEPTION -- WHEN OTHERS THEN -- ROLLBACK TO SAVEPOINT A; -- RAISE; --RAISE_APPLICATION_ERROR(-20000, SQLERRM); -- END; -- ELSE -- ROLLBACK TO SAVEPOINT A; -- END IF; END adauga_mf; --------------------------------------------------------------------------------------------- PROCEDURE adauga_rata(v_schema IN VARCHAR2, v_id_operatie_mf IN NUMBER, v_id_tip_operatie IN NUMBER, v_id_mf IN NUMBER, v_dns_ramas IN NUMBER, v_data_calcul IN DATE, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_uzura_prec in number, v_fiscala in number) IS v_an number; v_luna number; v_data_exp date; v_an_exp number; v_luna_exp number; v_data_prec date; v_an_prec number; v_luna_prec number; v_rata number; v_cota_luna number; v_cota_an number; v_rata_ultima number; v_amort_prec number; nPrecizie number := 0; v_table varchar2(30) := 'IMOB_CALCUL_RATE'; v_valoare_reziduala number; v_valoare_amortizabila number; BEGIN if v_dns_ramas <> 0 then v_data_exp := add_months(v_data_calcul, v_dns_ramas - 1); else v_data_exp := v_data_calcul; end if; v_an := extract(year from v_data_calcul); v_luna := extract(month from v_data_calcul); v_an_exp := extract(year from v_data_exp); v_luna_exp := extract(month from v_data_exp); pack_contafin.SET_DATA_RON(v_schema); if v_luna + v_an * 12 >= pack_contafin.nAnRon * 12 + pack_contafin.nLunaRon then nPrecizie := 2; end if; IF v_dns_ramas = 0 OR v_id_tip_operatie = 4 OR v_id_tip_operatie = 10 THEN -- iesire din gestiune sau conservare v_cota_luna := 0; v_cota_an := 0; ELSE v_cota_luna := ROUND(100 / v_dns_ramas, 2); v_cota_an := ROUND((1 / v_dns_ramas) * 100 * 12, 2); END IF; IF V_FISCALA = 0 THEN select valoare_reziduala into v_valoare_reziduala from imob_operatii_mf where id_operatie_mf = v_id_operatie_mf; ELSE select valoare_reziduala into v_valoare_reziduala from imobf_operatii_mf where id_operatie_mf = v_id_operatie_mf; END IF; v_valoare_amortizabila := v_valoare_ramasa - v_valoare_reziduala; v_rata := ROUND(v_valoare_amortizabila * v_cota_an / 12 / 100, nPrecizie); v_data_prec := add_months(v_data_calcul, -1); v_an_prec := extract(year from v_data_prec); v_luna_prec := extract(month from v_data_prec); IF v_dns_ramas = 0 OR v_id_tip_operatie = 4 OR v_id_tip_operatie = 10 THEN v_rata_ultima := 0; else v_rata_ultima := v_valoare_amortizabila - v_rata * (12 * v_an_exp + v_luna_exp - (12 * v_an + v_luna)); END IF; IF V_FISCALA = 1 THEN v_table := 'IMOBF_CALCUL_RATE'; end if; SAVEPOINT A; EXECUTE IMMEDIATE 'UPDATE ' || v_schema || '.' || v_table || ' SET AN_EXP=:1,LUNA_EXP=:2 WHERE ID_MF=:3 AND' || ' AN_EXP*12+LUNA_EXP>=:4 AND STERS=0' USING v_an_prec, v_luna_prec, v_id_mf, v_an * 12 + v_luna; IF SQL%ROWCOUNT > 1 THEN ROLLBACK; RAISE_APPLICATION_ERROR(-20000, 'Pe acest mijloc fix s-au facut mai multe operatii dupa data specificata!'); END IF; v_amort_prec := v_valoare - v_valoare_ramasa; EXECUTE IMMEDIATE 'INSERT /*+APPEND*/ INTO ' || v_schema || '.' || v_table || ' (ID_OPERATIE_MF,ID_MF,AN,LUNA,AN_EXP,LUNA_EXP,RATA,COTA_LUNA,COTA_AN,ULTIMA_RATA,DATA_ULTIMA_RATA,UZURA_PREC,AMORTIZARE_PREC) ' || 'VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13)' USING v_id_operatie_mf, v_id_mf, v_an, v_luna, v_an_exp, v_luna_exp, v_rata, v_cota_luna, v_cota_an, v_rata_ultima, v_data_exp, v_uzura_prec, v_amort_prec; END adauga_rata; --------------------------------------------------------------------------------------------- /* FUNCTION calculeaza_rata_amort(v_amort_prec in number, v_an in number, v_luna in number, v_rata in number) return number is v_luni_c number; v_luni_dc number; v_suma number; BEGIN v_luni_c := pack_sesiune.getluna() + pack_sesiune.getan() * 12; v_luni_dc := v_luna + v_an * 12; v_suma := v_rata * (v_luni_c - v_luni_dc); return(v_amort_prec + v_suma); END calculeaza_rata_amort; --------------------------------------------------------------------------------------------- FUNCTION calculeaza_uzura(v_dns_luni in number, v_dns_ramas in number, v_luna_calcul in number, v_an_calcul in number) return number is v_luni_c number; v_luni_dc number; v_uzura number; BEGIN v_luni_c := pack_sesiune.getluna() + pack_sesiune.getan() * 12; v_luni_dc := v_luna_calcul + v_an_calcul * 12; v_uzura := v_dns_luni - v_dns_ramas + (v_luni_c - v_luni_dc); -- raise_application_error(-20000,v_luna_calcul||' '||v_an_calcul); return(v_uzura); END calculeaza_uzura; --------------------------------------------------------------------------------------------- FUNCTION calculeaza_uzura_prec(v_dns_vechi in number, v_dns_ramas in number, v_luna_calcul in number, v_an_calcul in number, v_data_operatie_noua in date) return number is v_luni_c number; v_luni_dc number; v_uzura number; BEGIN v_luni_c := extract(month from v_data_operatie_noua) + extract(year from v_data_operatie_noua) * 12; v_luni_dc := v_luna_calcul + v_an_calcul * 12; v_uzura := v_dns_vechi - v_dns_ramas + (v_luni_c - v_luni_dc); return(v_uzura); END calculeaza_uzura_prec;*/ --------------------------------------------------------------------------------------------- FUNCTION getLuniOperatie return number is BEGIN return(extract(year from imob_data_operatie) * 12 + (extract(month from imob_data_operatie))); END getLuniOperatie; --------------------------------------------------------------------------------------------- PROCEDURE inreg_majorare(v_schema in varchar2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf in number, v_valoare in number, v_datareeval in date, v_explicatia in varchar2, v_id_util in number, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_bazaTva in number, v_idcotaTva in number, v_Tva in number, v_prorataTva in number) is v_verificareluni number; v_valoare_prec number; v_valoare_finala number; v_valoare_ramasa number; v_dns_ramas number; v_dns number; v_amort_prec number; -- v_amort_prec_rata number; v_rata number; v_id_tip_operatie number; -- v_data_operatie date; v_data_calcul date; v_id_operatie_mf number; v_uzura number; v_uzura_rata number; v_data date; v_cond varchar2(250); i number(1); crsMf pack_types.tip_cursor; item tip_valori_mf; v_valoare_reziduala number; v_id_tip_iesire imob_tipuri_iesire.id%type; BEGIN v_verificareluni := months_between(v_datareeval, pack_sesiune.getUltimaZi()); IF v_verificareluni > -1 and v_verificareluni <= 0 THEN -- operatia trebuie sa fie din luna curenta v_data := to_date(extract(month from v_datareeval) || '/' || extract(year from v_datareeval), 'MM/YYYY'); v_cond := 'n.id_mf = ' || to_char(v_id_mf); i := 0; for i in 0 .. v_fiscala loop -- pinfo(TO_CHAR(V_DATA) || ' ' || V_COND || ' ' || TO_CHAR(I)); /* crsMf := pack_imob.valori_calcul(v_schema, v_id_sucursala, v_data, v_data, v_cond, i);*/ crsMF := pack_imob.valori_calcul_view(v_id_mf, v_data, i); fetch crsMf into item; v_valoare_prec := item.valoare; v_dns_ramas := item.dns_ramas; -- durata ramasa la operatia anterioara v_dns := item.dns_luni; v_uzura_rata := item.uzura_rata; -- uzura in luni de la operatia anterioara pana la luna curenta inclusiv v_uzura := item.uzura; v_amort_prec := item.amort_prec; v_rata := item.rata; v_valoare_reziduala := item.valoare_reziduala; close crsMf; -- majorare v_id_tip_operatie := 6; v_valoare_finala := v_valoare_prec + v_valoare; v_valoare_ramasa := v_valoare_finala - v_amort_prec - v_rata; v_dns_ramas := v_dns_ramas - v_uzura_rata; -- durata ramasa la operatia anterioara - uzura de la operatia anterioara 12.11.2019 (UTMIDIA) v_id_operatie_mf := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare_finala, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_datareeval, v_explicatia, v_id_util, i, v_datadoc, v_nrdoc, v_id_tip_iesire); v_data_calcul := add_months(v_data, 1); pack_imob.adauga_rata(v_schema, v_id_operatie_mf, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_data_calcul, v_valoare_finala, v_valoare_ramasa, v_uzura, i); end loop; if v_buncapital = 1 then pack_imob.adauga_buncapital(v_id_mf, v_nrdoc, v_datadoc, v_bazaTva, v_tva, v_idcotaTva, 0, v_id_tip_operatie, 0, v_prorataTva); end if; ELSE RAISE_APPLICATION_ERROR(-20001, 'Data majorarii trebuie sa fie din luna curenta!'); END IF; END inreg_majorare; --------------------------------------------------------------------------------------------- PROCEDURE inreg_reevaluare(v_schema in varchar2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf in number, v_valoare in number, v_amortizare in number, v_datareeval in date, v_explicatia in varchar2, v_id_util in number, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_valreev in number) is v_verificareluni number; v_valoare_finala number; v_valoare_ramasa number; v_dns_ramas number; v_dns number; v_id_tip_operatie number; v_data_calcul date; v_id_operatie_mf number; v_uzura number; i number; --v_uzura_rata number; v_data date; v_cond varchar2(250); crsMf pack_types.tip_cursor; item tip_valori_mf; v_valoare_reziduala number; v_id_tip_iesire imob_tipuri_iesire.id%type; BEGIN v_verificareluni := months_between(v_datareeval, pack_sesiune.getUltimaZi()); IF v_verificareluni > -1 and v_verificareluni <= 0 THEN -- operatia trebuie sa fie din luna curenta v_data := to_date(extract(month from v_datareeval) || '/' || extract(year from v_datareeval), 'MM/YYYY'); v_cond := 'n.id_mf = ' || to_char(v_id_mf); i := 0; for i in 0 .. v_fiscala loop /* crsMf := pack_imob.valori_calcul(v_schema, v_id_sucursala, v_data, v_data, v_cond, i);*/ crsMF := pack_imob.valori_calcul_view(v_id_mf, v_data, i); fetch crsMf into item; --v_dns_ramas := item.dns_ramas; v_dns := item.dns_luni; v_uzura := item.uzura; v_valoare_reziduala := item.valoare_reziduala; --v_uzura_rata := item.uzura_rata; close crsMf; -- reevaluare v_id_tip_operatie := 7; v_valoare_finala := v_valoare; v_valoare_ramasa := v_valoare - v_amortizare; --v_dns_ramas := v_dns_ramas - v_uzura_rata; v_dns_ramas := v_dns - v_uzura; v_id_operatie_mf := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare_finala, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_datareeval, v_explicatia, v_id_util, i, v_datadoc, v_nrdoc, v_id_tip_iesire); v_data_calcul := add_months(v_data, 1); pack_imob.adauga_rata(v_schema, v_id_operatie_mf, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_data_calcul, v_valoare_finala, v_valoare_ramasa, v_uzura, i); end loop; if v_buncapital = 1 then update imob_bunuricapital set valreev = v_valreev where id_mf = v_id_mf and id_tip_operatie in (1, 2); end if; ELSE RAISE_APPLICATION_ERROR(-20001, 'Data reevaluarii trebuie sa fie din luna curenta!'); END IF; END inreg_reevaluare; --------------------------------------------------------------------- -- schimbare DNS si reevaluarea valorii de inventar si amortizarii totale --------------------------------------------------------------------- PROCEDURE inreg_schimbdns_reevaluare(v_schema in varchar2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf in number, v_cod IN VARCHAR2, -- codul nou v_dns IN NUMBER, -- dns nou v_valoare in number, -- valoarea noua de inventar v_amortizare in number, -- valoarea noua total amortizata v_uzura IN NUMBER, -- uzura noua totala v_valoare_reziduala IN NUMBER, -- valoarea noua reziduala v_datareeval in date, v_explicatia in varchar2, v_id_util in number, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_valreev in number) is v_verificareluni number; v_codvechi imob_lista_mf.cod_mf%type; v_dns_vechi imob_lista_mf.dns_luni%type; v_valoare_ramasa number; v_dns_ramas number; v_id_tip_operatie number := 15; v_data_calcul date; v_id_operatie_mf number; i number; v_data date; -- v_cond varchar2(250); crsMf pack_types.tip_cursor; item tip_valori_mf; v_id_tip_iesire imob_tipuri_iesire.id%type; BEGIN v_verificareluni := months_between(v_datareeval, pack_sesiune.getUltimaZi()); IF v_verificareluni = 0 THEN -- operatia trebuie sa fie din luna curenta v_data := to_date(extract(month from v_datareeval) || '/' || extract(year from v_datareeval), 'MM/YYYY'); -- v_cond := 'n.id_mf = ' || to_char(v_id_mf); i := 0; for i in 0 .. v_fiscala loop /* crsMf := pack_imob.valori_calcul(v_schema, v_id_sucursala, v_data, v_data, v_cond, i);*/ crsMF := pack_imob.valori_calcul_view(v_id_mf, v_data, i); fetch crsMf into item; v_dns_vechi := item.dns_luni; v_codvechi := item.cod_mf; close crsMf; -- valoarea ramasa = valoarea noua de inventar - amortizarea noua totala v_valoare_ramasa := v_valoare - v_amortizare; -- durata ramasa = DNS - uzura noua totala v_dns_ramas := v_dns - v_uzura; -- schimbare DNS IF (v_codvechi <> v_cod OR v_dns_vechi <> v_dns) and i = 0 THEN --sa intre doar o data pack_imob.add_in_lista_mf(v_schema, v_id_mf, v_dns, v_cod, item.cont, item.acont, item.id_lucrare, item.id_gestiune, item.id_sectie, item.id_responsabil, item.id_sucursala, item.nr_inventar, v_id_util, v_datareeval, v_dns_ramas, item.amort_max_deductibil); END IF; v_id_operatie_mf := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_datareeval, v_explicatia, v_id_util, i, v_datadoc, v_nrdoc, v_id_tip_iesire); v_data_calcul := add_months(v_data, 1); pack_imob.adauga_rata(v_schema, v_id_operatie_mf, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_data_calcul, v_valoare, v_valoare_ramasa, v_uzura, i); end loop; if v_buncapital = 1 then update imob_bunuricapital set valreev = v_valreev where id_mf = v_id_mf and id_tip_operatie in (1, 2); end if; ELSE RAISE_APPLICATION_ERROR(-20001, 'Data reevaluarii trebuie sa fie din luna curenta!'); END IF; END inreg_schimbdns_reevaluare; --------------------------------------------------------------------------------------------- PROCEDURE inreg_conservare(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_tip IN NUMBER, v_cauza IN VARCHAR2, v_dataconservare IN DATE, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_bazatva in number, v_idcotaTva in number, v_tva in number, v_prorataTva in number) IS v_verificareluni number; v_valoare number; v_valoare_ramasa number; v_dns_ramas number; v_dns number; v_id_tip_operatie number; v_data_calcul date; v_data date; v_amort_prec number; v_id_operatie_mf number; v_uzura number; --v_uzura_rata number; v_uzura_prec number; v_rata number; v_mesaj varchar2(50); v_cond varchar2(250); i number; crsMf pack_types.tip_cursor; item tip_valori_mf; v_valoare_reziduala number; v_id_tip_iesire imob_tipuri_iesire.id%type; BEGIN v_verificareluni := months_between(v_dataconservare, pack_sesiune.getUltimaZi()); IF v_verificareluni > -1 and v_verificareluni <= 0 THEN -- operatia trebuie sa fie din luna curenta v_data := to_date(extract(month from v_dataconservare) || '/' || extract(year from v_dataconservare), 'MM/YYYY'); v_cond := 'n.id_mf = ' || to_char(v_id_mf); i := 0; for i in 0 .. v_fiscala loop /* crsMf := pack_imob.valori_calcul(v_schema, v_id_sucursala, v_data, v_data, v_cond, i);*/ crsMF := pack_imob.valori_calcul_view(v_id_mf, v_data, i); fetch crsMf into item; v_valoare := item.valoare; --v_dns_ramas := item.dns_ramas; v_dns := item.dns_luni; --v_valoare_ramasa := item.valoare_ramasa_amort; v_amort_prec := item.amort_prec; v_rata := item.rata; v_uzura := item.uzura; --v_uzura_rata := item.uzura_rata; v_uzura_prec := item.uzura_prec; v_valoare_reziduala := item.valoare_reziduala; close crsMf; IF v_tip = 1 THEN -- intrare in conservare v_id_tip_operatie := 10; ELSE -- iesire din conservare v_id_tip_operatie := 11; v_uzura := v_uzura_prec; --(nu stiu dc numar si lunile de conservare) END IF; v_valoare_ramasa := v_valoare - v_amort_prec - v_rata; v_dns_ramas := v_dns - v_uzura; v_id_operatie_mf := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_dataconservare, v_cauza, v_id_util, i, v_datadoc, v_nrdoc, v_id_tip_iesire); v_data_calcul := add_months(v_data, 1); pack_imob.adauga_rata(v_schema, v_id_operatie_mf, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_data_calcul, v_valoare, v_valoare_ramasa, v_uzura, i); end loop; if v_buncapital = 1 then if v_tip = 1 then pack_imob.adauga_buncapital(v_id_mf, v_nrdoc, v_datadoc, v_bazaTva, 0, v_idcotaTva, 0, v_id_tip_operatie, v_tva, v_prorataTva); else pack_imob.adauga_buncapital(v_id_mf, v_nrdoc, v_datadoc, v_bazaTva, 0, v_idcotaTva, v_tva, v_id_tip_operatie, 0, v_prorataTva); end if; end if; ELSE IF v_tip = 1 THEN v_mesaj := 'Data intrarii in conservare trebuie sa fie din luna curenta!'; ELSE v_mesaj := 'Data iesirii din conservare trebuie sa fie din luna curenta!'; END IF; RAISE_APPLICATION_ERROR(-20001, v_mesaj); END IF; END inreg_conservare; --------------------------------------------------------------------------------------------- PROCEDURE inreg_schimbdns(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_codnou IN VARCHAR2, v_dnsnou IN NUMBER, v_dataschimbare IN DATE, v_cauza IN VARCHAR2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number) IS v_verificareluni number; v_valoare number; v_valoare_ramasa number; --v_rata number; v_uzura_calc number; v_codvechi varchar2(30); v_dns_ramas_nou number; v_dns_vechi number; v_id_tip_operatie number := 8; v_uzura_prec number; v_data_calcul date; v_id_operatie_mf number; i number; --v_cauza varchar2(10); v_data date; v_cond varchar2(250); crsMf pack_types.tip_cursor; item tip_valori_mf; v_valoare_reziduala number; v_id_tip_iesire imob_tipuri_iesire.id%type; BEGIN v_verificareluni := months_between(v_dataschimbare, pack_sesiune.getUltimaZi()); IF v_verificareluni > -1 and v_verificareluni <= 0 THEN -- operatia trebuie sa fie din luna curenta v_data := to_date(extract(month from v_dataschimbare) || '/' || extract(year from v_dataschimbare), 'MM/YYYY'); v_cond := 'n.id_mf = ' || to_char(v_id_mf); i := 0; for i in 0 .. v_fiscala loop /* crsMf := pack_imob.valori_calcul(v_schema, v_id_sucursala, v_data, v_data, v_cond, i);*/ crsMF := pack_imob.valori_calcul_view(v_id_mf, v_data, i); fetch crsMf into item; v_valoare := item.valoare; v_dns_vechi := item.dns_luni; v_valoare_ramasa := item.valoare - item.amort_prec; v_uzura_calc := item.uzura - 1; v_codvechi := item.cod_mf; v_valoare_reziduala := item.valoare_reziduala; close crsMf; -- 27.02.2013 : am pus case in loc de 1 - (v_uzura_calc / v_dns_vechi) pentru cazul --in care aveam v_dns_vechi = 0 IF v_dns_vechi = 0 THEN v_dns_ramas_nou := v_dnsnou; ELSE v_dns_ramas_nou := (v_dnsnou-nvl(v_uzura_calc,0)); END IF; IF (v_codvechi <> v_codnou OR v_dns_vechi <> v_dnsnou) and i = 0 THEN --sa intre doar o data pack_imob.add_in_lista_mf(v_schema, v_id_mf, v_dnsnou, v_codnou, item.cont, item.acont, item.id_lucrare, item.id_gestiune, item.id_sectie, item.id_responsabil, item.id_sucursala, item.nr_inventar, v_id_util, v_dataschimbare, v_dns_ramas_nou, item.amort_max_deductibil); END IF; v_id_operatie_mf := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas_nou, v_valoare_reziduala, v_dataschimbare, v_cauza, v_id_util, i, v_datadoc, v_nrdoc, v_id_tip_iesire); v_data_calcul := v_dataschimbare; v_uzura_prec := v_dnsnou - v_dns_ramas_nou; pack_imob.adauga_rata(v_schema, v_id_operatie_mf, v_id_tip_operatie, v_id_mf, v_dns_ramas_nou, v_data_calcul, v_valoare, v_valoare_ramasa, v_uzura_prec, i); end loop; ELSE RAISE_APPLICATION_ERROR(-20001, 'Data schimbarii DNS trebuie sa fie din luna curenta!'); END IF; END inreg_schimbdns; --------------------------------------------------------------------------------------------- PROCEDURE inreg_gest(v_schema IN VARCHAR2, v_id_sucursala in imob_lista_mf.id_sucursala%type, v_id_mf IN NUMBER, v_tip IN NUMBER, v_cauza IN VARCHAR2, v_dataschimbare IN DATE, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_buncapital in number, v_bazatva in number, v_idcotaTva in number, v_tva in number, v_prorataTva in number, v_id_tip_iesire in imob_tipuri_iesire.id%type default null) IS v_verificareluni number; v_valoare number; v_valoare_ramasa number; v_dns_ramas number; v_dns number; v_id_tip_operatie number; --v_amortizare number; v_id_operatie_mf number; v_mesaj varchar2(100); v_uzura_prec number; --v_uzura_rata number; v_uzura number; v_amort_prec number; i number; --v_rata number; v_data date; v_cond varchar2(200); crsMF PACK_TYPES.tip_cursor; item tip_valori_mf; v_valoare_reziduala number; BEGIN v_verificareluni := months_between(v_dataschimbare, pack_sesiune.getUltimaZi()); IF v_verificareluni > -1 and v_verificareluni <= 0 THEN -- operatia trebuie sa fie din luna curenta v_data := to_date(extract(month from v_dataschimbare) || '/' || extract(year from v_dataschimbare), 'MM/YYYY'); v_cond := 'n.id_mf = ' || to_char(v_id_mf); i := 0; for i in 0 .. v_fiscala loop /* crsMf := pack_imob.valori_calcul(v_schema, v_id_sucursala, v_data, v_data, v_cond, i);*/ crsMF := pack_imob.valori_calcul_view(v_id_mf, v_data, i); fetch crsMf into item; v_valoare := item.valoare; v_dns := item.dns_luni; v_amort_prec := item.amort_prec; --v_rata := item.rata; v_uzura := item.uzura - 1; v_uzura_prec := item.uzura_prec; v_valoare_reziduala := item.valoare_reziduala; --dbms_output.put_line('valoare ' || v_valoare); close crsMf; IF v_tip = 1 THEN -- iesire din gestiune v_id_tip_operatie := 4; ELSE -- intrare in gestiune v_id_tip_operatie := 5; v_uzura := v_uzura_prec; --(nu stiu dc numar si lunile de iesire) END IF; v_valoare_ramasa := v_valoare - v_amort_prec; v_dns_ramas := v_dns - v_uzura; v_id_operatie_mf := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_dataschimbare, v_cauza, v_id_util, i, v_datadoc, v_nrdoc, v_id_tip_iesire); pack_imob.adauga_rata(v_schema, v_id_operatie_mf, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_data, v_valoare, v_valoare_ramasa, v_uzura, i); end loop; if v_buncapital = 1 then if v_tip = 1 then pack_imob.adauga_buncapital(v_id_mf, v_nrdoc, v_datadoc, v_bazaTva, 0, v_idcotaTva, 0, v_id_tip_operatie, v_tva, v_prorataTva); else pack_imob.adauga_buncapital(v_id_mf, v_nrdoc, v_datadoc, v_bazaTva, 0, v_idcotaTva, v_tva, v_id_tip_operatie, 0, v_prorataTva); end if; end if; ELSE IF v_tip = 1 THEN v_mesaj := 'Data iesirii din gestiune trebuie sa fie din luna curenta!'; ELSE v_mesaj := 'Data intrarii in gestiune trebuie sa fie din luna curenta!'; END IF; RAISE_APPLICATION_ERROR(-20001, v_mesaj); END IF; END inreg_gest; --------------------------------------------------------------------------------------------- -- SE ADAUGA OPERATIA TRANSFORMARE IN MIJLOC FIX PENTRU IMOBILIZARI IN CURS --------------------------------------------------------------------------------------------- PROCEDURE inreg_transformare_in_mf(v_schema IN VARCHAR2, v_id_mf IN NUMBER, v_id_mf_nou IN NUMBER, v_datamodificare IN DATE, v_nract IN NUMBER, v_dataact IN DATE, v_denumire IN VARCHAR2, v_explicatia IN VARCHAR2, v_valoare IN NUMBER, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_nr_inventar IN NUMBER, v_cod IN VARCHAR2, v_dns IN NUMBER, v_uzura IN NUMBER, v_dns_ramas IN NUMBER, v_valoare_ramasa IN NUMBER, v_valoare_retinuta IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_tip_amortizare IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_id_tip_operatie in number DEFAULT 3) IS v_id_operatie_mf number := 0; v_id_operatie_nou number := 0; v_valoare_reziduala number := 0; -- valoare reziduala a unei imobilizari in curs = 0 v_id_tip_iesire imob_tipuri_iesire.id%type; BEGIN IF nvl(v_id_mf, 0) = 0 THEN RAISE_APPLICATION_ERROR(-20000, 'Nu este completat id-ul imobilizarii in curs!'); END IF; UPDATE IMOB_NOM_MF SET DENUMIRE = v_denumire, EXPLICATIA = v_explicatia, DATA_ACHIZITIE = v_dataact, DATA_PIF = v_data_pif, ID_TIP_AMORTIZARE = v_id_tip_amortizare, ID_TIP_IMOBILIZARE = v_id_tip_imobilizare, ID_UTIL = v_id_util, NRACT = v_nract, NR_PIF = v_nr_pif WHERE ID_MF = v_id_mf; pack_imob.add_in_lista_mf(v_schema, v_id_mf, v_dns, v_cod, v_cont, v_acont, v_id_lucrare, v_id_gestiune, v_id_sectie, v_id_responsabil, v_id_sucursala, v_nr_inventar, v_id_util, v_datamodificare, v_dns_ramas, v_amort_max_deductibil); v_id_operatie_mf := pack_imob.add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_datamodificare, v_explicatia, v_id_util, v_fiscala, v_datadoc, v_nrdoc, v_id_tip_iesire); pack_imob.adauga_rata(v_schema, v_id_operatie_mf, v_id_tip_operatie, v_id_mf, v_dns_ramas, v_datamodificare, v_valoare, v_valoare_ramasa, v_uzura, v_fiscala); -- inregistrez (id_mf_nou, id_operatie_nou, id_imobilizare_curs, id_operatie_curs, valoare) select min(id_operatie_mf) into v_id_operatie_nou from imob_operatii_mf where id_mf = v_id_mf_nou; pack_imob.adauga_la_transformare(v_id_mf_nou, v_id_operatie_nou, v_id_mf, v_id_operatie_mf, v_valoare_retinuta); END inreg_transformare_in_mf; --------------------------------------------------------------------------------------------- -- MODIFICARE CU ISTORIC -- schimba_mf: cand se modifica valori din nomenclator/lista/operatie/rata mobilizare (lista, operatie, rata) -- din butonul frm_lista.modificare() -- se sterg vechile operatii, rate si se adauga inregistrari noi --------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------- procedure schimba_mf(v_id_mf IN NUMBER, v_nract IN NUMBER, v_data_achizitie IN DATE, v_denumire IN VARCHAR2, v_explicatie_n IN VARCHAR2, v_data_pif IN DATE, v_nr_pif IN NUMBER, v_procent IN NUMBER, v_coeficient IN NUMBER, v_id_tip_amortizare IN NUMBER, v_id_tip_imobilizare IN NUMBER, v_id_lista_mf IN NUMBER, v_dns_luni IN NUMBER, v_Cod_mf IN VARCHAR2, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_nr_inventar IN NUMBER, v_id_gestiune IN NUMBER, v_id_responsabil IN NUMBER, v_id_sectie IN NUMBER, v_id_lucrare IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_lper_in in VARCHAR2, v_lper_fin in VARCHAR2, v_id_operatie_mf IN NUMBER, v_id_tip_operatie in NUMBER, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_dns_ramas in NUMBER, v_valoare_reziduala IN NUMBER, v_data_operatie in DATE, v_explicatie_o in VARCHAR2, v_uzura_prec in NUMBER, v_id_rata in NUMBER, v_rper_in in VARCHAR2, v_rper_fin in VARCHAR2, v_rata in NUMBER, v_cota_an in NUMBER, v_cota_luna in NUMBER, v_ultima_rata in NUMBER, v_data_ultima_rata in DATE, v_fiscala in NUMBER, v_id_util IN NUMBER, v_amort_max_deductibil IN NUMBER, v_nrdoc IN IMOB_OPERATII_MF.NRDOC%TYPE DEFAULT NULL, v_datadoc in IMOB_OPERATII_MF.DATADOC%TYPE DEFAULT NULL) IS tnLuna number := 0; tnLunaExp number := 0; tnAn number := 0; tnAnExp number := 0; v_amort_prec number := 0; v_table_operatii varchar2(30); v_table_rate varchar2(30); v_row_op imob_operatii_mf%ROWTYPE; v_row_opf imobf_operatii_mf%ROWTYPE; v_row_rate imob_calcul_rate%ROWTYPE; v_row_ratef imobf_calcul_rate%ROWTYPE; ldDataOra date := sysdate; lnIdRata imob_calcul_rate.id_calcul_rate%type := v_id_rata; begin if v_fiscala = 0 then v_table_operatii := 'imob_operatii_mf'; v_table_rate := 'imob_calcul_rate'; else v_table_operatii := 'imobf_operatii_mf'; v_table_rate := 'imobf_calcul_rate'; end if; UPDATE IMOB_NOM_MF SET nract = v_nract, data_achizitie = v_data_achizitie, denumire = v_denumire, explicatia = v_explicatie_n, data_pif = v_data_pif, nr_pif = v_nr_pif, procent = v_procent, coeficient = v_coeficient, id_tip_amortizare = v_id_tip_amortizare, id_tip_imobilizare = v_id_tip_imobilizare WHERE ID_MF = v_id_mf; tnLuna := to_number(substr(v_lper_in, 1, 2)); tnAn := to_number(substr(v_lper_in, 3, 4)); tnLunaExp := to_number(substr(v_lper_fin, 1, 2)); tnAnExp := to_number(substr(v_lper_fin, 3, 4)); /* EXECUTE IMMEDIATE 'UPDATE ' || v_schema || '.IMOB_LISTA_MF ' || 'SET NR_INVENTAR=:1,id_lucrare=:2,id_gestiune=:3,' || 'id_sectie=:4,id_responsabil=:5,dns_luni=:6,cod_mf=:7,cont=:8,acont=:9,an=:10,luna=:11,an_exp=:12,luna_exp=:13 WHERE ID_LISTA_MF =:14 ' USING v_nr_inventar, v_id_lucrare, v_id_gestiune, v_id_sectie, v_id_responsabil, v_dns_luni, v_Cod_mf, v_cont, v_acont, tnAn, tnLuna, tnAnExp, tnLunaExp, v_id_lista_mf;*/ pack_imob.modifica_lista_mf(v_id_mf, v_id_lista_mf, v_dns_luni, v_Cod_mf, v_cont, v_acont, v_nr_inventar, v_id_gestiune, v_id_responsabil, v_id_sectie, v_id_lucrare, v_id_sucursala, v_id_util, tnAn, tnLuna, tnAnExp, tnLunaExp, v_amort_max_deductibil); -------------------------------------- tnLuna := to_number(substr(v_rper_in, 1, 2)); tnAn := to_number(substr(v_rper_in, 3, 4)); tnLunaExp := to_number(substr(v_rper_fin, 1, 2)); tnAnExp := to_number(substr(v_rper_fin, 3, 4)); v_amort_prec := v_valoare - v_valoare_ramasa; -- if v_id_tip_imobilizare <> 3 then -- imobilizarile in curs nu au operatii si rate if v_fiscala = 0 then -- imobilizarile in curs nu transmit informatiile despre rate (nu au rate), dar sunt necesare -- determin id_rata in functie de id_operate if v_id_tip_imobilizare = 3 and nvl(lnIdRata, 0) = 0 then select id_calcul_rate into lnIdRata from imob_calcul_rate a where a.id_operatie_mf = v_id_operatie_mf; end if; if nvl(v_id_operatie_mf, 0) = 0 or nvl(lnIdRata, 0) = 0 then RAISE_APPLICATION_ERROR(-20000, 'Nu este completat Id operatie sau Id rata!'); end if; select * into v_row_op from imob_operatii_mf where id_operatie_mf = v_id_operatie_mf; select * into v_row_rate from imob_calcul_rate where id_calcul_rate = lnIdRata; UPDATE imob_operatii_mf SET sters = 1, id_util_sters = v_id_util, dataora_sters = ldDataOra WHERE id_operatie_mf = v_id_operatie_mf; v_row_op.valoare := v_valoare; v_row_op.valoare_ramasa := v_valoare_ramasa; v_row_op.dns_ramas := v_dns_ramas; v_row_op.valoare_reziduala := v_valoare_reziduala; v_row_op.data_operatie := v_data_operatie; v_row_op.explicatia := v_explicatie_o; v_row_op.id_tip_operatie := v_id_tip_operatie; v_row_op.id_util := v_id_util; v_row_op.dataora := ldDataOra; v_row_op.nrdoc := NVL(v_nrdoc, v_row_op.nrdoc); v_row_op.datadoc := NVL(v_datadoc, v_row_op.datadoc); insert into imob_operatii_mf values v_row_op returning id_operatie_mf into v_row_op.id_operatie_mf; UPDATE imob_calcul_rate SET sters = 1 WHERE id_calcul_rate = lnIdRata; v_row_rate.rata := v_rata; v_row_rate.cota_An := v_cota_an; v_row_rate.cota_luna := v_cota_luna; v_row_rate.ultima_rata := v_ultima_rata; v_row_rate.data_ultima_rata := v_data_ultima_rata; v_row_rate.an := tnAn; v_row_rate.luna := tnLuna; v_row_rate.an_exp := tnAnExp; v_row_rate.luna_exp := tnLunaExp; v_row_rate.uzura_prec := v_uzura_prec; v_row_rate.amortizare_prec := v_amort_prec; v_row_rate.id_operatie_mf := v_row_op.id_operatie_mf; insert into imob_calcul_rate values v_row_rate returning id_calcul_rate into v_row_rate.id_calcul_rate; else -- imobilizarile in curs nu transmit informatiile despre rate (nu au rate), dar sunt necesare -- determin id_rata in functie de id_operate if v_id_tip_imobilizare = 3 and nvl(lnIdRata, 0) = 0 then begin select id_calcul_rate into lnIdRata from imobf_calcul_rate a where a.id_operatie_mf = v_id_operatie_mf; exception when NO_DATA_FOUND then RAISE_APPLICATION_ERROR(-20000, 'Nu este completat Id operatie sau Id rata!'); end; end if; if nvl(v_id_operatie_mf, 0) = 0 or nvl(lnIdRata, 0) = 0 then RAISE_APPLICATION_ERROR(-20000, 'Nu este completat Id operatie sau Id rata!'); end if; select * into v_row_opf from imobf_operatii_mf where id_operatie_mf = v_id_operatie_mf; select * into v_row_ratef from imobf_calcul_rate where id_calcul_rate = lnIdRata; UPDATE imobf_operatii_mf SET sters = 1, id_util_sters = v_id_util, dataora_sters = ldDataOra WHERE id_operatie_mf = v_id_operatie_mf; v_row_opf.valoare := v_valoare; v_row_opf.valoare_ramasa := v_valoare_ramasa; v_row_opf.dns_ramas := v_dns_ramas; v_row_opf.data_operatie := v_data_operatie; v_row_opf.explicatia := v_explicatie_o; v_row_opf.id_tip_operatie := v_id_tip_operatie; insert into imobf_operatii_mf values v_row_opf returning id_operatie_mf into v_row_opf.id_operatie_mf; UPDATE imobf_calcul_rate SET sters = 1 WHERE id_calcul_rate = lnIdRata; v_row_ratef.rata := v_rata; v_row_ratef.cota_An := v_cota_an; v_row_ratef.cota_luna := v_cota_luna; v_row_ratef.ultima_rata := v_ultima_rata; v_row_ratef.data_ultima_rata := v_data_ultima_rata; v_row_ratef.an := tnAn; v_row_ratef.luna := tnLuna; v_row_ratef.an_exp := tnAnExp; v_row_ratef.luna_exp := tnLunaExp; v_row_ratef.uzura_prec := v_uzura_prec; v_row_ratef.amortizare_prec := v_amort_prec; v_row_ratef.id_operatie_mf := v_row_opf.id_operatie_mf; insert into imobf_calcul_rate values v_row_ratef returning id_calcul_rate into v_row_ratef.id_calcul_rate; end if; -- end if; end schimba_mf; ------------------------------------------------------------------------------------------------ procedure sterge_mf(v_id_mf IN NUMBER, v_id_util IN number default null) IS begin for item in (select id_operatie_mf, id_operatie_prec, 0 as fiscala from imob_operatii_mf where id_mf = v_id_mf order by id_operatie_mf desc) loop pack_imob.sterge_operatie_mf(item.id_operatie_mf, item.id_operatie_prec, item.fiscala); end loop; for item in (select id_operatie_mf, id_operatie_prec, 1 as fiscala from imobf_operatii_mf where id_mf = v_id_mf order by id_operatie_mf desc) loop pack_imob.sterge_operatie_mf(item.id_operatie_mf, item.id_operatie_prec, item.fiscala); end loop; UPDATE imob_lista_mf SET sters = 1 WHERE id_mf = v_id_mf and sters = 0; update imob_nom_mf set sters = 1, dataora_sters = sysdate, id_util_sters = v_id_util where id_mf = v_id_mf; end sterge_mf; ------------------------------------------------------------------------------------------------ /* function add_operatie_mf(v_schema IN VARCHAR2, v_id_mf IN NUMBER, v_id_tip_operatie IN NUMBER, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_dns_ramas IN NUMBER, v_data_operatie IN DATE, v_explicatia_operatie IN VARCHAR2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_id_tip_iesire in imob_tipuri_iesire.id%type default null) return number as -- am adaugat v_valoare_reziduala pentru compatibilitate v_id_operatie_mf number := 0; v_valoare_reziduala number := 0; begin v_id_operatie_mf := add_operatie_mf(v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_data_operatie, v_explicatia_operatie, v_id_util, v_fiscala, v_datadoc, v_nrdoc, v_id_tip_iesire); end add_operatie_mf;*/ function add_operatie_mf(v_id_mf IN NUMBER, v_id_tip_operatie IN NUMBER, v_valoare IN NUMBER, v_valoare_ramasa IN NUMBER, v_dns_ramas IN NUMBER, v_valoare_reziduala IN NUMBER, v_data_operatie IN DATE, v_explicatia_operatie IN VARCHAR2, v_id_util IN NUMBER, v_fiscala in number, v_datadoc in date, v_nrdoc in number, v_id_tip_iesire in imob_tipuri_iesire.id%type default null) return number as v_id_operatie_prec number := 0; v_id_operatie_mf number := 0; v_view varchar2(30) := 'imob_vultima_operatie'; v_table varchar2(30) := 'IMOB_OPERATII_MF'; begin if v_fiscala = 1 then v_view := 'imobf_vultima_operatie_fiscala'; v_table := 'IMOBF_OPERATII_MF'; else v_view := 'imob_vultima_operatie'; v_table := 'IMOB_OPERATII_MF'; end if; BEGIN Execute immediate 'SELECT id_operatie_mf FROM ' || v_view || ' where id_mf = :1' into v_id_operatie_prec using v_id_mf; EXCEPTION WHEN OTHERS THEN v_id_operatie_prec := 0; END; EXECUTE IMMEDIATE 'INSERT /*+APPEND*/ INTO ' || v_table || '(ID_MF,ID_TIP_OPERATIE,VALOARE,valoare_ramasa,DNS_RAMAS,VALOARE_REZIDUALA,DATA_OPERATIE,EXPLICATIA,ID_UTIL,id_operatie_prec,datadoc,nrdoc, id_tip_iesire) ' || 'VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13) RETURNING ID_OPERATIE_MF INTO :14' USING v_id_mf, v_id_tip_operatie, v_valoare, v_valoare_ramasa, v_dns_ramas, v_valoare_reziduala, v_data_operatie, v_explicatia_operatie, v_id_util, v_id_operatie_prec, v_datadoc, v_nrdoc, v_id_tip_iesire RETURNING INTO v_id_operatie_mf; return v_id_operatie_mf; end add_operatie_mf; --------------------------------------------------------------------------------------------- procedure add_in_lista_mf(v_schema IN VARCHAR2, v_id_mf IN NUMBER, v_dns IN NUMBER, v_cod_mf IN VARCHAR2, v_cont IN VARCHAR2, v_acont IN VARCHAR2, v_id_lucrare IN NUMBER, v_id_gestiune IN NUMBER, v_id_sectie IN NUMBER, v_id_responsabil IN NUMBER, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_nr_inventar IN NUMBER, v_id_util IN NUMBER, v_data_calcul IN DATE, v_durata IN NUMBER, v_amort_max_deductibil IN NUMBER) IS v_data_exp date; v_an number; v_luna number; v_an_exp number; v_luna_exp number; v_data_prec date; v_an_prec number; v_luna_prec number; begin v_data_exp := add_months(v_data_calcul, v_durata); v_an := extract(year from v_data_calcul); v_luna := extract(month from v_data_calcul); v_an_exp := extract(year from v_data_exp); v_luna_exp := extract(month from v_data_exp); v_data_prec := add_months(v_data_calcul, -1); v_an_prec := extract(year from v_data_prec); v_luna_prec := extract(month from v_data_prec); -- inactivez inregistrarile precedente pt un MF dc sunt facute in aceeasi luna /* EXECUTE IMMEDIATE 'UPDATE ' || v_schema || '.IMOB_LISTA_MF ' || 'SET inactiv = 1 ' || 'WHERE ID_MF=:1 AND AN*12+LUNA =:2 AND STERS=0' USING v_id_mf, v_an * 12 + v_luna;*/ -- setez data expirare pt precedenta activa UPDATE IMOB_LISTA_MF SET an_exp = v_an_prec, luna_exp = v_luna_prec WHERE ID_MF = v_id_mf and AN_EXP * 12 + LUNA_EXP > v_an * 12 + v_luna AND STERS = 0 AND INACTIV = 0; -- inserez linie noua INSERT /*+APPEND*/ INTO IMOB_LISTA_MF (ID_MF, DNS_LUNI, NR_INVENTAR, COD_MF, CONT, ACONT, ID_LUCRARE, ID_GESTIUNE, ID_SECTIE, ID_RESPONSABIL, ID_SUCURSALA, ID_UTIL, AN, LUNA, AN_EXP, LUNA_EXP, AMORT_MAX_DEDUCTIBIL) VALUES (v_id_mf, v_dns, v_nr_inventar, trim(v_cod_mf), trim(v_cont), trim(v_acont), v_id_lucrare, v_id_gestiune, v_id_sectie, v_id_responsabil, v_id_sucursala, v_id_util, v_an, v_luna, v_an_exp, v_luna_exp, v_amort_max_deductibil); end add_in_lista_mf; ------------------------------------------------------------------------------------------ procedure adauga_la_transformare(v_id_mf_nou IN NUMBER, v_id_operatie_nou IN NUMBER, v_id_mf_curs IN NUMBER, v_id_operatie_curs IN NUMBER, v_valoare IN NUMBER) IS begin INSERT INTO IMOB_TRANSFORMARE_MF (ID_MF_NOU, ID_OPERATIE_NOU, ID_MF_VECHI, ID_OPERATIE_CURS, VALOARE) VALUES (v_id_mf_nou, v_id_operatie_nou, v_id_mf_curs, v_id_operatie_curs, v_valoare); end adauga_la_transformare; ------------------------------------------------------------------------------------------------------- -- se apeleaza din sterge_operatie_mf cand sterg operatia de transformare imobilizare in curs in mijlocul fix ------------------------------------------------------------------------------------------------------- procedure undo_in_imobilizare_in_curs(v_id_tip_imobilizare IN NUMBER, v_id_operatie IN NUMBER) IS lnIdUtil imob_operatii_mf.id_util%type; lnIdOperatieCurs imob_operatii_mf.id_operatie_mf%type; begin lnIdUtil := pack_contafin.GET_IDUTIL(); IF v_id_tip_imobilizare <> 3 THEN -- sterg operatia de transformare in mijloc fix -- doar daca operatia apartine unei imobilizari corporale/necorporale -- nu si pentru o imobilizare in curs UPDATE IMOB_OPERATII_MF SET STERS = 1, DATAORA_STERS = SYSDATE, ID_UTIL_STERS = lnIdUtil WHERE id_operatie_mf in (SELECT ID_OPERATIE_CURS FROM IMOB_TRANSFORMARE_MF WHERE ID_OPERATIE_NOU = v_id_operatie); DELETE FROM IMOB_TRANSFORMARE_MF WHERE ID_OPERATIE_NOU = v_id_operatie; else DELETE FROM IMOB_TRANSFORMARE_MF WHERE ID_OPERATIE_CURS = v_id_operatie; END IF; end undo_in_imobilizare_in_curs; ------------------------------------------------------------------------------------------------------- procedure recalculat_expirarea(v_schema IN VARCHAR2, v_id_operatie_prec IN NUMBER, v_fiscala IN NUMBER) is v_an_exp number; v_luna_exp number; v_dns_ramas number; v_data date; v_table_operatii varchar2(30); v_table_rate varchar2(30); begin if v_fiscala = 0 then v_table_operatii := 'imob_operatii_mf'; v_table_rate := 'imob_calcul_rate'; else v_table_operatii := 'imobf_operatii_mf'; v_table_rate := 'imobf_calcul_rate'; end if; EXECUTE IMMEDIATE 'SELECT dns_ramas FROM ' || v_schema || '.' || v_table_operatii || ' WHERE ID_operatie_mf=:1' INTO v_dns_ramas USING v_id_operatie_prec; EXECUTE IMMEDIATE 'SELECT an,luna FROM ' || v_schema || '.' || v_table_rate || ' WHERE ID_operatie_mf=:1' INTO v_an_exp, v_luna_exp USING v_id_operatie_prec; v_data := to_date(to_char(v_an_exp) || lpad(to_char(v_luna_exp), 2, 0) || '01', 'yyyymmdd'); v_data := add_months(v_data, v_dns_ramas - 1); v_an_exp := extract(year from v_data); v_luna_exp := extract(month from v_data); EXECUTE IMMEDIATE 'UPDATE ' || v_schema || '.' || v_table_rate || 'SET an_exp=:1,luna_exp=:2 WHERE ID_operatie_mf =:3' USING v_an_exp, v_luna_exp, v_id_operatie_prec; end recalculat_expirarea; ------------------------------------------------------------------------------------------------------ FUNCTION get_max_id(v_schema IN VARCHAR2, v_tabela IN VARCHAR2, v_nume_id IN VARCHAR2) return number is v_id_max NUMBER := 0; begin EXECUTE IMMEDIATE 'SELECT MAX(' || V_NUME_ID || ') AS ID_MAX FROM ' || V_SCHEMA || '.' || V_TABELA INTO V_ID_MAX; return v_id_max; end get_max_id; ------------------------------------------------------------------------------------------------------- procedure CALCUL_SITUATIE_LUNARA(v_datain in date, v_datasf in date, v_cond in varchar2, v_fiscala in number, v_id_sucursala in number, crsMF out PACK_TYPES.tip_cursor) is begin pack_imob.CALCUL_SITUATIE_LUNARA2(v_datain, v_datasf, v_cond, v_fiscala, v_id_sucursala, 0, crsMF); end; ------------------------------------------------------------------------------------------------------ /* PROCEDURE VIZUALIZARE_LISTA(V_DATAIN IN DATE, V_DATASF IN DATE, V_COND IN VARCHAR2, V_FISCALA IN NUMBER, V_ID_SUCURSALA IN NUMBER, V_TIP_SELECTIE IN NUMBER DEFAULT 0, CRSMF OUT PACK_TYPES.TIP_CURSOR) IS CRSMF PACK_TYPES.TIP_CURSOR; BEGIN PACK_IMOB.CALCUL_SITUATIE_LUNARA2(V_DATAIN => :V_DATAIN, V_DATASF => :V_DATASF, V_COND => :V_COND, V_FISCALA => :V_FISCALA, V_ID_SUCURSALA => :V_ID_SUCURSALA, V_TIP_SELECTIE => :V_TIP_SELECTIE, CRSMF => :CRSMF); END VIZUALIZARE_LISTA;*/ procedure CALCUL_SITUATIE_LUNARA2(v_datain in date, v_datasf in date, v_cond in varchar2, v_fiscala in number, v_id_sucursala in number, v_tip_selectie in number, crsMF out PACK_TYPES.tip_cursor) is -- v_tip_selectie: 0 (default), 1 = se apeleaza selectul din pack_mg_evolutie cu mai putine coloane lcSql varchar2(32000); /* uw_selection uw_sel_tab := uw_sel_tab();*/ lnMf number(10) := 0; lnIdMf number(10) := 0; lnIdLista number(10) := 0; lnIdOperatie number(10) := 0; lnIdOperatieAchizitie number(10) := 0; lnIdOperatiePrec number(10) := 0; lnIdCalcul number(10) := 0; lnIdListaRezerva number(10) := 0; lnIdCalculRezerva number(10) := 0; ignore number(4); lnDataTest number(10) := 0; llInserez number(1) := 0; v_table_operatii varchar2(40) := 'IMOB_OPERATII_MF'; v_table_rata varchar2(40) := 'IMOB_CALCUL_RATE'; v_view_operatii varchar2(40) := 'IMOB_VOPERATII_MF'; v_view_rata varchar2(40) := 'IMOB_VCALCUL_RATE'; lcWhere varchar2(1000); i number(20) := 0; begin DELETE FROM TUW_SEL_TAB; if v_id_sucursala is not null then lcWhere := case when v_cond is not null then v_cond || ' and l.id_sucursala = ' || v_id_sucursala else ' l.id_sucursala = ' || v_id_sucursala end; else lcWhere := v_cond; end if; if lcWhere is not null then lcWhere := ' where ' || lcWhere; end if; if v_fiscala = 1 then v_table_operatii := 'IMOBF_OPERATII_MF'; v_table_rata := 'IMOBF_CALCUL_RATE'; v_view_operatii := 'IMOBF_VOPERATII_MF'; v_view_rata := 'IMOBF_VCALCUL_RATE'; end if; lcSql := 'select nvl(n.id_mf, 0) as id_mf, nvl(l.id_lista_mf, 0) as id_lista_mf, nvl(o.id_operatie_mf, 0) as id_operatie_mf, nvl(o.id_operatie_achizitie, 0) as id_operatie_achizitie, nvl(o.id_operatie_prec, 0) as id_operatie_prec, nvl(c.id_calcul_rate, 0) as id_calcul_rate, nvl(s.id_lista_rezerva, 0) as id_lista_rezerva, nvl(x.id_calcul_rate, 0) as id_calcul_rezerva from (select o1.id_operatie_mf, o1.id_mf, o1.id_operatie_prec, o2.id_operatie_achizitie from (select id_operatie_mf, id_mf, id_operatie_prec from ' || v_table_operatii || ' where sters = 0) o1 join (select distinct first_value(id_operatie_mf) over(partition by id_mf order by data_operatie desc) as id_operatie_mf, first_value(id_operatie_mf) over(partition by id_mf order by data_operatie asc) as id_operatie_achizitie from ' || v_table_operatii || ' where extract(month from data_operatie) + extract(year from data_operatie) * 12 <= :1 and sters = 0 and id_operatie_mf in (select distinct id_operatie_mf from ' || v_table_rata || ' where sters = 0)) o2 on o1.id_operatie_mf = o2.id_operatie_mf) o join imob_nom_mf n on o.id_mf = n.id_mf and n.sters = 0 left join (select distinct max(id_lista_mf) over(partition by id_mf) as id_lista_mf,id_mf from imob_lista_mf where :2 between (an * 12 + luna) and (an_exp * 12 + luna_exp) and sters = 0) l on o.id_mf = l.id_mf left join (select id_mf, id_lista_mf as id_lista_rezerva from imob_lista_mf where id_lista_mf in (select first_value(id_lista_mf) over (partition by id_mf order by (an*12 + luna) desc) as id_lista_rezerva from imob_lista_mf where an*12 + luna <= :3 and (an_exp*12 + luna_exp - an*12 -luna)>=0 and sters=0)) s on s.id_mf = o.id_mf left join (select distinct max(id_calcul_rate) over(partition by id_mf) as id_calcul_rate,id_mf from ' || v_table_rata || ' where :4 between (an * 12 + luna) and (an_exp * 12 + luna_exp) and sters = 0) c on o.id_mf = c.id_mf left join (select distinct min(id_calcul_rate) over(partition by id_operatie_mf) as id_calcul_rate, id_operatie_mf from ' || v_table_rata || ' where sters = 0) x on x.id_operatie_mf = o.id_operatie_mf'; --pinfo(lcSql, 'IMOBILIZARI 1'); FOR ITEM IN (SELECT data_test FROM ani_luni where data_test between v_datain and v_datasf order by data_test) LOOP lnDataTest := extract(month from item.data_test) + extract(year from item.data_test) * 12; /* execute immediate 'SELECT uw_sel_row(data_test, id_mf, id_lista_mf, id_operatie_mf, id_calcul_rate) BULK COLLECT INTO uw_selection FROM (' || lcSql || ')' using item.data_test,lnDataTest, lnDataTest;*/ lnMF := dbms_sql.open_cursor; DBMS_SQL.PARSE(lnMf, lcSql, DBMS_SQL.native); DBMS_SQL.DEFINE_COLUMN(lnMf, 1, lnIdMf); DBMS_SQL.DEFINE_COLUMN(lnMf, 2, lnIdLista); DBMS_SQL.DEFINE_COLUMN(lnMf, 3, lnIdOperatie); DBMS_SQL.DEFINE_COLUMN(lnMf, 4, lnIdOperatieAchizitie); DBMS_SQL.DEFINE_COLUMN(lnMf, 5, lnIdOperatiePrec); DBMS_SQL.DEFINE_COLUMN(lnMf, 6, lnIdCalcul); DBMS_SQL.DEFINE_COLUMN(lnMf, 7, lnIdListaRezerva); DBMS_SQL.DEFINE_COLUMN(lnMf, 8, lnIdCalculRezerva); dbms_sql.bind_variable(lnMf, ':1', lnDataTest); dbms_sql.bind_variable(lnMf, ':2', lnDataTest); dbms_sql.bind_variable(lnMf, ':3', lnDataTest); dbms_sql.bind_variable(lnMf, ':4', lnDataTest); ignore := DBMS_SQL.EXECUTE(lnMf); LOOP IF DBMS_SQL.FETCH_ROWS(lnMf) > 0 THEN -- get column values of the row DBMS_SQL.COLUMN_VALUE(lnMf, 1, lnIdMf); DBMS_SQL.COLUMN_VALUE(lnMf, 2, lnIdLista); DBMS_SQL.COLUMN_VALUE(lnMf, 3, lnIdOperatie); DBMS_SQL.COLUMN_VALUE(lnMf, 4, lnIdOperatieAchizitie); DBMS_SQL.COLUMN_VALUE(lnMf, 5, lnIdOperatiePrec); DBMS_SQL.COLUMN_VALUE(lnMf, 6, lnIdCalcul); DBMS_SQL.COLUMN_VALUE(lnMf, 7, lnIdListaRezerva); DBMS_SQL.COLUMN_VALUE(lnMf, 8, lnIdCalculRezerva); if lnIdLista = 0 then lnIdLista := lnIdListaRezerva; end if; if lnIdCalcul = 0 then --select nvl(id_calcul_rate,0) into lnIdCalcul from imob_calcul_rate where id_operatie_mf = lnIdOperatie ; lnIdCalcul := lnIdCalculRezerva; end if; if lnIdCalcul <> 0 then llInserez := 1; else llInserez := 0; end if; if llInserez = 1 then I := I + 1; /* uw_selection.extend; uw_selection(i) := uw_sel_row(item.data_test, lnIdMf, lnIdLista, lnIdOperatie, lnIdOperatieAchizitie, lnIdCalcul);*/ insert into tuw_sel_tab (data_test, id_mf, id_lista_mf, id_operatie_mf, id_operatie_achizitie, id_operatie_prec, id_calcul_rate) values (item.data_test, lnIdMf, lnIdLista, lnIdOperatie, lnIdOperatieAchizitie, lnIdOperatiePrec, lnIdCalcul); end if; else exit; end if; -- DBMS_SQL.FETCH_ROWS(lnMf) > 0 end loop; dbms_sql.close_cursor(lnMf); end loop; if v_tip_selectie = 0 then -- 04.04.2007 -- rata doar daca o.id_tip_operatie <> 4 (ultima operatie nu este iesire din gestiune) lcSql := 'select a.data_test,a.id_mf,a.id_lista_mf,a.id_operatie_mf,a.id_calcul_rate ,n.denumire, n.data_achizitie, n.data_pif,n.explicatia,n.nract,n.nr_pif,n.procent,n.coeficient,n.id_tip_imobilizare,n.tip_imobilizare,n.id_tip_amortizare,n.tip_amortizare ,l.dns_luni,l.cont,l.acont,l.cod_mf,l.id_gestiune,l.gestiune,l.id_lucrare,l.nrord,l.id_responsabil,l.responsabil,l.id_sectie,l.sectie,l.id_sucursala,l.sucursala,l.nr_inventar,lpad(l.luna,2,''0'')|| l.an as lper_in,lpad(l.luna_exp,2,''0'')|| l.an_exp as lper_fin, l.amort_max_deductibil ,o.data_operatie,o.id_tip_operatie,o.denumire as ultima_operatie,o.explicatia as cauza,r.uzura_prec,o.dns_ramas ,(case o.id_tip_operatie when 4 then 1 else 0 end) as iesit_din_gest ,nvl(r.cota_an,0) as cota_an,nvl(r.cota_luna,0) as cota_luna,r.data_ultima_rata as data_expirare,nvl(r.ultima_rata,0) as ultima_rata ,o.valoare, o.valoare_ramasa, o.valoare_reziduala ,(case when a.data_test>= r.data_ultima_rata then (case when a.data_test = r.data_ultima_rata and o.id_tip_operatie <> 4 then r.ultima_rata else 0 end) else (case when a.data_test>=to_date(r.luna || ''/'' || r.an,''MM/YYYY'') and o.id_tip_operatie <> 4 then r.rata else 0 end) end) as rata ' || --',o.valoare_ramasa - (case when o.id_operatie_mf = r.id_operatie_mf then (r.rata*GREATEST(0,months_between(trunc(least(a.data_test,r.data_ultima_rata),''MM''),to_date(r.luna || ''/'' || r.an,''MM/YYYY''))) + (case when a.data_test >= r.data_ultima_rata then ultima_rata else (case when a.data_test r.data_ultima_rata then ultima_rata else 0 end) else 0 end) as amort_prec ' || ',r.amortizare_prec + r.rata*GREATEST(0,months_between(trunc(least(a.data_test,r.data_ultima_rata),''MM''),to_date(r.luna || ''/'' || r.an,''MM/YYYY''))) + (case when a.data_test > r.data_ultima_rata then r.ultima_rata else 0 end) as amort_prec ' || --',r.rata*GREATEST(0,months_between(trunc(least(a.data_test,r.data_ultima_rata),''MM''),to_date(r.luna || ''/'' || r.an,''MM/YYYY''))) + (case when a.data_test > r.data_ultima_rata then ultima_rata else 0 end) as amort_prec_rata ',r.uzura_prec + greatest(0,months_between(trunc(least(a.data_test,r.data_ultima_rata),''MM''),to_date(r.luna || ''/'' || r.an,''MM/YYYY'')) + 1) as uzura ,greatest(0,months_between(trunc(least(a.data_test,r.data_ultima_rata),''MM''),to_date(r.luna || ''/'' || r.an,''MM/YYYY'')) + 1) as uzura_rata ,lpad(r.luna,2,''0'')|| r.an as rper_in,lpad(r.luna_exp,2,''0'')|| r.an_exp as rper_fin ,o.valoare_rol,o.valoare_ramasa_rol,r.rata_rol,r.ultima_rata_rol, o2.valoare as valoare_achizitie, o3.valoare as valoare_prec, o.id_tip_iesire, i.tip as tip_iesire, greatest(0, months_between(r.data_ultima_rata,a.data_test)) as durata_ramasa '; else -- pentru apelul din pack_mg_evolutie lcSql := 'select l.cont, o.data_operatie, o.id_tip_iesire,o.valoare '; end if; --'from TABLE(cast(:1 as uw_sel_tab)) a ' || lcSql := lcSql || 'from tuw_sel_tab a ' || 'left join imob_vnom_mf n on a.id_mf = n.id_mf left join imob_vlista_mf l on a.id_lista_mf = l.id_lista_mf left join ' || v_view_operatii || ' o on a.id_operatie_mf = o.id_operatie_mf left join ' || v_view_operatii || ' o2 on a.id_operatie_achizitie = o2.id_operatie_mf left join ' || v_view_operatii || ' o3 on a.id_operatie_prec = o3.id_operatie_mf left join ' || v_view_rata || ' r on a.id_calcul_rate = r.id_calcul_rate left join imob_tipuri_iesire i on o.id_tip_iesire = i.id ' || lcWhere; --pinfo(lcSql, 'IMOBILIZARI 2'); open crsMF for lcSql; /* open crsMF for lcSql using uw_selection;*/ DELETE FROM TUW_SEL_TAB; end; ----------------------------------------------------------------------------------- function valori_calcul(v_schema in varchar2, v_id_sucursala in IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_datain in date, v_datasf in date, v_cond in varchar2, v_fiscala in number) return PACK_TYPES.tip_cursor is crsMF PACK_TYPES.tip_cursor; begin pack_imob.CALCUL_SITUATIE_LUNARA2(v_datain, v_datasf, v_cond, v_fiscala, v_id_sucursala, 0, crsMF); return crsMF; end valori_calcul; ----------------------------------------------------------------------------------- -- folosesc imob_vsituatie_lunara in loc de procedura calcul_situatie_lunara2 ----------------------------------------------------------------------------------- function valori_calcul_view(v_id_mf in number, v_data in date, v_fiscala in number) return PACK_TYPES.tip_cursor is crsMF PACK_TYPES.tip_cursor; begin pack_imob.setlunacurenta(v_data); if v_fiscala = 0 then open crsMF for select * from imob_vsituatie_lunara where id_mf = v_id_mf; else open crsMF for select * from imobf_vsituatie_lunara where id_mf = v_id_mf; end if; return crsMF; end valori_calcul_view; ----------------------------------------------------------------------------------- procedure sterge_operatie_mf(v_id_operatie IN NUMBER, v_id_operatie_prec IN NUMBER, v_fiscala IN NUMBER) IS lnID_Util act_temp.id_util%Type := 0; LD_DATAORA DATE; v_ultima_operatie number; v_dataop date; v_table_operatii varchar2(30); v_table_rate varchar2(30); v_id_tip_operatie imob_operatii_mf.id_tip_operatie%type; v_id_tip_imobilizare imob_nom_mf.id_tip_imobilizare%type; begin if v_fiscala = 0 then v_table_operatii := 'imob_operatii_mf'; v_table_rate := 'imob_calcul_rate'; else v_table_operatii := 'imobf_operatii_mf'; v_table_rate := 'imobf_calcul_rate'; end if; begin EXECUTE IMMEDIATE 'SELECT max(nvl(id_operatie_mf,0)), max(data_operatie) from ' || v_table_operatii || ' where id_operatie_prec = :1 and sters = 0 group by id_operatie_prec' into v_ultima_operatie, v_dataop using v_id_operatie; EXCEPTION WHEN OTHERS THEN v_ultima_operatie := 0; end; if v_ultima_operatie = 0 or v_ultima_operatie is null then EXECUTE IMMEDIATE 'SELECT max(id_tip_operatie), max(m.id_tip_imobilizare) from ' || v_table_operatii || ' o join imob_nom_mf m on o.id_mf = m.id_mf where id_operatie_mf = :1' into v_id_tip_operatie, v_id_tip_imobilizare using v_id_operatie; LNID_UTIL := pack_contafin.GET_IDUTIL(); LD_DATAORA := pack_contafin.GET_DATAORA(); EXECUTE IMMEDIATE 'UPDATE ' || v_table_operatii || ' SET STERS=1, id_util_sters = :1, dataora_sters = :2 WHERE ID_operatie_mf =: 3' USING lnId_Util, ld_dataora, v_id_operatie; EXECUTE IMMEDIATE 'UPDATE ' || v_table_rate || ' SET STERS=1 WHERE ID_operatie_mf =: 1' USING v_id_operatie; if v_id_operatie_prec <> 0 then EXECUTE IMMEDIATE 'UPDATE ' || v_table_rate || ' SET an_exp = extract(year from data_ultima_rata), luna_exp = extract(month from data_ultima_rata) WHERE ID_operatie_mf =: 1' using v_id_operatie_prec; end if; -- anulare transformare imobilizare in curs in mijloc fix -- doar daca sterg operatia din imobilizari corporale/necorporale -- nu apelez daca sterg operatia din imobilizari in curs if v_id_tip_operatie = 3 then pack_imob.undo_in_imobilizare_in_curs(v_id_tip_imobilizare, v_id_operatie); end if; else RAISE_APPLICATION_ERROR(-20000, '*Nu se poate sterge aceasta operatie. Exista o operatie pe acest MF in data de ' || v_dataop || '.*'); END IF; end sterge_operatie_mf; ----------------------------------------------------------------------------------------------------------------------------- procedure modifica_lista_mf(v_id_mf IN IMOB_LISTA_MF.ID_MF%TYPE, v_id_lista_mf IN IMOB_LISTA_MF.ID_LISTA_MF%TYPE, v_dns_luni IN IMOB_LISTA_MF.DNS_LUNI%TYPE, v_Cod_mf IN IMOB_LISTA_MF.COD_MF%TYPE, v_cont IN IMOB_LISTA_MF.CONT%TYPE, v_acont IN IMOB_LISTA_MF.ACONT%TYPE, v_nr_inventar IN IMOB_LISTA_MF.NR_INVENTAR%TYPE, v_id_gestiune IN IMOB_LISTA_MF.ID_GESTIUNE%TYPE, v_id_responsabil IN IMOB_LISTA_MF.ID_RESPONSABIL%TYPE, v_id_sectie IN IMOB_LISTA_MF.ID_SECTIE%TYPE, v_id_lucrare IN IMOB_LISTA_MF.ID_LUCRARE%TYPE, v_id_sucursala IN IMOB_LISTA_MF.ID_SUCURSALA%TYPE, v_id_util IN IMOB_LISTA_MF.ID_UTIL%TYPE, v_an IN IMOB_LISTA_MF.AN%TYPE, v_luna IN IMOB_LISTA_MF.LUNA%TYPE, v_an_exp IN IMOB_LISTA_MF.AN%TYPE, v_luna_exp IN IMOB_LISTA_MF.LUNA%TYPE, v_amort_max_deductibil in IMOB_LISTA_MF.AMORT_MAX_DEDUCTIBIL%TYPE) is lnAnMin IMOB_LISTA_MF.AN%TYPE; lnLunaMin IMOB_LISTA_MF.LUNA%TYPE; lnIdListaMax IMOB_LISTA_MF.ID_LISTA_MF%TYPE; lnFoundMin NUMBER(1) := 1; lnFoundMax NUMBER(1) := 1; lnAn IMOB_LISTA_MF.AN%TYPE := v_an; lnLuna IMOB_LISTA_MF.LUNA%TYPE := v_luna; lnAnExp IMOB_LISTA_MF.AN%TYPE := v_an_exp; lnLunaExp IMOB_LISTA_MF.LUNA%TYPE := v_luna_exp; ldDataInc DATE; ldDataExp DATE; ldDataExpPerAnt DATE; ldDataIncPerUrm DATE; v_rowcount number; begin -- pinfo('id_mf ' || v_id_mf || ' an ' || v_an || ' luna ' || v_luna || ' id_lucrare' || v_id_lucrare, 'modifica_lista_mf'); -- daca mai exista luna in imob_lista_mf, modific datele pentru luna operatiei MERGE INTO IMOB_LISTA_MF USING DUAL ON (AN = v_an and LUNA = v_luna and ID_MF = v_id_mf) WHEN MATCHED THEN UPDATE SET NR_INVENTAR = v_nr_inventar, id_lucrare = v_id_lucrare, id_gestiune = v_id_gestiune, id_sectie = v_id_sectie, id_responsabil = v_id_responsabil, id_sucursala = v_id_sucursala, dns_luni = v_dns_luni, cod_mf = v_Cod_mf, cont = v_cont, acont = v_acont, id_util = v_id_util, amort_max_deductibil = v_amort_max_deductibil; -- DACA EXISTA LUNA OPERATIEI TREBUIE DOAR SA MODIFIC DATELE -- pinfo('SQL%ROWCOUNT ' || SQL%ROWCOUNT, 'modifica_lista_mf'); v_rowcount := SQL%ROWCOUNT; IF v_rowcount > 0 THEN GOTO END_PROC; END IF; -- ALTFEL, TREBUIE SA MODIFIC DATA DE EXPIRARE PENTRU OPERATIA PRECEDENTA SI, EVENTUAL, DATA DE EXPIRARARE A OPERATIEI -- OPERATIA PRECEDENTA -- selectez luna maxima mai mica decat luna operatiei BEGIN select ID_LISTA_MF INTO lnIdListaMax from (SELECT ID_LISTA_MF, AN, LUNA, MAXLUNA FROM (SELECT ID_LISTA_MF, AN, LUNA, (SELECT MAX(AN * 12 + LUNA) FROM IMOB_LISTA_MF WHERE ID_MF = v_id_mf AND AN * 12 + LUNA < v_an * 12 + v_luna) AS MAXLUNA FROM IMOB_LISTA_MF WHERE ID_MF = v_id_mf) where an * 12 + luna = MAXLUNA); EXCEPTION WHEN NO_DATA_FOUND THEN lnFoundMax := 0; END; -- daca am gasit operatia precedenta -- modific data de expirare a operatiei precedente cu luna operatiei - 1 IF lnFoundMax = 1 THEN ldDataInc := TO_DATE(LPAD(TO_CHAR(v_an), 4, '0') || LPAD(TO_CHAR(v_luna), 2, '0') || '01', 'YYYYMMDD'); ldDataExpPerAnt := ADD_MONTHS(ldDataInc, -1); UPDATE IMOB_LISTA_MF SET AN_EXP = EXTRACT(YEAR FROM ldDataExpPerAnt), LUNA_EXP = EXTRACT(MONTH FROM ldDataExpPerAnt) WHERE ID_LISTA_MF = lnIdListaMax; END IF; -- OPERATIA URMATOARE -- selectez luna minima mai mare decat luna operatiei BEGIN select an, luna INTO lnAnMin, lnLunaMin from (SELECT ID_LISTA_MF, AN, LUNA, MINLUNA FROM (SELECT ID_LISTA_MF, AN, LUNA, (SELECT MIN(AN * 12 + LUNA) FROM IMOB_LISTA_MF WHERE ID_MF = v_id_mf AND AN * 12 + LUNA > v_an * 12 + v_luna) AS MINLUNA FROM IMOB_LISTA_MF WHERE ID_MF = v_id_mf) WHERE an * 12 + luna = MINLUNA); EXCEPTION WHEN NO_DATA_FOUND THEN lnFoundMin := 0; END; -- daca am gasit operatia urmatoare, data de expirare a operatiei devine luna de inceput a operatie urmatoare - 1 -- daca nu am gasit - luna expirarii = luna de inceput IF lnFoundMin = 1 THEN ldDataIncPerUrm := TO_DATE(LPAD(TO_CHAR(lnAnMin), 4, '0') || LPAD(TO_CHAR(lnLunaMin), 2, '0') || '01', 'YYYYMMDD'); ldDataExp := ADD_MONTHS(ldDataIncPerUrm, -1); lnAnExp := EXTRACT(YEAR FROM ldDataExp); lnLunaExp := EXTRACT(MONTH FROM ldDataExp); ELSE lnAnExp := lnAn; lnLunaExp := lnLuna; END IF; INSERT INTO IMOB_LISTA_MF (ID_MF, DNS_LUNI, NR_INVENTAR, COD_MF, CONT, ACONT, ID_LUCRARE, ID_GESTIUNE, ID_SECTIE, ID_RESPONSABIL, ID_SUCURSALA, ID_UTIL, AN, LUNA, AN_EXP, LUNA_EXP, AMORT_MAX_DEDUCTIBIL) VALUES (v_id_mf, v_dns_luni, v_nr_inventar, v_cod_mf, v_cont, v_acont, v_id_lucrare, v_id_gestiune, v_id_sectie, v_id_responsabil, v_id_sucursala, v_id_util, lnAn, lnLuna, lnAnExp, lnLunaExp, v_amort_max_deductibil); <> NULL; end modifica_lista_mf; ----------------------------------------------------------------------------------- procedure adauga_buncapital(v_id_mf in imob_bunuricapital.id_mf%type, v_nrdoc in imob_bunuricapital.nrdoc%type, v_datadoc in imob_bunuricapital.datadoc%type, v_bazatva in imob_bunuricapital.bazatva%type, v_tva in imob_bunuricapital.tva%type, v_id_cota_tva in imob_bunuricapital.id_cota_tva%type, v_ajustare in imob_bunuricapital.ajustare%type, v_id_tip_operatie in imob_bunuricapital.id_tip_operatie%type, v_tvaDatorat in imob_bunuricapital.tva_datorat%type, v_prorataTVA in imob_bunuricapital.proratatva%type) is begin insert into imob_bunuricapital (id_mf, nrdoc, datadoc, bazatva, tva, ajustare, id_cota_tva, id_util, id_tip_operatie, tva_datorat, prorataTVA) values (v_id_mf, v_nrdoc, v_datadoc, v_bazatva, v_tva, v_ajustare, v_id_cota_tva, pack_sesiune.get_id_util(), v_id_tip_operatie, v_tvadatorat, v_prorataTVA); end adauga_buncapital; ----------------------------------------------------------------------------------- procedure modifica_buncapital(v_id_mf in imob_bunuricapital.id_mf%type, v_nrdoc in imob_bunuricapital.nrdoc%type, v_datadoc in imob_bunuricapital.datadoc%type, v_bazatva in imob_bunuricapital.bazatva%type, v_tva in imob_bunuricapital.tva%type, v_id_cota_tva in imob_bunuricapital.id_cota_tva%type, v_ajustare in imob_bunuricapital.ajustare%type, v_id_tip_operatie in imob_bunuricapital.id_tip_operatie%type, v_tvaDatorat in imob_bunuricapital.tva_datorat%type, v_id_regbc in imob_bunuricapital.id_regbc%type, v_prorataTva in imob_bunuricapital.proratatva%type) is begin update imob_bunuricapital set id_mf = v_id_mf, nrdoc = v_nrdoc, datadoc = v_datadoc, bazatva = v_bazatva, tva = v_tva, id_cota_tva = v_id_cota_tva, ajustare = v_ajustare, id_tip_operatie = v_id_tip_operatie, tva_Datorat = v_tvaDatorat, proratatva = v_prorataTva where id_regbc = v_id_regBc; end modifica_buncapital; ------------------------------------------------------------------------------------- procedure sterge_buncapital(v_id_regbc in imob_bunuricapital.id_regbc%type) is begin update imob_bunuricapital set sters = 1 where id_regbc = v_id_regbc; end sterge_buncapital; ------------------------------------------------------------------------------------------- /* Caut daca mai exista numarul de inventar */ FUNCTION verifica_nr_inventar(v_nr_inventar IN IMOB_LISTA_MF.NR_INVENTAR%TYPE, v_data IN DATE, v_id_tip_imobilizare IN NUMBER DEFAULT 1) RETURN NUMBER IS lnNrDuplicate NUMBER; BEGIN pack_imob.setlunacurenta(v_data); SELECT COUNT(*) INTO lnNrDuplicate FROM IMOB_VSITUATIE_LUNARA t WHERE t.id_tip_imobilizare = v_id_tip_imobilizare AND t.nr_inventar = v_nr_inventar; RETURN lnNrDuplicate; END verifica_nr_inventar; ------------------------------------------------------------------------------------- /* begin setlunacurenta(to_date(pack_sesiune.getan() || '/' || pack_sesiune.getluna(), 'YYYY/MM'));*/ END pack_imob; /