diff --git a/docs/service-auto/PACK_COMENZI.pck b/docs/service-auto/PACK_COMENZI.pck new file mode 100644 index 0000000..65185d9 --- /dev/null +++ b/docs/service-auto/PACK_COMENZI.pck @@ -0,0 +1,2804 @@ +create or replace package PACK_COMENZI is + + -- Author : MARIUS.ATANASIU + -- Created : 18/08/2006 + -- Purpose : + + -- 20.03.2026 - duplicate CODMAT pe comanda: discriminare pe PRET + SIGN(CANTITATE) + + id_comanda COMENZI.ID_COMANDA%TYPE; + + procedure adauga_masina(V_ID_MODEL_MASINA IN NUMBER, + V_NRINMAT IN VARCHAR2, + V_CULOARE IN VARCHAR2, + V_ID_UTIL IN NUMBER); + + procedure modifica_masina(V_ID_MASINA IN NUMBER, + V_ID_MODEL_MASINA IN NUMBER, + V_NRINMAT IN VARCHAR2, + V_CULOARE IN VARCHAR2, + V_ID_UTIL IN NUMBER); + + procedure sterge_masina(V_ID_MASINA IN NUMBER, V_ID_UTIL IN NUMBER); + + procedure adauga_comanda(V_NR_COMANDA IN VARCHAR2, + V_DATA_COMANDA IN DATE, + V_ID IN NUMBER, + V_DATA_LIVRARE IN DATE, + V_PROC_DISCOUNT IN NUMBER, + V_INTERNA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ADRESA_FACTURARE in NUMBER, + V_ID_ADRESA_LIVRARE in NUMBER, + V_ID_CODCLIENT in number, + V_COMANDA_EXTERNA in varchar2, + V_ID_CTR IN NUMBER); + + -- Versiune overloaded care returneaza ID_COMANDA prin OUT parameter + procedure adauga_comanda(V_NR_COMANDA IN VARCHAR2, + V_DATA_COMANDA IN DATE, + V_ID IN NUMBER, + V_DATA_LIVRARE IN DATE, + V_PROC_DISCOUNT IN NUMBER, + V_INTERNA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ADRESA_FACTURARE in NUMBER, + V_ID_ADRESA_LIVRARE in NUMBER, + V_ID_CODCLIENT in number, + V_COMANDA_EXTERNA in varchar2, + V_ID_CTR IN NUMBER, + V_ID_COMANDA OUT NUMBER); + + procedure modifica_comanda(V_ID_COMANDA IN NUMBER, + V_NR_COMANDA IN VARCHAR2, + V_DATA_COMANDA IN DATE, + V_ID IN NUMBER, + V_DATA_LIVRARE IN DATE, + V_PROC_DISCOUNT IN NUMBER, + V_INTERNA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ADRESA_FACTURARE in number, + V_ADRESA_LIVRARE in number, + V_ID_CODCLIENT in number, + V_COMANDA_EXTERNA in varchar2, + V_ID_CTR IN NUMBER); + + procedure sterge_comanda(V_ID_COMANDA IN NUMBER, V_ID_UTIL IN NUMBER); + + procedure cauta_contract_comanda(V_DATA_COMANDA IN DATE, + V_ID_PART IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_CTR OUT NUMBER, + V_NUMAR_CTR OUT VARCHAR2); + + procedure adauga_articol_comanda(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER); + + procedure adauga_articol_comanda(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_PTVA IN NUMBER DEFAULT NULL); + + procedure modifica_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_CANTITATE IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_PTVA IN NUMBER, + V_ID_UTIL IN NUMBER); + + /* procedure sterge_articol_comanda(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_ID_UTIL IN NUMBER);*/ + + procedure sterge_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure adauga_lucrare_pe_comanda(V_ID_COMANDA IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER); + + procedure adauga_lucrare_pe_comenzi(V_SIR_COMENZI IN VARCHAR2, + V_ID_LUCRARE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER); + + procedure livreaza_comanda(V_ID_COMANDA IN NUMBER, + V_ID_AGENT IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATA_LIVRAT IN DATE, + V_ID_UTIL IN NUMBER, + V_NR_LIVRARE OUT VARCHAR2); + + procedure genereaza_lucrare(V_DATA_LUCRARE IN DATE, + V_ORE_EXECUTIE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_NRORD OUT VARCHAR2, + V_ID_LUCRARE OUT NUMBER); + + procedure adauga_lucrare(V_NRORD IN VARCHAR2, + V_DATA_LUCRARE IN DATE, + V_EXPLICATIE IN VARCHAR2, + V_TERMEN_EXECUTIE IN DATE, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER); + + procedure modifica_lucrare(V_ID_LUCRARE IN NUMBER, + V_NRORD IN VARCHAR2, + V_DATA_LUCRARE IN DATE, + V_EXPLICATIE IN VARCHAR2, + V_TERMEN_EXECUTIE IN DATE, + V_ID_UTIL IN NUMBER); + + procedure sterge_lucrare(V_ID_LUCRARE IN NUMBER, V_ID_UTIL IN NUMBER); + + procedure actualizeaza_lucrare(V_ID_COMANDA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER); + + procedure actualizeaza_articole_lucrare(V_ID_LUCRARE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER); + + procedure adauga_loturi(V_ID_LUCRARE IN NUMBER, V_ID_UTIL IN NUMBER); + + procedure sterge_loturi(V_ID_LUCRARE IN NUMBER, V_ID_UTIL IN NUMBER); + + -- function citeste_ore_inchidere return number; + + function genereaza_nr_comanda return varchar2; + + function genereaza_nr_lucrare return varchar2; + + function genereaza_nr_livrare return varchar2; + + procedure copiaza_comanda(V_ID_COMANDA IN NUMBER, + V_OPTIUNE_CANT IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_COMANDA_NOU OUT NUMBER); + + procedure copiaza_comenzi(V_SIR_ID_COMANDA IN VARCHAR2, + V_SEPARATOR_PARAM IN VARCHAR2, + V_ID_UTIL IN NUMBER); + procedure sectii_utilizator(V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + p_cursor OUT pack_types.tip_cursor); + function extrage_optiuni(tcLista varchar2, tnId number) return varchar2; + function citeste_ore_inchidere(tnId number) return number; + + procedure raport_proc_vanzari_sterge(V_ID_COMRAPVANZ IN NUMBER); + procedure raport_proc_vanzari(V_DATAORA_I IN TIMESTAMP, + V_DATAORA_S IN TIMESTAMP, + V_ID_GRUPA_GEST IN NUMBER, + V_PROCENT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + procedure completeaza_raport(V_ID_COMRAPVANZ IN NUMBER, + V_LISTA_ARTICOLE IN VARCHAR, + V_LISTA_GESTIUNI IN VARCHAR, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + procedure raport_proc_vanzari_viz(V_ID_COMRAPVANZ IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + procedure actualizeaza_raport(V_ID_COMRAPVANZ IN NUMBER, + V_LISTA_ACTUALIZARI IN CLOB, + V_NR_COMENZI_GENERATE OUT NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + procedure centralizator_rapoarte(V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + procedure listeaza_raport(V_ID_COMRAPVANZ IN NUMBER, + V_DATA OUT DATE, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + procedure listeaza_raport_vz_fz(V_ID_COMRAPVANZ IN NUMBER, + V_CANTITATE IN NUMBER, + V_DATA OUT DATE, + V_DATAI OUT DATE, + V_DATAS OUT DATE, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + procedure rap_vanz_per_detaliu(V_ID_COMRAPVANZELEM IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor); + + function verifica_acces_comanda(V_ID_COMANDA IN NUMBER) return varchar2; + + procedure deblocheaza_acces_comanda(V_ID_COMANDA IN NUMBER); + + procedure factureaza_comanda(tnIdComanda IN comenzi.id_comanda%type, + tnAn IN act.an%type DEFAULT EXTRACT(YEAR FROM + SYSDATE), + tnLuna IN act.luna%type DEFAULT EXTRACT(MONTH FROM + SYSDATE), + tnNrAct IN vanzari.numar_act%type DEFAULT NULL, + tdDataAct IN vanzari.data_act%type DEFAULT TRUNC(SYSDATE), + tnIncasat IN NUMBER DEFAULT 0, + tnSumaIncasat IN NUMBER DEFAULT 0, + tcTipIncasare IN VARCHAR2 DEFAULT 'CHITANTA', + tnIdDelegat IN VANZARI.ID_DELEGAT%TYPE DEFAULT NULL, + tnIdMasina IN vanzari.id_masina%type DEFAULT NULL, + tnIdAgent IN vanzari.id_agent%type DEFAULT NULL, + tcTextAditional IN vanzari.text_aditional%type DEFAULT NULL, + tnIdUtil IN vanzari.id_util%type DEFAULT -3, + tcMesaj OUT VARCHAR2, + tnIdVanzare OUT VANZARI.ID_VANZARE%TYPE); + +end PACK_COMENZI; +/ +create or replace package body PACK_COMENZI is + -- ultima eroare atribuita : COM-001 + + -- 18.10.2013 + -- marius.mutu + -- raport_proc_vanzari + -- se iau in considerare si articolele fara stoc initial, dar cu rulaje + + -- 13.08.2015 + -- marius.mutu + -- centralizator_rapoarte - adaugare parametru V_TIP: 1/2 (completat/necompletat) + -- raport_proc_vanzari: se iau in considerare articolele din urma cu 2 luni din rulaje. nu intrau in raport articolele care nu aveau stoc initial sau rulaje in perioada de 24 ore de ex. + -- raport_proc_vanzari: adaugare coloana STOCDEP (stoc depozit pe articol - pentru raportul vanzari perioada pe furnizori + stoc depozit) + -- completeaza_raport: adaugare coloana STOCDEP + + -- 22.10.2015 + -- marius.mutu + -- + raport_proc_vanzari_viz - vizualizare raport comenzi din vanzari in perioada + -- + raport_proc_vanzari_sterge - stergerea raport comenzi din vanzari in perioada + -- raport_proc_vanzari - se iau toate articolele din rulajul ultimelor 3 luni, nu numai cele care au vanzari. nu se mai tine cont de procentul de vanzari + -- nu se afisau articole care nu avusesera vanzari in perioada, desi aveau rulaje in ultimele 3 luni + + -- 27.10.2015 + -- marius.mutu + -- raport_proc_vanzari - stocul din depozit se afiseaza pentru toate articolele din raport, nu numai pentru cele care au stoc final + + -- 21.12.2015 + -- marius.mutu + -- raport_proc_vanzari - se iau numai gestiunile active. unele chioscuri nu au activitate si nu ar trebui sa intre in raport + -- raport_proc_vanzari: se iau toate articolele din rulajul ultimelor 1 luni, in loc de 3 luni + + --08.02.2016 + -- marius.mutu + -- raport_proc_vanzari - se iau articolele din rulajul ultimelor 1 luni + articolele din stocul initial + + -- 11.03.2016 + -- marius.mutu + -- PACK_COMENZI.raport_proc_vanzari - am corectat join-ul cu stoc depozit + + -- 28.03.2016 + -- marius.mutu + -- factureaza_comanda - adaugare parametru "nract" + + -- 05.04.2016 + -- marius.mutu + -- factureaza_comanda - tratare parametru nract 0 + + -- 29.06.2018 + -- marius.mutu + -- copiaza_comanda - corectare selectare optiune COPIECANTITATE + + -- 26.03.2021 + -- marius.mutu + -- adauga_articol_comanda, modifica_articol_comanda - se poate modifica si pretul, in loc sa il ia din politica de preturi + + -- 11.09.2025 + -- marius.mutu + -- adauga_articol_comanda, modifica_articol_comanda + se poate completa ptva (21,11) in loc sa il ia din politica de preturi + + -- 19.03.2026 + -- adauga_articol_comanda permite de 2 ori acelasi articol cu cote tva diferite (ex: discount 11% si discount 21%) + + ---------------------------------------------------------------------------------- + procedure adauga_masina(V_ID_MODEL_MASINA IN NUMBER, + V_NRINMAT IN VARCHAR2, + V_CULOARE IN VARCHAR2, + V_ID_UTIL IN NUMBER) is + V_EXISTA NUMBER(10); + begin + SELECT COUNT(*) + INTO V_EXISTA + FROM NOM_MASINI + WHERE NRINMAT = V_NRINMAT + AND STERS = 0; + + IF V_EXISTA > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista o masina cu acest numar de inmatriculare!'); + ELSE + INSERT INTO NOM_MASINI + (ID_MODEL_MASINA, NRINMAT, CULOARE) + VALUES + (V_ID_MODEL_MASINA, V_NRINMAT, V_CULOARE); + END IF; + end adauga_masina; + ---------------------------------------------------------------------------------- + procedure modifica_masina(V_ID_MASINA IN NUMBER, + V_ID_MODEL_MASINA IN NUMBER, + V_NRINMAT IN VARCHAR2, + V_CULOARE IN VARCHAR2, + V_ID_UTIL IN NUMBER) is + V_EXISTA NUMBER(10); + begin + SELECT COUNT(*) + INTO V_EXISTA + FROM NOM_MASINI + WHERE NRINMAT = V_NRINMAT + AND STERS = 0 + AND ID_MASINA <> V_ID_MASINA; + + IF V_EXISTA > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista o masina cu acest numar de inmatriculare!'); + ELSE + UPDATE NOM_MASINI + SET ID_MODEL_MASINA = V_ID_MODEL_MASINA, + NRINMAT = V_NRINMAT, + CULOARE = V_CULOARE + WHERE ID_MASINA = V_ID_MASINA; + END IF; + end modifica_masina; + ---------------------------------------------------------------------------------- + procedure sterge_masina(V_ID_MASINA IN NUMBER, V_ID_UTIL IN NUMBER) is + begin + -- de adaugat verificari + UPDATE NOM_MASINI SET STERS = 1 WHERE ID_MASINA = V_ID_MASINA; + end sterge_masina; + ---------------------------------------------------------------------------------- + procedure adauga_comanda(V_NR_COMANDA IN VARCHAR2, + V_DATA_COMANDA IN DATE, + V_ID IN NUMBER, + V_DATA_LIVRARE IN DATE, + V_PROC_DISCOUNT IN NUMBER, + V_INTERNA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ADRESA_FACTURARE in NUMBER, + V_ID_ADRESA_LIVRARE in NUMBER, + V_ID_CODCLIENT in number, + V_COMANDA_EXTERNA in varchar2, + V_ID_CTR IN NUMBER) is + V_ID_COMANDA NUMBER; + begin + -- Wrapper pentru compatibilitate - apeleaza versiunea cu OUT parameter + adauga_comanda(V_NR_COMANDA, + V_DATA_COMANDA, + V_ID, + V_DATA_LIVRARE, + V_PROC_DISCOUNT, + V_INTERNA, + V_ID_UTIL, + V_ID_SECTIE, + V_ID_ADRESA_FACTURARE, + V_ID_ADRESA_LIVRARE, + V_ID_CODCLIENT, + V_COMANDA_EXTERNA, + V_ID_CTR, + V_ID_COMANDA); + end adauga_comanda; + + -- Versiune overloaded care returneaza ID_COMANDA prin OUT parameter (IMPLEMENTAREA PRINCIPALA) + procedure adauga_comanda(V_NR_COMANDA IN VARCHAR2, + V_DATA_COMANDA IN DATE, + V_ID IN NUMBER, + V_DATA_LIVRARE IN DATE, + V_PROC_DISCOUNT IN NUMBER, + V_INTERNA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ADRESA_FACTURARE in NUMBER, + V_ID_ADRESA_LIVRARE in NUMBER, + V_ID_CODCLIENT in number, + V_COMANDA_EXTERNA in varchar2, + V_ID_CTR IN NUMBER, + V_ID_COMANDA OUT NUMBER) is + V_NR_INREGISTRARI NUMBER(10); + V_NESTERS NUMBER(1) := 0; + V_ID_PART NOM_PARTENERI.ID_PART%TYPE; + V_ID_GESTIUNE NOM_GESTIUNI.ID_GESTIUNE%TYPE; + V_ID_SECTIE2 NOM_SECTII.ID_SECTIE%TYPE; + V_DATA_LIVRARE2 DATE; + V_ID_ADRESA_FACTURARE1 NUMBER(10); + V_ID_ADRESA_LIVRARE1 NUMBER(10); + V_ID_CODCLIENT1 comenzi.id_codclient%TYPE; + V_COMANDA_EXTERNA1 comenzi.COMANDA_EXTERNA%TYPE; + V_ID_SUCURSALA NOM_SECTII.ID_SUCURSALA%TYPE; + begin + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM COMENZI + WHERE STERS = V_NESTERS + AND NR_COMANDA = V_NR_COMANDA; + + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista o comanda cu acest numar!'); + END IF; + + IF V_ID_CTR IS NOT NULL THEN + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM CONTRACTE + WHERE STERS = 0 + AND INCETAT = 0 + AND NVL(DATA_SFARSIT, V_DATA_COMANDA) < V_DATA_COMANDA + AND ID_CTR = V_ID_CTR + AND NVL(ID_SUCURSALA, -99) IN + (SELECT NVL(ID_SUCURSALA, -99) + FROM NOM_SECTII + WHERE ID_SECTIE = V_ID_SECTIE); + + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Contractul ales nu este activ la data comenzii!'); + END IF; + END IF; + + CASE + WHEN V_INTERNA = 1 THEN + V_ID_GESTIUNE := NULL; + V_ID_PART := NULL; + V_DATA_LIVRARE2 := NULL; + V_ID_SECTIE2 := NULL; + V_ID_ADRESA_FACTURARE1 := NULL; + V_ID_ADRESA_LIVRARE1 := NULL; + V_ID_CODCLIENT1 := 3; + V_COMANDA_EXTERNA1 := ''; + WHEN V_INTERNA IN (2, 5) THEN + V_ID_GESTIUNE := NULL; + V_ID_PART := V_ID; + V_DATA_LIVRARE2 := V_DATA_LIVRARE; + V_ID_SECTIE2 := NULL; + V_ID_ADRESA_FACTURARE1 := V_ID_ADRESA_FACTURARE; + V_ID_ADRESA_LIVRARE1 := V_ID_ADRESA_LIVRARE; + V_ID_CODCLIENT1 := V_ID_CODCLIENT; + V_COMANDA_EXTERNA1 := V_COMANDA_EXTERNA; + WHEN V_INTERNA = 3 THEN + V_ID_GESTIUNE := V_ID; + V_ID_PART := NULL; + V_DATA_LIVRARE2 := V_DATA_LIVRARE; + V_ID_SECTIE2 := NULL; + V_ID_ADRESA_FACTURARE1 := NULL; + V_ID_ADRESA_LIVRARE1 := NULL; + V_ID_CODCLIENT1 := NULL; + V_COMANDA_EXTERNA1 := ''; + WHEN V_INTERNA = 4 THEN + V_ID_SECTIE2 := V_ID; + V_ID_PART := NULL; + V_ID_GESTIUNE := NULL; + V_DATA_LIVRARE2 := V_DATA_LIVRARE; + V_ID_ADRESA_FACTURARE1 := NULL; + V_ID_ADRESA_LIVRARE1 := NULL; + V_ID_CODCLIENT1 := NULL; + V_COMANDA_EXTERNA1 := ''; + END CASE; + + SELECT MAX(ID_SUCURSALA) + INTO V_ID_SUCURSALA + FROM NOM_SECTII + WHERE ID_SECTIE = V_ID_SECTIE; + + INSERT INTO COMENZI + (NR_COMANDA, + DATA_COMANDA, + ID_GESTIUNE, + ID_PART, + DATA_LIVRARE, + INTERNA, + ID_UTIL, + ID_SECTIE, + ID_SECTIE2, + ID_FACTURARE, + ID_LIVRARE, + ID_CODCLIENT, + PROC_DISCOUNT, + COMANDA_EXTERNA, + ID_SUCURSALA, + ID_CTR) + VALUES + (V_NR_COMANDA, + V_DATA_COMANDA, + V_ID_GESTIUNE, + V_ID_PART, + V_DATA_LIVRARE2, + V_INTERNA, + V_ID_UTIL, + V_ID_SECTIE, + V_ID_SECTIE2, + V_ID_ADRESA_FACTURARE1, + V_ID_ADRESA_LIVRARE1, + V_ID_CODCLIENT1, + V_PROC_DISCOUNT, + V_COMANDA_EXTERNA1, + V_ID_SUCURSALA, + V_ID_CTR) + RETURNING ID_COMANDA INTO V_ID_COMANDA; + end adauga_comanda; + ---------------------------------------------------------------------------------- + procedure modifica_comanda(V_ID_COMANDA IN NUMBER, + V_NR_COMANDA IN VARCHAR2, + V_DATA_COMANDA IN DATE, + V_ID IN NUMBER, + V_DATA_LIVRARE IN DATE, + V_PROC_DISCOUNT IN NUMBER, + V_INTERNA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ADRESA_FACTURARE in number, + V_ADRESA_LIVRARE in number, + V_ID_CODCLIENT in number, + V_COMANDA_EXTERNA in varchar2, + V_ID_CTR IN NUMBER) is + V_NR_INREGISTRARI NUMBER(10); + V_NESTERS NUMBER(1) := 0; + V_ID_PART NOM_PARTENERI.ID_PART%TYPE; + V_ID_GESTIUNE NOM_GESTIUNI.ID_GESTIUNE%TYPE; + V_DATA_LIVRARE2 DATE; + V_ID_SECTIE NOM_SECTII.ID_SECTIE%TYPE; + V_ID_SECTIE2 NOM_SECTII.ID_SECTIE%TYPE; + V_ADRESA_FACTURARE1 number(5); + V_ADRESA_LIVRARE1 number(5); + V_ADRESA_FACTURAREold number(5); + V_ADRESA_LIVRAREold number(5); + V_ID_CODCLIENT1 number(5); + V_COMANDA_EXTERNA1 varchar(50); + begin + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM COMENZI + WHERE STERS = V_NESTERS + AND NR_COMANDA = V_NR_COMANDA + AND ID_COMANDA <> V_ID_COMANDA; + + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista o comanda cu acest numar!'); + END IF; + + IF V_ID_CTR IS NOT NULL THEN + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM CONTRACTE + WHERE STERS = 0 + AND INCETAT = 0 + AND NVL(DATA_SFARSIT, V_DATA_COMANDA) < V_DATA_COMANDA + AND ID_CTR = V_ID_CTR + AND NVL(ID_SUCURSALA, -99) IN + (SELECT NVL(ID_SUCURSALA, -99) + FROM NOM_SECTII + WHERE ID_SECTIE = V_ID_SECTIE); + + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Contractul ales nu este activ la data comenzii!'); + END IF; + END IF; + + SELECT ID_SECTIE + INTO V_ID_SECTIE + FROM COMENZI + WHERE STERS = V_NESTERS + AND ID_COMANDA = V_ID_COMANDA; + + SELECT ID_FACTURARE, ID_LIVRARE, ID_CODCLIENT, COMANDA_EXTERNA + INTO V_ADRESA_FACTURAREold, + V_ADRESA_LIVRAREold, + V_ID_CODCLIENT1, + V_COMANDA_EXTERNA1 + FROM COMENZI + WHERE STERS = V_NESTERS + AND ID_COMANDA = V_ID_COMANDA; + + CASE + WHEN V_INTERNA = 1 THEN + V_ID_GESTIUNE := NULL; + V_ID_PART := NULL; + V_DATA_LIVRARE2 := NULL; + V_ID_SECTIE2 := NULL; + V_ADRESA_FACTURARE1 := V_ADRESA_FACTURAREold; + V_ADRESA_LIVRARE1 := V_ADRESA_LIVRAREold; + WHEN V_INTERNA IN (2, 5) THEN + V_ID_GESTIUNE := NULL; + V_ID_PART := V_ID; + V_DATA_LIVRARE2 := V_DATA_LIVRARE; + V_ID_SECTIE2 := NULL; + V_ADRESA_FACTURARE1 := V_ADRESA_FACTURARE; + V_ADRESA_LIVRARE1 := V_ADRESA_LIVRARE; + V_ID_CODCLIENT1 := V_ID_CODCLIENT; + V_COMANDA_EXTERNA1 := V_COMANDA_EXTERNA; + + WHEN V_INTERNA = 3 THEN + V_ID_GESTIUNE := V_ID; + V_ID_PART := NULL; + V_DATA_LIVRARE2 := V_DATA_LIVRARE; + V_ID_SECTIE2 := NULL; + V_ADRESA_FACTURARE1 := V_ADRESA_FACTURAREold; + V_ADRESA_LIVRARE1 := V_ADRESA_LIVRAREold; + WHEN V_INTERNA = 4 THEN + V_ID_SECTIE2 := V_ID; + V_ID_PART := NULL; + V_ID_GESTIUNE := NULL; + V_DATA_LIVRARE2 := V_DATA_LIVRARE; + V_ADRESA_FACTURARE1 := V_ADRESA_FACTURAREold; + V_ADRESA_LIVRARE1 := V_ADRESA_LIVRAREold; + END CASE; + + UPDATE COMENZI + SET NR_COMANDA = V_NR_COMANDA, + DATA_COMANDA = V_DATA_COMANDA, + ID_PART = V_ID_PART, + ID_GESTIUNE = V_ID_GESTIUNE, + DATA_LIVRARE = V_DATA_LIVRARE2, + PROC_DISCOUNT = V_PROC_DISCOUNT, + INTERNA = V_INTERNA, + ID_SECTIE2 = V_ID_SECTIE2, + ID_FACTURARE = V_ADRESA_FACTURARE1, + ID_LIVRARE = V_ADRESA_LIVRARE1, + ID_CODCLIENT = V_ID_CODCLIENT1, + COMANDA_EXTERNA = V_COMANDA_EXTERNA1, + ID_CTR = V_ID_CTR, + ID_UTIL_UM = V_ID_UTIL, + DATAORA_UM = SYSDATE + WHERE ID_COMANDA = V_ID_COMANDA; + + UPDATE COMENZI_ELEMENTE + SET DISCOUNT_UNITAR = ROUND(PRET * (V_PROC_DISCOUNT / 100), + pack_sesiune.getoptiunefirma('PPRETV')) + WHERE ID_COMANDA = V_ID_COMANDA; + + pack_comenzi.actualizeaza_lucrare(V_ID_COMANDA, V_ID_UTIL, V_ID_SECTIE); + end modifica_comanda; + ---------------------------------------------------------------------------------- + procedure sterge_comanda(V_ID_COMANDA IN NUMBER, V_ID_UTIL IN NUMBER) is + V_DATAORAS DATE := SYSDATE; + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0; + V_ID_SECTIE NUMBER(5) := 0; + begin + UPDATE COMENZI_ELEMENTE + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORAS + WHERE ID_COMANDA = V_ID_COMANDA + AND STERS = V_NESTERS; + + SELECT ID_SECTIE + INTO V_ID_SECTIE + FROM COMENZI + WHERE STERS = V_NESTERS + AND ID_COMANDA = V_ID_COMANDA; + + UPDATE COMENZI + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORAS + WHERE ID_COMANDA = V_ID_COMANDA + AND STERS = V_NESTERS; + + pack_comenzi.actualizeaza_lucrare(V_ID_COMANDA, V_ID_UTIL, V_ID_SECTIE); + end sterge_comanda; + ---------------------------------------------------------------------------------- + procedure cauta_contract_comanda(V_DATA_COMANDA IN DATE, + V_ID_PART IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_CTR OUT NUMBER, + V_NUMAR_CTR OUT VARCHAR2) is + begin + begin + select id_ctr as id, + numar || '/' || to_char(data, 'DD.MM.YYYY') as data + into V_ID_CTR, V_NUMAR_CTR + from contracte + where id_part = V_ID_PART + and incetat = 0 + and sters = 0 + and NVL(DATA_SFARSIT, V_DATA_COMANDA) >= V_DATA_COMANDA + and tip_istoric = 'C' + and NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99); + exception + when NO_DATA_FOUND then + V_NUMAR_CTR := NULL; + V_ID_CTR := NULL; + when TOO_MANY_ROWS then + V_NUMAR_CTR := NULL; + V_ID_CTR := NULL; + end; + + end cauta_contract_comanda; + ---------------------------------------------------------------------------------- + procedure adauga_articol_comanda(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER) is + V_PRET CRM_POLITICI_PRET_ART.PRET%TYPE; + V_PTVA COMENZI_ELEMENTE.PTVA%TYPE; + begin + adauga_articol_comanda(V_ID_COMANDA, + V_ID_ARTICOL, + V_ID_POL, + V_CANTITATE, + V_PRET, + V_ID_UTIL, + V_ID_SECTIE, + V_PTVA); + end adauga_articol_comanda; + + procedure adauga_articol_comanda(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_PTVA IN NUMBER DEFAULT NULL) is + V_PRET2 CRM_POLITICI_PRET_ART.PRET%TYPE; + V_ID_VALUTA NOM_VALUTE.ID_VALUTA%TYPE; + V_PRET_CU_TVA CRM_POLITICI_PRETURI.PRETURI_CU_TVA%TYPE; + V_DISCOUNT_UNITAR COMENZI_ELEMENTE.DISCOUNT_UNITAR%TYPE := 0; + + V_NR_INREG NUMBER(2); + V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE; + begin + begin + SELECT A.PRET, A.ID_VALUTA, B.PRETURI_CU_TVA + INTO V_PRET2, V_ID_VALUTA, V_PRET_CU_TVA + FROM CRM_POLITICI_PRET_ART A + LEFT JOIN CRM_POLITICI_PRETURI B + ON A.ID_POL = B.ID_POL + WHERE A.ID_POL = V_ID_POL + AND A.ID_ARTICOL = V_ID_ARTICOL; + exception + when NO_DATA_FOUND then + RAISE_APPLICATION_ERROR(-20000, + 'Pretul pentru acest articol nu a fost gasit in lista de preturi! (COM-001)'); + end; + + IF V_PRET IS NOT NULL THEN + V_PRET2 := V_PRET; + END IF; + + SELECT COUNT(*) + INTO V_NR_INREG + FROM COMENZI_ELEMENTE + WHERE ID_COMANDA = V_ID_COMANDA + AND ID_ARTICOL = V_ID_ARTICOL + AND NVL(PTVA,0) = NVL(V_PTVA,0) + AND PRET = V_PRET2 + AND SIGN(CANTITATE) = SIGN(V_CANTITATE) + AND STERS = 0; + + IF V_NR_INREG > 0 THEN + SELECT DENUMIRE + INTO V_DENUMIRE + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || V_DENUMIRE || + ' a fost deja introdus pe aceasta comanda! Deschideti o alta instanta a programului de comenzi si verificati inainte sa reincercati salvarea datelor actuale!'); + END IF; + + INSERT INTO COMENZI_ELEMENTE + (ID_COMANDA, + ID_ARTICOL, + ID_POL, + PRET, + DISCOUNT_UNITAR, + CANTITATE, + ID_VALUTA, + PRET_CU_TVA, + ID_SECTIE, + PTVA) + VALUES + (V_ID_COMANDA, + V_ID_ARTICOL, + V_ID_POL, + V_PRET2, + V_DISCOUNT_UNITAR, + V_CANTITATE, + V_ID_VALUTA, + V_PRET_CU_TVA, + V_ID_SECTIE, + V_PTVA); + + end adauga_articol_comanda; + ---------------------------------------------------------------------------------- + procedure modifica_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_CANTITATE IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE COMENZI_ELEMENTE + SET CANTITATE = V_CANTITATE + WHERE ID_COMANDA_ELEMENT = V_ID_COMANDA_ELEMENT; + end modifica_articol_comanda; + + procedure modifica_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE COMENZI_ELEMENTE + SET CANTITATE = V_CANTITATE, PRET = V_PRET + WHERE ID_COMANDA_ELEMENT = V_ID_COMANDA_ELEMENT; + end modifica_articol_comanda; + + procedure modifica_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_PTVA IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE COMENZI_ELEMENTE + SET CANTITATE = V_CANTITATE, PRET = V_PRET, PTVA = V_PTVA + WHERE ID_COMANDA_ELEMENT = V_ID_COMANDA_ELEMENT; + end modifica_articol_comanda; + + + ---------------------------------------------------------------------------------- + /* procedure sterge_articol_comanda(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_STERS NUMBER(1) := 1; + V_DATAORAS DATE := SYSDATE; + begin + UPDATE COMENZI_ELEMENTE + SET STERS = V_STERS, DATAORAS = V_DATAORAS, ID_UTILS = V_ID_UTIL + WHERE ID_COMANDA = V_ID_COMANDA + AND ID_ARTICOL = V_ID_ARTICOL + AND ID_POL = V_ID_POL + AND STERS = 0; + end sterge_articol_comanda;*/ + procedure sterge_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_STERS NUMBER(1) := 1; + V_DATAORAS DATE := SYSDATE; + begin + UPDATE COMENZI_ELEMENTE + SET STERS = V_STERS, DATAORAS = V_DATAORAS, ID_UTILS = V_ID_UTIL + WHERE ID_COMANDA_ELEMENT = V_ID_COMANDA_ELEMENT + AND STERS = 0; + end sterge_articol_comanda; + ---------------------------------------------------------------------------------- + procedure adauga_lucrare_pe_comanda(V_ID_COMANDA IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER) is + V_ID_LUCRARE_VECHE NOM_LUCRARI.ID_LUCRARE%TYPE; + begin + SELECT ID_LUCRARE + INTO V_ID_LUCRARE_VECHE + FROM COMENZI + WHERE ID_COMANDA = V_ID_COMANDA; + + UPDATE COMENZI + SET ID_LUCRARE = V_ID_LUCRARE + WHERE ID_COMANDA = V_ID_COMANDA; + + IF V_ID_LUCRARE_VECHE IS NOT NULL THEN + pack_comenzi.actualizeaza_articole_lucrare(V_ID_LUCRARE_VECHE, + V_ID_UTIL, + V_ID_SECTIE); + END IF; + end; + ---------------------------------------------------------------------------------- + procedure adauga_lucrare_pe_comenzi(V_SIR_COMENZI IN VARCHAR2, + V_ID_LUCRARE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER) is + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + V_LUNGIME_SIR NUMBER(10); + begin + V_LUNGIME_SIR := SIR_IN_SIR(V_SIR_COMENZI, ';'); + + FOR i IN 1 .. V_LUNGIME_SIR LOOP + V_ID_COMANDA := TO_NUMBER(ELEMENT_DIN_SIR(V_SIR_COMENZI, ';', i)); + pack_comenzi.adauga_lucrare_pe_comanda(V_ID_COMANDA, + V_ID_LUCRARE, + V_ID_UTIL, + V_ID_SECTIE); + END LOOP; + + pack_comenzi.actualizeaza_articole_lucrare(V_ID_LUCRARE, + V_ID_UTIL, + V_ID_SECTIE); + end; + ---------------------------------------------------------------------------------- + procedure livreaza_comanda(V_ID_COMANDA IN NUMBER, + V_ID_AGENT IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATA_LIVRAT IN DATE, + V_ID_UTIL IN NUMBER, + V_NR_LIVRARE OUT VARCHAR2) is + V_ID_PART NOM_PARTENERI.ID_PART%TYPE; + begin + V_NR_LIVRARE := genereaza_nr_livrare(); + UPDATE COMENZI + SET ID_AGENT = V_ID_AGENT, + ID_DELEGAT = V_ID_DELEGAT, + ID_MASINA = V_ID_MASINA, + DATA_LIVRAT = V_DATA_LIVRAT, + NR_LIVRARE = V_NR_LIVRARE + WHERE ID_COMANDA = V_ID_COMANDA + RETURNING ID_PART INTO V_ID_PART; + + IF V_ID_PART IS NOT NULL THEN + MERGE INTO CORESP_DELEGATI_PART A + USING dual + ON (A.ID_PART = V_ID_PART AND A.ID_DELEGAT = V_ID_DELEGAT) + WHEN NOT MATCHED THEN + INSERT (ID_PART, ID_DELEGAT) VALUES (V_ID_PART, V_ID_DELEGAT); + END IF; + end; + ---------------------------------------------------------------------------------- + procedure genereaza_lucrare(V_DATA_LUCRARE IN DATE, + V_ORE_EXECUTIE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_NRORD OUT VARCHAR2, + V_ID_LUCRARE OUT NUMBER) is + V_DATAORA DATE; + begin + pack_sesiune.set_id_sectie_comenzi(V_ID_SECTIE); + V_DATAORA := sysdate; + + begin + select a.csectie || to_char(NVL(V_DATA_LUCRARE, V_DATAORA), 'DDMMYY') || '-' || + (select count(*) + 1 as nr + from nom_lucrari + where nrord like + a.csectie || + to_char(NVL(V_DATA_LUCRARE, V_DATAORA), 'DDMMYY') || '%' + and sters = 0) + INTO V_NRORD + from nom_sectii a + where a.id_sectie = V_ID_SECTIE; + exception + WHEN NO_DATA_FOUND THEN + select to_char(NVL(V_DATA_LUCRARE, V_DATAORA), 'DDMMYY') || '-' || + (count(*) + 1) + INTO V_NRORD + from nom_lucrari + where nrord like + to_char(NVL(V_DATA_LUCRARE, V_DATAORA), 'DDMMYY') || '%' + and sters = 0; + end; + + INSERT INTO NOM_LUCRARI + (NRORD) + VALUES + (V_NRORD) + RETURNING ID_LUCRARE INTO V_ID_LUCRARE; + + INSERT INTO LUCRARI_DETALII + (ID_LUCRARE, DATA_LUCRARE, TERMEN_EXECUTIE, ID_UTIL, ID_SECTIE) + VALUES + (V_ID_LUCRARE, + NVL(V_DATA_LUCRARE, V_DATAORA), + NVL(V_DATA_LUCRARE, V_DATAORA) + + GREATEST((pack_comenzi.citeste_ore_inchidere(V_ID_SECTIE) / 24) + 0.5, + NVL(V_ORE_EXECUTIE, 1), + 1), + V_ID_UTIL, + V_ID_SECTIE); + + end genereaza_lucrare; + ---------------------------------------------------------------------------------- + procedure adauga_lucrare(V_NRORD IN VARCHAR2, + V_DATA_LUCRARE IN DATE, + V_EXPLICATIE IN VARCHAR2, + V_TERMEN_EXECUTIE IN DATE, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER) is + + V_NR_LUCRARI NUMBER(10); + V_NESTERS NUMBER := 0; + V_ID_LUCRARE NOM_LUCRARI.ID_LUCRARE%TYPE; + V_DATA_LUCRARE_INCHISA DATE; + begin + pack_sesiune.set_id_sectie_comenzi(V_ID_SECTIE); + + SELECT COUNT(*) + INTO V_NR_LUCRARI + FROM NOM_LUCRARI + WHERE STERS = V_NESTERS + AND NRORD = V_NRORD; + + IF V_NR_LUCRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista o lucrare cu acest numar!'); + END IF; + + V_DATA_LUCRARE_INCHISA := sysdate + + (pack_comenzi.citeste_ore_inchidere(V_ID_SECTIE) / 24); + + IF V_TERMEN_EXECUTIE <= V_DATA_LUCRARE_INCHISA THEN + RAISE_APPLICATION_ERROR(-20000, + 'Termenul de executie trebuie sa fie mai mare de ' || + to_char(V_DATA_LUCRARE_INCHISA, + 'DD/MM/YYYY HH24:MI') || + ' pentru ca sa puteti adauga comenzi pe aceasta lucrare!'); + END IF; + + INSERT INTO NOM_LUCRARI + (NRORD) + VALUES + (V_NRORD) + RETURNING ID_LUCRARE INTO V_ID_LUCRARE; + + INSERT INTO LUCRARI_DETALII + (ID_LUCRARE, + DATA_LUCRARE, + EXPLICATIE, + TERMEN_EXECUTIE, + ID_UTIL, + ID_SECTIE) + VALUES + (V_ID_LUCRARE, + V_DATA_LUCRARE, + V_EXPLICATIE, + V_TERMEN_EXECUTIE, + V_ID_UTIL, + V_ID_SECTIE); + end adauga_lucrare; + ---------------------------------------------------------------------------------- + procedure modifica_lucrare(V_ID_LUCRARE IN NUMBER, + V_NRORD IN VARCHAR2, + V_DATA_LUCRARE IN DATE, + V_EXPLICATIE IN VARCHAR2, + V_TERMEN_EXECUTIE IN DATE, + V_ID_UTIL IN NUMBER) is + V_NR_LUCRARI NUMBER(10); + V_NR_COMENZI NUMBER(10); + V_NESTERS NUMBER := 0; + begin + SELECT COUNT(*) + INTO V_NR_LUCRARI + FROM NOM_LUCRARI + WHERE STERS = V_NESTERS + AND NRORD = V_NRORD + AND ID_LUCRARE <> V_ID_LUCRARE; + + IF V_NR_LUCRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista o lucrare cu acest numar!'); + END IF; + + SELECT COUNT(*) + INTO V_NR_COMENZI + FROM COMENZI + WHERE STERS = V_NESTERS + AND ID_LUCRARE = V_ID_LUCRARE + AND DATA_COMANDA > V_TERMEN_EXECUTIE; + + IF V_NR_COMENZI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Exista ' || V_NR_COMENZI || + ' comenzi cu data mai mare decat termenul de executie al lucrarii!'); + END IF; + + UPDATE NOM_LUCRARI SET NRORD = V_NRORD WHERE ID_LUCRARE = V_ID_LUCRARE; + + UPDATE LUCRARI_DETALII + SET DATA_LUCRARE = V_DATA_LUCRARE, + EXPLICATIE = V_EXPLICATIE, + TERMEN_EXECUTIE = V_TERMEN_EXECUTIE + WHERE ID_LUCRARE = V_ID_LUCRARE; + end modifica_lucrare; + ---------------------------------------------------------------------------------- + procedure sterge_lucrare(V_ID_LUCRARE IN NUMBER, V_ID_UTIL IN NUMBER) is + /* V_NR_COMENZI NUMBER(10); + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0;*/ + V_STERS NUMBER(1) := 1; + V_LOOKUP VARCHAR2(100); + V_NR_INREGISTRARI NUMBER(5); + begin + /* V_LOOKUP := 'COMENZI.ID_LUCRARE;RUL.ID_LUCRARE;'; + + nomdelprocn(USER, 'NOM_LUCRARI', 'ID_LUCRARE', V_ID_LUCRARE, V_LOOKUP);*/ + + SELECT SUM(NR) + INTO V_NR_INREGISTRARI + FROM (SELECT COUNT(*) AS NR + FROM COMENZI + WHERE ID_LUCRARE = V_ID_LUCRARE + AND STERS = 0 + /* UNION ALL + SELECT COUNT(*) + FROM RUL + WHERE ID_LUCRARE = V_ID_LUCRARE + AND STERS = 0 + UNION ALL + SELECT COUNT(*) + FROM ACT + WHERE ID_LUCRARE = V_ID_LUCRARE + AND STERS = 0*/ + ); + + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu se pot sterge detaliile, deoarece mai exista comenzi pe lucrare!'); + END IF; + + UPDATE LUCRARI_DETALII + SET STERS = V_STERS + WHERE ID_LUCRARE = V_ID_LUCRARE; + /* SELECT COUNT(*) + INTO V_NR_COMENZI + FROM COMENZI + WHERE STERS = V_NESTERS + AND ID_LUCRARE = V_ID_LUCRARE; + + IF V_NR_COMENZI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, 'Pe aceasta lucrare exista comenzi!'); + END IF; + + UPDATE NOM_LUCRARI SET STERS = V_STERS WHERE ID_LUCRARE = V_ID_LUCRARE; + + UPDATE LUCRARI_DETALII + SET STERS = V_STERS + WHERE ID_LUCRARE = V_ID_LUCRARE;*/ + end sterge_lucrare; + ---------------------------------------------------------------------------------- + procedure actualizeaza_lucrare(V_ID_COMANDA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER) is + V_ID_LUCRARE NOM_LUCRARI.ID_LUCRARE%TYPE; + V_NESTERS NUMBER(1) := 0; + begin + SELECT ID_LUCRARE + INTO V_ID_LUCRARE + FROM COMENZI + WHERE ID_COMANDA = V_ID_COMANDA; + + IF V_ID_LUCRARE IS NOT NULL THEN + pack_comenzi.actualizeaza_articole_lucrare(V_ID_LUCRARE, + V_ID_UTIL, + V_ID_SECTIE); + END IF; + + end actualizeaza_lucrare; + ---------------------------------------------------------------------------------- + procedure actualizeaza_articole_lucrare(V_ID_LUCRARE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SECTIE IN NUMBER) is + V_NESTERS NUMBER(1) := 0; + V_ID_POL NUMBER(10); + V_ACTIVA NUMBER(1); + V_EXISTA NUMBER(1); + V_ACTIVA_UTIL NUMBER(1); + V_OPTIUNE VARCHAR2(100); + begin + V_OPTIUNE := 'ID_LISTA_PRETURI_PV'; + + pack_preturi.optiune_polpret_utilizator_sec(V_ID_UTIL, + V_ID_SECTIE, + V_OPTIUNE, + V_ID_POL); + + DELETE FROM LUCRARI_ELEMENTE WHERE ID_LUCRARE = V_ID_LUCRARE; + + INSERT INTO LUCRARI_ELEMENTE + (ID_LUCRARE, + ID_ARTICOL, + ID_POL, + PRET, + DISCOUNT_UNITAR, + CANTITATE, + ID_SECTIE) + SELECT V_ID_LUCRARE AS ID_LUCRARE, + A.ID_ARTICOL, + V_ID_POL AS ID_POL, + B.PRET, + A.DISCOUNT_UNITAR, + SUM(A.CANTITATE) AS CANTITATE, + V_ID_SECTIE AS ID_SECTIE + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND B.ID_POL = V_ID_POL + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + WHERE A.ID_COMANDA IN + (SELECT ID_COMANDA + FROM COMENZI + WHERE ID_LUCRARE = V_ID_LUCRARE + AND STERS = V_NESTERS + AND ID_SECTIE = V_ID_SECTIE) + AND A.STERS = V_NESTERS + AND C.IN_STOC = 1 + GROUP BY A.ID_ARTICOL, B.ID_POL, B.PRET, A.DISCOUNT_UNITAR; + end actualizeaza_articole_lucrare; + ---------------------------------------------------------------------------------- + procedure adauga_loturi(V_ID_LUCRARE IN NUMBER, V_ID_UTIL IN NUMBER) is + cursor crs is + SELECT A.ID_ARTICOL, + A.CANTITATE, + A.ID_POL, + A.PRET, + A.DISCOUNT_UNITAR, + A.ID_SECTIE, + B.CODMAT + FROM LUCRARI_ELEMENTE A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.ID_LUCRARE = V_ID_LUCRARE; + + crs_linie crs%rowtype; + V_ID_LOT NOM_LUCRARI.ID_LUCRARE%TYPE; + begin + UPDATE LUCRARI_ELEMENTE + SET CANTITATE = 0 + WHERE ID_LUCRARE IN + (SELECT ID_LUCRARE FROM NOM_LUCRARI WHERE ID_TATA = V_ID_LUCRARE); + + open crs; + loop + fetch crs + into crs_linie; + exit when crs%notfound; + + begin + SELECT ID_LUCRARE + INTO V_ID_LOT + FROM NOM_LUCRARI + WHERE ID_TATA = V_ID_LUCRARE + AND NVL(NRORD, '~!') = NVL(crs_linie.codmat, '~!') + AND STERS = 0; + exception + when NO_DATA_FOUND then + INSERT INTO NOM_LUCRARI + (NRORD, ID_TATA) + VALUES + (crs_linie.codmat, V_ID_LUCRARE) + RETURNING ID_LUCRARE INTO V_ID_LOT; + end; + + MERGE INTO LUCRARI_ELEMENTE A + USING DUAL B + ON (A.ID_LUCRARE = V_ID_LOT AND A.ID_ARTICOL = crs_linie.id_articol AND A.ID_POL = crs_linie.id_pol AND A.PRET = crs_linie.pret AND NVL(A.ID_SECTIE, -100) = NVL(crs_linie.id_sectie, -100)) + WHEN MATCHED THEN + UPDATE SET CANTITATE = crs_linie.cantitate + WHEN NOT MATCHED THEN + INSERT + (ID_LUCRARE, + ID_ARTICOL, + CANTITATE, + ID_POL, + PRET, + DISCOUNT_UNITAR, + ID_SECTIE) + VALUES + (V_ID_LOT, + crs_linie.id_articol, + crs_linie.cantitate, + crs_linie.id_pol, + crs_linie.pret, + crs_linie.discount_unitar, + crs_linie.id_sectie); + + end loop; + + close crs; + end adauga_loturi; + ---------------------------------------------------------------------------------- + procedure sterge_loturi(V_ID_LUCRARE IN NUMBER, V_ID_UTIL IN NUMBER) is + begin + DELETE FROM LUCRARI_ELEMENTE + WHERE ID_LUCRARE IN + (SELECT ID_LUCRARE FROM NOM_LUCRARI WHERE ID_TATA = V_ID_LUCRARE); + + UPDATE NOM_LUCRARI SET STERS = 1 WHERE ID_TATA = V_ID_LUCRARE; + end sterge_loturi; + ---------------------------------------------------------------------------------- + /*function citeste_ore_inchidere return number is + V_NR_ORE NUMBER(2); + begin + begin + SELECT TO_NUMBER(VARVALUE) + INTO V_NR_ORE + FROM OPTIUNI + WHERE VARNAME = 'ORE_INCHIDERE'; + exception + WHEN NO_DATA_FOUND THEN + raise_application_error(-20000, + 'Nu este setata perioada de dinaintea termenului de executie pentru care o lucrare este considerata inchisa!'); + end; + return V_NR_ORE; + end;*/ + ---------------------------------------------------------------------------------- + function genereaza_nr_comanda return varchar2 is + V_NR_COMANDA COMENZI.NR_COMANDA%TYPE; + begin + SELECT TO_CHAR(SEQ_NR_COMANDA.NEXTVAL) INTO V_NR_COMANDA FROM DUAL; + return V_NR_COMANDA; + end; + ---------------------------------------------------------------------------------- + function genereaza_nr_lucrare return varchar2 is + V_NRORD NOM_LUCRARI.NRORD%TYPE; + V_VALIDAT NUMBER(1); + V_NESTERS NUMBER(1) := 0; + V_NR_LUCRARI NUMBER(10); + begin + V_VALIDAT := 1; + LOOP + SELECT TO_CHAR(SEQ_NR_LUCRARE.NEXTVAL) INTO V_NRORD FROM DUAL; + + SELECT COUNT(*) + INTO V_NR_LUCRARI + FROM NOM_LUCRARI + WHERE STERS = V_NESTERS + AND NRORD = V_NRORD; + + IF V_NR_LUCRARI > 0 THEN + V_VALIDAT := 0; + ELSE + V_VALIDAT := 1; + END IF; + + EXIT WHEN V_VALIDAT = 1; + END LOOP; + return V_NRORD; + end; + ---------------------------------------------------------------------------------- + function genereaza_nr_livrare return varchar2 is + V_NR_LIVRARE NOM_LUCRARI.NRORD%TYPE; + begin + SELECT TO_CHAR(SEQ_NR_LIVRARE.NEXTVAL) INTO V_NR_LIVRARE FROM DUAL; + return V_NR_LIVRARE; + end; + ---------------------------------------------------------------------------------- + procedure copiaza_comanda(V_ID_COMANDA IN NUMBER, + V_OPTIUNE_CANT IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_COMANDA_NOU OUT NUMBER) is + + V_NR_COMANDA varchar2(100); + V_DATA_COMANDA date; + V_ID_PART NOM_PARTENERI.ID_PART%TYPE; + V_ID_GESTIUNE NOM_GESTIUNI.ID_GESTIUNE%TYPE; + V_DATA_LIVRARE date; + V_INTERNA number(1); + V_OPTIUNE OPTIUNI.VARNAME%TYPE; + V_COPIERECANTITATE NUMBER(1); + V_ID_POL CRM_POLITICI_PRETURI.ID_POL%TYPE; + V_ID_SECTIE NOM_SECTII.ID_SECTIE%TYPE; + V_ID_SECTIE2 NOM_SECTII.ID_SECTIE%TYPE; + V_ID_LIVRARE ADRESE_PARTENERI.ID_ADRESA%TYPE; + V_ID_FACTURARE ADRESE_PARTENERI.ID_ADRESA%TYPE; + V_ID_CODCLIENT COMENZI.ID_CODCLIENT%TYPE; + V_ID_SUCURSALA SYN_NOM_FIRME.ID_FIRMA%TYPE; + V_PROC_DISCOUNT COMENZI.PROC_DISCOUNT%TYPE; + begin + SELECT ID_PART, + INTERNA, + ID_GESTIUNE, + ID_SECTIE, + ID_SECTIE2, + ID_LIVRARE, + ID_FACTURARE, + ID_CODCLIENT, + ID_SUCURSALA, + PROC_DISCOUNT + INTO V_ID_PART, + V_INTERNA, + V_ID_GESTIUNE, + V_ID_SECTIE, + V_ID_SECTIE2, + V_ID_LIVRARE, + V_ID_FACTURARE, + V_ID_CODCLIENT, + V_ID_SUCURSALA, + V_PROC_DISCOUNT + FROM COMENZI + WHERE ID_COMANDA = V_ID_COMANDA; + + V_NR_COMANDA := pack_comenzi.genereaza_nr_comanda(); + V_DATA_COMANDA := SYSDATE; + V_DATA_LIVRARE := V_DATA_COMANDA + NVL(to_number(pack_comenzi.extrage_optiuni(pack_sesiune.getoptiunefirma('ORE_LIVRARE'), + V_ID_SECTIE)), + 0) / 24; + + IF V_OPTIUNE_CANT IS NULL THEN + BEGIN + SELECT NVL(to_number(pack_comenzi.extrage_optiuni(pack_sesiune.getoptiunefirma('COPIERECANTITATE'), + V_ID_SECTIE)), + 0) + INTO V_COPIERECANTITATE + FROM OPTIUNI + WHERE VARNAME = 'COPIERECANTITATE'; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu ati setat optiunea pentru copierea cantitatilor pe comenzi!'); + END; + ELSE + V_COPIERECANTITATE := V_OPTIUNE_CANT; + END IF; + + CASE + WHEN V_INTERNA = 1 THEN + V_OPTIUNE := 'ID_LISTA_PRETURI_PV'; + WHEN V_INTERNA = 2 THEN + V_OPTIUNE := 'IDPOLITICAPRETC'; + WHEN V_INTERNA = 3 THEN + V_OPTIUNE := 'IDPOLITICAPRET'; + END CASE; + + pack_preturi.optiune_polpret_utilizator_sec(V_ID_UTIL, + V_ID_SECTIE, + V_OPTIUNE, + V_ID_POL); + + INSERT INTO COMENZI + (NR_COMANDA, + DATA_COMANDA, + ID_PART, + ID_GESTIUNE, + ID_SECTIE, + DATA_LIVRARE, + INTERNA, + ID_UTIL, + DATAORA, + ID_SECTIE2, + ID_LIVRARE, + ID_FACTURARE, + ID_CODCLIENT, + ID_SUCURSALA, + PROC_DISCOUNT) + VALUES + (V_NR_COMANDA, + V_DATA_COMANDA, + V_ID_PART, + V_ID_GESTIUNE, + V_ID_SECTIE, + V_DATA_LIVRARE, + V_INTERNA, + V_ID_UTIL, + SYSDATE, + V_ID_SECTIE2, + V_ID_LIVRARE, + V_ID_FACTURARE, + V_ID_CODCLIENT, + V_ID_SUCURSALA, + V_PROC_DISCOUNT) + RETURNING id_comanda INTO V_ID_COMANDA_NOU; + + IF V_COPIERECANTITATE = 1 THEN + INSERT INTO comenzi_elemente + (id_comanda, + id_articol, + id_pol, + pret, + discount_unitar, + cantitate, + id_valuta, + id_sectie, + pret_cu_tva) + SELECT V_ID_COMANDA_NOU as id_comanda, + A.ID_ARTICOL, + V_ID_POL AS ID_POL, + B.PRET, + A.DISCOUNT_UNITAR, + A.CANTITATE, + C.ID_VALUTA, + V_ID_SECTIE, + C.PRETURI_CU_TVA AS PRET_CU_TVA + FROM (SELECT A.ID_ARTICOL, + SUM(A.CANTITATE) AS CANTITATE, + A.DISCOUNT_UNITAR, + MIN(A.ID_COMANDA_ELEMENT) AS ID + FROM COMENZI_ELEMENTE A + WHERE A.ID_COMANDA = V_ID_COMANDA + AND A.STERS = 0 + GROUP BY A.ID_ARTICOL, A.DISCOUNT_UNITAR + ORDER BY 4) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI C + ON B.ID_POL = C.ID_POL + WHERE A.CANTITATE > 0 + AND B.ID_POL = V_ID_POL; + ELSE + INSERT INTO comenzi_elemente + (id_comanda, + id_articol, + id_pol, + pret, + discount_unitar, + cantitate, + id_valuta, + id_sectie, + pret_cu_tva) + SELECT V_ID_COMANDA_NOU as id_comanda, + A.ID_ARTICOL, + V_ID_POL AS ID_POL, + B.PRET, + A.DISCOUNT_UNITAR, + A.CANTITATE, + C.ID_VALUTA, + V_ID_SECTIE, + C.PRETURI_CU_TVA AS PRET_CU_TVA + FROM (select ID_ARTICOL, + DISCOUNT_UNITAR, + CANTITATE, + ID_COMANDA_ELEMENT + from COMENZI_ELEMENTE + WHERE ID_COMANDA = V_ID_COMANDA + AND STERS = 0 + AND CANTITATE > 0 + order by ID_COMANDA_ELEMENT) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI C + ON B.ID_POL = C.ID_POL + where B.ID_POL = V_ID_POL; + END IF; + end copiaza_comanda; + ---------------------------------------------------------------------------------- + procedure copiaza_comenzi(V_SIR_ID_COMANDA IN VARCHAR2, + V_SEPARATOR_PARAM IN VARCHAR2, + V_ID_UTIL IN NUMBER) is + + TYPE num_rec IS RECORD( + id_comanda dbms_sql.Number_Table); + numtab num_rec; + + V_ID_COMANDA_NOU COMENZI.ID_COMANDA%TYPE; + V_SEPARATOR VARCHAR2(5); + V_COPIERECANTITATE NUMBER(1); + begin + V_SEPARATOR := NVL(V_SEPARATOR_PARAM, ','); + + BEGIN + SELECT TO_NUMBER(VARVALUE) + INTO V_COPIERECANTITATE + FROM OPTIUNI + WHERE VARNAME = 'COPIERECANTITATE'; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu ati setat optiunea pentru copierea cantitatilor pe comenzi!'); + END; + + SELECT TO_NUMBER(substr(V_SIR_ID_COMANDA, + decode(rownum, + 1, + 1, + instr(V_SIR_ID_COMANDA, + V_SEPARATOR, + 1, + rownum - 1) + 1), + instr(V_SIR_ID_COMANDA, V_SEPARATOR, 1, rownum) - + decode(rownum, + 1, + 0, + instr(V_SIR_ID_COMANDA, + V_SEPARATOR, + 1, + rownum - 1)) - 1)) AS ID_COMANDA + BULK COLLECT + INTO numtab + FROM dual + CONNECT BY level <= length(V_SIR_ID_COMANDA) - + length(REPLACE(V_SIR_ID_COMANDA, V_SEPARATOR)); + + FOR i IN 1 .. numtab.id_comanda.count LOOP + pack_comenzi.copiaza_comanda(numtab.id_comanda(i), + V_COPIERECANTITATE, + V_ID_UTIL, + V_ID_COMANDA_NOU); + END LOOP; + + end copiaza_comenzi; + ---------------------------------------------------------------------------------- + procedure sectii_utilizator(V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + p_cursor OUT pack_types.tip_cursor) IS + -- sectiile la care este asociat partenerul legat de utilizator + + begin + + open p_cursor for + select ps.id_sectie, s.sectie + from asociere_parteneri_sectii ps + left join nom_sectii s + on ps.id_sectie = s.id_sectie + where ps.id_part in (select id_partener + from vutilizatori_rol_intern + where id_util = V_ID_UTIL) + and NVL2(V_ID_SUCURSALA, s.id_sucursala, -99) = + NVL(V_ID_SUCURSALA, -99) + order by s.sectie; + + end sectii_utilizator; + ---------------------------------------------------------------------------------- + function extrage_optiuni(tcLista varchar2, tnId number) return varchar2 is + + lcLista varchar2(1000); + lnNrOptiuni number(3) := 0; + lcExtragOptId varchar2(500); + lcId_extras varchar2(10); + lcReturn varchar2(100); + + begin + + lcLista := trim(tcLista); + lnNrOptiuni := Getwordcount(lcLista, ';'); + for i in 1 .. lnNrOptiuni loop + lcExtragOptId := Getwordnum(lcLista, i, ';'); + lcId_extras := GETWORDNUM(lcExtragOptId, 1, '::'); + if lcId_extras = to_char(tnId) then + lcReturn := GETWORDNUM(lcExtragOptId, 2, '::'); + end if; + end loop; + + RETURN lcReturn; + end extrage_optiuni; + ---------------------------------------------------------------------------------- + function citeste_ore_inchidere(tnId number) return number is + V_NR_ORE NUMBER(2); + lcLista varchar2(1000); + lnId number(5) := 0; + begin + + lnId := tnId; + begin + SELECT VARVALUE + INTO lcLista + FROM OPTIUNI + WHERE VARNAME = 'ORE_INCHIDERE'; + exception + WHEN NO_DATA_FOUND THEN + raise_application_error(-20000, + 'Nu este setata perioada de dinaintea termenului de executie pentru care o lucrare este considerata inchisa!'); + end; + + V_NR_ORE := to_number(pack_comenzi.extrage_optiuni(lcLista, lnId)); + + return V_NR_ORE; + end; + ---------------------------------------------------------------------------------- + procedure raport_proc_vanzari_sterge(V_ID_COMRAPVANZ IN NUMBER) is + + begin + delete from comrapvanzelem where ID_COMRAPVANZ = V_ID_COMRAPVANZ; + delete from comrapvanz where ID_COMRAPVANZ = V_ID_COMRAPVANZ; + end; + + ---------------------------------------------------------------------------------- + procedure raport_proc_vanzari(V_DATAORA_I IN TIMESTAMP, + V_DATAORA_S IN TIMESTAMP, + V_ID_GRUPA_GEST IN NUMBER, + V_PROCENT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + V_AN_I NUMBER(4); + V_LUNA_I NUMBER(2); + V_AN_F NUMBER(4); + V_LUNA_F NUMBER(2); + V_PROCENT_BD NUMBER(10, 4); + V_TOATE_GRUPELE NUMBER(1); + V_ID_GRUPA_ART GEST_ART_GR.ID_GRUPA%TYPE; + + V_ID_COMRAPVANZ COMRAPVANZ.ID_COMRAPVANZ%TYPE; + V_LISTA_GESTIUNI_DEPOZIT VARCHAR2(1000); + V_DATAORA_I0 DATE := TRUNC(V_DATAORA_I, 'MONTH'); -- 1 ale lunii de inceput; + lnNrLuniPerioada number(1) := 1; -- se selecteaza articolele din rulajul din urma cu 1 luni, nu numai cele din perioada, pentru cazul in care un articol nu a avut rulaj in perioada aleasa + begin + V_AN_I := EXTRACT(YEAR FROM V_DATAORA_I); + V_LUNA_I := EXTRACT(MONTH FROM V_DATAORA_I); + + V_AN_F := EXTRACT(YEAR FROM V_DATAORA_S); + V_LUNA_F := EXTRACT(MONTH FROM V_DATAORA_S); + V_PROCENT_BD := to_number(nvl(pack_sesiune.getoptiunefirma('PROCVANZPER'), + '0')); + V_TOATE_GRUPELE := to_number(nvl(pack_sesiune.getoptiunefirma('TOATEGRUPELE'), + '1')); + IF V_TOATE_GRUPELE = 0 THEN + V_ID_GRUPA_ART := to_number(pack_comenzi.extrage_optiuni(pack_sesiune.getoptiunefirma('GRUPAARTSECTIE'), + V_ID_SECTIE)); + ELSE + V_ID_GRUPA_ART := 0; + END IF; + + V_LISTA_GESTIUNI_DEPOZIT := pack_comenzi.extrage_optiuni(pack_sesiune.getoptiunefirma('LISTA_GESTIUNI_DEPOZIT'), + V_ID_SECTIE); + + IF V_PROCENT_BD <> V_PROCENT THEN + UPDATE OPTIUNI + SET VARVALUE = TO_CHAR(V_PROCENT) + WHERE VARNAME = 'PROCVANZPER'; + + V_PROCENT_BD := V_PROCENT; + END IF; + + V_PROCENT_BD := V_PROCENT_BD / 100; + + INSERT INTO COMRAPVANZ + (DATAI, DATAS, ID_GRUPE, PROCENT, ID_SECTIE, ID_UTIL, ID_SUCURSALA) + VALUES + (V_DATAORA_I, + V_DATAORA_S, + V_ID_GRUPA_GEST, + V_PROCENT, + V_ID_SECTIE, + V_ID_UTIL, + V_ID_SUCURSALA) + RETURNING ID_COMRAPVANZ INTO V_ID_COMRAPVANZ; + + INSERT INTO COMRAPVANZELEM + (ID_COMRAPVANZ, + ID_GESTIUNE, + ID_ARTICOL, + STOCI, + VANZARI, + STOCF, + STOCDEP, + VALSTOCI, + VALSTOCDEP, + VALSTOCF) + with crs as + (select cgg.id_gestiune + from gest_coresp_grupe_gestiuni cgg + join nom_gestiuni g + on cgg.id_gestiune = g.id_gestiune + where cgg.sters = 0 + and g.inactiv = 0 + and g.sters = 0 + and cgg.id_grupe = V_ID_GRUPA_GEST), + crsarticole as + (select id_articol + from nom_articole + where id_subgrupa in (select id_subgrupa + from gest_art_sbgr + where decode(V_ID_GRUPA_ART, 0, 0, id_grupa) = + V_ID_GRUPA_ART) + and sters = 0) + select V_ID_COMRAPVANZ, + nvl(a1.id_gestiune, b1.id_gestiune) as id_gestiune, + nvl(a1.id_articol, b1.id_articol) as id_articol, + nvl(a1.cants, 0) + nvl(b1.rulajei, 0) as stoci, + b1.vanzari, + nvl(a1.cants, 0) + nvl(b1.rulajei, 0) + nvl(b1.rulajep, 0) as stocf, + nvl(c1.stocdep, 0) as stocdep, + nvl(a1.valcants, 0) + nvl(b1.valrulajei, 0) as valstoci, + nvl(c1.valstocdep, 0) as valstocdep, + nvl(a1.valcants, 0) + nvl(b1.valrulajei, 0) + + nvl(b1.valrulajep, 0) as valstocf + from (select id_gestiune, + id_articol, + sum(case + when decode(trunc(dataora), dataact, dataora, dataact) between + V_DATAORA_I0 and V_DATAORA_I - 1 / 24 / 60 / 60 then + cant - cante + else + 0 + end) as rulajei, + sum(case + when decode(trunc(dataora), dataact, dataora, dataact) between + V_DATAORA_I0 and V_DATAORA_I - 1 / 24 / 60 / 60 then + (cant - cante) * pretvtva + else + 0 + end) as valrulajei, + sum(case + when decode(trunc(dataora), dataact, dataora, dataact) between + V_DATAORA_I and V_DATAORA_S then + cant - cante + else + 0 + end) as rulajep, + sum(case + when decode(trunc(dataora), dataact, dataora, dataact) between + V_DATAORA_I and V_DATAORA_S then + (cant - cante) * pretvtva + else + 0 + end) as valrulajep, + sum(case + when decode(trunc(dataora), dataact, dataora, dataact) between + V_DATAORA_I and V_DATAORA_S and id_tip_rulaj = 0 then + cante + else + 0 + end) as vanzari, + sum(case + when decode(trunc(dataora), dataact, dataora, dataact) between + V_DATAORA_I and V_DATAORA_S and id_tip_rulaj = 0 then + cante * pretvtva + else + 0 + end) as valvanzari + from rul + where an * 12 + luna between + V_AN_I * 12 + V_LUNA_I - lnNrLuniPerioada and + V_AN_F * 12 + V_LUNA_F + and sters = 0 + and id_gestiune in (select id_gestiune from crs) + and id_articol in (select id_articol from crsarticole) + group by id_gestiune, id_articol) b1 + left join (select id_gestiune, + id_articol, + sum(cants) as cants, + sum(cants * (pretv + tvav)) as valcants + from stoc + where an = V_AN_I + and luna = V_LUNA_I + and id_gestiune in (select id_gestiune from crs) + and id_articol in (select id_articol from crsarticole) + and cants <> 0 + group by id_gestiune, id_articol) a1 + on a1.id_articol = b1.id_articol + and a1.id_gestiune = b1.id_gestiune + left join (select id_articol, + sum(cants + cant - cante) as stocdep, + sum((cants + cant - cante) * (pretv + tvav)) as valstocdep + from stoc + where an = V_AN_F + and luna = V_LUNA_F + and id_gestiune in + (SELECT X + FROM table(charn2collection(V_LISTA_GESTIUNI_DEPOZIT, + ','))) + and id_articol in (select id_articol from crsarticole) + group by id_articol) c1 + on a1.id_articol = c1.id_articol; + + -- aceleasi coloane ca si cursorul din completeaza_raport + OPEN V_CURSOR FOR + SELECT A.ID_COMRAPVANZ, + A.ID_COMRAPVANZELEM, + A.ID_GESTIUNE, + A.ID_ARTICOL, + C.ID_SUBGRUPA, + B.NUME_GESTIUNE, + D.SUBGRUPA, + C.DENUMIRE, + A.STOCI, + A.VANZARI, + A.STOCF, + A.CANTITATE, + A.STOCDEP, + a.valstoci, + a.Valstocf, + A.VALSTOCDEP, + A.VALIDAT + FROM COMRAPVANZELEM A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN GEST_ART_SBGR D + ON C.ID_SUBGRUPA = D.ID_SUBGRUPA + WHERE A.ID_COMRAPVANZ = V_ID_COMRAPVANZ + ORDER BY B.NUME_GESTIUNE, D.SUBGRUPA, C.DENUMIRE; + + end raport_proc_vanzari; + ---------------------------------------------------------------------------------- + procedure completeaza_raport(V_ID_COMRAPVANZ IN NUMBER, + V_LISTA_ARTICOLE IN VARCHAR, + V_LISTA_GESTIUNI IN VARCHAR, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + V_AN_I NUMBER(4); + V_LUNA_I NUMBER(2); + V_AN_F NUMBER(4); + V_LUNA_F NUMBER(2); + V_DATAORA_I COMRAPVANZ.DATAI%TYPE; + V_DATAORA_S COMRAPVANZ.DATAS%TYPE; + V_SEPARATOR VARCHAR2(1) := ','; + V_ID_MAX COMRAPVANZELEM.ID_COMRAPVANZELEM%TYPE; + begin + SELECT A.ID_COMRAPVANZELEM, B.DATAI, B.DATAS + INTO V_ID_MAX, V_DATAORA_I, V_DATAORA_S + FROM (SELECT V_ID_COMRAPVANZ AS ID_COMRAPVANZ, + NVL(MAX(ID_COMRAPVANZELEM), 0) AS ID_COMRAPVANZELEM + FROM COMRAPVANZELEM + WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ) A + LEFT JOIN COMRAPVANZ B + ON A.ID_COMRAPVANZ = B.ID_COMRAPVANZ; + + V_AN_I := EXTRACT(YEAR FROM V_DATAORA_I); + V_LUNA_I := EXTRACT(MONTH FROM V_DATAORA_I); + V_AN_F := EXTRACT(YEAR FROM V_DATAORA_S); + V_LUNA_F := EXTRACT(MONTH FROM V_DATAORA_S); + + MERGE INTO COMRAPVANZELEM A + USING ( + WITH CRS_GESTIUNI AS + (SELECT X as ID_GESTIUNE + FROM table(charn2collection(V_LISTA_GESTIUNI, V_SEPARATOR))), + CRS_ARTICOLE AS + (SELECT X as ID_ARTICOL + FROM table(charn2collection(V_LISTA_ARTICOLE, V_SEPARATOR))) + SELECT V_ID_COMRAPVANZ AS ID_COMRAPVANZ, + A1.ID_ARTICOL, + B1.ID_GESTIUNE, + NVL(C1.CANTS, 0) + NVL(D1.RULAJEI, 0) AS STOCI, + NVL(D1.VANZARI, 0) AS VANZARI, + NVL(C1.CANTS, 0) + NVL(D1.RULAJEI, 0) + NVL(D1.RULAJEP, 0) AS STOCF + FROM CRS_ARTICOLE A1 + LEFT JOIN CRS_GESTIUNI B1 + ON 1 = 1 + LEFT JOIN (select id_gestiune, id_articol, sum(cants) as cants + from stoc + where an * 12 + luna = V_AN_I * 12 + V_LUNA_I + and id_gestiune in + (select id_gestiune from CRS_GESTIUNI) + and id_articol in + (select id_articol from CRS_ARTICOLE) + and cants >= 0 + group by id_gestiune, id_articol) C1 + ON A1.ID_ARTICOL = C1.ID_ARTICOL + AND B1.ID_GESTIUNE = C1.ID_GESTIUNE + LEFT JOIN (select id_gestiune, + id_articol, + sum(case + when decode(trunc(dataora), + dataact, + dataora, + dataact) < V_DATAORA_I then + cant - cante + else + 0 + end) as rulajei, + sum(case + when decode(trunc(dataora), + dataact, + dataora, + dataact) between V_DATAORA_I and + V_DATAORA_S then + cant - cante + else + 0 + end) as rulajep, + sum(case + when decode(trunc(dataora), + dataact, + dataora, + dataact) between V_DATAORA_I and + V_DATAORA_S and id_tip_rulaj = 0 then + cante + else + 0 + end) as vanzari + from rul + where an * 12 + luna between V_AN_I * 12 + V_LUNA_I and + V_AN_F * 12 + V_LUNA_F + and sters = 0 + and id_gestiune in + (select id_gestiune from CRS_GESTIUNI) + and id_articol in + (select id_articol from CRS_ARTICOLE) + group by id_gestiune, id_articol) D1 + on A1.id_articol = D1.id_articol + and C1.id_gestiune = D1.id_gestiune) B ON (A.ID_ARTICOL = B.ID_ARTICOL AND A.ID_GESTIUNE = B.ID_GESTIUNE AND A.ID_COMRAPVANZ = B.ID_COMRAPVANZ) WHEN NOT MATCHED THEN + INSERT + (ID_COMRAPVANZ, ID_GESTIUNE, ID_ARTICOL, STOCI, VANZARI, STOCF) + VALUES + (B.ID_COMRAPVANZ, + B.ID_GESTIUNE, + B.ID_ARTICOL, + B.STOCI, + B.VANZARI, + B.STOCF); + + -- aceleasi coloane ca si cursorul din raport_proc_vanzari + OPEN V_CURSOR FOR + SELECT A.ID_COMRAPVANZ, + A.ID_COMRAPVANZELEM, + A.ID_GESTIUNE, + A.ID_ARTICOL, + C.ID_SUBGRUPA, + B.NUME_GESTIUNE, + D.SUBGRUPA, + C.DENUMIRE, + A.STOCI, + A.VANZARI, + A.STOCF, + A.CANTITATE, + A.STOCDEP, + a.valstoci, + a.Valstocf, + A.VALSTOCDEP, + A.VALIDAT + FROM COMRAPVANZELEM A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN GEST_ART_SBGR D + ON C.ID_SUBGRUPA = D.ID_SUBGRUPA + WHERE A.ID_COMRAPVANZ = V_ID_COMRAPVANZ + AND A.ID_COMRAPVANZELEM > V_ID_MAX + ORDER BY B.NUME_GESTIUNE, D.SUBGRUPA, C.DENUMIRE; + + end completeaza_raport; + + ------------------------------------------------------------- + -- vizualizare / editare raport vanzari perioada + ------------------------------------------------------------- + procedure raport_proc_vanzari_viz(V_ID_COMRAPVANZ IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + begin + -- aceleasi coloane ca si cursorul din raport_proc_vanzari + OPEN V_CURSOR FOR + SELECT A.ID_COMRAPVANZ, + A.ID_COMRAPVANZELEM, + A.ID_GESTIUNE, + A.ID_ARTICOL, + C.ID_SUBGRUPA, + B.NUME_GESTIUNE, + D.SUBGRUPA, + C.DENUMIRE, + A.STOCI, + A.VANZARI, + A.STOCF, + A.CANTITATE, + A.STOCDEP, + a.valstoci, + a.Valstocf, + A.VALSTOCDEP, + A.VALIDAT + FROM COMRAPVANZELEM A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN GEST_ART_SBGR D + ON C.ID_SUBGRUPA = D.ID_SUBGRUPA + WHERE A.ID_COMRAPVANZ = V_ID_COMRAPVANZ + ORDER BY B.NUME_GESTIUNE, D.SUBGRUPA, C.DENUMIRE; + + end raport_proc_vanzari_viz; + ---------------------------------------------------------------------------------- + procedure actualizeaza_raport(V_ID_COMRAPVANZ IN NUMBER, + V_LISTA_ACTUALIZARI IN CLOB, + V_NR_COMENZI_GENERATE OUT NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + CURSOR CRS IS + SELECT A.ID_GESTIUNE, B.NUME_GESTIUNE + FROM (SELECT DISTINCT ID_GESTIUNE + FROM COMRAPVANZELEM + WHERE CANTITATE <> 0 + AND ID_COMRAPVANZ = V_ID_COMRAPVANZ) A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + ORDER BY B.NUME_GESTIUNE; + CRS_LINIE CRS%ROWTYPE; + V_SEPARATOR VARCHAR2(1) := '|'; + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + V_ID_POL CRM_POLITICI_PRETURI.ID_POL%TYPE; + V_ID_SECTIE COMRAPVANZ.ID_SECTIE%TYPE; + V_ID_UTIL COMRAPVANZ.ID_UTIL%TYPE; + V_ID_SUCURSALA COMRAPVANZ.ID_SUCURSALA%TYPE; + V_DATA_COMANDA COMRAPVANZ.DATAORA%TYPE; + V_DATA_LIVRARE COMENZI.DATA_LIVRARE%TYPE; + V_NR_INREGISTRARI NUMBER(10); + V_LISTA_ERORI VARCHAR2(32000); + begin + V_NR_COMENZI_GENERATE := 0; + + -- generare comenzi + SELECT ID_SECTIE, ID_UTIL, ID_SUCURSALA, DATAORA + INTO V_ID_SECTIE, V_ID_UTIL, V_ID_SUCURSALA, V_DATA_COMANDA + FROM COMRAPVANZ + WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ; + + V_ID_POL := to_number(pack_comenzi.extrage_optiuni(pack_sesiune.getoptiunefirma('IDPOLITICAPRET'), + V_ID_SECTIE)); + + IF V_ID_POL IS NULL THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu este setata politica de preturi implicita pentru comenzile de la subunitati!'); + ELSE + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM CRM_VPOLITICI_PRET_CURENTE + WHERE ID_POL = V_ID_POL; + IF V_NR_INREGISTRARI = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Politica de preturi implicita nu mai este valabila!'); + END IF; + END IF; + + SELECT STRINGAGG(ID_ARTICOL) + INTO V_LISTA_ERORI + FROM (SELECT DISTINCT ID_ARTICOL + FROM COMRAPVANZELEM + WHERE ID_COMRAPVANZELEM IN + (select to_number(extractvalue(column_value, + '/crsraportvanzari/id')) as ID + from table(XMLSequence(extract(XMLType(V_LISTA_ACTUALIZARI), + '//VFPData/crsraportvanzari'))))) + WHERE ID_ARTICOL NOT IN (SELECT ID_ARTICOL + FROM CRM_POLITICI_PRET_ART + WHERE ID_POL = V_ID_POL + AND PRET <> 0); + + IF V_LISTA_ERORI IS NOT NULL THEN + OPEN V_CURSOR FOR + SELECT DENUMIRE, CODMAT + FROM NOM_ARTICOLE + WHERE ID_ARTICOL IN + (SELECT TO_NUMBER(X) AS ID + FROM table(charc2collection(V_LISTA_ERORI, ','))) + ORDER BY DENUMIRE; + + ELSE + UPDATE COMRAPVANZ + SET COMPLETAT = 1 + WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ; + + MERGE INTO COMRAPVANZELEM A + USING (select to_number(extractvalue(column_value, + '/crsraportvanzari/id')) as ID, + to_number(extractvalue(column_value, + '/crsraportvanzari/cantitate'), + '9G999D9999', + 'nls_numeric_characters=.,') as CANTITATE + from table(XMLSequence(extract(XMLType(V_LISTA_ACTUALIZARI), + '//VFPData/crsraportvanzari')))) B + ON (A.ID_COMRAPVANZELEM = B.ID) + WHEN MATCHED THEN + UPDATE SET CANTITATE = B.CANTITATE, VALIDAT = 1; + + V_DATA_LIVRARE := V_DATA_COMANDA + NVL(to_number(pack_comenzi.extrage_optiuni(pack_sesiune.getoptiunefirma('ORE_LIVRARE'), + V_ID_SECTIE)), + 0) / 24; + + OPEN CRS; + LOOP + FETCH CRS + INTO CRS_LINIE; + EXIT WHEN CRS%NOTFOUND; + + INSERT INTO COMENZI + (NR_COMANDA, + DATA_COMANDA, + DATA_LIVRARE, + ID_GESTIUNE, + INTERNA, + ID_UTIL, + ID_SECTIE, + ID_SUCURSALA) + VALUES + (pack_comenzi.genereaza_nr_comanda(), + V_DATA_COMANDA, + V_DATA_LIVRARE, + CRS_LINIE.ID_GESTIUNE, + 3, + V_ID_UTIL, + V_ID_SECTIE, + V_ID_SUCURSALA) + RETURNING ID_COMANDA INTO V_ID_COMANDA; + + V_NR_COMENZI_GENERATE := V_NR_COMENZI_GENERATE + 1; + + INSERT INTO COMENZI_ELEMENTE + (ID_COMANDA, + ID_ARTICOL, + ID_POL, + PRET, + CANTITATE, + ID_VALUTA, + PRET_CU_TVA, + ID_SECTIE) + SELECT V_ID_COMANDA, + A.ID_ARTICOL, + B.ID_POL, + C.PRET, + A.CANTITATE, + B.ID_VALUTA, + B.PRETURI_CU_TVA, + V_ID_SECTIE + FROM (SELECT sb.subgrupa, + art.denumire, + ve.ID_ARTICOL, + ve.CANTITATE + FROM COMRAPVANZELEM ve + left join nom_articole art + on ve.id_articol = art.id_articol + left join gest_art_sbgr sb + on art.id_subgrupa = sb.id_subgrupa + WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ + AND ID_GESTIUNE = CRS_LINIE.ID_GESTIUNE + AND CANTITATE <> 0) A + LEFT JOIN (SELECT ID_POL, ID_VALUTA, PRETURI_CU_TVA + FROM CRM_POLITICI_PRETURI + WHERE ID_POL = V_ID_POL) B + ON 1 = 1 + LEFT JOIN CRM_POLITICI_PRET_ART C + ON B.ID_POL = C.ID_POL + AND A.ID_ARTICOL = C.ID_ARTICOL + ORDER BY A.SUBGRUPA, A.DENUMIRE; + + END LOOP; + CLOSE CRS; + + OPEN V_CURSOR FOR + SELECT DENUMIRE FROM NOM_ARTICOLE WHERE 1 = 2; + END IF; + end actualizeaza_raport; + + ---------------------------------------------------------------------------------- + -- Centralizator rapoarte vanzari: V_TIP = 1 cantitate completata de utilizatori; 2 = cantitate = vanzari, pentru listare pe furnizori + ---------------------------------------------------------------------------------- + procedure centralizator_rapoarte(V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + begin + OPEN V_CURSOR FOR + SELECT A.ID_COMRAPVANZ, + A.DATAI, + A.DATAS, + B.NUME_GRUPA, + A.DATAORA, + C.UTILIZATOR + FROM COMRAPVANZ A + LEFT JOIN GEST_NOM_GRUPE B + ON A.ID_GRUPE = B.ID_GRUPE + LEFT JOIN SYN_UTILIZATORI C + ON A.ID_UTIL = C.ID_UTIL + WHERE TO_DATE(TO_CHAR(A.DATAORA, 'MMYYYY'), 'MMYYYY') = + TO_DATE(V_AN || V_LUNA, 'YYYYMM') + AND NVL(A.ID_SECTIE, -99) = NVL(V_ID_SECTIE, -99) + ORDER BY A.DATAORA DESC; + + end centralizator_rapoarte; + ---------------------------------------------------------------------------------- + procedure listeaza_raport(V_ID_COMRAPVANZ IN NUMBER, + V_DATA OUT DATE, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + begin + SELECT DATAORA + INTO V_DATA + FROM COMRAPVANZ + WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ; + + OPEN V_CURSOR FOR + SELECT A.ID_COMRAPVANZ, + A.ID_COMRAPVANZELEM, + A.ID_GESTIUNE, + A.ID_ARTICOL, + B.NUME_GESTIUNE, + C.DENUMIRE, + C.CODMAT, + C.UM, + A.CANTITATE + FROM COMRAPVANZELEM A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE A.ID_COMRAPVANZ = V_ID_COMRAPVANZ + AND A.CANTITATE <> 0 + ORDER BY B.NUME_GESTIUNE, C.DENUMIRE, C.CODMAT; + end listeaza_raport; + + ---------------------------------------------------------------------------------- + -- raport comenzi furnizori pe baza vanzarilor + ---------------------------------------------------------------------------------- + procedure listeaza_raport_vz_fz(V_ID_COMRAPVANZ IN NUMBER, + V_CANTITATE IN NUMBER, + V_DATA OUT DATE, + V_DATAI OUT DATE, + V_DATAS OUT DATE, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + begin + -- V_CANTITATE: 1 = se foloseste coloana cantitate; 0 = se foloseste coloana vanzari + SELECT DATAORA, DATAI, DATAS + INTO V_DATA, V_DATAI, V_DATAS + FROM COMRAPVANZ + WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ; + + OPEN V_CURSOR FOR + SELECT E.GRUPA, + D.SUBGRUPA, + B.DENUMIRE AS FURNIZOR, + A.ID_ARTICOL, + C.DENUMIRE, + C.CODMAT, + C.UM, + SUM(DECODE(V_CANTITATE, 1, A.CANTITATE, A.VANZARI)) AS CANTITATE, + MAX(A.STOCDEP) AS STOCDEP, + sum(a.stoci) as stoci, + sum(a.stocf) as stocf, + sum(a.valstoci) as valstoci, + sum(a.valstocf) as valstocf, + max(a.valstocdep) as valstocdep + FROM COMRAPVANZELEM A + JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN NOM_PARTENERI B + ON C.ID_PART = B.ID_PART + LEFT JOIN GEST_ART_SBGR D + ON C.ID_SUBGRUPA = D.ID_SUBGRUPA + LEFT JOIN GEST_ART_GR E + ON D.ID_GRUPA = E.ID_GRUPA + WHERE A.ID_COMRAPVANZ = V_ID_COMRAPVANZ + GROUP BY B.DENUMIRE, + E.GRUPA, + D.SUBGRUPA, + A.ID_ARTICOL, + C.DENUMIRE, + C.CODMAT, + C.UM + ORDER BY E.GRUPA, D.SUBGRUPA, B.DENUMIRE, C.DENUMIRE, C.CODMAT; + + end listeaza_raport_vz_fz; + + ---------------------------------------------------------------------------------- + -- raport vanzari un articol, o gestiune pe o perioada - detaliu la raport_proc_vanzari + ---------------------------------------------------------------------------------- + procedure rap_vanz_per_detaliu(V_ID_COMRAPVANZELEM IN NUMBER, + V_CURSOR OUT pack_cursor.tip_ref_cursor) is + V_ID_ARTICOL COMRAPVANZELEM.ID_ARTICOL%TYPE; + V_ID_GESTIUNE COMRAPVANZELEM.ID_GESTIUNE%TYPE; + V_ID_COMRAPVANZ COMRAPVANZ.ID_COMRAPVANZ%TYPE; + V_DATAI COMRAPVANZ.DATAI%TYPE; + V_DATAS COMRAPVANZ.DATAS%TYPE; + begin + SELECT VE.ID_ARTICOL, VE.ID_GESTIUNE, V.ID_COMRAPVANZ, V.DATAI, V.DATAS + INTO V_ID_ARTICOL, V_ID_GESTIUNE, V_ID_COMRAPVANZ, V_DATAI, V_DATAS + FROM COMRAPVANZELEM VE + JOIN COMRAPVANZ V + ON VE.ID_COMRAPVANZ = V.ID_COMRAPVANZ + WHERE ID_COMRAPVANZELEM = V_ID_COMRAPVANZELEM; + + OPEN V_CURSOR FOR + SELECT R.ID_ARTICOL, + G.GRUPA, + SB.SUBGRUPA, + A.DENUMIRE, + A.CODMAT, + A.UM, + R.CANTE AS VANZARI, + R.DATAORA, + U.UTILIZATOR, + GS.NUME_GESTIUNE + FROM RUL R + JOIN NOM_ARTICOLE A + ON R.ID_ARTICOL = A.ID_ARTICOL + LEFT JOIN GEST_ART_SBGR SB + ON A.ID_SUBGRUPA = SB.ID_SUBGRUPA + LEFT JOIN GEST_ART_GR G + ON SB.ID_GRUPA = G.ID_GRUPA + LEFT JOIN SYN_UTILIZATORI U + ON R.ID_UTIL = U.ID_UTIL + LEFT JOIN NOM_GESTIUNI GS + ON R.ID_GESTIUNE = GS.ID_GESTIUNE + WHERE R.ID_ARTICOL = V_ID_ARTICOL + AND R.ID_GESTIUNE = V_ID_GESTIUNE + AND R.DATAORA BETWEEN V_DATAI AND V_DATAS + AND R.AN BETWEEN EXTRACT(YEAR FROM V_DATAI) AND + EXTRACT(YEAR FROM V_DATAS) + AND R.ID_TIP_RULAJ = 0 + ORDER BY R.DATAORA; + + end rap_vanz_per_detaliu; + + ---------------------------------------------------------------------------------- + function verifica_acces_comanda(V_ID_COMANDA IN NUMBER) return varchar2 is + V_ID_SECTIE NOM_SECTII.ID_SECTIE%TYPE; + begin + SELECT ID_SECTIE + INTO V_ID_SECTIE + FROM COMENZI + WHERE ID_COMANDA = V_ID_COMANDA; + + return pack_sesiune.verifica_acces('COMENZI_ELEMENTE', + V_ID_COMANDA, + pack_comenzi.extrage_optiuni(pack_sesiune.getoptiunefirma('MINSESCOMANDA'), + V_ID_SECTIE)); + end; + ---------------------------------------------------------------------------------- + procedure deblocheaza_acces_comanda(V_ID_COMANDA IN NUMBER) is + begin + pack_sesiune.deblocheaza_acces('COMENZI_ELEMENTE', V_ID_COMANDA); + end; + + ----------------------------------------------------------------- + -- genereaza factura din comanda automat, fara interfata grafica + -- fara scadere din gestiune!!! + ----------------------------------------------------------------- + procedure factureaza_comanda(tnIdComanda IN comenzi.id_comanda%type, + tnAn IN act.an%type DEFAULT EXTRACT(YEAR FROM + SYSDATE), + tnLuna IN act.luna%type DEFAULT EXTRACT(MONTH FROM + SYSDATE), + tnNrAct IN vanzari.numar_act%type DEFAULT NULL, + tdDataAct IN vanzari.data_act%type DEFAULT TRUNC(SYSDATE), + tnIncasat IN NUMBER DEFAULT 0, + tnSumaIncasat IN NUMBER DEFAULT 0, + tcTipIncasare IN VARCHAR2 DEFAULT 'CHITANTA', + tnIdDelegat IN VANZARI.ID_DELEGAT%TYPE DEFAULT NULL, + tnIdMasina IN vanzari.id_masina%type DEFAULT NULL, + tnIdAgent IN vanzari.id_agent%type DEFAULT NULL, + tcTextAditional IN vanzari.text_aditional%type DEFAULT NULL, + tnIdUtil IN vanzari.id_util%type DEFAULT -3, + tcMesaj OUT VARCHAR2, + tnIdVanzare OUT VANZARI.ID_VANZARE%TYPE) IS + + -- tdDataAct - provizoriu pentru inregistrarea unor bonuri care nu s-au inregistrat in baza de date + -- tnIncasat: 0 = neincasat; 1 = incasat total; 2 = incasat partial (avans) + -- tcTipIncasare: BONFISCAL/CARD/TICHETE/CHITANTA + lnTipIncasare number(2); + + nTipIncasareBonFiscal NUMBER := 2; + nTipIncasareCardBancar NUMBER := 3; + nTipIncasareTichete NUMBER := 5; + nTipIncasareChitanta NUMBER := 11; + + lnAn calendar.anul%type := tnAn; + lnLuna calendar.luna%type := tnLuna; + lnTvaIncasare calendar.tva_incasare%type; + ldDataAct act.dataact%type; + ldDataIreg act.dataireg%type; + ldDataScad act.datascad%type; + ldDataCurs act.dataact%type; + + lcSerieFactura vanzari.serie_act%type; + lnNrAct vanzari.numar_act%type := tnNrAct; + lnIdResponsabil act.id_responsabil%type; + lcListaId varchar2(100) := to_char(tnIdComanda); + lcDescriere varchar2(100); + lnTip vanzari.tip%type := 3; -- factura din comanda + lnIdFdoc act.id_fdoc%type; + + lnIdValuta act.id_valuta%type; + lnInValuta number(1) := 0; + lnIdUtil vanzari.id_util%type := nvl(tnIdUtil, -3); + + lnTotftva act.suma%type; + lnTotTva act.suma%type; + lnTotcTva act.suma%type; + + ldDataExp vanzari.dataora_exp%type; + lnDiscountFactura vanzari.discount%type := 0; + lnIdDelegat vanzari.id_delegat%type := tnIdDelegat; + lnIdMasina vanzari.id_masina%type := tnIdMasina; + lnIdAgent vanzari.id_agent%type := tnIdAgent; + lcTextAditional varchar2(100) := tcTextAditional; + lnDiscountEvidentiat vanzari.discount_evidentiat%type := 0; + lnParametruAditional number(1); + + lcListaIncasare varchar2(1000); -- V_LISTA_INCASARE : tip1|valoare1|id_bancasa1;tip2|valoare2|id_bancasa2 (pentru incasari cu mai multe tipuri ex: NUMERAR + CARD + TICHETE) + V_CURSOR_VERIFICARE pack_facturare.cursor_facturare; + + lnIdSucursala act.id_sucursala%type; + lnIdSectie act.id_sectie%type; + lnIdVenChelt act.id_venchelt%type; + lnIdPartClient act.id_partd%type; + lnIdPartCasa act.id_partd%type; + lnIdSet act.Id_set%type := 25002; + lnIdLucrare act.id_lucrare%type; + + lnIdGestiune stoc.id_gestiune%type; + lnSumaIncasat act.suma%type; + lnIdTipDocFactura number(2) := pack_facturare.nid_tipfactura; + lnIdSerieFactura number(10); + lnRec number(10); + BEGIN + lnAn := extract(year from sysdate); + lnLuna := extract(month from sysdate); + ldDataAct := CASE + WHEN tdDataAct is not null then + tdDataAct + else + trunc(sysdate) + end; + ldDataIreg := ldDataAct; + ldDataScad := ldDataAct; + ldDataCurs := ldDataAct; + + pack_sesiune.setAn(lnAn); + pack_sesiune.setLuna(lnLuna); + + begin + SELECT TVA_INCASARE + INTO lnTvaIncasare + FROM CALENDAR + WHERE AN = lnAn + AND LUNA = lnLuna; + exception + when NO_DATA_FOUND then + RAISE_APPLICATION_ERROR(-20001, + 'Nu s-a deschis luna ' || + lpad(lnLuna, 2, '0') || '/' || lnAn || '!'); + end; + + lnTipIncasare := case + when tcTipIncasare = 'BONFISCAL' then + pack_facturare.nTipIncasareBonFiscal + when tcTipIncasare = 'CARD' then + pack_facturare.nTipIncasareCardBancar + when tcTipIncasare = 'TICHETE' then + pack_facturare.nTipIncasareTichete + when tcTipIncasare = 'CHITANTA' then + pack_facturare.nTipIncasareChitanta + else + pack_facturare.nTipIncasareChitanta + end; + + lnIdFdoc := TO_NUMBER(pack_sesiune.getoptiunefirma('ID_FDOC_FACT')); -- FEL DOCUMENT DIN OPTIUNI + if lnIdFdoc is null then + tcMesaj := 'Nu s-a configurat Tip Document Factura (ID_FDOC_FACT) in Optiuni!'; + RAISE_APPLICATION_ERROR(-20001, tcMesaj); + end if; + + lnIdSerieFactura := to_number(pack_sesiune.getoptiunefirma('COM_ID_SERIE_FACT')); + if lnIdSerieFactura is null then + tcMesaj := 'Nu s-a configurat Serie Factura (COM_ID_SERIE_FACT) in Optiuni!'; + RAISE_APPLICATION_ERROR(-20001, tcMesaj); + end if; + + -- obtin lcSerieFactura, lnNrAct + lcSerieFactura := pack_serii_numere.citeste_serie(lnIdSerieFactura); + if NVL(lnNrAct, 0) = 0 then + pack_serii_numere.aloca_numar(lnIdTipDocFactura, + lnIdSerieFactura, + lnIdGestiune, + lnIdUtil, + lnIdSucursala, + lnNrAct); + end if; + -- PENTRU FIECARE SUCURSALA,ID_SET(DIN POLITICA PRETURI) - FAC INREGISTRARI IN ACT, RUL, APOI IN VANZARI_DETALII + select max(p.id_sucursala) as id_sucursala, + MAX(c.id_part) as id_part_client + into lnIdSucursala, lnIdPartClient + FROM comenzi c + join comenzi_elemente e + on c.id_comanda = e.id_comanda + join crm_politici_preturi p + on e.id_pol = p.id_pol + where c.id_comanda = tnIdComanda; + + pack_facturare.initializeaza_date_factura(ldDataIreg, + lnIdFdoc, + ldDataAct, + ldDataScad, + lcSerieFactura, + lnNrAct, + lnIdPartClient, + lnIdLucrare, + lnIdSectie, + lnIdVenChelt, + lnIdResponsabil, + NULL, -- explicatia 4 + NULL, -- id_ordl + lcListaId, + lcDescriere, + lnTIP, + lnIdSet, + ldDataCurs, + lnIdValuta, + lnInValuta, + lnTvaIncasare, + lnIdSucursala, + lnIdUtil); + + insert into vanzari_detalii_temp + (id_pol, + id_articol, + serie, + id_gestiune, + pret_achizitie, + pretv_orig, + pret, + proc_tvav, + pret_cu_tva, + id_jtva_coloana, + in_stoc, + cont, + id_valuta, + id_valutad, + pretd, + cantitate) + select e.id_pol, + e.id_articol, + '' as serie, + -999 as id_gestiune, + 0 as pret_achizitie, + e.pret as pretv_orig, + e.pret as pret, + ppa.proc_tvav, + e.pret_cu_tva, + case ppa.proc_tvav + when 1.20 then + 27 + when 1.24 then + 15 + when 1.19 then + 1 + when 1.09 then + 3 + when 1.05 then + 13 + else + 8 + end as id_jtva_coloana, + 0 as in_stoc, + '' as cont, + p.id_valuta, + p.id_valuta as id_valutad, + 0 as pretd, + e.cantitate + from comenzi_elemente e + join comenzi c + on c.id_comanda = e.id_comanda + join vnom_articole a + on e.id_articol = a.id_articol + join crm_politici_preturi p + on e.id_pol = p.id_pol + join crm_politici_pret_art ppa + on e.id_pol = ppa.id_pol + and e.id_articol = ppa.id_articol + where c.id_comanda = tnIdComanda; + + select count(*) into lnRec from vanzari_detalii_temp; + + -- totaluri pentru inregistrarea facturii si incasarii + select sum(pack_sesiune.calculeaza_total_fara_tva(e.pret, + null, + null, + null, + null, + e.cantitate, + e.pret_cu_tva, + ppa.proc_tvav, + null, + null)), + sum(pack_sesiune.calculeaza_total_tva(e.pret, + null, + null, + null, + null, + e.cantitate, + e.pret_cu_tva, + ppa.proc_tvav, + null, + null)), + sum(pack_sesiune.calculeaza_total_cu_tva(e.pret, + null, + null, + null, + null, + e.cantitate, + e.pret_cu_tva, + ppa.proc_tvav, + null, + null)) + INTO lnTotftva, lnTotTva, lnTotcTva + FROM comenzi_elemente e + join crm_politici_preturi p + on e.id_pol = p.id_pol + join crm_politici_pret_art ppa + on e.id_pol = ppa.id_pol + and e.id_articol = ppa.id_articol + WHERE e.id_comanda = tnIdComanda; + + if tnIncasat <> 0 then + lnSumaIncasat := case + when tnIncasat = 1 then + lnTotcTVA + else + tnSumaIncasat + end; + -- tip|valoare|id_bancasa|ascc|scd|ascd + lnIdPartCasa := to_number(pack_sesiune.getoptiunefirma('ID_PART_CASA')); + + lcListaIncasare := lnTipIncasare || '|' || lnSumaIncasat || '|' || + lnIdPartCasa || '|' || 'xxxx|5311|xxxx'; + end if; + + ldDataExp := SYSDATE; + pack_facturare.scrie_factura2(lnTOTFTVA, + lnTOTTVA, + lnDiscountFactura, + Null, + lnNrAct, + lcListaIncasare, + lnIdDelegat, + lnIdMasina, + null, + 0, + ldDataExp, + lnIdAgent, + lcTextAditional, + lnDiscountEvidentiat, + lnParametruAditional, + tnIdVanzare, + V_CURSOR_VERIFICARE); + + -- SCRIU VANZAREA CHIAR DACA NU SUNT COMPLETATE ANALITICELE/PARTENERII, SI INTORC MESAJ DE ATENTIONARE + if tnIdVanzare is null then + pack_facturare.finalizeaza_factura(NULL, + lnIdDelegat, -- V_ID_DELEGAT, + lnIdMasina, -- V_ID_MASINA, + null, -- id_facturare + 0, -- listare detaliata + ldDataExp, + lnIdAgent, -- V_ID_AGENT, + lcTextAditional, -- V_TEXT_ADITIONAL, + 0 -- V_PARAMETRU_ADITIONAL + ); + tnIdVanzare := pack_facturare.nid_vanzare; + tcMesaj := 'Nu s-au configurat partenerii si/sau conturile analitice! Nu s-a inregistrat factura!'; + /* RAISE_APPLICATION_ERROR(-20000, + 'Nu s-au configurat partenerii si/sau conturile analitice!');*/ + end if; + + <> + null; + end factureaza_comanda; + ---------------------------------------------------------------------------------- +/*procedure recompune_optiuni +declare + -- Local variables here + lcLista varchar2(1000); + lcIdCautat varchar2(100); + lnPoz number(4); + lnPozIncepeValVeche number(4); + lnx number(4); + lcValoare varchar2(100); + lcValNou varchar2(100); +begin + -- Test statements here + lcLista := '1001::3;2::777;1003::5'; + lcIdCautat := '2' || '::'; + lcValNou := '9'; + lnPoz := instr(lcLista, lcIdCautat); + dbms_output.put_line('Lista initiala = ' || lcLista); + if lnPoz > 0 then + lnPozIncepeValVeche := lnPoz + length(lcIdCautat); + dbms_output.put_line('Unde incepe valoarea veche = ' || + lnPozIncepeValVeche); + lnPoz := instr(lcLista, ';', lnPozIncepeValVeche); + dbms_output.put_line('Urmatoarea aparitie a lui ; = ' || lnPoz); + lcValoare := substr(lcLista, + lnPozIncepeValVeche, + lnPoz - lnPozIncepeValVeche); + dbms_output.put_line('lcValoare= ' || lcValoare); + lcLista := substr(lcLista, 1, lnPozIncepeValVeche - 1) || lcValNou || + substr(lcLista, lnPozIncepeValVeche + length(lcValoare)); + dbms_output.put_line('Lista finala= ' || lcLista); + + end if; + +end;*/ +---------------------------------------------------------------------------------- +---------------------------------------------------------------------------------- +-- raport comenzi furnizori pe baza vanzarilor +---------------------------------------------------------------------------------- +end PACK_COMENZI; +/ diff --git a/docs/service-auto/PACK_CONTAFIN.pck b/docs/service-auto/PACK_CONTAFIN.pck new file mode 100644 index 0000000..02b6a21 --- /dev/null +++ b/docs/service-auto/PACK_CONTAFIN.pck @@ -0,0 +1,8993 @@ +CREATE OR REPLACE PACKAGE "PACK_CONTAFIN" is + + -- Author : GEORGIANA.VOICU + -- Created : 14.10.2004 11:35:49 + -- Purpose : SCRIE,STERGE DIN FISIERE + + -- Public type declarations + --type is ; + + -- Public constant declarations + -- constant := ; + + -- Public variable declarations + -- ; + + -- Public function and procedure declarations + --function ( ) return ; + type tip_ref_cursor is ref cursor; + + nCod act_temp.cod%Type; + dDataOra act_temp.dataora%Type; + nIdFact act_temp.id_fact%Type; + nIdUtil act_temp.id_util%Type; + nAnRon act_temp.an%Type; + nLunaRon act_temp.luna%Type; + nScriere number(1) := 0; + nRefacere number(1) := 1; + nStergere number(1) := 2; + nIdSucursala act_temp.id_sucursala%type; + nIdFirma act_temp.id_sucursala%type; + nSuprascriereCod number(1) := 1; + nSuprascriereAnLuna number(1) := 1; + nDateCompletate number(1) := 0; -- se suprascriu cod, an, luna + nDateCompletateCod number(1) := 1; -- nu se suprascrie cod + nDateCompletateCodAnLuna number(1) := 2; -- nu se suprascrie cod, an, luna + nScriereStoc number(1) := 1; -- se scrie in stoc, rul + + nTipValidareAutomata number(1) := 1; + nTipValidareRefacere number(1) := 2; + nTipValidareManuala number(1) := 3; + + FUNCTION GENEREAZA_COD(V_GCS VARCHAR2) RETURN ACT_TEMP.COD%TYPE; + PROCEDURE SET_COD(V_GCS IN VARCHAR2); + FUNCTION GET_COD return ACT_TEMP.COD%TYPE; + + PROCEDURE SET_ID_SUCURSALA(tnIdSucursala act_temp.id_sucursala%type); + FUNCTION GET_ID_SUCURSALA RETURN act_temp.id_sucursala%type; + + PROCEDURE SET_ID_FIRMA(tnIdFirma act_temp.id_sucursala%type); + FUNCTION GET_ID_FIRMA RETURN act_temp.id_sucursala%type; + /* PROCEDURE SET_IDFACT(tdDataAct ACT_TEMP.DATAACT%TYPE, + tcSerie_Act ACT_TEMP.SERIE_ACT%TYPE, + tnNrAct ACT_TEMP.NRACT%TYPE, + tnId_Ctr ACT_TEMP.ID_CTR%TYPE);*/ + PROCEDURE SET_IDFACT(V_GCS IN VARCHAR2); + FUNCTION GET_IDFACT return ACT_TEMP.ID_FACT%TYPE; + + PROCEDURE SET_DATAORA(V_DATAORA IN ACT_TEMP.DATAORA%TYPE); + FUNCTION GET_DATAORA RETURN ACT_TEMP.DATAORA%TYPE; + + PROCEDURE SET_IDUTIL(tnIdUtil act_temp.id_util%Type); + FUNCTION GET_IDUTIL RETURN ACT_TEMP.ID_UTIL%TYPE; + + PROCEDURE SET_DATA_RON(V_GCS VARCHAR2); + FUNCTION GET_ANRON RETURN ACT_TEMP.AN%TYPE; + FUNCTION GET_LUNARON RETURN ACT_TEMP.LUNA%TYPE; + + function getCotaTVAStandard(V_LUNA IN NUMBER, V_AN IN NUMBER) return number; + + PROCEDURE SETARE_FACTURA(tcS VARCHAR2); --RETURN NUMBER; + + FUNCTION LISTA_CAMPURI(V_GCS VARCHAR2, tcTableName IN VARCHAR2) + RETURN VARCHAR2; + + FUNCTION SCRIE_IN_FISIERE RETURN NUMBER; + + PROCEDURE SCRIE_IN_ACT(V_GCS VARCHAR2); + + FUNCTION GETVALIDARE(tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL) + RETURN NUMBER; + + PROCEDURE VALIDARE_INVALIDARE(tnTipValidare tabele_validare.tip_validare%type DEFAULT NULL, + tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL); + + PROCEDURE VALIDAREINREGISTRARI(tnAn IN act.an%type, + tnLuna act.luna%type, + tnIdUtil act.id_Utilv%type, + tnCod act.cod%type); + + procedure EXECUTA_SCRIE_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number); + + procedure SCRIE2_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number, + tnIdFact number, + tnNrAct number, + tdDataAct date); + + PROCEDURE STERGE_DIN_ACT(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number, + tnTip IN NUMBER); + + PROCEDURE STERGE_DIN_RUL(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number); + + PROCEDURE STERGE_DIN_RUL_OBINV(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number); + + PROCEDURE SCRIE_IN_RUL(tcS IN VARCHAR2); + + PROCEDURE SCRIE_IN_RUL_OBINV(tcS IN VARCHAR2); + + PROCEDURE SCRIE_IN_STOC_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC(tnAn in number, + tnLuna in number, + tnScrie number, + tnIdGestiune IN RUL.ID_GESTIUNE%TYPE DEFAULT NULL); + + PROCEDURE SCRIE_IN_STOC_OBINV_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC_OBINV(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2); + + PROCEDURE SCRIE_IN_STOC_OBINV(tnAn in number, + tnLuna in number, + tnScrie number); + + PROCEDURE set_suprascriereCod(V_VALOARE IN NUMBER); + + PROCEDURE set_suprascriereAnLuna(V_VALOARE IN NUMBER); + + PROCEDURE RESET_VARIABLES; + + procedure SCRIE_JV_2007(tnAn JV2007.AN%TYPE, + tnLuna JV2007.LUNA%TYPE, + tnScrie number); + procedure SCRIE_JC_2007(tnAn JC2007.AN%TYPE, + tnLuna JC2007.LUNA%TYPE, + tnScrie number); + Procedure COMPLETEAZA_JV_2007(tnAn IN JV2007.AN%TYPE, + tnLuna IN JV2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2); + Procedure COMPLETEAZA_JC_2007(tnAn IN JC2007.AN%TYPE, + tnLuna IN JC2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2); + Procedure COMPLETEAZA_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2, + tcCondInPlus IN VARCHAR2, + tcCont IN VARCHAR2, + tnIdPart IN NUMBER); + + FUNCTION VERIFICA_NOTE_CONTABILE(tlVerificAnalitic IN NUMBER) RETURN NUMBER; + + PROCEDURE SCRIE_IN_BALANTA(tcS in varchar2, + tnAn in BAL.AN%TYPE, + tnLuna in BAL.LUNA%TYPE, + tnScrie in number); + + PROCEDURE SCRIE_IN_BALANTA_PARTENERI(tcs in varchar2, + tnAn in BALANTA_PARTENERI.AN%TYPE, + tnLuna in BALANTA_PARTENERI.LUNA%TYPE, + tcCont in BALANTA_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in BALANTA_PARTENERI.ID_PART%TYPE DEFAULT NULL); + + PROCEDURE SCRIE_IN_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcCont in IREG_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in IREG_PARTENERI.ID_PART%TYPE DEFAULT NULL); + + PROCEDURE EXECUTA_SCRIE_IN_IREG(tcS VARCHAR2, + tnAn in number, + tnLuna in number, + tcCont in varchar2, + tnScrie number, + tnVenChelt number); + + PROCEDURE STERGE_TEMP_ACTRUL; + + Procedure INIT_SCRIERE_ACT_RUL_LOCAL(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE); + + PROCEDURE INITIALIZEAZA_SCRIERE_ACT_RUL(tnIdUtil ACT.ID_UTIL%TYPE, + tdDataOra ACT.DATAORA%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnSuprascriereAnLuna NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE); + + procedure sterge_document(tnCod in number, + tnAn in number, + tnLuna in number, + tnIdUtil in number); + procedure sterge_document(V_cod in number); + + procedure finalizeaza_document_verif(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnScrieSterge IN number, + tnDateCompletate IN number, + tnScadereStoc IN number, + tnCod IN ACT.COD%type, + tnIdUtil IN ACT.ID_UTIL%TYPE, + tdDataOra IN ACT.DATAORA%TYPE, + tnIdSucursala IN ACT.ID_SUCURSALA%TYPE, + tcSirModificariAcont IN VARCHAR2, + tcSirModificariPart IN VARCHAR2, + CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor); + + procedure finalizeaza_document_compl(V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2); + + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor); + + Procedure final_scriere_act_rul_local(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, + tnModificareNota NUMBER, + tcMesajRefacereNota OUT VARCHAR2); + + procedure finalizeaza_scriere_act_rul; + + procedure finalizeaza_scriere_act_rul(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, -- 0 = scriere, 1 = refacere, 2 = stergere + tnModificareNota NUMBER, -- 0 = modificare, 1 = stergere + tnScrieCumpVanz NUMBER, -- 0 = cump + vanz, 1 = cumparari, 2 = vanzari + tcMesajRefacereNota OUT VARCHAR2); + + PROCEDURE finalizeaza_modificare_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER); + + PROCEDURE finalizeaza_stergere_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER); + + PROCEDURE completeaza_analitice; + PROCEDURE completeaza_analitice_rul; + PROCEDURE completeaza_parteneri_gestiuni; + PROCEDURE sterge_analitice_gresite; + PROCEDURE sterge_analitice_gresite_rul; + + FUNCTION verifica_id_documente(lcSirIdFact IN VARCHAR2) RETURN VARCHAR2; + + function GetRulajAuxiliarFurnizor(tnIdFurnizor rul_auxiliar.id_furnizor%type) + return rul_auxiliar.id_rul_aux%type; + procedure GetRulajAuxiliarFurnizor(tnIdFurnizor IN rul_auxiliar.id_furnizor%type, + tnIdRulAux OUT rul_auxiliar.id_rul_aux%type); + +end PACK_CONTAFIN; +/ +CREATE OR REPLACE PACKAGE BODY "PACK_CONTAFIN" is + -- 11.02.2010 + -- marius.mutu + -- scrie_in_ireg_parteneri + -- nu se mai ia in considerare la selectia de facturi nota 419 = 4111 cu documente pereche (regularizare avans) + -- nota se ia in considerare la incasari/plati + + -- 23.02.2010 + -- marius.mutu + -- scrie_in_rul, scrie_in_rul_obinv + -- nu se mai suprascrie id_sucursala pe inregistrarile deja completate + + -- 11.03.2010 + -- marius.mutu + -- scrie_in_ireg_parteneri + -- la incasari/plati se lua max(curs) pentru reevaluarea soldurilor in valuta (id_set 90501) + -- am considerat cursul 0 pentru operatiile <> 90501, cursul din 90501 putea sa fie mai mic decat cursul de pe o operatie din luna + + -- 17.05.2010 + -- marius.mutu + -- REFAC_STOC, SCRIE_IN_STOC - REFACERE PENTRU FIECARE GESTIUNE IN PARTE + + -- 15.07.2010 + -- marius.mutu + -- SCRIE_JV_2007, SCRIE_JC_2007 - COTA TVA 24% + + -- 30.06.2011 + -- marius.mutu + -- SCRIE_IN_BALANTA_PARTENERI, SCRIE_IN_IREG_PARTENERI - parametru ID_PART (scriere/refacere pentru un singur partener) + + -- 08.11.2012 + -- marius.mutu + -- SCRIE_JC_2007 + -- s-a introdus coloana ROTN (limitare deducere TVA 4426 id_jtva_coloana = 1001) + -- partenerul pentru nota x = 4426 id_jtva_coloana = 1001, introdusa in afara pachetului de note de factura achizitie, + -- se ia din factura cu max(id_part) dupa nract, dataact, id_fdoc in loc de nract, dataact, id_fdoc, cod + + -- 12.02.2013 + -- marius.mutu + -- SCRIE_JV_2007, SCRIE_JC_2007 + -- TVA_INCASARE - CORECTIE SUMA PLATITA + + -- 13.02.2013 + -- marius.mutu + -- SCRIE_IN_IREG_PARTENERI + -- LA INREGISTRAREA 408 AM ID_JTVA_COLOANA RO09BFB, RO09BVB...., IAR LA REGULARIZARE 408 POT SA AM RO09NB (TVA INCASARE NEEXIGIBIL) + -- SI NU SE MAI PUPA INREGISTRARILE SI DUPA ID_JTVA_COLOANA + -- INCERC SA LE PUP DOAR DUPA PROC_TVA (STIU CA POATE SA SARA IN AER) :) + + -- 26.03.2013 + -- marius.mutu + -- SCRIE_IN_IREG_PARTENERI + -- LA INREGISTRAREA 408 POT SA AM O 2 REGULARIZARI 408 = 401 CU ACELASI PROC_TVA, DAR ID_JTVA_COLOANA DIFERITE (EX: ACH INT 24, ACH INT NEEX 24) + -- NU STIU DE CE AR EXISTA SITUATIA, DAR S-A INTAMPLAT + -- DA EROARE LA MERGE (NU SE POATE OBTINE UN SET DE RANDURI STABILE IN TABELA SURSA) + -- AM FACUT GRUPAREA DOAR DUPA PROC_TVA, IAR ID_JTVA_COLOANA IL FAC MAX(ID_JTVA_COLOANA) + + -- 18.04.2013 + -- marius.mutu + -- + procedura finalizeaza_document_verif (initializeaza_act_rul + finalizeaza_document + cursor_verificare) + -- + cursor_verificare + -- + completeaza_analitice + -- + completeaza_analitice_rul + -- + completeaza_parteneri_gestiuni + -- + sterge_analitice_gresite + -- + sterge_analitice_gresite_rul + + -- 09.08.2013 + -- marius.mutu + -- STERGE_DIN_ACT + -- Nu mai sterg din DOCUMENTE + -- Cand se sterge o plata cu o inregistrare TVA incasare (ID_FACT TVA INCASARE = ID_FACT FACTURA ORIGINALA) + -- se marcheaza documentul sters si nu se mai pot face plati ulterioare pe factura respectiva + -- mesaj: Documentul nu exista in baza de date + + -- 12.11.2013 + -- marius.mutu + -- STERGE_DIN_ACT - nu se sterg din documente id_set 90501 reevaluare sold in valuta la 31.LL + + -- 05.12.2013 + -- marius.mutu + -- SCRIE_IN_STOC - s-a reparat datain, dataout - lua max(r.dataact) in loc de max(r.datain) si max(r.dataout) + + -- 27.02.2014 + -- marius.mutu + -- SCRIE_IN_ACT - nu completez ID_FACTD, ID_FACTC cu ID_FACT-ul documentului curent + -- la factura + chitanta cu acelasi NRACT, se completa ID_FACTC cu ID_FACT chitanta + + -- 12.03.2014 + -- marius.atanasiu + -- SCRIE_IN_ACT : daca am completat id_factd / id_factc pe o inregistrare noua ( cu id_act = -1 ), + -- il suprascriu in caz ca gasesc un alt document cu acelasi numar, dar cu serie document diferita + + -- 04.06.2014 + -- marius.mutu + -- SCRIE_JC_2007 : s-a introdus contul 4511,462 in lista conturilor creditoare pentru regularizarea 408 = 401/404/4511/462 + + -- 05.06.2014 + -- marius.mutu + -- SCRIE_JV_2007 : s-a introdus contul 461,4511,4118 in lista conturilor creditoare pentru regularizarea 4111/461/4511/4118 = 418 + + -- 26.11.2014 + -- marius.mutu + -- SET_DATA_RON - tratare no_data_found + + -- 17.04.2015 + -- marius.mutu + -- finalizeaza_scriere_act_rul: Optiune SETURI_SITUATII_NU_SCRIE: LISTA ID_SET PENTRU CARE NU SE APELEAZA SCRIEREA IN SITUATII (25052|BV,BP,IP,TVA,STOC) + + -- 08.10.2015 + -- marius.mutu + -- scrie_jc2007, scrie_jv2007 -- nu se iau in considerare operatiile 10621, 10622 - compensari 419, 409 + + -- 15.12.2015 + -- marius.mutu + -- getCotaTVAStandard - 20% din 01/2016 + -- SCRIE_JC_2007, SCRIE_JV_2007 cota tva 20% + + -- 11.03.2016 + -- marius.mutu + -- SCRIE_JV_2007 - corectie JV2007.RO5NB/RO5NT - se suprascria eronat cu RO5B/RO5NT din luna curenta in loc de RO5NB/RO5NT, pentru facturile preluate din luna precedenta + + -- 21.04.2016 + -- marius.mutu + -- completeaza analitice + -- La vanzarea de marfuri la pret de vanzare 4428 = 371 are completata ID_GESTOUT + -- functioneaza pentru contul 371 pe credit, dar nu pentru contul 4428 pe debit + -- mai repet o data completarea analiticelor si cu ID_GESTIN/ID_GESTOUT pentru analiticele ramase necompletate + + -- 16.06.2016 + -- marius.mutu + -- + VALIDARE_INVALIDARE - intretinere invalidare tabel (BAL, BALANTA_PARTENERI, IREG_PARTENERI, JV2007, JC2007, +STOC, + STOC_OBINV) an, luna, cont + -- pentru a se da refaceri/redeschideri automate doar la situatiile invalidate + -- ex: la CONPRESS se face redeschidere de luna la ultimele 4 luni deschise. Nu este nevoie de refaceri la toate conturile si la toate 4 lunile daca nu s-a modificat nimic in lunile anterioare + -- + GETVALIDARE - intoarce situatia validarii unei luni + + -- 11.07.2016 + -- marius.mutu + -- VALIDARE_INVALIDARE - se invalideaza si situatiile din luna operatiei, daca ID_SET nu se scrie in anumite tabele (bv, bp, ip, tva), ex: bon fiscal conpress + -- daca nu se marcheaza situatiile invalidate, nu se refac, desi nu sunt scrise + + -- 27.10.2016 + -- marius.muut + -- COMPLETEAZA_JC_2007, COMPLETEAZA_JV_2007, SCRIE_JC_2007, SCRIE_JV_2007 + DATAIREG + + -- 03.11.2016 + -- marius.mutu + -- SCRIE_JC_2007, SCRIE_JV_2007 - DOCUMENTE.DATAIREG + + -- 29.12.2016 + -- marius.mutu + -- getCotaTVAStandard - 19% din 01/2017 + -- SCRIE_JC_2007, SCRIE_JV_2007 - TVA NEEX. 19% de la 01/2017 + + -- 25.01.2017 + -- marius.mutu + -- SCRIE_JC_2007 +CE19SB, CE19ST + + -- 07.02.2017 + -- marius.mutu + -- SCRIE_JC_2007, SCRIE_JV_2007 - ID_FDOC act/documente - si dupa coloanele id_set, serie_act + -- s-a intamplat sa am tva exigibilizat la plata cu acelasi nr. doc si data document ca la factura + -- si sa puna id_fdoc de la nota tva exigibilizat (ordin plata) in loc de factura + + -- 09.02.2017 + -- marius.mutu + -- scrie_jc_2007 - calcul baza exigibila 19% pentru exigibilizare TVA incasare + + -- 23.03.2017 + -- marius.mutu + -- scrie_jc_2007 - calcul totctva din regularizare 408 = 401 cu TVA incasare 19% + + -- scrie_jv_2007 - calcul totctva din regularizare 4111 = 418 cu TVA incasare si exigibilizare TVA - se scadea TVA de 3 ori + + -- 24.06.2017 + -- marius.mutu + -- SCRIE_IN_IREG_PARTENERI: ACONT SE IA IN FUNCTIE DE CONTUL DEBITOR-ACTIV/CREDITOR-PASIV + EXCEPTIE + -- NU TRATA CORECT NOTA 462.3 = 462.9. PUNEA ANALITICUL 3 IN LOC DE 9 + + -- sterge_document. actualizat procedura cu pack_contafin.finalizeaza_stergere_nota + -- pentru folosire in ROAGEST corectie NIR/Bon + + -- 28.09.2017 + -- marius.mutu + -- SCRIE_IN_RUL + -- Completare RUL.ID_RUL_AUX SI RUL_AUX.ID_FURNIZOR la intrari daca este setata optiunea + + -- 06.10.2017 + -- marius.mutu + -- + procedure GetRulajAuxiliarFurnizor + + -- 11.01.2018 + -- marius.mutu + -- STERGE_DIN_ACT - hint IDX_COD + + -- 22.05.2018 + -- marius.mutu + -- SCRIE_JC_2007: corectare totftvatax pentru 19% regularizare 408=401 + + -- 20.06.2018 + -- marius.mutu + -- SCRIE_JV_2007: corectare totctva pentru 19% regularizare 4111=418 + + -- 20.07.2018 + -- marius.mutu + -- COMPLETEAZA_IREG_PARTENERI - se iau din ireg_parteneri ultima inregistrare din luna < decat luna curenta, ultima luna diferita de luna curenta + + -- 23.01.2020 + -- marius.mutu + -- STERGE_DIN_ACT - nu mai sterg din documente pentru id_Set = 90021 inchidere 461 = 542, pentru ca are acelasi id_fact ca si 542.id_factc si se sterg id_docurile 542 + + -- 23.06.2020 + -- marius.mutu + -- SCRIE_JC_2007, SCRIE_JV_2007 nvl(scd/scc) la selectia din act. + -- este posibil ca scd/scc sa fie null si sa aiba id_jtva_coloana completat si nu sunt luate in considerare + + -- 09.07.2020 + -- marius.mutu + -- VALIDARE_INVALIDARE + ID_UTIL_VALIDARE, DATAORA_VALIDARE + + -- 08.02.2021 + -- SCRIE_IN_STOC_OBINV - se pot scrie si alte conturi in afara de 8039 in stoc_obinv + + -- 08.06.2021 + -- SCRIE_IN_STOC_OBINV - corectie selectie MERGE GROUP BY nvl(id_rul_aux) + + -- 25.01.2022 + -- SCRIE_JC_2007 - + xx19ti, ROTN50, ROTN100 + + -- 06.03.2022 + -- SCRIE_JC_2007 + CE19CTB, CE19CTT,CE9CTB, CE9CTT,CE5CTB, CE5CTT, RORTD24..RORTD5 + -- SCRIE_JV_2007 + RORTC24..RORTC5 + + -- 24.03.2022 + -- SCRIE_IN_ACT. ID_SUCURSALA, TAXCODE, PAYMENTCODE = NULL IN LOC DE 0 + + -- 05.04.2022 + -- SCRIE_JV_2007. TRATARE REGULARIZARE 461 = 418 + + -- 18.07.2023 + -- SCRIE_IN_STOC_OBINV + stoc_obinv.lot + + -- 31.08.2023 + -- SCRIE_JV_2007 + WRSCDDAB, WRSCDDCD + + -- 12.05.2025 + -- SCRIE_JC_2007 + XX19TIB + + -- 01.08.2025 + -- getCotaTVAStandard - obtinere cota TVA STANDARD din COTE_TVA, COTA 21% din 08/2025 + + -- 05.08.2025 + -- SCRIE_JC_2007, SCRIE_JV_2007 COTE TVA 21% SI 11% din 08/2025 + + -- 19.08.2025 + -- SCRIE_JC_2007 - corectie TOTAL CU TVA + + -- 01.09.2025 + -- getCotaTVAStandard - corectat pentru deschidere de luna + + -- 23.09.2025 + -- SCRIE_JC_2007 + -- BUG ORACLE XE 11: [Oracle][ODBC][Ora]ORA-00600: cod de eroare intern?, argumente: [13013], [5001], [80451], [21241702], [11], [21241702], [17], [], [], [], [], [] + -- Pentru incasarile/platile cu TVA la incasare + -- NO_QUERY_TRANSFORMATION dezactiveaza TOATE transformarile (view merging, subquery unnesting, query rewrite, etc.) + + -- 01.10.2025 + -- SCRIE_JC_2007 + -- NO_QUERY_TRANSFORMATION nu stiu de ce nu facea corect (nu scadea valoarea bazei) in cazul discount-urilor 401 = 767 + -- MERGE replaced with FORALL BULK operations to avoid Oracle XE bugs and improve performance + + -- 17.10.2025 + -- SCRIE_JV_2007 - CORECTARE RO21B nu se scadea TVA regularizare 418 + + -- 28.10.2025 + -- SCRIE_IN_RUL COMPLETARE ID_FACT PENTRU ACHIZITIE DIN IMPORT SI ACHIZITIE+PLATA + -- LA ACHIZITIE DIN IMPORT SE PUNEA MIN(ID_FACT) SI NU ERA INTOTDEAUNA FACTURA DE ACHIZITIE + + -- 05.03.2026 + -- SCRIE_JV_2007, SCRIE_JC_2007 - NU SE IAU IN CONSIDERARE XSETS.NU_JTVA (IN LOC DE 10621-10624 COMPENSARI LEI 419/409) + -- PENTRU CA ADAUG SI ALTE SETURI COMPENSARI 419/409 IN VALUTA + + --------------------------------------------------------------- + FUNCTION SCRIE_IN_FISIERE RETURN NUMBER IS + V_RETURN NUMBER := 0; + + BEGIN + RETURN V_RETURN; + END; + --------------------------------------------------------------- + PROCEDURE SCRIE_IN_ACT(V_GCS VARCHAR2) IS + LN_COD NUMBER(20) := 0; + lnIdFact NUMBER(20) := 0; + LD_DATAORA DATE; + LC_INSERT VARCHAR2(10000) := ''; + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + lnID_Util act_temp.id_util%Type := 0; + LNAN ACT_TEMP.AN%TYPE; + LNLUNA ACT_TEMP.LUNA%TYPE; + lnAutoValidare number(10) := 0; + lnBlocatROACONT NUMBER(1) := 0; + lnBlocatROAGEST NUMBER(1) := 0; + lnInchis number(1) := 0; + lnIdSucursala act_temp.id_sucursala%type; + lnIdFirma act_temp.id_sucursala%type; + lnTvaIncasare act_temp.tva_incasare%type; + BEGIN + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(V_GCS, 'ACT'); + LN_COD := pack_contafin.GET_COD(); + LD_DATAORA := pack_contafin.GET_DATAORA(); + LNID_UTIL := pack_contafin.GET_IDUTIL(); + LNAN := pack_sesiune.GETAN(); + LNLUNA := pack_sesiune.GETLUNA(); + lnIdSucursala := pack_contafin.GET_ID_SUCURSALA(); + lnIdFirma := pack_contafin.GET_ID_FIRMA(); + + -- VERIFIC DACA LUNA ESTE BLOCATA + PACK_FIRMA.IS_LUNA_BLOCATA(user, + pack_sesiune.nIdeROACONT, + lnAn, + lnLuna, + lnBlocatROACONT); + -- PACK_FIRMA.IS_LUNA_BLOCATA(tcS, pack_sesiune.nIdeROAGEST, tnAn, tnLuna, lnBlocatROAGEST); + lnInchis := lnBlocatROACONT + lnBlocatROAGEST; + + if lnInchis = 1 then + RAISE_APPLICATION_ERROR(-20000, 'LUNA CONTABILA ESTE BLOCATA'); + end if; + + -- SCRIE IN GCS.ACT_TEMP --------------------------- + PACK_CONTAFIN.SETARE_FACTURA(V_GCS); + + -- 12.03.2014 : pun ID_ACT -1 ca sa stiu care sunt inregistrarile noi atunci cand completez id_factd si id_factc + update ACT_TEMP set ID_ACT = -1 where id_fact = -1; + + -- cursor crsFacturi is select distinct nract, dataact, dataireg from act_temp where id_fact = -1 ; + + -- 03.10.2007 + -- MARIUS.MUTU + -- selectez nract, dataact in ordinea fizica (sper!!!!!) - astfel incat id_fact-urile generate sa fie in aceeasi ordine + -- pentru ca min(id_fact) se scrie in rull ( vezi nir din import, factura+chitanta) + /*select distinct nract, dataact + from act_temp + where id_fact = -1*/ + -- 12.02.2009 + -- MARIUS.ATANASIU + -- am adaugat si id_ctr ca sa pot da id_fact diferit pentru fiecare contract, + -- in caz ca emit o factura pentru mai multe contracte + for itemfact in (select nract, + dataact, + dataireg, + serie_act, + min(rn), + id_ctr, + min(id_ctr2) as id_ctr2, + max(tva_incasare) as tva_incasare, + id_set + from (select nract, + dataact, + dataireg, + serie_act, + rownum as rn, + decode(NVL(id_ctr, 0), + 0, + max(id_ctr) over(partition by nract, + dataact, + dataireg, + serie_act), + id_ctr) as id_ctr, + NVL(id_ctr, 0) as id_ctr2, + tva_incasare, + id_set + from act_temp + where id_fact = -1) + group by nract, + dataact, + dataireg, + serie_act, + id_ctr, + id_set + order by 4) loop + pack_contafin.set_idfact(V_GCS); + /* 25.02.2013 : se face cumularea id_fact pe listarea din RC/RJ + PACK_CONTAFIN.SET_IDFACT(itemfact.dataact, + itemfact.serie_act, + itemfact.nract, + itemfact.id_ctr);*/ + lnIdFact := get_idFact(); + if itemfact.id_ctr = itemfact.id_ctr2 then + update act_temp + set id_fact = lnIdFact + where nract = itemfact.nract + and dataact = itemfact.dataact + and dataireg = itemfact.dataireg + and NVL(serie_act, '+_') = NVL(itemfact.serie_act, '+_') + and id_ctr = itemfact.id_ctr + and id_fact = -1; + + -- 12.03.2014 : completez id_factd sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factd = lnIdFact + where pereched = itemfact.nract + and (id_factd = -1 or + (id_factd <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and id_ctr = itemfact.id_ctr; + + -- 12.03.2014 : completez id_factc sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factc = lnIdFact + where perechec = itemfact.nract + and (id_factc = -1 or + (id_factc <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and id_ctr = itemfact.id_ctr; + else + update act_temp + set id_fact = lnIdFact + where nract = itemfact.nract + and dataact = itemfact.dataact + and dataireg = itemfact.dataireg + and NVL(serie_act, '+_') = NVL(itemfact.serie_act, '+_') + and NVL(id_ctr, 0) in (itemfact.id_ctr, 0) + and id_fact = -1; + + -- 12.03.2014 : completez id_factd sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factd = lnIdFact + where pereched = itemfact.nract + and (id_factd = -1 or + (id_factd <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and NVL(id_ctr, 0) in (itemfact.id_ctr, 0); + + -- 12.03.2014 : completez id_factc sau il suprascriu ( in cazul in care l-am completat deja si + -- mai gasesc un document pereche care are serie_act diferita de a documentului ) + update act_temp + set id_factc = lnIdFact + where perechec = itemfact.nract + and (id_factc = -1 or + (id_factc <> -1 and id_act = -1 and + NVL(serie_act, '+_') <> NVL(itemfact.serie_act, '+_'))) + and NVL(id_ctr, 0) in (itemfact.id_ctr, 0); + end if; + + -- SCRIE IN DOCUMENTE + lnTvaIncasare := case + when itemfact.tva_incasare > 0 then + 1 + else + 0 + end; + -- 25.02.2013 : am repus insertul pentru ca se face cumularea id_fact pe listarea din RC/RJ + INSERT INTO DOCUMENTE + (ID_DOC, + ID_UTIL, + DATAORA, + TVA_INCASARE, + SERIE_ACT, + NRACT, + DATAACT, + DATAIREG, + ID_CTR, + ID_SET) + VALUES + (lnIdFact, + lnID_Util, + LD_DATAORA, + lnTvaIncasare, + itemfact.serie_act, + itemfact.nract, + itemfact.dataact, + itemfact.dataireg, + decode(itemfact.id_ctr, 0, NULL, itemfact.id_ctr), + itemfact.id_set); + /* + -- modificare ROACONT v 2.4.0 ( 27.12.2012 ) : am adaugat serie_act, nract, dataact + -- modificare 21.02.2013 : am adaugat id_ctr + MERGE INTO DOCUMENTE A + USING (SELECT lnIdFact as ID_DOC, + itemfact.serie_act as SERIE_ACT, + itemfact.nract as NRACT, + itemfact.dataact as DATAACT, + decode(itemfact.id_ctr, 0, NULL, itemfact.id_ctr) AS ID_CTR + FROM DUAL) B + ON (A.ID_DOC = B.ID_DOC) + WHEN NOT MATCHED THEN + INSERT + (ID_DOC, + ID_UTIL, + DATAORA, + TVA_INCASARE, + SERIE_ACT, + NRACT, + DATAACT, + ID_CTR) + VALUES + (B.ID_DOC, + lnID_Util, + LD_DATAORA, + lnTvaIncasare, + B.SERIE_ACT, + B.NRACT, + B.DATAACT, + B.ID_CTR);*/ + + end loop; + + update act_temp set id_factd = 0 where id_factd = -1; + update act_temp set id_factc = 0 where id_factc = -1; + -- modificare 21.02.2013 : daca s-au modificat serie_act/nract/dataact, atunci trebuie sa modific + -- si in tabela DOCUMENTE ; am pus merge-ul inainte de completare id_fact pentru notele cu id_fact = -5 + -- ( notele cu 4426-4428/4428-4427 ) deoarece acolo pot sa am serie act/nr.act/data act de la doc. de + -- plata/incasare si id_fact de la factura si atunci mi-ar pune datele documentului de plata/incasare + -- pe id_fact-ul facturii in DOCUMENTE + MERGE INTO DOCUMENTE A + USING (SELECT DISTINCT ID_FACT AS ID_DOC, + SERIE_ACT, + NRACT, + DATAACT, + DATAIREG, + MAX(DECODE(ID_CTR, 0, NULL, ID_CTR)) AS ID_CTR + FROM ACT_TEMP + WHERE STERS = 0 + AND ID_FACT <> -5 + AND NOT (SCD = '4426' AND SCC = '4428') + AND NOT (SCD = '4428' AND SCC = '4427') + AND ID_SET <> 90501 + GROUP BY ID_FACT, SERIE_ACT, NRACT, DATAACT, DATAIREG) B + ON (A.ID_DOC = B.ID_DOC) + WHEN MATCHED THEN + UPDATE + SET SERIE_ACT = B.SERIE_ACT, + NRACT = B.NRACT, + DATAACT = B.DATAACT, + DATAIREG = B.DATAIREG, + ID_CTR = B.ID_CTR, + STERS = 0; + + -- modificare ROACONT v 2.4.0 ( 24.12.2012 ) : pe notele 4426-4428 / 4428-4427 + -- care le fac o data cu factura pun id_fact = id_fact_factura + merge into act_temp a + using (select distinct nract, id_fact + from act_temp + where id_fact <> -5 + and id_factc = 0 + and id_factd = 0) b + on (decode(a.pereched, 0, a.perechec, a.pereched) = b.nract and ((a.scd = '4426' and a.scc = '4428') or (a.scd = '4428' and a.scc = '4427'))) + when matched then + update set id_fact = decode(a.id_fact, -5, b.id_fact, a.id_fact); + + -- SCRIE IN ACT_TEMP ---------------- + if nvl(pack_contafin.nSuprascriereCod, 1) = 1 then + UPDATE ACT_TEMP + SET COD = LN_COD, + DATAORA = LD_DATAORA, + ID_UTIL = LNID_UTIL, + AN = LNAN, + LUNA = LNLUNA; + else + if NVL(pack_contafin.nSuprascriereAnLuna, 1) = 1 then + UPDATE ACT_TEMP + SET DATAORA = LD_DATAORA, + ID_UTIL = LNID_UTIL, + AN = LNAN, + LUNA = LNLUNA; + else + UPDATE ACT_TEMP SET DATAORA = LD_DATAORA, ID_UTIL = LNID_UTIL; + end if; + end if; + + -- 04.04.2008 + -- Nu se suprascrie id_sucursala completat deja in act_temp + UPDATE ACT_TEMP + SET ID_SUCURSALA = lnIdSucursala + WHERE NVL(ID_SUCURSALA, 0) = 0; + -- 04.04.2008 ^ + + -- COMPLETEZ MONEDA NATIONALA DACA ID_VALUTA = 0 + UPDATE ACT_TEMP + SET ID_VALUTA = pack_def.GetIdMonedaNationala() + where id_valuta = 0; + + -- Completez NULL campurile care sunt NULL in act + update act_temp + set id_sucursala = DECODE(id_sucursala, 0, null, id_sucursala), + taxcode = decode(taxcode, 0, null, taxcode), + paymentcode = decode(paymentcode, 0, null, paymentcode); + + -- 02.06.2008 USER - PACK_CONTAFIN.ID_FIRMA + -- 16.11.2007 MARIUS.MUTU + -- AUTOVALIDARE INREGISTRARI + /* SELECT CONTAFIN_ORACLE.PACK_DREPTURI.UtilHasValidare(USER, + PACK_CONTAFIN.GET_IDUTIL(), + 'AUTOVALIDARE') + INTO lnAutoValidare + FROM DUAL;*/ + + SELECT CONTAFIN_ORACLE.PACK_DREPTURI.UtilHasValidare(lnIdFirma, + PACK_CONTAFIN.GET_IDUTIL(), + 'AUTOVALIDARE') + INTO lnAutoValidare + FROM DUAL; + + if nvl(lnAutoValidare, 0) > 0 then + UPDATE ACT_TEMP + SET VALIDAT = 1, + ID_UTILV = PACK_CONTAFIN.GET_IDUTIL(), + DATAORAV = SYSDATE; + end if; + -- 16.11.2007 MARIUS.MUTU ^ + + -- SCRIE IN ACT + LC_INSERT := 'INSERT INTO ' || V_GCS || '.ACT(' || V_LISTA_CAMPURI || + ') (SELECT ' || V_LISTA_CAMPURI || ' FROM ACT_TEMP)'; + EXECUTE IMMEDIATE LC_INSERT; + + -- ACTUALIZARE TABELE_VALIDARE + PACK_CONTAFIN.VALIDARE_INVALIDARE(nTipValidareAutomata, + NULL, + lnAn, + lnLuna); + + END SCRIE_IN_ACT; + --------------------------------------------------------------------------------------- + + -- INTOARCE STAREA VALIDARII UNEI SITUATII INTR-O LUNA + -- PENTRU REFACEREA SITUATIEI RESPECTIVE IN PROCEDURA DESCHIDERE_LUNA + -- DACA NU GASESC INREGISTRAREA PENTRU LUNA RESPECTIVA, CONSIDER LUNA INVALIDATA + -- RETURN: 1 = VALIDAT; 0 = INVALIDAT + FUNCTION GETVALIDARE(tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL) + return number is + ldInvalidat tabele_validare.dinvalidat%type; + begin + begin + select DINVALIDAT + INTO ldInvalidat + from TABELE_VALIDARE + WHERE TABEL = tcTabel + and an = tnAn + and luna = tnLuna + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + exception + when NO_DATA_FOUND then + ldInvalidat := sysdate; -- daca nu gasesc inregistrari consider luna invalidata + end; + + return case when ldInvalidat is null then 1 else 0 end; + + end; + + -- ACTUALIZARE TABELE_VALIDARE (BAL, BALANTA_PARTENERI, IREG_PARTENERI, JV2007, JC2007) + -- INVALIDARE LUNI URMATOARE + -- SE FOLOSESTE PENTRU REFACEREA DOAR A SITUATIILOR DIN LUNILE INVALIDATE + PROCEDURE VALIDARE_INVALIDARE(tnTipValidare tabele_validare.tip_validare%type DEFAULT NULL, + tcTabel tabele_validare.tabel%type DEFAULT NULL, + tnAn tabele_validare.an%type DEFAULT NULL, + tnLuna tabele_validare.luna%type DEFAULT NULL, + tcCont tabele_validare.cont%type DEFAULT NULL, + tnIdGestiune tabele_validare.id_gestiune%type DEFAULT NULL) IS + ldDataAnt date; + lnAnAnt tabele_validare.an%type; + lnLunaAnt tabele_validare.luna%type; + ldInvalidatAnterior tabele_validare.dinvalidat%type; + lnIdUtil tabele_validare.id_util_validare%type := pack_contafin.GET_IDUTIL(); + + lnAn act.an%type := tnAn; + lnLuna act.luna%type := tnLuna; + + lcSetNuScrie optiuni.varvalue%type; + lnIdSet act.id_set%type; + lcSituatiiNuScrie optiuni.varvalue%type; + lnScrieBV number(1) := 1; + lnScrieBP number(1) := 1; + lnScrieIP number(1) := 1; + lnScrieTVA number(1) := 1; + lnScrieSTOC number(1) := 1; + BEGIN + + -- tip_validare: 1 = Validare automata (Operatia este facuta in luna curenta. Situatia este validata automat), 2 = Validare prin refacere (Situatia se valideaza in cazul unei refaceri), 3 = Validare manuala + IF tnTipValidare = nTipValidareRefacere THEN + -- se verifica daca luna anterioara este valida: DINVALIDAT = NULL + -- luna cu refacerea se valideaza doar daca luna anterioara este valida + ldDataAnt := TO_DATE(to_char(tnAn) || lpad(tnLuna, 2, '0'), 'yyyymm') - 1; + lnAnAnt := extract(year from ldDataAnt); + lnLunaAnt := extract(month from ldDataAnt); + select max(DINVALIDAT) + INTO ldInvalidatAnterior + from TABELE_VALIDARE + WHERE TABEL = tcTabel + and an = lnAnAnt + and luna = lnLunaAnt + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + + -- validare prin refacere + UPDATE TABELE_VALIDARE + SET DULTIMA_REFACERE = SYSDATE, + DINVALIDAT = case + when ldInvalidatAnterior is null then + NULL + else + DINVALIDAT + end, + TIP_VALIDARE = case + when ldInvalidatAnterior is null then + tnTipValidare + else + TIP_VALIDARE + end, + ID_UTIL_INVALIDARE = case + when ldInvalidatAnterior is null then + NULL + else + ID_UTIL_INVALIDARE + end, + EXPLICATIE = case + when ldInvalidatAnterior is null then + NULL + else + EXPLICATIE + end, + ID_UTIL_VALIDARE = lnIdUtil, + DATAORA_VALIDARE = SYSDATE + WHERE TABEL = tcTabel + and an = tnAn + and luna = tnLuna + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + ELSIF tnTipValidare = nTipValidareManuala THEN + -- validare manuala - nu se face nici o verificare a validarii lunii anterioare pentru ca doresc sa fortez validarea + UPDATE TABELE_VALIDARE + SET DINVALIDAT = NULL, + TIP_VALIDARE = tnTipValidare, + ID_UTIL_INVALIDARE = NULL, + EXPLICATIE = NULL, + ID_UTIL_VALIDARE = lnIdUtil, + DATAORA_VALIDARE = SYSDATE + WHERE TABEL = tcTabel + and an = tnAn + and luna = tnLuna + and nvl(cont, 'x') = nvl(tcCont, 'x') + and nvl(id_gestiune, 0) = nvl(tnIdGestiune, 0); + ELSE + -- INVALIDARE SITUATII PE BAZA LA INREGISTRARILE DIN ACT_TEMP (SCRIERE/MODIFICARE/STERGERE) + -- se valideaza automat luna operatiei doar daca operatia este in ultima luna deschisa si daca luna anterioara este validata + + -- LISTA DE SETURI PENTRU CARE NU SE APELEAZA SCRIEREA balanta, balanta parteneri, inregistrari parteneri, tva, stoc + -- Bonurile fiscale de la chioscuri + -- Se refac situatiile doar prin refaceri/redeschidere de luna FORTAT PENTRU LUNA DOCUMENTELOR + lcSetNuScrie := PACK_SESIUNE.getOptiuneFirma('SETURI_SITUATII_NU_SCRIE'); -- '25052|BV,BP,IP,TVA;' + select max(id_set) into lnIdSet from act_temp; + IF lcSetNuScrie IS NOT NULL and lnIdSet is not null THEN + SELECT MAX(UPPER(SITUATII)) + into lcSituatiiNuScrie + FROM (SELECT GETWORDNUM(SET_SITUATII, 1, '|') AS ID_SET, + GETWORDNUM(SET_SITUATII, 2, '|') AS SITUATII + FROM (SELECT getwordnum(lcSetNuScrie, B.RAND, ';') AS SET_SITUATII + FROM DUAL A, + (SELECT ROWNUM AS RAND + FROM USER_OBJECTS + WHERE ROWNUM < 100) B) + WHERE SET_SITUATII IS NOT NULL) + WHERE ID_SET = to_char(lnIdSet); + if lcSituatiiNuScrie LIKE '%BV%' then + lnScrieBV := 0; + end if; + if lcSituatiiNuScrie LIKE '%BP%' then + lnScrieBP := 0; + end if; + if lcSituatiiNuScrie LIKE '%IP%' then + lnScrieIP := 0; + end if; + if lcSituatiiNuScrie LIKE '%TVA%' then + lnScrieTVA := 0; + end if; + if lcSituatiiNuScrie LIKE '%STOC%' then + lnScrieSTOC := 0; + end if; + END IF; + + MERGE INTO TABELE_VALIDARE A + USING (select c.tabel, + lnAn as an, + lnLuna as luna, + cal.an as can, + cal.luna as cluna, + c.cont, + c.id_gestiune, + case + when lnAn = cal.an and lnLuna = cal.luna then + sysdate + else + cast(null as date) + end as dultima_operatie, + case + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'BAL' AND lnScrieBV = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'BALANTA_PARTENERI' AND lnScrieBP = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'IREG_PARTENERI' AND lnScrieIP = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'JV2007' AND lnScrieTVA = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'JC2007' AND lnScrieTVA = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'STOC' AND lnScrieSTOC = 1) THEN + cast(null as date) + when (lnAn = cal.an and lnLuna = cal.luna) and + (TABEL = 'STOC_OBINV' AND lnScrieSTOC = 1) THEN + cast(null as date) + else + sysdate + end as dinvalidat + from (WITH cContAct as (SELECT SCD AS CONT, ID_JTVA_COLOANA + FROM ACT_TEMP + UNION + SELECT SCC AS CONT, ID_JTVA_COLOANA + FROM ACT_TEMP), cContStoc as (SELECT DISTINCT '' AS CONT, + ID_GESTIUNE + FROM RUL_TEMP), cContStocO as (SELECT DISTINCT '' AS CONT, + ID_GESTIUNE + FROM Rul_Temp_Obinv) + SELECT DISTINCT 'BAL' AS tabel, + '' as CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + UNION + SELECT DISTINCT 'BALANTA_PARTENERI' AS tabel, + B.CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + where b.cont in (select cont from config_cont_ireg) + UNION + SELECT DISTINCT 'IREG_PARTENERI' AS tabel, + B.CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + where b.cont in (select cont + from config_cont_ireg + where cu_inregistrari = 1) + UNION + SELECT DISTINCT 'JV2007' AS tabel, + '' AS CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + WHERE ID_JTVA_COLOANA IN + (SELECT ID_JTVA_COLOANA + FROM JTVA_COLOANE + WHERE JV = 1) + UNION + SELECT DISTINCT 'JC2007' AS tabel, + '' AS CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContAct B + WHERE ID_JTVA_COLOANA IN + (SELECT ID_JTVA_COLOANA + FROM JTVA_COLOANE + WHERE JC = 1) + UNION + SELECT DISTINCT 'STOC' AS tabel, + '' as CONT, + B.ID_GESTIUNE + FROM cContStoc B + UNION + SELECT DISTINCT 'STOC_OBINV' AS tabel, + '' as CONT, + CAST(NULL AS NUMBER) AS ID_GESTIUNE + FROM cContStocO B) c + join calendar cal + on cal.an * 12 + cal.luna >= lnAn * 12 + lnLuna + ) D + ON (A.TABEL = d.TABEL AND A.AN = D.cAN AND A.LUNA = D.cLUNA AND nvl(A.CONT, 'X') = NVL(D.CONT, 'X') AND NVL(A.ID_GESTIUNE, 0) = NVL(D.ID_GESTIUNE, 0)) + WHEN NOT MATCHED THEN + INSERT + (tabel, + an, + luna, + cont, + id_gestiune, + dultima_operatie, + dinvalidat, + id_util_invalidare, + explicatie) + values + (d.tabel, + d.can, + d.cluna, + d.cont, + d.id_gestiune, + d.dultima_operatie, + d.dinvalidat, + lnIdUtil, + lpad(tnLuna, 2, '0') || '/' || tnAn) + WHEN MATCHED THEN + UPDATE + set a.dultima_operatie = nvl(d.dultima_operatie, + a.dultima_operatie), + a.dinvalidat = nvl(d.dinvalidat, a.dinvalidat), + a.id_util_invalidare = lnIdUtil, + a.explicatie = lpad(tnLuna, 2, '0') || '/' || tnAn; + END IF; -- tcTabel is not null + END VALIDARE_INVALIDARE; + + -- MARCHEAZA INREGISTRARILE CA VALIDATE + PROCEDURE VALIDAREINREGISTRARI(tnAn IN act.an%type, + tnLuna act.luna%type, + tnIdUtil act.id_Utilv%type, + tnCod act.cod%type) IS + lnDreptValidare number(10) := 0; + lnBlocatROACONT NUMBER(1) := 0; + lnBlocatROAGEST NUMBER(1) := 0; + lnInchis number(1) := 0; + BEGIN + + PACK_FIRMA.IS_LUNA_BLOCATA(user, + pack_sesiune.nIdeROACONT, + tnAn, + tnLuna, + lnBlocatROACONT); + -- PACK_FIRMA.IS_LUNA_BLOCATA(tcS, pack_sesiune.nIdeROAGEST, tnAn, tnLuna, lnBlocatROAGEST); + lnInchis := lnBlocatROACONT + lnBlocatROAGEST; + + if lnInchis = 1 then + goto sfarsit; + end if; + + SELECT CONTAFIN_ORACLE.PACK_DREPTURI.UtilHasValidare(pack_contafin.GET_ID_FIRMA(), + tnIdUtil, + 'DREPTVALIDARE') + INTO lnDreptValidare + FROM DUAL; + + if nvl(lnDreptValidare, 0) > 0 then + UPDATE ACT + SET VALIDAT = 1, ID_UTILV = tnIdUtil, DATAORAV = SYSDATE + WHERE AN = tnAn + and LUNA = tnLuna + and COD = tnCod + and NVL(STERS, 0) = 0; + else + RAISE_APPLICATION_ERROR(-20000, + 'Nu aveti drepturi pentru validarea inregistrarilor'); + end if; + + <> + null; + END VALIDAREINREGISTRARI; + --------------------------------------------------------------------------------------- + procedure EXECUTA_SCRIE_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number) IS + + cursor c_DOCUMENTE is + select distinct nvl(ID_FACT, 0) as id_fact, nract, dataact + from act_temp; + cLinieD c_DOCUMENTE%rowtype; + + tnProcTvaSt act_temp.proc_tva%Type := tnProcTvaStR; + tnProcTvaRed act_temp.proc_tva%Type := tnProcTvaRedR; + v_sumaTVA act_temp.suma%type := 0; + V_LISTA_CAMPURI varchar2(5000); + + BEGIN + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(USER, 'ACT_temp_ireg'); + -- citesc cota tva standard si redus din cote_tva + BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaSt + USING tnAn, tnLuna, '%STANDARD%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaSt := tnProcTvaStR; + END; + IF tnProcTvaSt IS NULL THEN + tnProcTvaSt := tnProcTvaStR; + END IF; + + BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaRed + USING tnAn, tnLuna, '%REDUS%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaRed := tnProcTvaRedR; + END; + IF tnProcTvaRed IS NULL THEN + tnProcTvaRed := tnProcTvaRedR; + END IF; + + open c_DOCUMENTE; + fetch c_DOCUMENTE + into cLinieD; + + while c_DOCUMENTE%found loop + + delete from act_temp_ireg; + + execute immediate 'INSERT INTO ACT_TEMP_IREG (' || v_lista_campuri || + ') SELECT ' || v_lista_campuri || + ' from act_temp where id_fact = :1 and nract = :2 and dataact = :3' + using cLinieD.id_fact, cLinieD.nract, cLinieD.dataact; + + -- 07.12.2006 + -- MARIUS.MUTU + -- AM CALCULAT SUMA TVA PENTRU FIECARE COTA TVA IN AFARA DE 0 SAU 1 (NEIMPOZABIL) + -- APOI SCAD SUMA DIN PRIMA SUMA CU TVA CU ACEA COTA DE TVA + -- temporar, pt regularizare facturi nesosite, neintocmite + FOR cota_tva in (select distinct proc_tva + from act_temp_ireg + where proc_tva not in (0, 1)) LOOP + begin + select suma + INTO v_sumaTVA + from act_temp_ireg + where proc_tva = cota_tva.proc_tva + and ((scd = '4426' and scc = '4428') or + (scd = '4428' and scc = '4427')); + + EXCEPTION + WHEN OTHERS THEN + v_sumaTVA := 0; + end; + -- 22.11.2006 + -- MARIUS.MUTU + -- ROWNUM = 1 SA NU SE SCADA TVA-UL DE MAI MULTE ORI + -- dbms_output.put_line('suma TVA : '||cLinieD.nract || ', ' || v_sumaTVA); + UPDATE act_temp_ireg + set suma = suma - v_sumaTVA + where rownum = 1 + and ((scd = '4111' and scc = '418') or + (scd = '408' and scc = '401')) + and proc_tva = cota_tva.proc_tva; + END LOOP; + + ----- + + pack_contafin.SCRIE2_TVA(V_GCS, + tcNumeTabel, + tnProcTvaSt, + tnProcTvaRed, + tcCorespDTva, + tcCorespDBaza, + tcCorespCTva, + tcCorespCBaza, + tcContTva, + tcExceptii, + tnAn, + tnLuna, + tnScrie, + cLinieD.id_fact, + cLinieD.nract, + cLinieD.dataact); + fetch c_DOCUMENTE + into cLinieD; + end loop; + close c_DOCUMENTE; + + execute immediate 'delete from act_temp_ireg'; + + END EXECUTA_SCRIE_TVA; + --------------------------------------------------------------- + procedure SCRIE2_TVA(V_GCS VARCHAR2, + tcNumeTabel varchar2, + tnProcTvaStR number, + tnProcTvaRedR number, + tcCorespDTva varchar2, + tcCorespDBaza varchar2, + tcCorespCTva varchar2, + tcCorespCBaza varchar2, + tcContTva varchar2, + tcExceptii varchar2, + tnAn number, + tnLuna number, + tnScrie number, + tnIdFact number, + tnNrAct number, + tdDataAct date) IS + + lnAct number(20); + lnCumpVanz number(10); + + lnSumaNeimpozab number(24, 4); + lnSumaTvam number(24, 4); + lnSumaTvai number(24, 4); + lnSumaTotalm number(24, 4); + lnSumaTotali number(24, 4); + + lcAn varchar2(4); + lcLuna varchar2(2); + lcIdTabel varchar2(20); + + lnScrie_tva number(1); + V_APARITII_scd number(2) := 0; + V_APARITII_scc number(2) := 0; + V_APARITII number(2) := 0; + + lcContCoresp varchar2(3); + lcCont varchar2(3); + lcContulCoresp varchar2(4); + + lcContul varchar2(4); + lcCorespTva varchar2(1000); + lcCorespBaza varchar2(1000); + lcCorespondente varchar2(1000); + ldDataact date; + ldDataireg date; + lnNract number(20); + lnId_fdoc number(5); + lnCod number(20); + lnId_part number(10); + lcScd varchar2(4); + lcScc varchar2(4); + lnNeimpozab number(24, 4); + ignore number(1); + lnGasit number(1) := 0; + lnGasitPart number(1) := 0; + lnIdRand number(35); + + cursor c_act_temp is + select * + from act_temp_ireg + where id_fact = tnIdFact + and nract = tnNrAct + and dataact = tdDataAct + order by id_act; + + cLinie c_act_temp%rowtype; + + tnProcTvaSt act_temp.proc_tva%Type := tnProcTvaStR; + tnProcTvaRed act_temp.proc_tva%Type := tnProcTvaRedR; + + begin + lcAn := to_char(tnAn); + lcLuna := TO_CHAR(tnLuna); + lnScrie_tva := 0; + + /* -- citesc cota tva standard si redus din cote_tva + BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaSt + USING tnAn, tnLuna, '%STANDARD%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaSt := tnProcTvaStR; + END; + IF tnProcTvaSt IS NULL THEN + tnProcTvaSt := tnProcTvaStR; + END IF;*/ + + /* BEGIN + EXECUTE IMMEDIATE 'SELECT MAX(proc_tva) from ' || V_GCS || + '.cote_tva + where an = :1 and luna = :2 and descriere like :3' + INTO tnProcTvaRed + USING tnAn, tnLuna, '%REDUS%'; + EXCEPTION + WHEN OTHERS THEN + tnProcTvaRed := tnProcTvaRedR; + END; + IF tnProcTvaRed IS NULL THEN + tnProcTvaRed := tnProcTvaRedR; + END IF;*/ + + lnAct := dbms_sql.open_cursor; + lnCumpVanz := dbms_sql.open_cursor; + lnId_part := 0; + + if tcContTva = '4426' then + execute immediate 'SELECT COUNT(*) FROM ACT_TEMP_ireg WHERE (SCD = :1 OR (proc_tva <> 0 and to_number(scc) <> 4427 and to_number(scc) in (' || + tcCorespDBaza || ') and to_number(scd) not in (' || + tcCorespDBaza || + ')) OR (proc_tva<>0 and to_number(scd) in (' || + tcCorespDBaza || ') and to_number(scc) in (' || + tcExceptii || + '))) and id_fact = :2 and nract = :3 and dataact = :4' + into V_APARITII_scd + using tcContTVA, tnIdFact, tnNrAct, tdDataAct; + else + V_APARITII_scd := 0; + end if; + if tcContTva = '4427' then + execute immediate 'SELECT COUNT(*) FROM ACT_TEMP_ireg WHERE (SCC = :1 OR (proc_tva <> 0 and to_number(scd) <> 4426 and to_number(scd) in (' || + tcCorespCBaza || ') and to_number(scc) not in (' || + tcCorespCBaza || + ')) OR (proc_tva<>0 and to_number(scc) in (' || + tcCorespCBaza || ') and to_number(scd) in (' || + tcExceptii || + '))) and id_fact = :2 and nract = :3 and dataact = :4' + into V_APARITII_scc + using tcContTVA, tnIdFact, tnNrAct, tdDataAct; + else + V_APARITII_scc := 0; + end if; + + if V_APARITII_scd > 0 then + -- 4426 + lcContCoresp := 'scc'; + lcCont := 'scd'; + lnScrie_tva := 1; + lcCorespTVA := tcCorespDTVA; + LcCorespBaza := tcCorespDBaza; + end if; + + if V_APARITII_scc > 0 then + -- 4427 + lcContCoresp := 'scd'; + lcCont := 'scc'; + lnScrie_tva := 1; + lcCorespTVA := tcCorespCTVA; + lcCorespBaza := tcCorespCBaza; + end if; + + if lnScrie_tva = 1 then + open c_act_temp; + fetch c_act_temp + into cLinie; + while c_act_temp%found loop + + if lcCont = 'scd' then + -- 4426 + lcCorespondente := tcCorespDBaza || ',' || tcExceptii; + lcContul := cLinie.scd; + lcContulCoresp := cLinie.scc; + else + -- 4427 + lcCorespondente := tcCorespCBaza || ',' || tcExceptii; + lcContul := cLinie.scc; + lcContulCoresp := cLinie.scd; + end if; + lnNeimpozab := cLinie.proc_tva; + + -- dbms_output.put_line(cLinie.nract || ',' || lnNeimpozab || ',' || + -- lcContulCoresp || ',' || lcCorespondente); + + if (lcContul = tcContTVA OR + instr(lcCorespondente, lcContulCoresp) > 0) and lnNeimpozab <> 0 then + -- dbms_output.put_line(cLinie.nract || ' a intrat'); + + if lnGasit = 0 then + lnGasit := 1; + /* lnNract := cLinie.nract; + ldDataact := cLinie.dataact;*/ + lcScd := cLinie.scd; + lcScc := cLinie.scc; + lnCod := cLinie.cod; + ldDataireg := cLinie.dataireg; + lnId_fdoc := cLinie.id_fdoc; + end if; + + if lcCont = 'scd' then + -- 4426 + if instr(tcCorespDBaza, lcContulCoresp) > 0 /*and lcContul <> tcContTva*/ + then + lnId_part := cLinie.id_partc; + lnGasitPart := 1; + elsif instr(tcCorespDBaza, lcContul) > 0 and + instr(tcExceptii, lcContulCoresp) > 0 then + lnId_part := cLinie.id_partd; + lnGasitPart := 1; + + end if; + else + --4427 + if instr(tcCorespCBaza, lcContulCoresp) > 0 /*and lcContul <> tcContTva*/ + then + if instr(tcExceptii, lcContul) > 0 then + -- 419 + lcScd := lcContul; + lnId_part := cLinie.id_partc; + lnGasitPart := 1; + else + lnId_part := cLinie.id_partd; + lnGasitPart := 1; + end if; + elsif instr(tcCorespCBaza, lcContul) > 0 and + instr(tcExceptii, lcContulCoresp) > 0 then + lnId_part := cLinie.id_partc; + lnGasitPart := 1; + end if; + + end if; + + end if; + if lnGasit = 1 and lnGasitPart = 1 then + exit; + end if; + fetch c_act_temp + into cLinie; + + end loop; + close c_act_temp; + + if lnGasit <> 1 then + /* lnNract := cLinie.nract; + ldDataact := cLinie.dataact;*/ + lcScd := cLinie.scd; + lcScc := cLinie.scc; + lnCod := cLinie.cod; + ldDataireg := cLinie.dataireg; + lnId_fdoc := cLinie.id_fdoc; + end if; + + lnNract := tnNrAct; + ldDataact := tdDataAct; + lcIdTabel := 'Id_' || tcNumeTabel; + + execute immediate 'SELECT COUNT(*), min(' || lcIdTabel || ') FROM ' || + V_GCS || '.' || tcNumeTabel || + ' WHERE an = :1 and luna = :2 and ID_PART = :3 AND NRACT =:4 AND DATAACT =:5' + into v_aparitii, lnIdRand + using tnAn, tnLuna, lnId_part, lnNract, ldDataact; + + -- UPDATE Cump, Vanz + if V_APARITII = 0 and tnscrie <> 2 then + EXECUTE IMMEDIATE 'INSERT INTO ' || V_GCS || '.' || tcNumeTabel || + '(LUNA, AN, scd, scc, dataact, ID_PART, nract, cod, dataireg, id_fdoc) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10)' + USING tnLuna, tnAn, lcScd, LcScc, ldDataact, lnId_part, lnNract, lnCod, ldDataireg, lnId_fdoc; + + if tnScrie = 2 then + return; + end if; + + end if; + + DBMS_SQL.PARSE(lnCumpVanz, + 'update ' || v_gcs || '.' || tcNumeTabel || + ' set neimpozab = neimpozab + :lnSumaNeimpozab, tvam = tvam + :lnSumaTvaM, tvai = tvai + :lnSumaTvaI,' || + 'totftvam = totftvam + :lnSumaTotalM - :lnSumaTvaM, totftvai = totftvai + :lnSumaTotalI - :lnSumaTvaI ' || + 'where an = ' || lcAn || ' and luna = ' || lcLuna || + 'and dataact = :ldDataact and nract = :lnNract and id_part = :lnId_part', + DBMS_SQL.native); + -- 'totctva = totftvam + totftvai + tvam + tvai + neimpozab' || + DBMS_SQL.PARSE(lnAct, + 'select sum(suma) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || lcCorespBaza || + ') and not to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = 1 and id_fact = ' || + tnIdFact || ' group by an UNION ' || + 'select sum(-suma) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || tcExceptii || + ') and to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = 1 and id_fact = ' || + tnIdFact || ' group by an ' || + 'UNION select sum(0.0000) as neimpozab, sum(suma) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcCont || ') = ' || tcContTva || ' and proc_tva = ' || + tnProcTvaSt || ' and id_fact = ' || tnIdFact || + ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(suma) as tvai, sum(0.0000) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcCont || ') = ' || tcContTva || ' and proc_tva = ' || + tnProcTvaRed || ' and id_fact = ' || tnIdFact || + ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(suma) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where ((to_number(' || + lcContCoresp || ') in (' || lcCorespBaza || + ') and not to_number(' || lcCont || ') in (' || + lcCorespBaza || ')) OR ' || lcCont || '= ' || + tcContTva || ') and proc_tva = ' || tnProcTvaSt || + ' and id_fact = ' || tnIdFact || ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(-suma) as Totctvam, sum(0.0000) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || tcExceptii || + ') and to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = ' || tnProcTvaSt || + ' and id_fact = ' || tnIdFact || ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(suma) as Totctvai + from act_temp_ireg where ((to_number(' || + lcContCoresp || ') in (' || lcCorespBaza || + ') and not to_number(' || lcCont || ') in (' || + lcCorespBaza || ')) OR ' || lcCont || '= ' || + tcContTva || ') and proc_tva = ' || tnProcTvaRed || + ' and id_fact = ' || tnIdFact || ' group by an UNION ' || + 'select sum(0.0000) as neimpozab, sum(0.0000) as tvam, sum(0.0000) as tvai, sum(0.0000) as Totctvam, sum(-suma) as Totctvai + from act_temp_ireg where to_number(' || + lcContCoresp || ') in (' || tcExceptii || + ') and to_number(' || lcCont || ') in (' || + lcCorespBaza || ') and proc_tva = ' || tnProcTvaRed || + ' group by an ', + DBMS_SQL.native); + + DBMS_SQL.DEFINE_COLUMN(lnAct, 1, lnSumaNeimpozab); + DBMS_SQL.DEFINE_COLUMN(lnAct, 2, lnSumaTvam); + DBMS_SQL.DEFINE_COLUMN(lnAct, 3, lnSumaTvai); + DBMS_SQL.DEFINE_COLUMN(lnAct, 4, lnSumaTotalm); + DBMS_SQL.DEFINE_COLUMN(lnAct, 5, lnSumaTotali); + ignore := DBMS_SQL.EXECUTE(lnAct); + + LOOP + IF DBMS_SQL.FETCH_ROWS(lnAct) > 0 THEN + -- get column values of the row + DBMS_SQL.COLUMN_VALUE(lnAct, 1, lnSumaNeimpozab); + DBMS_SQL.COLUMN_VALUE(lnAct, 2, lnSumaTvam); + DBMS_SQL.COLUMN_VALUE(lnAct, 3, lnSumaTvai); + DBMS_SQL.COLUMN_VALUE(lnAct, 4, lnSumaTotalm); + DBMS_SQL.COLUMN_VALUE(lnAct, 5, lnSumaTotali); + + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, + ':lnSumaNeimpozab', + lnSumaNeimpozab); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTvam', lnSumaTvam); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTvai', lnSumaTvai); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTotalm', lnSumaTotalm); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnSumaTotali', lnSumaTotali); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':ldDataact', ldDataact); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnNract', lnNract); + DBMS_SQL.BIND_VARIABLE(lnCumpVanz, ':lnId_part', lnId_part); + + ignore := DBMS_SQL.EXECUTE(lnCumpVanz); + + execute immediate 'update ' || v_gcs || '.' || tcNumeTabel || + ' set totctva = totftvam + totftvai + tvam + tvai + neimpozab ' || + 'where an = ' || lcAn || ' and luna = ' || + lcLuna || + 'and dataact = :1 and nract = :2 and id_part = :3' + using ldDataact, lnNract, lnId_part; + + -- if tnscrie = 2 then + -- sterg inregistrarile cu suma 0 + execute immediate 'delete from ' || v_gcs || '.' || tcNumeTabel || + ' where totctva = 0 and totftvam = 0 and totftvai = 0 and tvam = 0 and tvai = 0 and neimpozab = 0 and ' || + lcIdTabel || ' = :1' + using lnIdRand; + -- end if; + + else + + exit; + + end if; + + end loop; + + end if; -- a gasit TVA + + dbms_sql.close_cursor(lnAct); + dbms_sql.close_cursor(lnCumpVanz); + + end scrie2_tva; + + --------------------------------------------------------------- + PROCEDURE STERGE_DIN_ACT(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number, + tnTip IN NUMBER) is + + -- tnTip : 0 = modificare ; 1 = stergere + LD_DATAORA ACT_TEMP.DATAORA%TYPE; + LC_UPDATE VARCHAR2(10000) := ''; + LNID_UTIL ACT_TEMP.ID_UTIL%TYPE; + lnTip number(1) := 0; + lnId_Fact act_temp.id_fact%Type := 0; + BEGIN + if tnTip is not null then + lnTip := tnTip; + end if; + LD_DATAORA := PACK_CONTAFIN.GET_DATAORA(); + LNID_UTIL := PACK_CONTAFIN.GET_IDUTIL(); + + UPDATE /*+ index(ACT IDX_COD) */ ACT + SET STERS = 1, DATAORAS = LD_DATAORA, ID_UTILS = lnId_util + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna; + + IF lnTip = 1 THEN + UPDATE DOCUMENTE + SET STERS = 1, ID_UTILS = LNID_UTIL, DATAORAS = LD_DATAORA + WHERE ID_DOC IN + (SELECT /*+ index(ACT IDX_COD) */ + DISTINCT ID_FACT + FROM ACT + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna + AND ID_FACT <> 0 + and ID_SET not in (90501, 90021) + AND NOT (SCD = '4426' AND SCC = '4428') + AND NOT (SCD = '4428' AND SCC = '4427')); + END IF; + + update act_temp set suma = -suma, suma_val = -suma_val; + + END STERGE_DIN_ACT; + --------------------------------------------------------------- + PROCEDURE STERGE_DIN_RUL(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number) is + LD_DATAORA RUL_TEMP.DATAORA%TYPE := PACK_CONTAFIN.GET_DATAORA(); + BEGIN + UPDATE RUL + SET STERS = 1, ID_UTILS = tnId_utils, DATAORAS = LD_DATAORA + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna; + + update rul_temp set cant = -cant, cante = -cante; -- ?? + + END STERGE_DIN_RUL; + --------------------------------------------------------------- + PROCEDURE STERGE_DIN_RUL_OBINV(V_GCS VARCHAR2, + tnAn in number, + tnLuna in number, + tnCod in number, + tnId_utils in number) is + LD_DATAORA RUL_TEMP.DATAORA%TYPE := PACK_CONTAFIN.GET_DATAORA(); + BEGIN + UPDATE RUL_OBINV + SET STERS = 1, ID_UTILS = tnId_utils, DATAORAS = LD_DATAORA + WHERE COD = tnCod + and an = tnAn + and luna = tnLuna; + + update rul_temp_OBINV set cant = -cant, cante = -cante; -- ?? + + END STERGE_DIN_RUL_OBINV; + --------------------------------------------------------------- + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_RUL(tcS IN VARCHAR2) IS + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + + LN_COD NUMBER(20) := 0; + lnIdFact NUMBER(20) := 0; + lnCuFacturi NUMBER(5) := 0; + LD_DATAORA DATE; + LC_UPDATE VARCHAR2(100) := ''; + LC_INSERT VARCHAR2(10000) := ''; + lnId_Util act_temp.id_util%Type; + LNAN ACT_TEMP.AN%TYPE; + LNLUNA ACT_TEMP.LUNA%TYPE; + lnIdSucursala act.id_sucursala%type; + lnProcTvaStandard act_temp.proc_tva%TYPE; + lcRulajFurnizor OPTIUNI.VARVALUE%TYPE; + lnRulajFurnizor NUMBER(1) := 0; + lnIdFurnizor nom_parteneri.id_part%type; + lnIdRulAux rul_auxiliar.id_rul_aux%type; + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(tcS, 'RUL'); + + LN_COD := pack_contafin.GET_COD(); + LD_DATAORA := pack_contafin.GET_DATAORA(); + lnId_Util := pack_contafin.GET_IDUTIL(); + LNAN := pack_sesiune.GETAN(); + LNLUNA := pack_sesiune.GETLUNA(); + lnProcTvaStandard := pack_contafin.getCotaTVAStandard(LNLUNA, LNAN); + + lcRulajFurnizor := PACK_SESIUNE.getOptiuneFirma('RULAJFURNIZOR'); + IF lcRulajFurnizor IS NULL THEN + lnRulajFurnizor := 0; + ELSE + lnRulajFurnizor := to_number(lcRulajFurnizor); + END IF; + + -- 25.10.2006 + -- mutu.marius + -- in cazul factura achizitie + plata - se generau 2 id_fact, iar in rulaj se ducea ultimul id_fact (plata) + -- probleme la listare - iau doar inregistrarile fara trezorerie ('5') + -- lnIdFact := get_idFact(); + select min(id_fact) + into lnIdFact + from act_temp + where substr(scd, 1, 1) <> '5' + and substr(scc, 1, 1) <> '5'; + + if nvl(pack_contafin.nSuprascriereCod, 1) = 1 then + UPDATE RUL_TEMP + SET COD = LN_COD, + DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + + -- LA ACHIZITIE DIN IMPORT SE PUNEA ALT ID_FACT DECAT LA PRIMA FACTURA CARE AVEA NNIR <> 0 + MERGE INTO RUL_TEMP A + USING (SELECT DISTINCT NRACT, COD, ID_FACT, NNIR + FROM ACT_TEMP + WHERE NVL(ID_FACT, 0) <> 0 + AND substr(scd, 1, 1) <> '5' + and substr(scc, 1, 1) <> '5') B + ON (A.NRACT = B.NRACT AND A.COD = B.COD AND A.NNIR = B.NNIR) + WHEN MATCHED THEN + UPDATE SET A.ID_FACT = B.ID_FACT; + + UPDATE RUL_TEMP SET ID_FACT = lnIdFact WHERE NVL(ID_FACT,0) = 0; + + /*if lnIdFact <> 0 and lnIdFact is not null then + -- la modificare nu setez id_fact + -- UPDATE RUL_TEMP SET ID_FACT = lnIdFact; + end if;*/ + + else + if nvl(pack_contafin.nSuprascriereAnLuna, 1) = 1 then + UPDATE RUL_TEMP + SET DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + else + UPDATE RUL_TEMP SET DATAORA = LD_DATAORA, ID_UTIL = lnId_Util; + end if; + + MERGE INTO RUL_TEMP A + USING (SELECT DISTINCT NRACT, COD, ID_FACT, NNIR FROM ACT_TEMP) B + ON (A.NRACT = B.NRACT AND A.COD = B.COD AND A.NNIR = B.NNIR) + WHEN MATCHED THEN + UPDATE SET A.ID_FACT = B.ID_FACT; + end if; + + -- 23.02.2010 + -- Nu se suprascrie id_sucursala completat deja in act_temp + UPDATE RUL_TEMP + SET ID_SUCURSALA = lnIdSucursala + WHERE NVL(ID_SUCURSALA, 0) = 0; + -- 23.02.2010 ^ + + UPDATE RUL_TEMP SET DATAIN = dataact WHERE CANT <> 0; + UPDATE RUL_TEMP SET DATAOUT = dataact WHERE CANTE <> 0; + UPDATE RUL_TEMP SET ID_RUL_AUX = NULL WHERE ID_RUL_AUX = 0; + + -- Completare RUL.ID_RUL_AUX SI RUL_AUX.ID_FURNIZOR la intrari daca este setata optiunea + if lnRulajFurnizor = 1 then + SELECT max(id_partc) + into lnIdFurnizor + from act_temp + where scc in ('401', '404', '408', '462') + and id_fact in (select id_fact from rul_temp where cant <> 0); + + if lnIdFurnizor is not null then + lnIdRulAux := GetRulajAuxiliarFurnizor(lnIdFurnizor); + update rul_temp set id_rul_aux = lnIdRulAux; + end if; + end if; + + LC_INSERT := 'INSERT INTO ' || tcS || '.RUL (' || V_LISTA_CAMPURI || + ') (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP)'; + + -- LC_INSERT := 'INSERT INTO ' || tcS || '.RUL (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP)'; + EXECUTE IMMEDIATE LC_INSERT; + + END SCRIE_IN_RUL; + + ------------------------------------------------------------------------------------ + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + + CURSOR CRS_TEMP IS + SELECT R.*, 00 AS TIPG FROM RUL_TEMP R WHERE 1 = 2; + pCursor tip_ref_cursor; + lnId_Stoc Act_Temp.Id_Act%Type; + lcSelect varchar2(1000); + lcSearcha varchar2(1000); + lcSearchv varchar2(1000); + lnStoca number; + lnStocv number; + item crs_temp%Rowtype; + ignore number := 0; + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + lcTabel varchar2(50) := tcTabel; + lcIdTabel varchar2(50) := tcIdTabel; + lcCondSpec varchar2(100) := tcCondSpec; + lcUpdateStoc varchar2(1000); + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and r.id_sucursala = ' || lnIdSucursala; + end if; + + if lcTabel is null then + lcTabel := 'Stoc'; + end if; + if lcIdTabel is null then + lcIdTabel := 'id_Stoc'; + end if; + if tcCondSpec is null then + lcCondSpec := '2=2'; + end if; + + lcSearcha := 'select ' || lcIdTabel || ' from ' || tcs || '.' || + lcTabel || + ' where an = :1 and luna = :2 and id_articol = :3 and id_gestiune = :4 + and cont = :5 and nvl(acont,''XXXX'') = :6 and pret = :7 + and NVL(id_rul_aux,0) = :8 and NVL(serie,''+_'') = :9 + and NVL(pretd,0) = :10 and NVL(id_valuta,0) = :11 + and NVL(LOT,''+_'') = :12 + AND NVL(ADATA_EXPIRARE, to_date(''1900-01-01'',''YYYY-MM-DD'')) = :13 and NVL(id_sucursala, 0) = :14 + AND NVL(ID_LUCRARE_REZ,0) = :15 AND NVL(ID_PART_REZ,0) = :16 AND ' || + lcCondSpec; + lcSearchv := 'select ' || lcIdTabel || ' from ' || tcs || '.' || + lcTabel || + ' where an = :1 and luna = :2 and id_articol = :3 and id_gestiune = :4 + and cont = :5 and NVL(acont,''XXXX'') = :6 and pret = :7 + and NVL(id_rul_aux,0) = :8 and NVL(serie,''+_'') = :9 + and pretv = :10 and tvav = :11 and proc_tvav = :12 + and NVL(pretd,0) = :13 and NVL(id_valuta,0) = :14 + and NVL(LOT,''+_'') = :15 + AND NVL(ADATA_EXPIRARE, to_date(''1900-01-01'',''YYYY-MM-DD'')) = :16 and NVL(id_sucursala, 0) = :17 + AND NVL(ID_LUCRARE_REZ,0) = :18 AND NVL(ID_PART_REZ,0) = :19 AND ' || + lcCondSpec; + IF tnScrie = 1 THEN + -- REFACERE + lnAn := tnAn; + lnLuna := tnLuna; + + lcSelect := 'select r.*,decode(nvl(g.nr_pag,00),6,1,7,1,0) as tipg + from rul r + left join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = :1 and r.luna = :2 and substr(r.cont,1,2)<>''80'' and r.sters=0 ' || + lcWhereSucursale; + ELSE + -- SCRIERE + /* lnAn := pack_contafin.GET_AN(); + lnLuna := pack_contafin.GET_LUNA();*/ + lnAn := tnAn; + lnLuna := tnLuna; + + lcSelect := 'select r.*,decode(nvl(g.nr_pag,00),6,1,7,1,0) as tipg + from rul_Temp r + left join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = :1 and r.luna = :2 and substr(r.cont,1,2)<>''80'' '; + -- lcSelect := 'select * from Xrul_temp'; + END IF; + + lnStoca := dbms_sql.open_cursor; + lnStocv := dbms_sql.open_cursor; + DBMS_SQL.PARSE(lnStoca, lcSearcha, DBMS_SQL.native); + DBMS_SQL.PARSE(lnStocv, lcSearchv, DBMS_SQL.native); + DBMS_SQL.DEFINE_COLUMN(lnStoca, 1, lnId_Stoc); + DBMS_SQL.DEFINE_COLUMN(lnStocv, 1, lnId_Stoc); + + open pCursor for lcSelect + USING lnAn, lnLuna; + loop + fetch pCursor + into item; + exit when pCursor%notfound; + + item.acont := NVL(item.acont, 'XXXX'); + -- pinfo('item.tva ' || item.tva); + + if item.tipg = 0 then + -- pinfo('tipg = 0 item.tva ' || item.tva); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':1', item.an); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':2', item.luna); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':3', item.id_articol); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':4', item.id_gestiune); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':5', item.cont); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':6', item.acont); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':7', item.pret); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':8', NVL(item.id_rul_aux, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':9', NVL(item.serie, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':10', NVL(item.pretd, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':11', NVL(item.id_valuta, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':12', NVL(item.lot, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStoca, + ':13', + NVL(item.adata_expirare, + TO_DATE('1900-01-01', 'YYYY-MM-DD'))); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':14', NVL(item.id_sucursala, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':15', NVL(item.id_lucrare_rez, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':16', NVL(item.id_part_rez, 0)); + + ignore := DBMS_SQL.EXECUTE(lnStoca); + + if item.acont = 'XXXX' then + item.acont := ''; + END IF; + IF DBMS_SQL.FETCH_ROWS(lnStoca) > 0 THEN + DBMS_SQL.COLUMN_VALUE(lnStoca, 1, lnId_Stoc); + -- pinfo('tipg = 0, update stoc.id_stoc ' || lnId_Stoc); + -- modificare + lcUpdateStoc := 'UPDATE ' || tcs || '.' || lcTabel || + ' set cant = cant + :1, cante = cante + :2, dataora = :3'; + + if item.dataout is not null and item.cante > 0 then + lcUpdateStoc := lcUpdateStoc || ',dataout = to_date(''' || + to_char(item.dataout, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + if item.datain is not null and item.cant > 0 then + lcUpdateStoc := lcUpdateStoc || ',datain = to_date(''' || + to_char(item.datain, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + lcUpdateStoc := lcUpdateStoc || ' where ' || lcIdTabel || ' = :4'; + + EXECUTE IMMEDIATE lcUpdateStoc + USING item.cant, item.cante, item.dataora, lnId_Stoc; + -- modificare ^ + ELSE + -- pinfo('tipg = 0, insert stoc tva ' || item.tva); + EXECUTE IMMEDIATE 'INSERT INTO ' || tcs || '.' || lcTabel || + ' (an, luna, id_articol, pret, cant, cante, cont, acont, id_gestiune, + dataora, datain, dataout, id_rul_aux,serie,tva,pretd,id_valuta,lot,adata_expirare,id_sucursala,id_lucrare_rez,id_part_rez) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13,:14,:15,:16,:17,:18,:19,:20,:21,:22)' + USING item.an, item.luna, item.id_articol, item.pret, item.cant, item.cante, item.cont, item.acont, item.id_gestiune, item.dataora, item.datain, item.dataout, item.id_rul_aux, item.serie, item.tva, item.pretd, item.id_valuta, item.lot, item.adata_expirare, item.id_sucursala, item.id_lucrare_rez, item.id_part_rez; + END IF; + else + DBMS_SQL.BIND_VARIABLE(lnStocv, ':1', item.an); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':2', item.luna); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':3', item.id_articol); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':4', item.id_gestiune); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':5', item.cont); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':6', item.acont); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':7', item.pret); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':8', NVL(item.id_rul_aux, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':9', NVL(item.serie, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':10', item.pretv); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':11', item.tvav); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':12', item.proc_tvav); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':13', NVL(item.pretd, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':14', NVL(item.id_valuta, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':15', NVL(item.lot, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStocv, + ':16', + NVL(item.adata_expirare, + TO_DATE('1900-01-01', 'YYYY-MM-DD'))); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':17', NVL(item.id_sucursala, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':18', NVL(item.id_lucrare_rez, 0)); + DBMS_SQL.BIND_VARIABLE(lnStocv, ':19', NVL(item.id_part_rez, 0)); + + ignore := DBMS_SQL.EXECUTE(lnStocv); + + if item.acont = 'XXXX' then + item.acont := ''; + END IF; + -- pinfo('tipg = 1 item.tva ' || item.tva); + IF DBMS_SQL.FETCH_ROWS(lnStocv) > 0 THEN + DBMS_SQL.COLUMN_VALUE(lnStocv, 1, lnId_Stoc); + -- pinfo('UPDATE STOC.ID ' || lnId_Stoc); + -- modificare + lcUpdateStoc := 'UPDATE ' || tcs || '.' || lcTabel || + ' set cant = cant + :1, cante = cante + :2, dataora = :3'; + + if item.dataout is not null then + lcUpdateStoc := lcUpdateStoc || ',dataout = to_date(''' || + to_char(item.dataout, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + if item.datain is not null then + lcUpdateStoc := lcUpdateStoc || ',datain = to_date(''' || + to_char(item.datain, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + lcUpdateStoc := lcUpdateStoc || ' where ' || lcIdTabel || ' = :4'; + + EXECUTE IMMEDIATE lcUpdateStoc + USING item.cant, item.cante, item.dataora, lnId_Stoc; + -- modificare ^ + ELSE + -- pinfo('INSERT INTO STOC.TVA ' || item.tva); + EXECUTE IMMEDIATE 'INSERT INTO ' || tcs || '.' || lcTabel || + ' (an, luna, id_articol, pret, pretv, tvav, proc_tvav, cant, cante, cont, acont, id_gestiune, + dataora, datain, dataout, id_rul_aux, serie, tva, pretd, id_valuta,lot,adata_expirare,id_sucursala,id_lucrare_rez,id_part_rez) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25)' + USING item.an, item.luna, item.id_articol, item.pret, item.pretv, item.tvav, item.proc_tvav, item.cant, item.cante, item.cont, item.acont, item.id_gestiune, item.dataora, item.datain, item.dataout, item.id_rul_aux, item.serie, item.tva, item.pretd, item.id_valuta, item.lot, item.adata_expirare, item.id_sucursala, item.id_lucrare_rez, item.id_part_rez; + END IF; + end if; + + end loop; + close pCursor; + + DBMS_SQL.close_cursor(lnStoca); + DBMS_SQL.close_cursor(lnStocv); + + END SCRIE_IN_STOC_OLD; + -------------------------------------------------------------------------------- + PROCEDURE SCRIE_IN_STOC(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + BEGIN + SCRIE_IN_STOC(tnAn, tnLuna, tnScrie); + END; + + PROCEDURE SCRIE_IN_STOC(tnAn in number, + tnLuna in number, + tnScrie number, + tnIdGestiune IN RUL.ID_GESTIUNE%TYPE DEFAULT NULL) IS + + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + lcFrom varchar2(1000); + lcFromV varchar2(1000); + lcSql varchar2(32000); + lcWhereGestiune varchar2(1000); + BEGIN + --pinfo('SCRIE_IN_STOC 1'); + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and r.id_sucursala = ' || lnIdSucursala; + end if; + + -- SE REFACE FIECARE GESTIUNE + if tnIdGestiune is not null then + lcWhereGestiune := ' and r.id_gestiune = ' || tnIdGestiune; + end if; + + lnAn := tnAn; + lnLuna := tnLuna; + + IF tnScrie = 1 THEN + -- REFACERE + lcFromV := 'rul r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and r.sters=0 and g.nr_pag in (6,7) ' || + lcWhereGestiune || lcWhereSucursale; + + lcFrom := 'rul r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and r.sters=0 and g.nr_pag not in (6,7)' || + lcWhereGestiune || lcWhereSucursale; + ELSE + -- SCRIERE + lcFromV := 'rul_temp r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and g.nr_pag in (6,7)'; + + lcFrom := 'rul_temp r + join vnom_gestiuni g on r.id_gestiune = g.id_gestiune + where r.an = ' || lnAn || ' and r.luna = ' || + lnLuna || + ' and substr(r.cont,1,2)<>''80'' and g.nr_pag not in (6,7)'; + END IF; + + -- MARFA LA PRET DE VANZARE (nom_gestiuni.nr_pag in (6,7)) + -- are in plus coloanele pretv, tvav, proc_tvav + -- nu grupez si nu fac merge dupa "tva", doar in bag in stoc - pentru ca nici in procedura veche nu cautam dupa tva + + lcSql := 'merge into stoc s1 + using (select r.an, + r.luna, + r.id_articol, + r.pret, + max(r.tva) as tva, + r.pretv, + r.tvav, + r.proc_tvav, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux) as id_rul_aux, + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta) as id_valuta, + r.lot, + r.adata_expirare, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala) as id_sucursala, + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ) as id_lucrare_rez, + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ) as id_part_rez, + 0 AS CANTS, + SUM(r.CANT) as cant, + SUM(r.CANTE) as cante, + MAX(r.dataora) as dataora, + MAX(nvl(r.datain,r.dataact)) AS datain, + MAX(nvl(r.dataout, r.dataact)) AS dataout + from ' || lcFromV || ' + GROUP BY + r.an, + r.luna, + r.id_articol, + r.pret, + r.pretv, + r.tvav, + r.proc_tvav, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux), + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta), + r.LOT, + r.ADATA_EXPIRARE, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala), + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ), + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ)) s0 + ON (s0.an = s1.an and + s0.luna = s1.luna and + s0.id_articol = s1.id_articol and + s0.pret = s1.pret and + s0.pretv = s1.pretv and + s0.tvav = s1.tvav and + s0.proc_tvav = s1.proc_tvav and + NVL(s0.pretd, 0) = NVL(s1.pretd, 0) and + s0.cont = s1.cont and + NVL(s0.acont, ''XXXX'') = NVL(s1.acont, ''XXXX'') and + s0.id_gestiune = s1.id_gestiune and + NVL(s0.id_rul_aux, 0) = NVL(s1.id_rul_aux, 0) and + NVL(s0.serie, ''+_'') = NVL(s1.serie, ''+_'') and + NVL(s0.id_valuta, 0) = NVL(s1.id_valuta, 0) and + NVL(s0.LOT, ''+_'') = NVL(s1.LOT, ''+_'') AND + NVL(s0.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) = NVL(s1.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) and + NVL(s0.id_sucursala, 0) = NVL(s1.id_sucursala, 0) AND + NVL(s0.ID_LUCRARE_REZ, 0) = NVL(s1.ID_LUCRARE_REZ, 0) AND + NVL(s0.ID_PART_REZ, 0) = NVL(s1.ID_PART_REZ, 0)) + WHEN MATCHED THEN + UPDATE set s1.cant = s1.cant + s0.cant, s1.cante = s1.cante + s0.cante, s1.dataora = s0.dataora, s1.datain = s0.datain, s1.dataout = s0.dataout, s1.tva = s0.tva + WHEN NOT MATCHED THEN + insert + (an, + luna, + id_articol, + pret, + tva, + pretv, + tvav, + proc_tvav, + pretd, + cant, + cante, + cont, + acont, + id_gestiune, + dataora, + datain, + dataout, + id_rul_aux, + serie, + id_valuta, + lot, + adata_expirare, + id_sucursala, + id_part_rez, + id_lucrare_rez) + values + (s0.an, + s0.luna, + s0.id_articol, + s0.pret, + s0.tva, + s0.pretv, + s0.tvav, + s0.proc_tvav, + s0.pretd, + s0.cant, + s0.cante, + s0.cont, + s0.acont, + s0.id_gestiune, + s0.dataora, + s0.datain, + s0.dataout, + s0.id_rul_aux, + s0.serie, + s0.id_valuta, + s0.lot, + s0.adata_expirare, + s0.id_sucursala, + s0.id_part_rez, + s0.id_lucrare_rez)'; + -- pinfo(lcSql); + -- pinfo('SCRIE_IN_STOC 2 ' || lcSql); + execute immediate lcSql; + -- pinfo('SCRIE_IN_STOC 2 ^'); + + -- MATERII PRIME/MARFA LA PRET DE ACHIZITIE (nom_gestiuni.nr_pag not in (6,7)) + lcSql := 'merge into stoc s1 + using (select r.an, + r.luna, + r.id_articol, + r.pret, + max(r.tva) as tva, + 0 as pretv, + 0 as tvav, + 0 as proc_tvav, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux) as id_rul_aux, + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta) as id_valuta, + r.lot, + r.adata_expirare, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala) as id_sucursala, + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ) as id_lucrare_rez, + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ) as id_part_rez, + 0 AS CANTS, + SUM(r.CANT) as cant, + SUM(r.CANTE) as cante, + MAX(r.dataora) as dataora, + MAX(nvl(r.datain,r.dataact)) AS datain, + MAX(nvl(r.dataout, r.dataact)) AS dataout + from ' || lcFrom || ' + GROUP BY + r.an, + r.luna, + r.id_articol, + r.pret, + r.pretd, + r.cont, + r.acont, + r.id_gestiune, + decode(NVL(r.id_rul_aux, 0), 0, NULL, r.id_rul_aux), + r.serie, + decode(NVL(r.id_valuta, 0), 0, NULL, r.id_valuta), + r.LOT, + r.ADATA_EXPIRARE, + decode(NVL(r.id_sucursala, 0), 0, NULL, r.id_sucursala), + decode(NVL(r.ID_LUCRARE_REZ, 0), 0, NULL, r.ID_LUCRARE_REZ), + decode(NVL(r.ID_PART_REZ, 0), 0, NULL, r.ID_PART_REZ)) s0 + ON (s0.an = s1.an and + s0.luna = s1.luna and + s0.id_articol = s1.id_articol and + s0.pret = s1.pret and + NVL(s0.pretd, 0) = NVL(s1.pretd, 0) and + s0.cont = s1.cont and + NVL(s0.acont, ''XXXX'') = NVL(s1.acont, ''XXXX'') and + s0.id_gestiune = s1.id_gestiune and + NVL(s0.id_rul_aux, 0) = NVL(s1.id_rul_aux, 0) and + NVL(s0.serie, ''+_'') = NVL(s1.serie, ''+_'') and + NVL(s0.id_valuta, 0) = NVL(s1.id_valuta, 0) and + NVL(s0.LOT, ''+_'') = NVL(s1.LOT, ''+_'') AND + NVL(s0.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) = NVL(s1.ADATA_EXPIRARE, to_date(''1900-01-01'', ''YYYY-MM-DD'')) and + NVL(s0.id_sucursala, 0) = NVL(s1.id_sucursala, 0) AND + NVL(s0.ID_LUCRARE_REZ, 0) = NVL(s1.ID_LUCRARE_REZ, 0) AND + NVL(s0.ID_PART_REZ, 0) = NVL(s1.ID_PART_REZ, 0)) + WHEN MATCHED THEN + UPDATE set s1.cant = s1.cant + s0.cant, s1.cante = s1.cante + s0.cante, s1.dataora = s0.dataora, s1.datain = s0.datain, s1.dataout = s0.dataout, s1.tva = s0.tva + WHEN NOT MATCHED THEN + insert + (an, + luna, + id_articol, + pret, + tva, + pretv, + tvav, + proc_tvav, + pretd, + cant, + cante, + cont, + acont, + id_gestiune, + dataora, + datain, + dataout, + id_rul_aux, + serie, + id_valuta, + lot, + adata_expirare, + id_sucursala, + id_part_rez, + id_lucrare_rez) + values + (s0.an, + s0.luna, + s0.id_articol, + s0.pret, + s0.tva, + s0.pretv, + s0.tvav, + s0.proc_tvav, + s0.pretd, + s0.cant, + s0.cante, + s0.cont, + s0.acont, + s0.id_gestiune, + s0.dataora, + s0.datain, + s0.dataout, + s0.id_rul_aux, + s0.serie, + s0.id_valuta, + s0.lot, + s0.adata_expirare, + s0.id_sucursala, + s0.id_part_rez, + s0.id_lucrare_rez)'; + + --pinfo('SCRIE_IN_STOC 3 ' || lcSql); + execute immediate lcSql; + -- pinfo('SCRIE_IN_STOC 3 ^'); + + END SCRIE_IN_STOC; + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_RUL_OBINV(tcS IN VARCHAR2) IS + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + + LN_COD NUMBER(20) := 0; + lnIdFact NUMBER(20) := 0; + lnCuFacturi NUMBER(5) := 0; + LD_DATAORA DATE; + LC_UPDATE VARCHAR2(100) := ''; + LC_INSERT VARCHAR2(10000) := ''; + lnId_Util act_temp.id_util%Type; + LNAN ACT_TEMP.AN%TYPE; + LNLUNA ACT_TEMP.LUNA%TYPE; + lnIdSucursala act.id_sucursala%type; + + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI(tcS, 'RUL_OBINV'); + + LN_COD := pack_contafin.GET_COD(); + LD_DATAORA := pack_contafin.GET_DATAORA(); + lnId_Util := pack_contafin.GET_IDUTIL(); + lnIdFact := get_idFact(); + LNAN := pack_sesiune.GETAN(); + LNLUNA := pack_sesiune.GETLUNA(); + + if nvl(pack_contafin.nSuprascriereCod, 1) = 1 then + UPDATE RUL_TEMP_OBINV + SET COD = LN_COD, + DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + else + if nvl(pack_contafin.nSuprascriereAnLuna, 1) = 1 then + UPDATE RUL_TEMP_OBINV + SET DATAORA = LD_DATAORA, + ID_UTIL = lnId_Util, + AN = lnAn, + LUNA = lnLuna; + else + UPDATE RUL_TEMP_OBINV + SET DATAORA = LD_DATAORA, ID_UTIL = lnId_Util; + end if; + end if; + + if lnIdFact <> 0 and lnIdFact is not null then + -- la modificare nu setez id_fact + UPDATE RUL_TEMP SET ID_FACT = lnIdFact; + end if; + + -- 23.02.2010 + -- Nu se suprascrie id_sucursala completat deja in act_temp + UPDATE RUL_TEMP_OBINV + SET ID_SUCURSALA = lnIdSucursala + WHERE NVL(ID_SUCURSALA, 0) = 0; + -- 23.02.2010 ^ + + UPDATE RUL_TEMP_OBINV SET DATAIN = dataact WHERE CANT <> 0; + + UPDATE RUL_TEMP_OBINV SET DATAOUT = dataact WHERE CANTE <> 0; + + LC_INSERT := 'INSERT INTO ' || tcS || '.RUL_OBINV (' || V_LISTA_CAMPURI || + ') (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP_OBINV)'; + + -- LC_INSERT := 'INSERT INTO ' || tcS || '.RUL (SELECT ' || V_LISTA_CAMPURI || ' FROM RUL_TEMP)'; + EXECUTE IMMEDIATE LC_INSERT; + + -- DBMS_OUTPUT.PUT_LINE('INREGISTRARI INSERATE: ' || SQL%ROWCOUNT); + + END SCRIE_IN_RUL_OBINV; + + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OBINV(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + BEGIN + SCRIE_IN_STOC_OBINV(tnAn, tnLuna, tnScrie); + END SCRIE_IN_STOC_OBINV; + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OBINV(tnAn in number, + tnLuna in number, + tnScrie number) IS + + lcSql varchar2(32000); + lcFrom varchar2(1000); + + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + lcContObInv stoc_obinv.cont%Type; + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + lcContObInv := pack_sesiune.getOptiuneFirma(USER, 'CONTOBINV'); + if lcContObinv is null then + lcContObinv := '8039'; + end if; + + IF tnScrie = 1 THEN + -- REFACERE + lcFrom := 'rul_obinv where sters = 0 and an = ' || lnAn || + ' and luna = ' || lnLuna || lcWhereSucursale; + ELSE + -- SCRIERE + lcFrom := 'rul_temp_obinv where an = ' || lnAn || ' and luna = ' || + lnLuna; + END IF; + + lcSql := 'merge into stoc_obinv s1 + using (select an, + luna, + id_articol, + pret, + max(tva) as tva, + max(pretv) as pretv, + max(tvav) as tvav, + max(proc_tvav) as proc_tvav, + max(pretd) as pretd, + 0 as cants, + sum(cant) as cant, + sum(cante) as cante, + (case when substr(cont,1,2) = ''80'' then ''' || + lcContObInv || ''' else cont end) as cont, + acont, + id_gestiune, + max(dataora) as dataora, + max(datain) as datain, + max(dataout) as dataout, + DATAPIF, + DNS_LUNI, + decode(NVL(id_responsabil, 0), 0, NULL, id_responsabil) as id_responsabil, + decode(NVL(id_rul_aux, 0), 0, NULL, id_rul_aux) as id_rul_aux, + serie, + lot, + decode(NVL(id_sucursala, 0), 0, NULL, id_sucursala) as id_sucursala + from ' || lcFrom || ' + group by an, + luna, + id_articol, + pret, + case when substr(cont,1,2) = ''80'' then ''' || + lcContObInv || ''' else cont end, + acont, + id_gestiune, + DATAPIF, + DNS_LUNI, + decode(NVL(id_responsabil, 0), 0, NULL, id_responsabil), + decode(NVL(id_rul_aux, 0), 0, NULL, id_rul_aux), + serie, + lot, + decode(NVL(id_sucursala, 0), 0, NULL, id_sucursala)) s0 + ON (s0.an = s1.an and + s0.luna = s1.luna and + s0.id_articol = s1.id_articol and + s0.pret = s1.pret and + s0.cont = s1.cont and + NVL(s0.acont, ''XXXX'') = NVL(s1.acont, ''XXXX'') and + s0.id_gestiune = s1.id_gestiune and + NVL(s0.DATAPIF, to_date(''1900-01-01'', ''YYYY-MM-DD'')) = NVL(s1.DATAPIF, to_date(''1900-01-01'', ''YYYY-MM-DD'')) and + NVL(s0.dns_luni, 0) = NVL(s1.dns_luni, 0) AND + NVL(s0.id_responsabil, 0) = NVL(s1.id_responsabil, 0) and + NVL(s0.id_rul_aux, 0) = NVL(s1.id_rul_aux, 0) and + NVL(s0.serie, ''+_'') = NVL(s1.serie, ''+_'') and + NVL(s0.lot, ''+_'') = NVL(s1.lot, ''+_'') and + NVL(s0.id_sucursala, 0) = NVL(s1.id_sucursala, 0)) + WHEN MATCHED THEN + UPDATE set s1.cant = s1.cant + s0.cant, s1.cante = s1.cante + s0.cante, s1.dataora = s0.dataora, s1.datain = s0.datain, s1.dataout = s0.dataout, + s1.tva = s0.tva, s1.pretv = s0.pretv, s1.tvav = s0.tvav, s1.proc_tvav = s0.proc_tvav, s1.pretd = s0.pretd + WHEN NOT MATCHED THEN + insert + (an, + luna, + id_articol, + pret, + tva, + pretv, + tvav, + proc_tvav, + pretd, + cants, + cant, + cante, + cont, + acont, + id_gestiune, + dataora, + datain, + dataout, + DATAPIF, + DNS_LUNI, + id_responsabil, + id_rul_aux, + serie, + lot, + id_sucursala) + values + (s0.an, + s0.luna, + s0.id_articol, + s0.pret, + s0.tva, + s0.pretv, + s0.tvav, + s0.proc_tvav, + s0.pretd, + s0.cants, + s0.cant, + s0.cante, + s0.cont, + s0.acont, + s0.id_gestiune, + s0.dataora, + s0.datain, + s0.dataout, + s0.DATAPIF, + s0.DNS_LUNI, + s0.id_responsabil, + s0.id_rul_aux, + s0.serie, + s0.lot, + s0.id_sucursala)'; + -- PINFO(lcSql); + execute immediate lcSql; + + END SCRIE_IN_STOC_OBINV; + ------------------------------------------------------------------------------------ + PROCEDURE SCRIE_IN_STOC_OBINV_OLD(tcS IN VARCHAR2, + tnAn in number, + tnLuna in number, + tnScrie number, + tcTabel in varchar2, + tcIdTabel in varchar2, + tcCondSpec in varchar2) IS + + CURSOR CRS_TEMP IS + SELECT an, + luna, + id_articol, + id_gestiune, + cont, + acont, + pret, + id_responsabil, + datapif, + dns_luni, + cant, + cante, + dataora, + dataout, + datain, + id_rul_aux, + serie, + tva, + id_sucursala + FROM RUL_TEMP_OBINV + WHERE 1 = 2; + + pCursor tip_ref_cursor; + lnId_Stoc Act_Temp.Id_Act%Type; + lcSelect varchar2(1000); + lcSearcha varchar2(1000); + lnStoca number; + item CRS_TEMP%Rowtype; + ignore number := 0; + V_DATAPIF DATE; + v_acont varchar2(4) := ''; + -- V_LISTA_CAMPURI VARCHAR2(2000) := ''; + lnAn act_temp.an%Type := tnAn; + lnLuna act_temp.luna%Type := tnLuna; + lcTabel varchar2(50) := tcTabel; + lcIdTabel varchar2(50) := tcIdTabel; + lcCondSpec varchar2(100) := tcCondSpec; + lcContObInv stoc_obinv.cont%Type; + lcUpdateStoc varchar2(1000); + + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + BEGIN + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + lcContObInv := pack_sesiune.getOptiuneFirma(tcS, 'CONTOBINV'); + if lcContObinv is null then + lcContObinv := '8039'; + end if; + if lcTabel is null then + lcTabel := 'Stoc_obinv'; + end if; + if lcIdTabel is null then + lcIdTabel := 'id_Stoc'; + end if; + if tcCondSpec is null then + lcCondSpec := '2=2'; + end if; + /* V_LISTA_CAMPURI := pack_contafin.LISTA_CAMPURI('contafin_oracle', + 'RUL_TEMP_OBINV');*/ + + lcSearcha := 'select ' || lcIdTabel || ' from ' || tcs || '.' || + lcTabel || + ' where an = :1 and luna = :2 and id_articol = :3 and id_gestiune = :4 and cont = :5 and nvl(acont,''XXXX'') = :6 and pret = :7 and NVL(id_responsabil,0) = NVL(:8,0) and nvl(datapif,to_date(''1900-01-01'',''YYYY-MM-DD'')) = :9 and dns_luni = :10 and NVL(id_rul_aux,0) = :11 and NVL(serie,''+_'') = :12 and nvl(id_sucursala,0) = :13 and ' || + lcCondSpec; + IF tnScrie = 1 THEN + -- REFACERE + lnAn := tnAn; + lnLuna := tnLuna; + + lcSelect := 'select an, luna, id_articol, id_gestiune, cont, acont, pret, id_responsabil, datapif, dns_luni, cant, cante, dataora, dataout, datain, id_rul_aux, serie, tva, id_sucursala + from ' || tcS || + '.rul_obinv + where an = :1 and luna = :2 and sters = 0 ' || + lcWhereSucursale; + ELSE + -- SCRIERE + /* lnAn := pack_contafin.GET_AN(); + lnLuna := pack_contafin.GET_LUNA();*/ + lnAn := tnAn; + lnLuna := tnLuna; + lcSelect := 'select an, luna, id_articol, id_gestiune, cont, acont, pret, id_responsabil, datapif, dns_luni, cant, cante, dataora, dataout, datain, id_rul_aux, serie, tva, id_sucursala + from rul_Temp_OBINV + where an = :1 and luna = :2 '; + END IF; + + lnStoca := dbms_sql.open_cursor; + DBMS_SQL.PARSE(lnStoca, lcSearcha, DBMS_SQL.native); + DBMS_SQL.DEFINE_COLUMN(lnStoca, 1, lnId_Stoc); + + open pCursor for lcSelect + USING lnAn, lnLuna; + loop + fetch pCursor + into item; + + exit when pCursor%notfound; + + if item.acont is null then + v_acont := 'XXXX'; + else + v_acont := item.acont; + END IF; + + if item.DATAPIF is null then + V_DATAPIF := TO_DATE('1900-01-01', 'YYYY-MM-DD'); + ELSE + V_DATAPIF := item.DATAPIF; + END IF; + + DBMS_SQL.BIND_VARIABLE(lnStoca, ':1', item.an); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':2', item.luna); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':3', item.id_articol); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':4', item.id_gestiune); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':5', item.cont); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':6', V_ACONT); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':7', item.pret); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':8', item.id_responsabil); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':9', V_DATAPIF); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':10', item.dns_luni); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':11', NVL(item.id_rul_aux, 0)); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':12', NVL(item.serie, '+_'), 100); + DBMS_SQL.BIND_VARIABLE(lnStoca, ':13', NVL(item.id_sucursala, 0)); + + ignore := DBMS_SQL.EXECUTE(lnStoca); + + IF DBMS_SQL.FETCH_ROWS(lnStoca) > 0 THEN + DBMS_SQL.COLUMN_VALUE(lnStoca, 1, lnId_Stoc); + + -- modificare + lcUpdateStoc := 'UPDATE ' || tcs || '.' || lcTabel || + ' set cant = cant + :1, cante = cante + :2, dataora = :3'; + + if item.dataout is not null and item.cante > 0 then + lcUpdateStoc := lcUpdateStoc || ',dataout = to_date(''' || + to_char(item.dataout, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + if item.datain is not null and item.cant > 0 then + lcUpdateStoc := lcUpdateStoc || ',datain = to_date(''' || + to_char(item.datain, 'DDMMYYYY') || + ''',''DDMMYYYY'')'; + end if; + + lcUpdateStoc := lcUpdateStoc || ' where ' || lcIdTabel || ' = :4'; + + EXECUTE IMMEDIATE lcUpdateStoc + USING item.cant, item.cante, item.dataora, lnId_Stoc; + -- modificare ^ + ELSE + + EXECUTE IMMEDIATE 'INSERT INTO ' || tcs || '.' || lcTabel || + ' (an, luna, id_articol, pret, cant, cante, cont, acont, id_gestiune, dataora, datain, dataout, id_responsabil, datapif, dns_luni,id_rul_aux, serie,tva,id_sucursala) + VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17,:18,:19)' + USING item.an, item.luna, item.id_articol, item.pret, item.cant, item.cante, item.cont, item.acont, item.id_gestiune, item.dataora, item.datain, item.dataout, item.id_responsabil, item.datapif, item.dns_luni, item.id_rul_aux, item.serie, item.tva, item.id_sucursala; + END IF; + + end loop; + close pCursor; + + DBMS_SQL.close_cursor(lnStoca); + + END SCRIE_IN_STOC_OBINV_OLD; + ------------------------------------------------------------------------------------ + PROCEDURE SET_DATAORA(V_DATAORA IN ACT_TEMP.DATAORA%TYPE) IS + BEGIN + if V_DATAORA IS NULL THEN + pack_contafin.dDataOra := SYSDATE; + else + pack_contafin.dDataOra := V_DATAORA; + end if; + END SET_DATAORA; + + ------------------------------------------------------------------------------------ + FUNCTION GET_DATAORA RETURN ACT_TEMP.DATAORA%TYPE IS + BEGIN + RETURN PACK_CONTAFIN.dDataOra; + END GET_DATAORA; + + ------------------------------------------------------------------------------------ + /* -- 25.02.2013 : am comentat pentru ca se face unirea id_fact pe listarea din JC/JV + PROCEDURE SET_IDFACT(tdDataAct ACT_TEMP.DATAACT%TYPE, + tcSerie_Act ACT_TEMP.SERIE_ACT%TYPE, + tnNrAct ACT_TEMP.NRACT%TYPE, + tnId_Ctr ACT_TEMP.ID_CTR%TYPE) IS + V_ID_FACT DOCUMENTE.ID_DOC%TYPE; + BEGIN + BEGIN + SELECT ID_DOC + into pack_contafin.nIdFact + FROM DOCUMENTE + WHERE NRACT = tnNrAct + AND NVL(SERIE_ACT, '+-') = NVL(tcSerie_Act, '+-') + AND DATAACT = tdDataAct + AND NVL(ID_CTR, 0) = NVL(tnId_Ctr, 0) + AND STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + SELECT SEQ_IdFact.NEXTVAL into pack_contafin.nIdFact FROM DUAL; + END; + END SET_IDFACT;*/ + ------------------------------------------------------------------------------------ + PROCEDURE SET_IDFACT(V_GCS IN VARCHAR2) IS + BEGIN + SELECT SEQ_IdFact.NEXTVAL into pack_contafin.nIdFact FROM DUAL; + END SET_IDFACT; + + --------------------------------------------------------------- + FUNCTION GET_IDFACT return act_temp.id_fact%Type as + BEGIN + return pack_contafin.nIdFact; + END GET_IDFACT; + + --------------------------------------------------------------- + FUNCTION GENEREAZA_COD(V_GCS VARCHAR2) RETURN ACT_TEMP.COD%TYPE IS + BEGIN + SELECT SEQ_COD.NEXTVAL INTO PACK_CONTAFIN.nCod FROM DUAL; + return PACK_CONTAFIN.nCod; + END GENEREAZA_COD; + --------------------------------------------------------------- + PROCEDURE SET_COD(V_GCS VARCHAR2) IS + BEGIN + SELECT SEQ_COD.NEXTVAL INTO PACK_CONTAFIN.nCod FROM DUAL; + END; + + --------------------------------------------------------------- + FUNCTION GET_COD return ACT_TEMP.COD%TYPE as + BEGIN + return PACK_CONTAFIN.nCod; + END GET_COD; + + --------------------------------------------------------------- + PROCEDURE SET_ID_SUCURSALA(tnIdSucursala act_temp.id_sucursala%type) IS + BEGIN + PACK_CONTAFIN.nIdSucursala := tnIdSucursala; + END SET_ID_SUCURSALA; + + --------------------------------------------------------------- + FUNCTION GET_ID_SUCURSALA RETURN act_temp.id_sucursala%type is + BEGIN + RETURN PACK_CONTAFIN.nIdSucursala; + END GET_ID_SUCURSALA; + + --------------------------------------------------------------- + PROCEDURE SET_ID_FIRMA(tnIdFirma act_temp.id_sucursala%type) IS + BEGIN + PACK_CONTAFIN.nIdFirma := tnIdFirma; + END SET_ID_FIRMA; + + --------------------------------------------------------------- + FUNCTION GET_ID_FIRMA RETURN act_temp.id_sucursala%type is + BEGIN + RETURN PACK_CONTAFIN.nIdFirma; + END GET_ID_FIRMA; + + --------------------------------------------------------------- + + PROCEDURE SET_DATA_RON(V_GCS VARCHAR2) IS + lcDataRon varchar2(50); + + BEGIN + BEGIN + SELECT varvalue + into lcDataRon + from optiuni + where upper(varname) = 'DATARON'; + EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; + END; + + if lcDataRon is not null then + pack_contafin.nAnRON := to_number(substr(lcDataRon, 4, 4)); + pack_contafin.nLunaRON := to_number(substr(lcDataRon, 1, 2)); + else + pack_contafin.nAnRON := 2005; + pack_contafin.nLunaRON := 7; + end if; + END; + + --------------------------------------------------------------- + FUNCTION GET_ANRON RETURN ACT_TEMP.AN%TYPE IS + BEGIN + return pack_contafin.nAnRON; + END GET_ANRON; + + --------------------------------------------------------------- + + FUNCTION GET_LUNARON RETURN ACT_TEMP.LUNA%TYPE IS + BEGIN + return pack_contafin.nLunaRon; + END GET_LUNARON; + --------------------------------------------------------------- + function getCotaTVAStandard(V_LUNA IN NUMBER, V_AN IN NUMBER) return number is + V_COTA_TVA NUMBER(10, 3); + begin + -- Daca fac select max(proc_tva) from cote_tva, da eroare la deschidere de luna cand fac INSERT INTO cote_tva + + /* select MAX(PROC_TVA) + INTO V_COTA_TVA + from cote_tva + where an = V_AN + and luna = V_LUNA + and descriere = 'STANDARD'; + + IF NVL(V_COTA_TVA, 0) = 0 THEN*/ + if V_AN * 12 + V_LUNA >= 2025 * 12 + 8 then + V_COTA_TVA := 1.21; + elsif (V_AN * 12 + V_LUNA >= 2017 * 12 + 1) then + V_COTA_TVA := 1.19; + elsif (V_AN * 12 + V_LUNA >= 2016 * 12 + 1) then + V_COTA_TVA := 1.20; + elsif (V_AN * 12 + V_LUNA >= 2015 * 12 + 1) then + V_COTA_TVA := 1.24; + else + V_COTA_TVA := 1.21; + end if; + /* END IF;*/ + return V_COTA_TVA; + end getCotaTVAStandard; + --------------------------------------------------------------- + PROCEDURE SET_IDUTIL(tnIdUtil act_temp.id_util%Type) IS + BEGIN + pack_contafin.nIdUtil := tnIdUtil; + END SET_IDUTIL; + --------------------------------------------------------------- + FUNCTION GET_IDUTIL RETURN ACT_TEMP.ID_UTIL%TYPE IS + BEGIN + return pack_contafin.nIdUtil; + END GET_IDUTIL; + --------------------------------------------------------------- + PROCEDURE SETARE_FACTURA(tcs VARCHAR2) --RETURN NUMBER IS + IS + -- E_FACTURA NUMBER(1) := 0; + lcFromD varchar2(1000); + lcFromC varchar2(1000); + lcSelect varchar2(1000); + -- lcWhere varchar2(1000); + lcUnion varchar2(1000); + -- lcFrom varchar2(1000); + lcJoin varchar2(1000); + lnCont pls_integer; --number(10); + -- lcS varchar2(100) := tcS; + lcCont varchar2(4); + lcExceptie varchar2(4); + lnPozitie number(1); + lnFelCont number(1); + lnInvers number(1); + lcScd varchar2(4); + lcScc varchar2(4); + ignore number(1); + + BEGIN + + lcSelect := 'SELECT DISTINCT C.CONT, D.FEL_CONT, E.CONT_C AS EXCEPTIE, E.INVERS, E.DEBIT FROM '; + lcFromD := '(select distinct cont from ' || tcs || + '.vconfig_cont_ireg where cu_inregistrari = 1 INTERSECT select distinct scd ' || + 'from act_temp) C + left join ' || tcs || + '.vconfig_cont_ireg D on C.CONT = D.CONT + left join ' || tcs || + '.exceptii_ireg E on C.CONT = E.CONT AND E.INVERS = 1 '; + lcFromC := '(select distinct cont from ' || tcs || + '.vconfig_cont_ireg where cu_inregistrari = 1 INTERSECT select distinct scc ' || + 'from act_temp) C + left join ' || tcs || + '.vconfig_cont_ireg D on C.CONT = D.CONT + left join ' || tcs || + '.exceptii_ireg E on C.CONT = E.CONT AND E.INVERS = 1'; + lcUnion := ' UNION '; + + -- 12.10.2006 + -- MARIUS.MUTU + -- CURATARE -1 DE PE ID_FACT + UPDATE ACT_TEMP SET ID_FACTD = 0 WHERE ID_FACTD = -1; + UPDATE ACT_TEMP SET ID_FACTC = 0 WHERE ID_FACTC = -1; + + lnCont := dbms_sql.open_cursor; + -- selectez toate conturile din ACT_TEMP care au INREGISTRARI + exceptiile lor + DBMS_SQL.PARSE(lnCont, + lcSelect || lcFromD || lcJoin || lcUnion || lcSelect || + lcFromC || lcJoin || ' order by 1', + DBMS_SQL.native); + + DBMS_SQL.DEFINE_COLUMN(lnCont, 1, lcCont, 4); + DBMS_SQL.DEFINE_COLUMN(lnCont, 2, lnFelCont); + DBMS_SQL.DEFINE_COLUMN(lnCont, 3, lcExceptie, 4); + DBMS_SQL.DEFINE_COLUMN(lnCont, 4, lnInvers); + DBMS_SQL.DEFINE_COLUMN(lnCont, 5, lnPozitie); + + ignore := DBMS_SQL.EXECUTE(lnCont); + + LOOP + IF DBMS_SQL.FETCH_ROWS(lnCont) > 0 THEN + -- get column values of the row + DBMS_SQL.COLUMN_VALUE(lnCont, 1, lcCont); + DBMS_SQL.COLUMN_VALUE(lnCont, 2, lnFelCont); + DBMS_SQL.COLUMN_VALUE(lnCont, 3, lcExceptie); + DBMS_SQL.COLUMN_VALUE(lnCont, 4, lnInvers); + DBMS_SQL.COLUMN_VALUE(lnCont, 5, lnPozitie); + + lnInvers := nvl(lnInvers, -1); + lnPozitie := nvl(lnPozitie, -1); + lcExceptie := nvl(lcExceptie, 'XXXX'); + /* + TODO: owner="marius.mutu" category="Fix" priority="1 - High" created="30.10.2006" + text="ID_FACTD,ID_FACTC = -1 UNDE CONT_EXCEPTIE <> TOATE CONTURILE DE EXCEPTIE" + */ + if lnFelCont = 0 then + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scd = :1 and (id_fact = 0 or id_fact is null) ' + USING lcCont; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_factc = -1 where scc = :1 and scd <> :2 and (id_factc = 0 or id_factc is null) ' + USING lcCont, lcExceptie; + else + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scc = :1 and (id_fact = 0 or id_fact is null)' + USING lcCont; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_factd = -1 where scd = :1 and scc <> :2 and (id_factd = 0 or id_factd is null) ' + USING lcCont, lcExceptie; + end if; + + if lnInvers = 1 then + if lnPozitie = 0 then + lcScd := lcCont; + lcScc := lcExceptie; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scd = :1 and scc = :2 and (id_fact = 0 or id_fact is null)' + USING lcScd, lcScc; + end if; + + if lnPozitie = 1 then + lcScc := lcCont; + lcScD := lcExceptie; + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where scd = :1 and scc = :2 and (id_fact = 0 or id_fact is null)' + USING lcScd, lcScc; + end if; + end if; + else + exit; + end if; + end loop; + + dbms_sql.close_cursor(lnCont); + -- 05.04.2005 -- MARIUS, AM PUS ID_FACT = -1 AI SA GENEREZE ID_FACT LA ORICE DOCUMENT + EXECUTE IMMEDIATE 'UPDATE ACT_TEMP SET id_fact = -1 where (id_fact = 0 or id_fact is null) '; + -- RETURN E_FACTURA; + END SETARE_FACTURA; + + --------------------------------------------------------------- + FUNCTION LISTA_CAMPURI(V_GCS VARCHAR2, tcTableName IN VARCHAR2) + RETURN VARCHAR2 IS + V_LISTA_CAMPURI VARCHAR2(2000) := ''; + -- I NUMBER; + lcTableName varchar2(100) := upper(tcTableName); + BEGIN + -- I := 0; + FOR item in (select column_name + from all_tab_columns t + where t.TABLE_NAME = lcTableName + AND t.OWNER = upper(V_GCS)) LOOP + -- I := I + 1; + -- DBMS_OUTPUT.put_line(I || ', ' || ITEM.COLUMN_NAME); + V_LISTA_CAMPURI := V_LISTA_CAMPURI || ITEM.COLUMN_NAME || ','; + END LOOP; + IF LENGTH(V_LISTA_CAMPURI) > 1 THEN + V_LISTA_CAMPURI := SUBSTR(V_LISTA_CAMPURI, + 1, + LENGTH(V_LISTA_CAMPURI) - 1); + END IF; + RETURN V_LISTA_CAMPURI; + + END LISTA_CAMPURI; + + ------------------------------------------------------------------------------ + PROCEDURE set_suprascriereCod(V_VALOARE IN NUMBER) IS + BEGIN + pack_contafin.nSuprascriereCod := V_VALOARE; + END set_suprascriereCod; + ------------------------------------------------------------------------------ + PROCEDURE set_suprascriereAnLuna(V_VALOARE IN NUMBER) IS + BEGIN + pack_contafin.nSuprascriereAnLuna := V_VALOARE; + END set_suprascriereAnLuna; + ------------------------------------------------------------------------------ + PROCEDURE RESET_VARIABLES IS + BEGIN + nCod := 0; + nIdFact := 0; + nIdUtil := 0; + dDataOra := SYSDATE; + nSuprascriereCod := 1; + nSuprascriereAnLuna := 1; + END RESET_VARIABLES; + + -------------------------- + procedure SCRIE_JV_2007(tnAn JV2007.AN%TYPE, + tnLuna JV2007.LUNA%TYPE, + tnScrie number) IS + + lcSql VARCHAR2(32767); + lcContTvaDeductibil ACT.SCD%TYPE := '4426'; + lcContTvaColectat ACT.SCD%TYPE := '4427'; + lcContTvaNeexigibil ACT.SCD%TYPE := '4428'; + lcContDebitRegularizare VARCHAR2(100) := '4111,461,4511,4118'; + lcContCreditRegularizare VARCHAR2(100) := '418'; + lnIdMinJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 1; + lnIdMaxJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 100; + lcTabelSursa VARCHAR2(100); + lcCondSucursala VARCHAR2(1000); + begin + -- tnScrie: 0 - scriere; 1 - refacere; 2 - stergere + -- 0,2 - selectie din act_temp + -- 1 - selectie din act + + if pack_contafin.get_id_sucursala() is not null then + lcCondSucursala := ' AND ALIAS.ID_SUCURSALA = ' || + pack_contafin.GET_ID_SUCURSALA(); + end if; + + if tnScrie in (pack_contafin.nScriere, pack_contafin.nStergere) then + lcTabelSursa := 'act_temp'; -- scriere, stergere + else + lcTabelSursa := 'act'; -- refacere + end if; + + pack_contafin.completeaza_jv_2007(tnAn, + tnLuna, + lcTabelSursa, + lcCondSucursala); + + MERGE INTO JV2007 J + USING (SELECT AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + ID_PART, + COD, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + TOTCTVA - DECODE(RO24NB, 0, 0, RO24B) - + DECODE(RO20NB, 0, 0, RO20B) - DECODE(RO21NB, 0, 0, RO21B) - + DECODE(RO11NB, 0, 0, RO11B) - DECODE(RO19NB, 0, 0, RO19B) - + DECODE(RO9NB, 0, 0, RO9B) - DECODE(RO5NB, 0, 0, RO5B) - + DECODE(RO24NT, 0, 0, RO24T) - DECODE(RO20NT, 0, 0, RO20T) - + DECODE(RO21NT, 0, 0, RO21T) - DECODE(RO11NT, 0, 0, RO11T) - + DECODE(RO19NT, 0, 0, RO19T) - DECODE(RO9NT, 0, 0, RO9T) - + DECODE(RO5NT, 0, 0, RO5T) - + DECODE(RO24NTR, 0, RO24TR, RO24NTR) - + DECODE(RO20NTR, 0, RO20TR, RO20NTR) - + DECODE(RO21NTR, 0, RO21TR, RO21NTR) - + DECODE(RO11NTR, 0, RO11TR, RO11NTR) - + DECODE(RO19NTR, 0, RO19TR, RO19NTR) - + DECODE(RO9NTR, 0, RO9TR, RO9NTR) - + DECODE(RO5NTR, 0, RO5TR, RO5NTR) + ELSE + TOTCTVA - DECODE(RO24NB, 0, 0, RO24B) - + DECODE(RO20NB, 0, 0, RO20B) - DECODE(RO21NB, 0, 0, RO21B) - + DECODE(RO11NB, 0, 0, RO11B) - DECODE(RO19NB, 0, 0, RO19B) - + DECODE(RO9NB, 0, 0, RO9B) - DECODE(RO5NB, 0, 0, RO5B) - + DECODE(RO24NT, 0, 0, RO24T) - DECODE(RO20NT, 0, 0, RO20T) - + DECODE(RO21NT, 0, 0, RO21T) - DECODE(RO11NT, 0, 0, RO11T) - + DECODE(RO19NT, 0, 0, RO19T) - DECODE(RO9NT, 0, 0, RO9T) - + DECODE(RO5NT, 0, 0, RO5T) + END) AS TOTCTVA, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19B, RO19NB) + + DECODE(RO9NB, 0, RO9B, RO9NB) + + DECODE(RO5NB, 0, RO5B, RO5NB) - + DECODE(RO24NB, 0, RO24TR, RO24NTR) - + DECODE(RO20NB, 0, RO20TR, RO20NTR) - + DECODE(RO21NB, 0, RO21TR, RO21NTR) - + DECODE(RO11NB, 0, RO11TR, RO11NTR) - + DECODE(RO19NB, 0, RO19TR, RO19NTR) - + DECODE(RO9NB, 0, RO9TR, RO9NTR) - + DECODE(RO5NB, 0, RO5TR, RO5NTR) + ELSE + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19B, RO19NB) + + DECODE(RO9NB, 0, RO9B, RO9NB) + + DECODE(RO5NB, 0, RO5B, RO5NB) + END) AS TOTFTVATAX, + DECODE(NOTA_TVA_EX, + 1, + 0, + DECODE(RO24NT, 0, RO24T, RO24NT) + + DECODE(RO20NT, 0, RO20T, RO20NT) + + DECODE(RO21NT, 0, RO21T, RO21NT) + + DECODE(RO11NT, 0, RO11T, RO11NT) + + DECODE(RO19NT, 0, RO19T, RO19NT) + + DECODE(RO9NT, 0, RO9T, RO9NT) + + DECODE(RO5NT, 0, RO5T, RO5NT)) AS TOTTVATAX, + ROTI + CESCDD1 + CESCDD2 + CEOPTR + CESVDD + CESVFDD + + CESVFS + WRSCDD + WRSCDDAB + WRSCDDCD + FODD + FOFDD + + WRSCFDD + WRN AS TOTNETAX, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B - RO24TR) + ELSE + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B) + END) AS RO24B, + RO24T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B - RO20TR) + ELSE + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B) + END) AS RO20B, + RO20T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B - RO21TR) + ELSE + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B) + END) AS RO21B, + RO21T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B - RO11TR) + ELSE + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B) + END) AS RO11B, + RO11T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19B, + 0, + DECODE(RO19T, 0, 0, ROUND(RO19T / 0.19, 2)), + RO19B - RO19TR) + ELSE + DECODE(RO19B, + 0, + DECODE(RO19T, 0, 0, ROUND(RO19T / 0.19, 2)), + RO19B) + END) AS RO19B, + RO19T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO9B, + 0, + DECODE(RO9T, 0, 0, ROUND(RO9T / 0.09, 2)), + RO9B - RO9TR) + ELSE + DECODE(RO9B, + 0, + DECODE(RO9T, 0, 0, ROUND(RO9T / 0.09, 2)), + RO9B) + END) AS RO9B, + RO9T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO5B, + 0, + DECODE(RO5T, 0, 0, ROUND(RO5T / 0.05, 2)), + RO5B - RO5TR) + ELSE + DECODE(RO5B, + 0, + DECODE(RO5T, 0, 0, ROUND(RO5T / 0.05, 2)), + RO5B) + END) AS RO5B, + RO5T, + (CASE + WHEN REGULARIZARE > 0 THEN + RO24NB - RO24NTR + ELSE + RO24NB + END) AS RO24NB, + RO24NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO20NB - RO20NTR + ELSE + RO20NB + END) AS RO20NB, + RO20NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO21NB - RO21NTR + ELSE + RO21NB + END) AS RO21NB, + RO21NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO11NB - RO11NTR + ELSE + RO11NB + END) AS RO11NB, + RO11NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO19NB - RO19NTR + ELSE + RO19NB + END) AS RO19NB, + RO19NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO9NB - RO9NTR + ELSE + RO9NB + END) AS RO9NB, + RO9NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO5NB - RO5NTR + ELSE + RO5NB + END) AS RO5NB, + RO5NT, + ROTI, + CESCDD1, + CESCDD2, + CEOPTR, + CESVDD, + CESVFDD, + CESVFS, + WRSCDD, + WRSCDDAB, + WRSCDDCD, + FODD, + FOFDD, + WRSCFDD, + WRN, + RORTC24, + RORTC20, + RORTC21, + RORTC11, + RORTC19, + RORTC9, + RORTC5, + ID_SUCURSALA + FROM (SELECT JV.AN, + JV.LUNA, + MAX(JV.ID_FDOC) AS ID_FDOC, + JV.ID_FACT, + JV.NRACT, + JV.SERIE_ACT, + JV.DATAACT, + JV.DATAIREG, + MAX(JV.ID_PART) AS ID_PART, + JV.ID_SUCURSALA, + MIN(JV.COD) AS COD, + MIN(JV.NOTA_TVA_EX) AS NOTA_TVA_EX, + sum(CASE + WHEN NVL(JV.ID_JTVA_COLOANA, 0) BETWEEN 1 AND 100 THEN + JV.suma + ELSE + 0 + END) TOTCTVA, + sum(DECODE(JV.ID_JTVA_COLOANA, 15, JV.suma, 0)) RO24B, + sum(DECODE(JV.ID_JTVA_COLOANA, 16, JV.suma, 0)) RO24T, + sum(DECODE(JV.ID_JTVA_COLOANA, 27, JV.suma, 0)) RO20B, + sum(DECODE(JV.ID_JTVA_COLOANA, 28, JV.suma, 0)) RO20T, + sum(DECODE(JV.ID_JTVA_COLOANA, 35, JV.suma, 0)) RO21B, + sum(DECODE(JV.ID_JTVA_COLOANA, 36, JV.suma, 0)) RO21T, + sum(DECODE(JV.ID_JTVA_COLOANA, 1, JV.suma, 0)) RO19B, + sum(DECODE(JV.ID_JTVA_COLOANA, 2, JV.suma, 0)) RO19T, + sum(DECODE(JV.ID_JTVA_COLOANA, 3, JV.suma, 0)) RO9B, + sum(DECODE(JV.ID_JTVA_COLOANA, 4, JV.suma, 0)) RO9T, + sum(DECODE(JV.ID_JTVA_COLOANA, 13, JV.suma, 0)) RO5B, + sum(DECODE(JV.ID_JTVA_COLOANA, 14, JV.suma, 0)) RO5T, + sum(DECODE(JV.ID_JTVA_COLOANA, 39, JV.suma, 0)) RO11B, + sum(DECODE(JV.ID_JTVA_COLOANA, 40, JV.suma, 0)) RO11T, + sum(DECODE(JV.ID_JTVA_COLOANA, 5, JV.suma, 0)) ROTI, + sum(DECODE(JV.ID_JTVA_COLOANA, 6, JV.suma, 0)) CESCDD1, + sum(DECODE(JV.ID_JTVA_COLOANA, 7, JV.suma, 0)) CESCDD2, + sum(DECODE(JV.ID_JTVA_COLOANA, 17, JV.suma, 0)) CEOPTR, + sum(DECODE(JV.ID_JTVA_COLOANA, 18, JV.suma, 0)) CESVDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 19, JV.suma, 0)) CESVFDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 20, JV.suma, 0)) CESVFS, + sum(DECODE(JV.ID_JTVA_COLOANA, 8, JV.suma, 0)) WRSCDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 33, JV.suma, 0)) WRSCDDAB, + sum(DECODE(JV.ID_JTVA_COLOANA, 34, JV.suma, 0)) WRSCDDCD, + sum(DECODE(JV.ID_JTVA_COLOANA, 9, JV.suma, 0)) FODD, + sum(DECODE(JV.ID_JTVA_COLOANA, 10, JV.suma, 0)) FOFDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 11, JV.suma, 0)) WRSCFDD, + sum(DECODE(JV.ID_JTVA_COLOANA, 12, JV.suma, 0)) WRN, + sum(DECODE(JV.ID_JTVA_COLOANA, 1006, JV.suma, 0)) RORTC24, + sum(DECODE(JV.ID_JTVA_COLOANA, 1007, JV.suma, 0)) RORTC20, + sum(DECODE(JV.ID_JTVA_COLOANA, 1016, JV.suma, 0)) RORTC21, + sum(DECODE(JV.ID_JTVA_COLOANA, 1017, JV.suma, 0)) RORTC11, + sum(DECODE(JV.ID_JTVA_COLOANA, 1008, JV.suma, 0)) RORTC19, + sum(DECODE(JV.ID_JTVA_COLOANA, 1009, JV.suma, 0)) RORTC9, + sum(DECODE(JV.ID_JTVA_COLOANA, 1010, JV.suma, 0)) RORTC5, + sum(DECODE(JV.ID_JTVA_COLOANA, 21, JV.suma, 0)) RO24NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 22, JV.suma, 0)) RO24NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 29, JV.suma, 0)) RO20NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 30, JV.suma, 0)) RO20NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 37, JV.suma, 0)) RO21NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 38, JV.suma, 0)) RO21NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 41, JV.suma, 0)) RO11NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 42, JV.suma, 0)) RO11NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 31, JV.suma, 0)) RO19NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 32, JV.suma, 0)) RO19NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 23, JV.suma, 0)) RO9NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 24, JV.suma, 0)) RO9NT, + sum(DECODE(JV.ID_JTVA_COLOANA, 25, JV.suma, 0)) RO5NB, + sum(DECODE(JV.ID_JTVA_COLOANA, 26, JV.suma, 0)) RO5NT, + SUM(JV.REGULARIZARE) AS REGULARIZARE, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 16 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO24TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 28 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO20TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 36 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO21TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 40 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO11TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 2 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO19TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 4 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO9TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 14 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RO5TR, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 1016 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RORTD21, + SUM(CASE + WHEN JV.ID_JTVA_COLOANA = 1017 AND JV.SCD = '4428' THEN + JV.SUMA + ELSE + 0 + END) RORTD11, + SUM(CASE + WHEN ID_JTVA_COLOANA = 22 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO24NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 30 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO20NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 32 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO19NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 24 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO9NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 26 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO5NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 38 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO21NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 42 AND SCD = '4428' THEN + SUMA + ELSE + 0 + END) RO11NTR + FROM (SELECT A.AN, + A.LUNA, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + 1 + ELSE + 0 + END) AS NOTA_TVA_EX, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT OR + A.ID_SET <> D.ID_SET OR + NVL(A.SERIE_ACT, 'X') <> + NVL(D.SERIE_ACT, 'X') THEN + NULL + ELSE + A.ID_FDOC + END) AS ID_FDOC, + A.ID_FACT, + (CASE + WHEN A.NRACT <> D.NRACT THEN + D.NRACT + ELSE + A.NRACT + END) AS NRACT, + D.SERIE_ACT, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + TRUNC(D.DATAACT) + ELSE + TRUNC(A.DATAACT) + END) AS DATAACT, + (CASE + WHEN A.NRACT <> D.NRACT or + NVL(A.DATAIREG, A.DATAACT) <> + NVL(D.DATAIREG, D.DATAACT) THEN + TRUNC(NVL(D.DATAIREG, D.DATAACT)) + ELSE + TRUNC(NVL(A.DATAIREG, A.DATAACT)) + END) AS DATAIREG, + A.COD, + A.SCD, + A.SCC, + -- 4426 = 4427 sau 4428 = 4427 nu au parteneri + MAX(DECODE(E.EXCEPTIE, + 1, + A.ID_PARTC, + (CASE + -- ESTE POSIBIL SA FIE DOAR 5121 = 419 FARA 4111 = 4427, TREBUIE PARTENERUL 419 + WHEN A.SCC = '419' THEN + A.ID_PARTC + WHEN A.SCD IN (lcContTvaDeductibil, + lcContTvaNeexigibil) OR + SUBSTR(A.SCD, 1, 1) = '5' THEN + -9999999999 + ELSE + A.ID_PARTD + END))) OVER(PARTITION BY A.AN, A.LUNA, A.ID_FDOC, A.NRACT, A.DATAACT, A.COD) AS ID_PART, + -- INVERSARE SUME LA EXCEPTII + DECODE(A.ID_SET, 10616, -1, 1) * + DECODE(E.EXCEPTIE, 1, -A.SUMA, A.SUMA) AS SUMA, + -- MARCA REGULARIZARE FACTURI NEINTOCMITE + (CASE + WHEN INSTR(lcContDebitRegularizare, A.scd) > 0 and + INSTR(lcContCreditRegularizare, A.scc) > 0 THEN + 1 + ELSE + 0 + END) AS REGULARIZARE, + A.ID_JTVA_COLOANA, + A.ID_SUCURSALA + FROM (SELECT AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTC, + ID_PARTD, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + ID_SUCURSALA, + STERS + FROM ACT_TEMP + WHERE lcTabelSursa = 'act_temp' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA BETWEEN 1006 AND 1010) + AND ID_SET NOT IN (SELECT ID_SET FROM XSETS WHERE NU_JTVA = 1) + UNION ALL + SELECT AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTC, + ID_PARTD, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + ID_SUCURSALA, + STERS + FROM ACT + WHERE lcTabelSursa = 'act' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA BETWEEN 1006 AND 1010) + AND ID_SET NOT IN (SELECT ID_SET FROM XSETS WHERE NU_JTVA = 1)) A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, + 1, + CONT_C, + CONT) AS SCD, + DECODE(DEBIT, + 1, + CONT, + CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND IN_TVA = 1) E + ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN DOCUMENTE D + ON A.ID_FACT = D.ID_DOC + WHERE A.AN = tnAn + and A.LUNA = tnLuna + and A.STERS = 0 + AND (A.ID_JTVA_COLOANA between lnIdMinJtvaColoana and + lnIdMaxJtvaColoana OR + A.ID_JTVA_COLOANA BETWEEN 1006 AND 1010) + -- IN JURNALUL DE VANZARI NU INTRA FACTURILE NEINTOCMITE + INCASARILE + -- SAU COMPENSARI 419 CU EXPLICATIE TVA + AND A.ID_SET <> 10621 + AND NOT (TRIM(NVL(A.SCD, 'X')) = '418' OR + (TRIM(NVL(A.SCD, 'X')) not in + ('4111', '461', '4511', '4118') AND + TRIM(NVL(A.SCC, 'X')) = '418')) + AND nvl2(pack_contafin.GET_ID_SUCURSALA(), + A.ID_SUCURSALA, + 0) = + nvl(pack_contafin.GET_ID_SUCURSALA(), 0)) JV + GROUP BY JV.AN, + JV.LUNA, + JV.ID_FACT, + JV.NRACT, + JV.SERIE_ACT, + JV.DATAACT, + JV.DATAIREG, + JV.ID_SUCURSALA)) S + ON (J.AN = S.AN AND J.LUNA = S.LUNA AND J.ID_FACT = S.ID_FACT AND NVL(J.ID_SUCURSALA, -99) = NVL(S.ID_SUCURSALA, -99)) + WHEN MATCHED THEN + UPDATE + SET J.TOTCTVA = J.TOTCTVA + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTCTVA + ELSE + 0 + END), + J.TOTFTVATAX = J.TOTFTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTFTVATAX + ELSE + 0 + END), + J.TOTTVATAX = J.TOTTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTTVATAX + ELSE + 0 + END), + J.TOTNETAX = J.TOTNETAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S.TOTNETAX + ELSE + 0 + END), + J.RO24B = J.RO24B + NVL(S.RO24B, 0) + (CASE + WHEN NVL(S.RO24B, 0) <> 0 AND NVL(J.RO24NT, 0) <> 0 AND + NVL(J.RO24NT, 0) - (NVL(J.RO24T, 0) + NVL(S.RO24T, 0)) = 0 THEN + NVL(J.RO24NB, 0) - (NVL(J.RO24B, 0) + NVL(S.RO24B, 0)) + ELSE + 0 + END), + J.RO24T = J.RO24T + S.RO24T, + J.RO20B = J.RO20B + NVL(S.RO20B, 0) + (CASE + WHEN NVL(S.RO20B, 0) <> 0 AND NVL(J.RO20NT, 0) <> 0 AND + NVL(J.RO20NT, 0) - (NVL(J.RO20T, 0) + NVL(S.RO20T, 0)) = 0 THEN + NVL(J.RO20NB, 0) - (NVL(J.RO20B, 0) + NVL(S.RO20B, 0)) + ELSE + 0 + END), + J.RO20T = J.RO20T + S.RO20T, + J.RO21B = J.RO21B + NVL(S.RO21B, 0) + (CASE + WHEN NVL(S.RO21B, 0) <> 0 AND NVL(J.RO21NT, 0) <> 0 AND + NVL(J.RO21NT, 0) - (NVL(J.RO21T, 0) + NVL(S.RO21T, 0)) = 0 THEN + NVL(J.RO21NB, 0) - (NVL(J.RO21B, 0) + NVL(S.RO21B, 0)) + ELSE + 0 + END), + J.RO21T = J.RO21T + S.RO21T, + J.RO11B = J.RO11B + NVL(S.RO11B, 0) + (CASE + WHEN NVL(S.RO11B, 0) <> 0 AND NVL(J.RO11NT, 0) <> 0 AND + NVL(J.RO11NT, 0) - (NVL(J.RO11T, 0) + NVL(S.RO11T, 0)) = 0 THEN + NVL(J.RO11NB, 0) - (NVL(J.RO11B, 0) + NVL(S.RO11B, 0)) + ELSE + 0 + END), + J.RO11T = J.RO11T + S.RO11T, + J.RO19B = J.RO19B + NVL(S.RO19B, 0) + (CASE + WHEN NVL(S.RO19B, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19T, 0) + NVL(S.RO19T, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19B, 0) + NVL(S.RO19B, 0)) + ELSE + 0 + END), + J.RO19T = J.RO19T + S.RO19T, + J.RO9B = J.RO9B + NVL(S.RO9B, 0) + (CASE + WHEN NVL(S.RO9B, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO9T, 0) + NVL(S.RO9T, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO9B, 0) + NVL(S.RO9B, 0)) + ELSE + 0 + END), + J.RO9T = J.RO9T + S.RO9T, + J.RO5B = J.RO5B + NVL(S.RO5B, 0) + (CASE + WHEN NVL(S.RO5B, 0) <> 0 AND NVL(J.RO5NT, 0) <> 0 AND + NVL(J.RO5NT, 0) - (NVL(J.RO5T, 0) + NVL(S.RO5T, 0)) = 0 THEN + NVL(J.RO5NB, 0) - (NVL(J.RO5B, 0) + NVL(S.RO5B, 0)) + ELSE + 0 + END), + J.RO5T = J.RO5T + S.RO5T, + J.RO24NB = J.RO24NB + S.RO24NB, + J.RO24NT = J.RO24NT + S.RO24NT, + J.RO20NB = J.RO20NB + S.RO20NB, + J.RO20NT = J.RO20NT + S.RO20NT, + J.RO21NB = J.RO21NB + S.RO21NB, + J.RO21NT = J.RO21NT + S.RO21NT, + J.RO11NB = J.RO11NB + S.RO11NB, + J.RO11NT = J.RO11NT + S.RO11NT, + J.RO19NB = J.RO19NB + S.RO19NB, + J.RO19NT = J.RO19NT + S.RO19NT, + J.RO9NB = J.RO9NB + S.RO9NB, + J.RO9NT = J.RO9NT + S.RO9NT, + J.RO5NB = J.RO5NB + S.RO5NB, + J.RO5NT = J.RO5NT + S.RO5NT, + J.ROTI = J.ROTI + S.ROTI, + J.CESCDD1 = J.CESCDD1 + S.CESCDD1, + J.CESCDD2 = J.CESCDD2 + S.CESCDD2, + J.CEOPTR = J.CEOPTR + S.CEOPTR, + J.CESVDD = J.CESVDD + S.CESVDD, + J.CESVFDD = J.CESVFDD + S.CESVFDD, + J.CESVFS = J.CESVFS + S.CESVFS, + J.WRSCDD = J.WRSCDD + S.WRSCDD, + J.WRSCDDAB = J.WRSCDDAB + S.WRSCDDAB, + J.WRSCDDCD = J.WRSCDDCD + S.WRSCDDCD, + J.FODD = J.FODD + S.FODD, + J.FOFDD = J.FOFDD + S.FOFDD, + J.WRSCFDD = J.WRSCFDD + S.WRSCFDD, + J.WRN = J.WRN + S.WRN, + J.RORTC24 = J.RORTC24 + S.RORTC24, + J.RORTC20 = J.RORTC20 + S.RORTC20, + J.RORTC21 = J.RORTC21 + S.RORTC21, + J.RORTC11 = J.RORTC11 + S.RORTC11, + J.RORTC19 = J.RORTC19 + S.RORTC19, + J.RORTC9 = J.RORTC9 + S.RORTC9, + J.RORTC5 = J.RORTC5 + S.RORTC5 DELETE + WHERE ' || tnScrie || ' = ' || + pack_contafin.nStergere || ' + and J.TOTCTVA = 0 + AND J.TOTFTVATAX = 0 + AND J.TOTTVATAX = 0 + AND J.TOTNETAX = 0 + AND J.RO24B = 0 + AND J.RO24T = 0 + AND J.RO20B = 0 + AND J.RO20T = 0 + AND J.RO19B = 0 + AND J.RO19T = 0 + AND J.RO9B = 0 + AND J.RO9T = 0 + AND J.RO5B = 0 + AND J.RO5T = 0 + AND J.RO24NB = 0 + AND J.RO24NT = 0 + AND J.RO20NB = 0 + AND J.RO20NT = 0 + AND J.RO19NB = 0 + AND J.RO19NT = 0 + AND J.RO9NB = 0 + AND J.RO9NT = 0 + AND J.RO5NB = 0 + AND J.RO5NT = 0 + AND J.ROTI = 0 + AND J.CESCDD1 = 0 + AND J.CESCDD2 = 0 + AND J.CEOPTR = 0 + AND J.CESVDD = 0 + AND J.CESVFDD = 0 + AND J.CESVFS = 0 + AND J.WRSCDD = 0 + AND J.WRSCDDAB = 0 + AND J.WRSCDDCD = 0 + AND J.FODD = 0 + AND J.FOFDD = 0 + AND J.WRSCFDD = 0 + AND J.WRN = 0 + AND J.RORTC24 = 0 + AND J.RORTC20 = 0 + AND J.RORTC19 = 0 + AND J.RORTC9 = 0 + AND J.RORTC5 = 0 WHEN NOT MATCHED THEN INSERT(AN, LUNA, ID_FACT, NRACT, SERIE_ACT, ID_FDOC, DATAACT, DATAIREG, ID_PART, TOTCTVA, TOTFTVATAX, TOTTVATAX, TOTNETAX, RO24B, RO24T, RO20B, RO20T, RO21B, RO21T, RO11B, RO11T, RO19B, RO19T, RO9B, RO9T, RO5B, RO5T, RO24NB, RO24NT, RO20NB, RO20NT, RO21NB, RO21NT, RO11NB, RO11NT, RO19NB, RO19NT, RO9NB, RO9NT, RO5NB, RO5NT, ROTI, CESCDD1, CESCDD2, CEOPTR, CESVDD, CESVFDD, CESVFS, WRSCDD, WRSCDDAB, WRSCDDCD, FODD, FOFDD, WRSCFDD, WRN, RORTC24, RORTC20, RORTC21, RORTC11, RORTC19, RORTC9, RORTC5, COD, ID_SUCURSALA) VALUES(S.AN, S.LUNA, S.ID_FACT, S.NRACT, S.SERIE_ACT, S.ID_FDOC, S.DATAACT, S.DATAIREG, S.ID_PART, S.TOTCTVA, S.TOTFTVATAX, S.TOTTVATAX, S.TOTNETAX,(CASE + WHEN NVL(S.RO24B, 0) <> 0 AND NVL(S.RO24NT, 0) <> 0 AND + NVL(S.RO24NT, 0) = NVL(S.RO24T, 0) THEN + NVL(S.RO24NB, 0) + ELSE + NVL(S.RO24B, 0) + END), S.RO24T,(CASE + WHEN NVL(S.RO20B, 0) <> 0 AND NVL(S.RO20NT, 0) <> 0 AND + NVL(S.RO20NT, 0) = NVL(S.RO20T, 0) THEN + NVL(S.RO20NB, 0) + ELSE + NVL(S.RO20B, 0) + END), S.RO20T,(CASE + WHEN NVL(S.RO21B, 0) <> 0 AND NVL(S.RO21NT, 0) <> 0 AND + NVL(S.RO21NT, 0) = NVL(S.RO21T, 0) THEN + NVL(S.RO21NB, 0) + ELSE + NVL(S.RO21B, 0) + END), S.RO21T,(CASE + WHEN NVL(S.RO11B, 0) <> 0 AND NVL(S.RO11NT, 0) <> 0 AND + NVL(S.RO11NT, 0) = NVL(S.RO11T, 0) THEN + NVL(S.RO11NB, 0) + ELSE + NVL(S.RO11B, 0) + END), S.RO11T,(CASE + WHEN NVL(S.RO19B, 0) <> 0 AND NVL(S.RO19NT, 0) <> 0 AND + NVL(S.RO19NT, 0) = NVL(S.RO19T, 0) THEN + NVL(S.RO19NB, 0) + ELSE + NVL(S.RO19B, 0) + END), S.RO19T,(CASE + WHEN NVL(S.RO9B, 0) <> 0 AND NVL(S.RO9NT, 0) <> 0 AND + NVL(S.RO9NT, 0) = NVL(S.RO9T, 0) THEN + NVL(S.RO9NB, 0) + ELSE + NVL(S.RO9B, 0) + END), S.RO9T,(CASE + WHEN NVL(S.RO5B, 0) <> 0 AND NVL(S.RO5NT, 0) <> 0 AND + NVL(S.RO5NT, 0) = NVL(S.RO5T, 0) THEN + NVL(S.RO5NB, 0) + ELSE + NVL(S.RO5B, 0) + END), S.RO5T, S.RO24NB, S.RO24NT, S.RO20NB, S.RO20NT, S.RO21NB, S.RO21NT, S.RO11NB, S.RO11NT, S.RO19NB, S.RO19NT, S.RO9NB, S.RO9NT, S.RO5NB, S.RO5NT, S.ROTI, S.CESCDD1, S.CESCDD2, S.CEOPTR, S.CESVDD, S.CESVFDD, S.CESVFS, S.WRSCDD, S.WRSCDDAB, S.WRSCDDCD, S.FODD, S.FOFDD, S.WRSCFDD, S.WRN, S.RORTC24, S.RORTC20, S.RORTC21, S.RORTC11, S.RORTC19, S.RORTC9, S.RORTC5, S.COD, S.ID_SUCURSALA); + + END SCRIE_JV_2007; + ------------------------------------------------------------------- + procedure SCRIE_JC_2007(tnAn JC2007.AN%TYPE, + tnLuna JC2007.LUNA%TYPE, + tnScrie number) IS + + lcSql clob; + lcContTvaDeductibil ACT.SCD%TYPE := '4426'; + lcContTvaColectat ACT.SCD%TYPE := '4427'; + lcContTvaNeexigibil ACT.SCD%TYPE := '4428'; + lcContDebitRegularizare VARCHAR2(100) := '408'; + lcContCreditRegularizare VARCHAR2(100) := '401,404,4511,462'; + lnIdMinJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 101; + lnIdMaxJtvaColoana JTVA_COLOANE.ID_JTVA_COLOANA%TYPE := 500; + lcTabelSursa VARCHAR2(100); + lcCondSucursala VARCHAR2(1000); + begin + -- tnScrie: 0 - scriere; 1 - refacere; 2 - stergere + -- 0,2 - selectie din act_temp + -- 1 - selectie din act + if pack_contafin.get_id_sucursala() is not null then + lcCondSucursala := ' AND ALIAS.ID_SUCURSALA = ' || + pack_contafin.GET_ID_SUCURSALA(); + end if; + + if tnScrie in (pack_contafin.nScriere, pack_contafin.nStergere) then + lcTabelSursa := 'act_temp'; -- scriere, stergere + else + lcTabelSursa := 'act'; -- refacere + end if; + + -- COMPLETARE JC2007 CU ID_SET 10616 STORNARE PLATA/INCASARE + pack_contafin.completeaza_jc_2007(tnAn, + tnLuna, + lcTabelSursa, + lcCondSucursala); + -- MERGE replaced with FORALL BULK operations to avoid Oracle XE bugs and improve performance + DECLARE + CURSOR c_source IS + SELECT ID_SUCURSALA, + AN, + LUNA, + ID_FACT, + ID_FDOC, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + ID_PART, + COD, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + TOTCTVA - RO24TR - RO20TR - RO21TR - RO11TR - RO19BCTR - + RO19BVTR - RO19BFTR - RO09BCTR - RO09BVTR - RO09BFTR - + RO05TR - FO21TR - FO24TR - FO20TR - FO19BCTR - FO19BVTR - + FO19BFTR - FO09BCTR - FO09BVTR - FO09BFTR - CE24TR - + CE20TR - CE5STR - CE9STR - CE21STR - CE24STR - CE20STR - + CE19STR - CEBCTR - CEBVTR - CEBFTR - TI21TR - TI11TR - + TI24TR - TI20TR - TI19BCTR - TI19BVTR - TI19BFTR - + TI09BVTR - TI09BFTR - RO24NTR - RO20NTR - RO21NTR - + RO11NTR - RO19NTR - RO09NTR - RO05NTR + ELSE + TOTCTVA - DECODE(RO21NB, 0, 0, RO21B) - + DECODE(RO11NB, 0, 0, RO11B) - DECODE(RO24NB, 0, 0, RO24B) - + DECODE(RO20NB, 0, 0, RO20B) - + DECODE(RO19NB, 0, 0, RO19BCB + RO19BVB + RO19BFB) - + DECODE(RO9NB, 0, 0, RO09BCB + RO09BVB + RO09BFB) - + DECODE(RO5NB, 0, 0, RO05B) - DECODE(RO21NT, 0, 0, RO21T) - + DECODE(RO11NT, 0, 0, RO11T) - DECODE(RO24NT, 0, 0, RO24T) - + DECODE(RO20NT, 0, 0, RO20T) - + DECODE(RO19NT, 0, 0, RO19BCT + RO19BVT + RO19BFT) - + DECODE(RO9NT, 0, 0, RO09BCT + RO09BVT + RO09BFT) - + DECODE(RO5NT, 0, 0, RO05T) + END) AS TOTCTVA, + (CASE + WHEN NOTA_TVA_EX = 1 THEN + 0 + WHEN REGULARIZARE > 0 THEN + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19BCB + RO19BVB + RO19BFB, RO19NB) + + DECODE(RO9NB, 0, RO09BCB + RO09BVB + RO09BFB, RO9NB) + + DECODE(RO5NB, 0, RO05B, RO5NB) - + DECODE(RO24NB, 0, RO24TR, RO24NTR) - + DECODE(RO20NB, 0, RO20TR, RO20NTR) - + DECODE(RO21NB, 0, RO21TR, RO21NTR) - + DECODE(RO11NB, 0, RO11TR, RO11NTR) - + DECODE(RO19NB, 0, RO19BCTR + RO19BVTR + RO19BFTR, RO19NTR) - + DECODE(RO9NB, 0, RO09BCTR + RO09BVTR + RO09BFTR, RO09NTR) - + DECODE(RO5NB, 0, RO05TR, RO05NTR) - FO21TR - FO24TR - + FO20TR - FO19BCTR - FO19BVTR - FO19BFTR - FO09BCTR - + FO09BVTR - FO09BFTR - CE24TR - CE20TR - CE5STR - CE9STR - + CE21STR - CE24STR - CE20STR - CE19STR - CEBCTR - CEBVTR - + CEBFTR - TI21TR - TI11TR - TI24TR - TI20TR - TI19BCTR - + TI19BVTR - TI19BFTR - TI09BVTR - TI09BFTR + + ELSE + DECODE(RO24NB, 0, RO24B, RO24NB) + + DECODE(RO20NB, 0, RO20B, RO20NB) + + DECODE(RO21NB, 0, RO21B, RO21NB) + + DECODE(RO11NB, 0, RO11B, RO11NB) + + DECODE(RO19NB, 0, RO19BCB + RO19BVB + RO19BFB, RO19NB) + + DECODE(RO9NB, 0, RO09BCB + RO09BVB + RO09BFB, RO9NB) + + DECODE(RO5NB, 0, RO05B, RO5NB) + END) AS TOTFTVATAX, + DECODE(NOTA_TVA_EX, + 1, + 0, + DECODE(RO24NT, 0, RO24T, RO24NT) + + DECODE(RO20NT, 0, RO20T, RO20NT) + + DECODE(RO21NT, 0, RO21T, RO21NT) + + DECODE(RO11NT, 0, RO11T, RO11NT) + + DECODE(RO19NT, 0, RO19BCT + RO19BVT + RO19BFT, RO19NT) + + DECODE(RO9NT, 0, RO09BCT + RO09BVT + RO09BFT, RO9NT) + + DECODE(RO5NT, 0, RO05T, RO5NT)) AS TOTTVATAX, + ROSCN + FOSCN + (CASE + WHEN REGULARIZARE > 0 THEN + CEBCB - CEBCTR + ELSE + CEBCB + END) + CEBCT + (CASE + WHEN REGULARIZARE > 0 THEN + CEBVB - CEBVTR + ELSE + CEBVB + END) + CEBVT + CEBVSC + CEBVN + (CASE + WHEN REGULARIZARE > 0 THEN + CEBFB - CEBFTR + ELSE + CEBFB + END) + CEBFT + CEBFSC + CEBFN + ROTN + ROTN50 + ROTN100 AS TOTNETAX, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B - RO24TR) + ELSE + DECODE(RO24B, + 0, + DECODE(RO24T, 0, 0, ROUND(RO24T / 0.24, 2)), + RO24B) + END) AS RO24B, + RO24T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B - RO20TR) + ELSE + DECODE(RO20B, + 0, + DECODE(RO20T, 0, 0, ROUND(RO20T / 0.20, 2)), + RO20B) + END) AS RO20B, + RO20T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B - RO21TR) + ELSE + DECODE(RO21B, + 0, + DECODE(RO21T, 0, 0, ROUND(RO21T / 0.21, 2)), + RO21B) + END) AS RO21B, + RO21T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B - RO11TR) + + ELSE + DECODE(RO11B, + 0, + DECODE(RO11T, 0, 0, ROUND(RO11T / 0.11, 2)), + RO11B) + END) AS RO11B, + RO11T, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19BCB, + 0, + DECODE(RO19BCT, 0, 0, ROUND(RO19BCT / 0.19, 2)), + RO19BCB - RO19BCTR) + ELSE + DECODE(RO19BCB, + 0, + DECODE(RO19BCT, 0, 0, ROUND(RO19BCT / 0.19, 2)), + RO19BCB) + END) AS RO19BCB, + RO19BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19BVB, + 0, + DECODE(RO19BVT, 0, 0, ROUND(RO19BVT / 0.19, 2)), + RO19BVB - RO19BVTR) + ELSE + DECODE(RO19BVB, + 0, + DECODE(RO19BVT, 0, 0, ROUND(RO19BVT / 0.19, 2)), + RO19BVB) + END) AS RO19BVB, + RO19BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO19BFB, + 0, + DECODE(RO19BFT, 0, 0, ROUND(RO19BFT / 0.19, 2)), + RO19BFB - RO19BFTR) + ELSE + DECODE(RO19BFB, + 0, + DECODE(RO19BFT, 0, 0, ROUND(RO19BFT / 0.19, 2)), + RO19BFB) + END) AS RO19BFB, + RO19BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO09BCB, + 0, + DECODE(RO09BCT, 0, 0, ROUND(RO09BCT / 0.09, 2)), + RO09BCB - RO09BCTR) + ELSE + DECODE(RO09BCB, + 0, + DECODE(RO09BCT, 0, 0, ROUND(RO09BCT / 0.09, 2)), + RO09BCB) + END) AS RO09BCB, + RO09BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO09BVB, + 0, + DECODE(RO09BVT, 0, 0, ROUND(RO09BVT / 0.09, 2)), + RO09BVB - RO09BVTR) + ELSE + DECODE(RO09BVB, + 0, + DECODE(RO09BVT, 0, 0, ROUND(RO09BVT / 0.09, 2)), + RO09BVB) + END) AS RO09BVB, + RO09BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO09BFB, + 0, + DECODE(RO09BFT, 0, 0, ROUND(RO09BFT / 0.09, 2)), + RO09BFB - RO09BFTR) + ELSE + DECODE(RO09BFB, + 0, + DECODE(RO09BFT, 0, 0, ROUND(RO09BFT / 0.09, 2)), + RO09BFB) + END) AS RO09BFB, + RO09BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + DECODE(RO05B, + 0, + DECODE(RO05T, 0, 0, ROUND(RO05T / 0.05, 2)), + RO05B - RO05TR) + ELSE + DECODE(RO05B, + 0, + DECODE(RO05T, 0, 0, ROUND(RO05T / 0.05, 2)), + RO05B) + END) AS RO05B, + RO05T, + ROSCN, + (CASE + WHEN REGULARIZARE > 0 THEN + FO21B - FO21TR + ELSE + FO21B + END) AS FO21B, + FO21T, + (CASE + WHEN REGULARIZARE > 0 THEN + FO24B - FO24TR + ELSE + FO24B + END) AS FO24B, + FO24T, + (CASE + WHEN REGULARIZARE > 0 THEN + FO20B - FO20TR + ELSE + FO20B + END) AS FO20B, + FO20T, + (CASE + WHEN REGULARIZARE > 0 THEN + FO19BCB - FO19BCTR + ELSE + FO19BCB + END) AS FO19BCB, + FO19BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO19BVB - FO19BVTR + ELSE + FO19BVB + END) AS FO19BVB, + FO19BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO19BFB - FO19BFTR + ELSE + FO19BFB + END) AS FO19BFB, + FO19BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX21TIB - XX21TITR + ELSE + XX21TIB + END) AS XX21TIB, + XX21TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX11TIB - XX11TITR + ELSE + XX11TIB + END) AS XX11TIB, + XX11TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX19TIB - XX19TITR + ELSE + XX19TIB + END) AS XX19TIB, + XX19TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + XX9TIB - XX9TITR + ELSE + XX9TIB + END) AS XX9TIB, + XX9TIT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO09BCB - FO09BCTR + ELSE + FO09BCB + END) AS FO09BCB, + FO09BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO09BVB - FO09BVTR + ELSE + FO09BVB + END) AS FO09BVB, + FO09BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + FO09BFB - FO09BFTR + ELSE + FO09BFB + END) AS FO09BFB, + FO09BFT, + FOSCN, + (CASE + WHEN REGULARIZARE > 0 THEN + CE24B - CE24TR + ELSE + CE24B + END) AS CE24B, + CE24T, + (CASE + WHEN REGULARIZARE > 0 THEN + CE20B - CE20TR + ELSE + CE20B + END) AS CE20B, + CE20T, + (CASE + WHEN REGULARIZARE > 0 THEN + CE5SB - CE5STR + ELSE + CE5SB + END) AS CE5SB, + CE5ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE9SB - CE9STR + ELSE + CE9SB + END) AS CE9SB, + CE9ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE24SB - CE24STR + ELSE + CE24SB + END) AS CE24SB, + CE24ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE20SB - CE20STR + ELSE + CE20SB + END) AS CE20SB, + CE20ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE21SB - CE21STR + ELSE + CE21SB + END) AS CE21SB, + CE21ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CE19SB - CE19STR + ELSE + CE19SB + END) AS CE19SB, + CE19ST, + (CASE + WHEN REGULARIZARE > 0 THEN + CEBCB - CEBCTR + ELSE + CEBCB + END) AS CEBCB, + CEBCT, + (CASE + WHEN REGULARIZARE > 0 THEN + CEBVB - CEBVTR + ELSE + CEBVB + END) AS CEBVB, + CEBVT, + CEBVSC, + CEBVN, + (CASE + WHEN REGULARIZARE > 0 THEN + CEBFB - CEBFTR + ELSE + CEBFB + END) AS CEBFB, + CEBFT, + CEBFSC, + CEBFN, + (CASE + WHEN REGULARIZARE > 0 THEN + CE21CTB - CE21CTTR + ELSE + CE21CTB + END) AS CE21CTB, + CE21CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE11CTB - CE11CTTR + ELSE + CE11CTB + END) AS CE11CTB, + CE11CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE19CTB - CE19CTTR + ELSE + CE19CTB + END) AS CE19CTB, + CE19CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE9CTB - CE9CTTR + ELSE + CE9CTB + END) AS CE9CTB, + CE9CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE5CTB - CE5CTTR + ELSE + CE5CTB + END) AS CE5CTB, + CE5CTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE21FTB - CE21FTTR + ELSE + CE21FTB + END) AS CE21FTB, + CE21FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE11FTB - CE11FTTR + ELSE + CE11FTB + END) AS CE11FTB, + CE11FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE19FTB - CE19FTTR + ELSE + CE19FTB + END) AS CE19FTB, + CE19FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE9FTB - CE9FTTR + ELSE + CE9FTB + END) AS CE9FTB, + CE9FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + CE5FTB - CE5FTTR + ELSE + CE5FTB + END) AS CE5FTB, + CE5FTT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI24B - TI24TR + ELSE + TI24B + END) AS TI24B, + TI24T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI20B - TI20TR + ELSE + TI20B + END) AS TI20B, + TI20T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI21B - TI21TR + ELSE + TI21B + END) AS TI21B, + TI21T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI11B - TI11TR + ELSE + TI11B + END) AS TI11B, + TI11T, + (CASE + WHEN REGULARIZARE > 0 THEN + TI19BCB - TI19BCTR + ELSE + TI19BCB + END) AS TI19BCB, + TI19BCT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI19BVB - TI19BVTR + ELSE + TI19BVB + END) AS TI19BVB, + TI19BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI19BFB - TI19BFTR + ELSE + TI19BFB + END) AS TI19BFB, + TI19BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI09BVB - TI09BVTR + ELSE + TI09BVB + END) AS TI09BVB, + TI09BVT, + (CASE + WHEN REGULARIZARE > 0 THEN + TI09BFB - TI09BFTR + ELSE + TI09BFB + END) AS TI09BFB, + TI09BFT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO24NB - RO24NTR + ELSE + RO24NB + END) AS RO24NB, + RO24NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO20NB - RO20NTR + ELSE + RO20NB + END) AS RO20NB, + RO20NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO21NB - RO21NTR + ELSE + RO21NB + END) AS RO21NB, + RO21NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO11NB - RO11NTR + ELSE + RO11NB + END) AS RO11NB, + RO11NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO19NB - RO19NTR + ELSE + RO19NB + END) AS RO19NB, + RO19NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO9NB - RO09NTR + ELSE + RO9NB + END) AS RO9NB, + RO9NT, + (CASE + WHEN REGULARIZARE > 0 THEN + RO5NB - RO05NTR + ELSE + RO5NB + END) AS RO5NB, + RO5NT, + ROTN, + ROTN50, + ROTN100, + RORTD24, + RORTD20, + RORTD19, + RORTD9, + RORTD5, + RORTD21, + RORTD11 + FROM (SELECT JC.ID_SUCURSALA, + JC.AN, + JC.LUNA, + JC.ID_FACT, + MAX(JC.ID_FDOC) AS ID_FDOC, + JC.NRACT, + JC.SERIE_ACT, + JC.DATAACT, + JC.DATAIREG, + MAX(JC.ID_PART) AS ID_PART, + MIN(JC.COD) AS COD, + MIN(JC.NOTA_TVA_EX) AS NOTA_TVA_EX, + sum(CASE + WHEN NVL(JC.ID_JTVA_COLOANA, 0) > 100 and + JC.ID_JTVA_COLOANA NOT IN (1001, 1004, 1005) THEN + JC.suma + ELSE + 0 + END) TOTCTVA, + SUM(CASE + WHEN ID_JTVA_COLOANA In (156, + 176, + 208, + 212, + 107, + 109, + 111, + 154, + 170, + 172, + 174, + 178, + 210, + 214, + 101, + 103, + 105, + 188) THEN + JC.suma + ELSE + 0 + END) As totftvatax, + SUM(CASE + WHEN ID_JTVA_COLOANA In (157, + 177, + 209, + 213, + 108, + 110, + 112, + 155, + 171, + 173, + 175, + 179, + 211, + 215, + 102, + 104, + 106, + 189) THEN + JC.suma + ELSE + 0 + END) As tottvatax, + sum(DECODE(JC.ID_JTVA_COLOANA, 156, JC.suma, 0)) RO24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 157, JC.suma, 0)) RO24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 176, JC.suma, 0)) RO20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 177, JC.suma, 0)) RO20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 208, JC.suma, 0)) RO21B, + sum(DECODE(JC.ID_JTVA_COLOANA, 209, JC.suma, 0)) RO21T, + sum(DECODE(JC.ID_JTVA_COLOANA, 101, JC.suma, 0)) RO19BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 102, JC.suma, 0)) RO19BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 103, JC.suma, 0)) RO19BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 104, JC.suma, 0)) RO19BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 105, JC.suma, 0)) RO19BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 106, JC.suma, 0)) RO19BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 107, JC.suma, 0)) RO09BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 108, JC.suma, 0)) RO09BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 109, JC.suma, 0)) RO09BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 110, JC.suma, 0)) RO09BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 111, JC.suma, 0)) RO09BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 112, JC.suma, 0)) RO09BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 154, JC.suma, 0)) RO05B, + sum(DECODE(JC.ID_JTVA_COLOANA, 155, JC.suma, 0)) RO05T, + sum(DECODE(JC.ID_JTVA_COLOANA, 212, JC.suma, 0)) RO11B, + sum(DECODE(JC.ID_JTVA_COLOANA, 213, JC.suma, 0)) RO11T, + sum(DECODE(JC.ID_JTVA_COLOANA, 113, JC.suma, 0)) ROSCN, + sum(DECODE(JC.ID_JTVA_COLOANA, 158, JC.suma, 0)) FO24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 159, JC.suma, 0)) FO24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 180, JC.suma, 0)) FO20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 181, JC.suma, 0)) FO20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 220, JC.suma, 0)) FO21B, + sum(DECODE(JC.ID_JTVA_COLOANA, 221, JC.suma, 0)) FO21T, + sum(DECODE(JC.ID_JTVA_COLOANA, 114, JC.suma, 0)) FO19BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 115, JC.suma, 0)) FO19BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 116, JC.suma, 0)) FO19BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 117, JC.suma, 0)) FO19BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 118, JC.suma, 0)) FO19BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 119, JC.suma, 0)) FO19BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 192, JC.suma, 0)) XX19TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 193, JC.suma, 0)) XX19TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 224, JC.suma, 0)) XX21TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 225, JC.suma, 0)) XX21TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 230, JC.suma, 0)) XX11TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 231, JC.suma, 0)) XX11TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 206, JC.suma, 0)) XX9TIB, + sum(DECODE(JC.ID_JTVA_COLOANA, 207, JC.suma, 0)) XX9TIT, + sum(DECODE(JC.ID_JTVA_COLOANA, 120, JC.suma, 0)) FO09BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 121, JC.suma, 0)) FO09BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 122, JC.suma, 0)) FO09BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 123, JC.suma, 0)) FO09BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 124, JC.suma, 0)) FO09BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 125, JC.suma, 0)) FO09BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 126, JC.suma, 0)) FOSCN, + sum(DECODE(JC.ID_JTVA_COLOANA, 160, JC.suma, 0)) CE24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 161, JC.suma, 0)) CE24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 182, JC.suma, 0)) CE20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 183, JC.suma, 0)) CE20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 164, JC.suma, 0)) CE5SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 165, JC.suma, 0)) CE5ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 166, JC.suma, 0)) CE9SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 167, JC.suma, 0)) CE9ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 168, JC.suma, 0)) CE24SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 169, JC.suma, 0)) CE24ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 184, JC.suma, 0)) CE20SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 185, JC.suma, 0)) CE20ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 190, JC.suma, 0)) CE19SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 191, JC.suma, 0)) CE19ST, + sum(DECODE(JC.ID_JTVA_COLOANA, 222, JC.suma, 0)) CE21SB, + sum(DECODE(JC.ID_JTVA_COLOANA, 223, JC.suma, 0)) CE21ST, + sum(DECODE(JC.ID_JTVA_COLOANA, + 127, + JC.suma, + 148, + JC.suma, + 0)) CEBCB, + sum(DECODE(JC.ID_JTVA_COLOANA, + 128, + JC.suma, + 149, + JC.suma, + 0)) CEBCT, + sum(DECODE(JC.ID_JTVA_COLOANA, + 129, + JC.suma, + 150, + JC.suma, + 0)) CEBVB, + sum(DECODE(JC.ID_JTVA_COLOANA, + 130, + JC.suma, + 151, + JC.suma, + 0)) CEBVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 131, JC.suma, 0)) CEBVSC, + sum(DECODE(JC.ID_JTVA_COLOANA, 132, JC.suma, 0)) CEBVN, + sum(DECODE(JC.ID_JTVA_COLOANA, + 133, + JC.suma, + 152, + JC.suma, + 0)) CEBFB, + sum(DECODE(JC.ID_JTVA_COLOANA, + 134, + JC.suma, + 153, + JC.suma, + 0)) CEBFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 135, JC.suma, 0)) CEBFSC, + sum(DECODE(JC.ID_JTVA_COLOANA, 136, JC.suma, 0)) CEBFN, + sum(DECODE(JC.ID_JTVA_COLOANA, 194, JC.suma, 0)) CE19CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 195, JC.suma, 0)) CE19CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 226, JC.suma, 0)) CE21CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 227, JC.suma, 0)) CE21CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 232, JC.suma, 0)) CE11CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 233, JC.suma, 0)) CE11CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 196, JC.suma, 0)) CE9CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 197, JC.suma, 0)) CE9CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 198, JC.suma, 0)) CE5CTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 199, JC.suma, 0)) CE5CTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 200, JC.suma, 0)) CE19FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 201, JC.suma, 0)) CE19FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 228, JC.suma, 0)) CE21FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 229, JC.suma, 0)) CE21FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 234, JC.suma, 0)) CE11FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 235, JC.suma, 0)) CE11FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 202, JC.suma, 0)) CE9FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 203, JC.suma, 0)) CE9FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 204, JC.suma, 0)) CE5FTB, + sum(DECODE(JC.ID_JTVA_COLOANA, 205, JC.suma, 0)) CE5FTT, + sum(DECODE(JC.ID_JTVA_COLOANA, 162, JC.suma, 0)) TI24B, + sum(DECODE(JC.ID_JTVA_COLOANA, 163, JC.suma, 0)) TI24T, + sum(DECODE(JC.ID_JTVA_COLOANA, 186, JC.suma, 0)) TI20B, + sum(DECODE(JC.ID_JTVA_COLOANA, 187, JC.suma, 0)) TI20T, + sum(DECODE(JC.ID_JTVA_COLOANA, 216, JC.suma, 0)) TI21B, + sum(DECODE(JC.ID_JTVA_COLOANA, 217, JC.suma, 0)) TI21T, + sum(DECODE(JC.ID_JTVA_COLOANA, 218, JC.suma, 0)) TI11B, + sum(DECODE(JC.ID_JTVA_COLOANA, 219, JC.suma, 0)) TI11T, + sum(DECODE(JC.ID_JTVA_COLOANA, 137, JC.suma, 0)) TI19BCB, + sum(DECODE(JC.ID_JTVA_COLOANA, 138, JC.suma, 0)) TI19BCT, + sum(DECODE(JC.ID_JTVA_COLOANA, 139, JC.suma, 0)) TI19BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 140, JC.suma, 0)) TI19BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 141, JC.suma, 0)) TI19BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 142, JC.suma, 0)) TI19BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 143, JC.suma, 0)) TI09BVB, + sum(DECODE(JC.ID_JTVA_COLOANA, 144, JC.suma, 0)) TI09BVT, + sum(DECODE(JC.ID_JTVA_COLOANA, 145, JC.suma, 0)) TI09BFB, + sum(DECODE(JC.ID_JTVA_COLOANA, 146, JC.suma, 0)) TI09BFT, + sum(DECODE(JC.ID_JTVA_COLOANA, 170, JC.suma, 0)) RO24NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 171, JC.suma, 0)) RO24NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 178, JC.suma, 0)) RO20NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 179, JC.suma, 0)) RO20NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 210, JC.suma, 0)) RO21NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 211, JC.suma, 0)) RO21NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 214, JC.suma, 0)) RO11NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 215, JC.suma, 0)) RO11NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 188, JC.suma, 0)) RO19NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 189, JC.suma, 0)) RO19NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 172, JC.suma, 0)) RO9NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 173, JC.suma, 0)) RO9NT, + sum(DECODE(JC.ID_JTVA_COLOANA, 174, JC.suma, 0)) RO5NB, + sum(DECODE(JC.ID_JTVA_COLOANA, 175, JC.suma, 0)) RO5NT, + SUM(JC.REGULARIZARE) AS REGULARIZARE, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 209 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO21TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 213 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO11TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 157 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 177 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 102 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO19BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 104 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO19BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 106 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO19BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 108 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO09BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 110 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO09BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 112 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO09BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 155 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) RO05TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 159 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 181 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 221 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO21TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 115 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO19BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 117 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO19BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 119 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO19BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 225 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX21TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 231 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX11TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 193 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX19TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 207 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) XX9TITR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 121 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO09BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 123 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO09BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 125 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) FO09BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 161 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 183 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 165 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE5STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 167 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE9STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 169 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE24STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 185 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE20STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 223 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE21STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 191 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE19STR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA in (128, 149) AND + JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CEBCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA in (130, 151) AND + JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CEBVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA in (134, 153) AND + JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CEBFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 227 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE21CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 233 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE11CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 195 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE19CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 197 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE9CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 199 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE5CTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 229 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE21FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 235 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE11FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 201 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE19FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 203 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE9FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 205 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) CE5FTTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 217 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI21TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 219 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI11TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 163 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI24TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 187 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI20TR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 138 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI19BCTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 140 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI19BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 142 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI19BFTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 144 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI09BVTR, + SUM(CASE + WHEN JC.ID_JTVA_COLOANA = 146 AND JC.SCC = '4428' THEN + JC.suma + ELSE + 0 + END) TI09BFTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 171 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO24NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 179 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO20NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 211 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO21NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 215 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO11NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 189 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO19NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 173 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO09NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 175 AND SCC = '4428' THEN + SUMA + ELSE + 0 + END) RO05NTR, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1001 THEN + SUMA + ELSE + 0 + END) ROTN, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1004 THEN + SUMA + ELSE + 0 + END) ROTN50, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1005 THEN + SUMA + ELSE + 0 + END) ROTN100, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1011 THEN + SUMA + ELSE + 0 + END) RORTD24, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1012 THEN + SUMA + ELSE + 0 + END) RORTD20, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1013 THEN + SUMA + ELSE + 0 + END) RORTD19, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1014 THEN + SUMA + ELSE + 0 + END) RORTD9, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1015 THEN + SUMA + ELSE + 0 + END) RORTD5, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1018 THEN + SUMA + ELSE + 0 + END) RORTD21, + SUM(CASE + WHEN ID_JTVA_COLOANA = 1019 THEN + SUMA + ELSE + 0 + END) RORTD11 + FROM (SELECT A.ID_SUCURSALA, + A.AN, + A.LUNA, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + 1 + ELSE + 0 + END) AS NOTA_TVA_EX, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT OR + A.ID_SET <> D.ID_SET OR + NVL(A.SERIE_ACT, 'X') <> + NVL(D.SERIE_ACT, 'X') THEN + NULL + ELSE + A.ID_FDOC + END) AS ID_FDOC, + A.ID_FACT, + (CASE + WHEN A.NRACT <> D.NRACT THEN + D.NRACT + ELSE + A.NRACT + END) AS NRACT, + D.SERIE_ACT, + (CASE + WHEN A.NRACT <> D.NRACT or + A.DATAACT <> D.DATAACT THEN + TRUNC(D.DATAACT) + ELSE + TRUNC(A.DATAACT) + END) AS DATAACT, + (CASE + WHEN A.NRACT <> D.NRACT or + NVL(A.DATAIREG, A.DATAACT) <> + NVL(D.DATAIREG, D.DATAACT) THEN + TRUNC(NVL(D.DATAIREG, D.DATAACT)) + ELSE + TRUNC(NVL(A.DATAIREG, A.DATAACT)) + END) AS DATAIREG, + A.COD, + A.SCD, + A.SCC, + -- 4426 = 4427 sau 4428 = 4427 nu au parteneri + MAX(DECODE(E.EXCEPTIE, + 1, + A.ID_PARTD, + (CASE + WHEN A.SCC IN + (lcContTvaColectat, lcContTvaNeexigibil) OR + SUBSTR(A.SCC, 1, 1) = '5' OR + ID_JTVA_COLOANA in (1001, 1004, 1005) THEN + -9999999999 + ELSE + A.ID_PARTC + END))) OVER(PARTITION BY A.AN, A.LUNA, A.ID_FDOC, A.NRACT, A.DATAACT, A.COD) AS ID_PART, + -- INVERSARE SUME LA EXCEPTII + DECODE(A.ID_SET, 10616, -1, 1) * + DECODE(E.EXCEPTIE, 1, -A.SUMA, A.SUMA) AS SUMA, + -- MARCA REGULARIZARE FACTURI NESOSITE + (CASE + WHEN INSTR(lcContDebitRegularizare, A.scd) > 0 and + INSTR(lcContCreditRegularizare, A.scc) > 0 THEN + 1 + ELSE + 0 + END) AS REGULARIZARE, + ID_JTVA_COLOANA, + ROW_NUMBER() OVER(PARTITION BY a.nract ORDER BY a.nract) AS RN + FROM (SELECT ID_SUCURSALA, + AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTD, + ID_PARTC, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + STERS + FROM ACT_TEMP + WHERE lcTabelSursa = 'act_temp' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA in + (1001, + 1004, + 1005, + 1011, + 1012, + 1013, + 1014, + 1015, + 1018, + 1019)) + AND ID_SET NOT IN (SELECT ID_SET FROM XSETS WHERE NU_JTVA = 1) + UNION ALL + SELECT ID_SUCURSALA, + AN, + LUNA, + ID_FDOC, + ID_FACT, + NRACT, + SERIE_ACT, + DATAACT, + DATAIREG, + COD, + SCD, + SCC, + ID_PARTD, + ID_PARTC, + ID_SET, + SUMA, + ID_JTVA_COLOANA, + STERS + FROM ACT + WHERE lcTabelSursa = 'act' + AND AN = tnAn + AND LUNA = tnLuna + AND STERS = 0 + AND (ID_JTVA_COLOANA BETWEEN + lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + ID_JTVA_COLOANA in + (1001, + 1004, + 1005, + 1011, + 1012, + 1013, + 1014, + 1015, + 1018, + 1019)) + AND ID_SET NOT IN (SELECT ID_SET FROM XSETS WHERE NU_JTVA = 1)) A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, + 1, + CONT_C, + CONT) AS SCD, + DECODE(DEBIT, + 1, + CONT, + CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND IN_TVA = 1) E + ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN DOCUMENTE D + ON A.ID_FACT = D.ID_DOC + WHERE A.AN = tnAn + and A.LUNA = tnLuna + and A.STERS = 0 + AND (A.ID_JTVA_COLOANA BETWEEN lnIdMinJtvaColoana AND + lnIdMaxJtvaColoana OR + A.ID_JTVA_COLOANA in + (1001, + 1004, + 1005, + 1011, + 1012, + 1013, + 1014, + 1015, + 1018, + 1019)) + -- IN JURNALUL DE CUMPARARI NU INTRA FACTURILE NESOSITE + INCASARILE + -- SAU COMPENSARI 409 CU EXPLICATIE TVA + AND A.ID_SET <> 10622 + AND NOT (TRIM(NVL(A.SCC, 'X')) = + lcContDebitRegularizare OR + (TRIM(NVL(A.SCD, 'X')) = + lcContDebitRegularizare AND + INSTR(lcContCreditRegularizare, + TRIM(NVL(A.SCC, 'X'))) = 0)) + AND nvl2(pack_contafin.GET_ID_SUCURSALA(), + A.ID_SUCURSALA, + 0) = + nvl(pack_contafin.GET_ID_SUCURSALA(), 0)) JC + GROUP BY JC.AN, + JC.LUNA, + JC.ID_FACT, + JC.NRACT, + JC.SERIE_ACT, + JC.DATAACT, + JC.DATAIREG, + JC.ID_SUCURSALA); + + TYPE t_source_tab IS TABLE OF c_source%ROWTYPE; + S t_source_tab; -- Renamed from l_data for better readability + + -- Dedicated collections for INSERT and DELETE operations + SI t_source_tab := t_source_tab(); -- Source Insert + SD t_source_tab := t_source_tab(); -- Source Delete + BEGIN + -- Bulk load all data into PGA + OPEN c_source; + FETCH c_source BULK COLLECT + INTO S; + CLOSE c_source; + + -- Exit if no data + IF S.COUNT = 0 THEN + RETURN; + END IF; + + -- BULK UPDATE all rows at once using FORALL + FORALL i IN 1 .. S.COUNT + UPDATE JC2007 J + SET J.TOTCTVA = J.TOTCTVA + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTCTVA + ELSE + 0 + END), + J.TOTFTVATAX = J.TOTFTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTFTVATAX + ELSE + 0 + END), + J.TOTTVATAX = J.TOTTVATAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTTVATAX + ELSE + 0 + END), + J.TOTNETAX = J.TOTNETAX + (CASE + WHEN EXTRACT(MONTH FROM J.DATAACT) = J.LUNA AND + EXTRACT(YEAR FROM J.DATAACT) = J.AN THEN + S(i).TOTNETAX + ELSE + 0 + END), + J.RO21B = J.RO21B + NVL(S(i).RO21B, 0) + (CASE + WHEN NVL(S(i).RO21B, 0) <> 0 AND NVL(J.RO21NT, 0) <> 0 AND + NVL(J.RO21NT, 0) - (NVL(J.RO21T, 0) + NVL(S(i).RO21T, 0)) = 0 THEN + NVL(J.RO21NB, 0) - (NVL(J.RO21B, 0) + NVL(S(i).RO21B, 0)) + ELSE + 0 + END), + J.RO21T = J.RO21T + S(i).RO21T, + J.RO11B = J.RO11B + NVL(S(i).RO11B, 0) + (CASE + WHEN NVL(S(i).RO11B, 0) <> 0 AND NVL(J.RO11NT, 0) <> 0 AND + NVL(J.RO11NT, 0) - (NVL(J.RO11T, 0) + NVL(S(i).RO11T, 0)) = 0 THEN + NVL(J.RO11NB, 0) - (NVL(J.RO11B, 0) + NVL(S(i).RO11B, 0)) + ELSE + 0 + END), + J.RO11T = J.RO11T + S(i).RO11T, + J.RO24B = J.RO24B + NVL(S(i).RO24B, 0) + (CASE + WHEN NVL(S(i).RO24B, 0) <> 0 AND NVL(J.RO24NT, 0) <> 0 AND + NVL(J.RO24NT, 0) - (NVL(J.RO24T, 0) + NVL(S(i).RO24T, 0)) = 0 THEN + NVL(J.RO24NB, 0) - (NVL(J.RO24B, 0) + NVL(S(i).RO24B, 0)) + ELSE + 0 + END), + J.RO24T = J.RO24T + S(i).RO24T, + J.RO20B = J.RO20B + NVL(S(i).RO20B, 0) + (CASE + WHEN NVL(S(i).RO20B, 0) <> 0 AND NVL(J.RO20NT, 0) <> 0 AND + NVL(J.RO20NT, 0) - (NVL(J.RO20T, 0) + NVL(S(i).RO20T, 0)) = 0 THEN + NVL(J.RO20NB, 0) - (NVL(J.RO20B, 0) + NVL(S(i).RO20B, 0)) + ELSE + 0 + END), + J.RO20T = J.RO20T + S(i).RO20T, + J.RO19BCB = J.RO19BCB + NVL(S(i).RO19BCB, 0) + (CASE + WHEN NVL(S(i).RO19BCB, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(S(i).RO19BVB, 0) = 0 AND NVL(S(i).RO19BFB, 0) = 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19BCT, 0) + NVL(S(i).RO19BCT, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19BCB, 0) + NVL(S(i).RO19BCB, 0)) + ELSE + 0 + END), + J.RO19BCT = J.RO19BCT + S(i).RO19BCT, + J.RO19BVB = J.RO19BVB + NVL(S(i).RO19BVB, 0) + (CASE + WHEN NVL(S(i).RO19BVB, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(S(i).RO19BFB, 0) = 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19BVT, 0) + NVL(S(i).RO19BVT, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19BVB, 0) + NVL(S(i).RO19BVB, 0)) + ELSE + 0 + END), + J.RO19BVT = J.RO19BVT + S(i).RO19BVT, + J.RO19BFB = J.RO19BFB + NVL(S(i).RO19BFB, 0) + (CASE + WHEN NVL(S(i).RO19BFB, 0) <> 0 AND NVL(J.RO19NT, 0) <> 0 AND + NVL(J.RO19NT, 0) - (NVL(J.RO19BFT, 0) + NVL(S(i).RO19BFT, 0)) = 0 THEN + NVL(J.RO19NB, 0) - (NVL(J.RO19BFB, 0) + NVL(S(i).RO19BFB, 0)) + ELSE + 0 + END), + J.RO19BFT = J.RO19BFT + S(i).RO19BFT, + J.RO09BCB = J.RO09BCB + NVL(S(i).RO09BCB, 0) + (CASE + WHEN NVL(S(i).RO09BCB, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(S(i).RO09BVB, 0) = 0 AND NVL(S(i).RO09BFB, 0) = 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO09BCT, 0) + NVL(S(i).RO09BCT, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO09BCB, 0) + NVL(S(i).RO09BCB, 0)) + ELSE + 0 + END), + J.RO09BCT = J.RO09BCT + S(i).RO09BCT, + J.RO09BVB = J.RO09BVB + NVL(S(i).RO09BVB, 0) + (CASE + WHEN NVL(S(i).RO09BVB, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(S(i).RO09BFB, 0) = 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO09BVT, 0) + NVL(S(i).RO09BVT, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO09BVB, 0) + NVL(S(i).RO09BVB, 0)) + ELSE + 0 + END), + J.RO09BVT = J.RO09BVT + S(i).RO09BVT, + J.RO09BFB = J.RO09BFB + NVL(S(i).RO09BFB, 0) + (CASE + WHEN NVL(S(i).RO09BFB, 0) <> 0 AND NVL(J.RO9NT, 0) <> 0 AND + NVL(J.RO9NT, 0) - (NVL(J.RO09BFT, 0) + NVL(S(i).RO09BFT, 0)) = 0 THEN + NVL(J.RO9NB, 0) - (NVL(J.RO09BFB, 0) + NVL(S(i).RO09BFB, 0)) + ELSE + 0 + END), + J.RO09BFT = J.RO09BFT + S(i).RO09BFT, + J.RO05B = J.RO05B + NVL(S(i).RO05B, 0) + (CASE + WHEN NVL(S(i).RO05B, 0) <> 0 AND NVL(J.RO5NB, 0) <> 0 AND + NVL(J.RO5NT, 0) - (NVL(J.RO05T, 0) + NVL(S(i).RO05T, 0)) = 0 THEN + NVL(J.RO5NB, 0) - (NVL(J.RO05B, 0) + NVL(S(i).RO05B, 0)) + ELSE + 0 + END), + J.RO05T = J.RO05T + S(i).RO05T, + J.RO21NB = J.RO21NB + S(i).RO21NB, + J.RO21NT = J.RO21NT + S(i).RO21NT, + J.RO11NB = J.RO11NB + S(i).RO11NB, + J.RO11NT = J.RO11NT + S(i).RO11NT, + J.RO24NB = J.RO24NB + S(i).RO24NB, + J.RO24NT = J.RO24NT + S(i).RO24NT, + J.RO19NB = J.RO19NB + S(i).RO19NB, + J.RO19NT = J.RO19NT + S(i).RO19NT, + J.RO20NB = J.RO20NB + S(i).RO20NB, + J.RO20NT = J.RO20NT + S(i).RO20NT, + J.RO9NB = J.RO9NB + S(i).RO9NB, + J.RO9NT = J.RO9NT + S(i).RO9NT, + J.RO5NB = J.RO5NB + S(i).RO5NB, + J.RO5NT = J.RO5NT + S(i).RO5NT, + J.ROSCN = J.ROSCN + S(i).ROSCN, + J.FO21B = J.FO21B + S(i).FO21B, + J.FO21T = J.FO21T + S(i).FO21T, + J.FO24B = J.FO24B + S(i).FO24B, + J.FO24T = J.FO24T + S(i).FO24T, + J.FO20B = J.FO20B + S(i).FO20B, + J.FO20T = J.FO20T + S(i).FO20T, + J.FO19BCB = J.FO19BCB + S(i).FO19BCB, + J.FO19BCT = J.FO19BCT + S(i).FO19BCT, + J.FO19BVB = J.FO19BVB + S(i).FO19BVB, + J.FO19BVT = J.FO19BVT + S(i).FO19BVT, + J.FO19BFB = J.FO19BFB + S(i).FO19BFB, + J.FO19BFT = J.FO19BFT + S(i).FO19BFT, + J.XX21TIB = J.XX21TIB + S(i).XX21TIB, + J.XX21TIT = J.XX21TIT + S(i).XX21TIT, + J.XX11TIB = J.XX11TIB + S(i).XX11TIB, + J.XX11TIT = J.XX11TIT + S(i).XX11TIT, + J.XX19TIB = J.XX19TIB + S(i).XX19TIB, + J.XX19TIT = J.XX19TIT + S(i).XX19TIT, + J.XX9TIB = J.XX9TIB + S(i).XX9TIB, + J.XX9TIT = J.XX9TIT + S(i).XX9TIT, + J.FO09BCB = J.FO09BCB + S(i).FO09BCB, + J.FO09BCT = J.FO09BCT + S(i).FO09BCT, + J.FO09BVB = J.FO09BVB + S(i).FO09BVB, + J.FO09BVT = J.FO09BVT + S(i).FO09BVT, + J.FO09BFB = J.FO09BFB + S(i).FO09BFB, + J.FO09BFT = J.FO09BFT + S(i).FO09BFT, + J.FOSCN = J.FOSCN + S(i).FOSCN, + J.CE24B = J.CE24B + S(i).CE24B, + J.CE24T = J.CE24T + S(i).CE24T, + J.CE20B = J.CE20B + S(i).CE20B, + J.CE20T = J.CE20T + S(i).CE20T, + J.CE5SB = J.CE5SB + S(i).CE5SB, + J.CE5ST = J.CE5ST + S(i).CE5ST, + J.CE9SB = J.CE9SB + S(i).CE9SB, + J.CE9ST = J.CE9ST + S(i).CE9ST, + J.CE21SB = J.CE21SB + S(i).CE21SB, + J.CE21ST = J.CE21ST + S(i).CE21ST, + J.CE24SB = J.CE24SB + S(i).CE24SB, + J.CE24ST = J.CE24ST + S(i).CE24ST, + J.CE20SB = J.CE20SB + S(i).CE20SB, + J.CE20ST = J.CE20ST + S(i).CE20ST, + J.CE19SB = J.CE19SB + S(i).CE19SB, + J.CE19ST = J.CE19ST + S(i).CE19ST, + J.CEBCB = J.CEBCB + S(i).CEBCB, + J.CEBCT = J.CEBCT + S(i).CEBCT, + J.CEBVB = J.CEBVB + S(i).CEBVB, + J.CEBVT = J.CEBVT + S(i).CEBVT, + J.CEBVSC = J.CEBVSC + S(i).CEBVSC, + J.CEBVN = J.CEBVN + S(i).CEBVN, + J.CEBFB = J.CEBFB + S(i).CEBFB, + J.CEBFT = J.CEBFT + S(i).CEBFT, + J.CEBFSC = J.CEBFSC + S(i).CEBFSC, + J.CEBFN = J.CEBFN + S(i).CEBFN, + J.CE21CTB = J.CE21CTB + S(i).CE21CTB, + J.CE21CTT = J.CE21CTT + S(i).CE21CTT, + J.CE11CTB = J.CE11CTB + S(i).CE11CTB, + J.CE11CTT = J.CE11CTT + S(i).CE11CTT, + J.CE19CTB = J.CE19CTB + S(i).CE19CTB, + J.CE19CTT = J.CE19CTT + S(i).CE19CTT, + J.CE9CTB = J.CE9CTB + S(i).CE9CTB, + J.CE9CTT = J.CE9CTT + S(i).CE9CTT, + J.CE5CTB = J.CE5CTB + S(i).CE5CTB, + J.CE5CTT = J.CE5CTT + S(i).CE5CTT, + J.CE21FTB = J.CE21FTB + S(i).CE21FTB, + J.CE21FTT = J.CE21FTT + S(i).CE21FTT, + J.CE11FTB = J.CE11FTB + S(i).CE11FTB, + J.CE11FTT = J.CE11FTT + S(i).CE11FTT, + J.CE19FTB = J.CE19FTB + S(i).CE19FTB, + J.CE19FTT = J.CE19FTT + S(i).CE19FTT, + J.CE9FTB = J.CE9FTB + S(i).CE9FTB, + J.CE9FTT = J.CE9FTT + S(i).CE9FTT, + J.CE5FTB = J.CE5FTB + S(i).CE5FTB, + J.CE5FTT = J.CE5FTT + S(i).CE5FTT, + J.TI21B = J.TI21B + S(i).TI21B, + J.TI21T = J.TI21T + S(i).TI21T, + J.TI11B = J.TI11B + S(i).TI11B, + J.TI11T = J.TI11T + S(i).TI11T, + J.TI24B = J.TI24B + S(i).TI24B, + J.TI24T = J.TI24T + S(i).TI24T, + J.TI20B = J.TI20B + S(i).TI20B, + J.TI20T = J.TI20T + S(i).TI20T, + J.TI19BCB = J.TI19BCB + S(i).TI19BCB, + J.TI19BCT = J.TI19BCT + S(i).TI19BCT, + J.TI19BVB = J.TI19BVB + S(i).TI19BVB, + J.TI19BVT = J.TI19BVT + S(i).TI19BVT, + J.TI19BFB = J.TI19BFB + S(i).TI19BFB, + J.TI19BFT = J.TI19BFT + S(i).TI19BFT, + J.TI09BVB = J.TI09BVB + S(i).TI09BVB, + J.TI09BVT = J.TI09BVT + S(i).TI09BVT, + J.TI09BFB = J.TI09BFB + S(i).TI09BFB, + J.TI09BFT = J.TI09BFT + S(i).TI09BFT, + J.ROTN = J.ROTN + S(i).ROTN, + J.ROTN50 = J.ROTN50 + S(i).ROTN50, + J.ROTN100 = J.ROTN100 + S(i).ROTN100, + J.RORTD21 = J.RORTD21 + S(i).RORTD21, + J.RORTD11 = J.RORTD11 + S(i).RORTD11, + J.RORTD24 = J.RORTD24 + S(i).RORTD24, + J.RORTD20 = J.RORTD20 + S(i).RORTD20, + J.RORTD19 = J.RORTD19 + S(i).RORTD19, + J.RORTD9 = J.RORTD9 + S(i).RORTD9, + J.RORTD5 = J.RORTD5 + S(i).RORTD5 + WHERE J.AN = S(i).AN + AND J.LUNA = S(i).LUNA + AND J.ID_FACT = S(i).ID_FACT + AND NVL(J.ID_SUCURSALA, -99) = NVL(S(i).ID_SUCURSALA, -99); + + -- Populate SI and SD collections for INSERT and DELETE + FOR i IN 1 .. S.COUNT LOOP + IF SQL%BULK_ROWCOUNT(i) = 0 THEN + -- No row was updated -> need to INSERT + SI.EXTEND; + SI(SI.COUNT) := S(i); + ELSIF tnScrie = pack_contafin.nStergere THEN + -- Row was updated and it's a deletion operation -> candidate for DELETE + SD.EXTEND; + SD(SD.COUNT) := S(i); + END IF; + END LOOP; + + -- BULK INSERT for new rows + IF SI.COUNT > 0 THEN + FORALL i IN 1 .. SI.COUNT + INSERT INTO JC2007 + (AN, + LUNA, + ID_FACT, + NRACT, + SERIE_ACT, + ID_FDOC, + DATAACT, + DATAIREG, + ID_PART, + COD, + TOTCTVA, + TOTFTVATAX, + TOTTVATAX, + TOTNETAX, + RO21B, + RO21T, + RO11B, + RO11T, + RO24B, + RO24T, + RO20B, + RO20T, + RO19BCB, + RO19BCT, + RO19BVB, + RO19BVT, + RO19BFB, + RO19BFT, + RO09BCB, + RO09BCT, + RO09BVB, + RO09BVT, + RO09BFB, + RO09BFT, + RO05B, + RO05T, + RO21NB, + RO21NT, + RO11NB, + RO11NT, + RO24NB, + RO24NT, + RO20NB, + RO20NT, + RO19NB, + RO19NT, + RO9NB, + RO9NT, + RO5NB, + RO5NT, + ROSCN, + FO21B, + FO21T, + FO24B, + FO24T, + FO20B, + FO20T, + FO19BCB, + FO19BCT, + FO19BVB, + FO19BVT, + FO19BFB, + FO19BFT, + XX21TIB, + XX21TIT, + XX11TIB, + XX11TIT, + XX19TIB, + XX19TIT, + XX9TIB, + XX9TIT, + FO09BCB, + FO09BCT, + FO09BVB, + FO09BVT, + FO09BFB, + FO09BFT, + FOSCN, + CE24B, + CE24T, + CE20B, + CE20T, + CE5SB, + CE5ST, + CE9SB, + CE9ST, + CE21SB, + CE21ST, + CE24SB, + CE24ST, + CE20SB, + CE20ST, + CE19SB, + CE19ST, + CEBCB, + CEBCT, + CEBVB, + CEBVT, + CEBVSC, + CEBVN, + CEBFB, + CEBFT, + CEBFSC, + CEBFN, + CE21CTB, + CE21CTT, + CE11CTB, + CE11CTT, + CE19CTB, + CE19CTT, + CE9CTB, + CE9CTT, + CE5CTB, + CE5CTT, + CE21FTB, + CE21FTT, + CE11FTB, + CE11FTT, + CE19FTB, + CE19FTT, + CE9FTB, + CE9FTT, + CE5FTB, + CE5FTT, + TI21B, + TI21T, + TI11B, + TI11T, + TI24B, + TI24T, + TI20B, + TI20T, + TI19BCB, + TI19BCT, + TI19BVB, + TI19BVT, + TI19BFB, + TI19BFT, + TI09BVB, + TI09BVT, + TI09BFB, + TI09BFT, + ROTN, + ROTN50, + ROTN100, + RORTD21, + RORTD11, + RORTD24, + RORTD20, + RORTD19, + RORTD9, + RORTD5, + ID_SUCURSALA) + VALUES + (SI(i).AN, + SI(i).LUNA, + SI(i).ID_FACT, + SI(i).NRACT, + SI(i).SERIE_ACT, + SI(i).ID_FDOC, + SI(i).DATAACT, + SI(i).DATAIREG, + SI(i).ID_PART, + SI(i).COD, + SI(i).TOTCTVA, + SI(i).TOTFTVATAX, + SI(i).TOTTVATAX, + SI(i).TOTNETAX, + (CASE + WHEN NVL(SI(i).RO21B, 0) <> 0 AND NVL(SI(i).RO21NT, 0) <> 0 AND + NVL(SI(i).RO21NT, 0) = NVL(SI(i).RO21T, 0) THEN + NVL(SI(i).RO21NB, 0) + ELSE + NVL(SI(i).RO21B, 0) + END), + SI(i).RO21T, + (CASE + WHEN NVL(SI(i).RO11B, 0) <> 0 AND NVL(SI(i).RO11NT, 0) <> 0 AND + NVL(SI(i).RO11NT, 0) = NVL(SI(i).RO11T, 0) THEN + NVL(SI(i).RO11NB, 0) + ELSE + NVL(SI(i).RO11B, 0) + END), + SI(i).RO11T, + (CASE + WHEN NVL(SI(i).RO24B, 0) <> 0 AND NVL(SI(i).RO24NT, 0) <> 0 AND + NVL(SI(i).RO24NT, 0) = NVL(SI(i).RO24T, 0) THEN + NVL(SI(i).RO24NB, 0) + ELSE + NVL(SI(i).RO24B, 0) + END), + SI(i).RO24T, + (CASE + WHEN NVL(SI(i).RO20B, 0) <> 0 AND NVL(SI(i).RO20NT, 0) <> 0 AND + NVL(SI(i).RO20NT, 0) = NVL(SI(i).RO20T, 0) THEN + NVL(SI(i).RO20NB, 0) + ELSE + NVL(SI(i).RO20B, 0) + END), + SI(i).RO20T, + (CASE + WHEN NVL(SI(i).RO19BCB, 0) <> 0 AND NVL(SI(i).RO19BVB, 0) = 0 AND + NVL(SI(i).RO19BFB, 0) = 0 AND NVL(SI(i).RO19NT, 0) <> 0 AND + NVL(SI(i).RO19NT, 0) = NVL(SI(i).RO19BCT, 0) THEN + NVL(SI(i).RO19NB, 0) + ELSE + NVL(SI(i).RO19BCB, 0) + END), + SI(i).RO19BCT, + (CASE + WHEN NVL(SI(i).RO19BVB, 0) <> 0 AND NVL(SI(i).RO19BFB, 0) = 0 AND + NVL(SI(i).RO19NT, 0) <> 0 AND + NVL(SI(i).RO19NT, 0) = NVL(SI(i).RO19BVT, 0) THEN + NVL(SI(i).RO19NB, 0) + ELSE + NVL(SI(i).RO19BVB, 0) + END), + SI(i).RO19BVT, + (CASE + WHEN NVL(SI(i).RO19BFB, 0) <> 0 AND NVL(SI(i).RO19NT, 0) <> 0 AND + NVL(SI(i).RO19NT, 0) = NVL(SI(i).RO19BFT, 0) THEN + NVL(SI(i).RO19NB, 0) + ELSE + NVL(SI(i).RO19BFB, 0) + END), + SI(i).RO19BFT, + (CASE + WHEN NVL(SI(i).RO09BCB, 0) <> 0 AND NVL(SI(i).RO09BVB, 0) = 0 AND + NVL(SI(i).RO09BFB, 0) = 0 AND NVL(SI(i).RO9NT, 0) <> 0 AND + NVL(SI(i).RO9NT, 0) = NVL(SI(i).RO09BCT, 0) THEN + NVL(SI(i).RO9NB, 0) + ELSE + NVL(SI(i).RO09BCB, 0) + END), + SI(i).RO09BCT, + (CASE + WHEN NVL(SI(i).RO09BVB, 0) <> 0 AND NVL(SI(i).RO09BFB, 0) = 0 AND + NVL(SI(i).RO9NT, 0) <> 0 AND + NVL(SI(i).RO9NT, 0) = NVL(SI(i).RO09BVT, 0) THEN + NVL(SI(i).RO9NB, 0) + ELSE + NVL(SI(i).RO09BVB, 0) + END), + SI(i).RO09BVT, + (CASE + WHEN NVL(SI(i).RO09BFB, 0) <> 0 AND NVL(SI(i).RO9NT, 0) <> 0 AND + NVL(SI(i).RO9NT, 0) = NVL(SI(i).RO09BFT, 0) THEN + NVL(SI(i).RO9NB, 0) + ELSE + NVL(SI(i).RO09BFB, 0) + END), + SI(i).RO09BFT, + (CASE + WHEN NVL(SI(i).RO05B, 0) <> 0 AND NVL(SI(i).RO5NT, 0) <> 0 AND + NVL(SI(i).RO5NT, 0) = NVL(SI(i).RO05T, 0) THEN + NVL(SI(i).RO5NB, 0) + ELSE + NVL(SI(i).RO05B, 0) + END), + SI(i).RO05T, + SI(i).RO21NB, + SI(i).RO21NT, + SI(i).RO11NB, + SI(i).RO11NT, + SI(i).RO24NB, + SI(i).RO24NT, + SI(i).RO20NB, + SI(i).RO20NT, + SI(i).RO19NB, + SI(i).RO19NT, + SI(i).RO9NB, + SI(i).RO9NT, + SI(i).RO5NB, + SI(i).RO5NT, + SI(i).ROSCN, + SI(i).FO21B, + SI(i).FO21T, + SI(i).FO24B, + SI(i).FO24T, + SI(i).FO20B, + SI(i).FO20T, + SI(i).FO19BCB, + SI(i).FO19BCT, + SI(i).FO19BVB, + SI(i).FO19BVT, + SI(i).FO19BFB, + SI(i).FO19BFT, + SI(i).XX21TIB, + SI(i).XX21TIT, + SI(i).XX11TIB, + SI(i).XX11TIT, + SI(i).XX19TIB, + SI(i).XX19TIT, + SI(i).XX9TIB, + SI(i).XX9TIT, + SI(i).FO09BCB, + SI(i).FO09BCT, + SI(i).FO09BVB, + SI(i).FO09BVT, + SI(i).FO09BFB, + SI(i).FO09BFT, + SI(i).FOSCN, + SI(i).CE24B, + SI(i).CE24T, + SI(i).CE20B, + SI(i).CE20T, + SI(i).CE5SB, + SI(i).CE5ST, + SI(i).CE9SB, + SI(i).CE9ST, + SI(i).CE21SB, + SI(i).CE21ST, + SI(i).CE24SB, + SI(i).CE24ST, + SI(i).CE20SB, + SI(i).CE20ST, + SI(i).CE19SB, + SI(i).CE19ST, + SI(i).CEBCB, + SI(i).CEBCT, + SI(i).CEBVB, + SI(i).CEBVT, + SI(i).CEBVSC, + SI(i).CEBVN, + SI(i).CEBFB, + SI(i).CEBFT, + SI(i).CEBFSC, + SI(i).CEBFN, + SI(i).CE21CTB, + SI(i).CE21CTT, + SI(i).CE11CTB, + SI(i).CE11CTT, + SI(i).CE19CTB, + SI(i).CE19CTT, + SI(i).CE9CTB, + SI(i).CE9CTT, + SI(i).CE5CTB, + SI(i).CE5CTT, + SI(i).CE21FTB, + SI(i).CE21FTT, + SI(i).CE11FTB, + SI(i).CE11FTT, + SI(i).CE19FTB, + SI(i).CE19FTT, + SI(i).CE9FTB, + SI(i).CE9FTT, + SI(i).CE5FTB, + SI(i).CE5FTT, + SI(i).TI21B, + SI(i).TI21T, + SI(i).TI11B, + SI(i).TI11T, + SI(i).TI24B, + SI(i).TI24T, + SI(i).TI20B, + SI(i).TI20T, + SI(i).TI19BCB, + SI(i).TI19BCT, + SI(i).TI19BVB, + SI(i).TI19BVT, + SI(i).TI19BFB, + SI(i).TI19BFT, + SI(i).TI09BVB, + SI(i).TI09BVT, + SI(i).TI09BFB, + SI(i).TI09BFT, + SI(i).ROTN, + SI(i).ROTN50, + SI(i).ROTN100, + SI(i).RORTD21, + SI(i).RORTD11, + SI(i).RORTD24, + SI(i).RORTD20, + SI(i).RORTD19, + SI(i).RORTD9, + SI(i).RORTD5, + SI(i).ID_SUCURSALA); + END IF; + + -- BULK DELETE for rows where all values became 0 after UPDATE + -- Only executed when tnScrie = nStergere + IF SD.COUNT > 0 AND tnScrie = pack_contafin.nStergere THEN + FORALL i IN 1 .. SD.COUNT + DELETE FROM JC2007 J + WHERE J.AN = SD(i).AN + AND J.LUNA = SD(i).LUNA + AND J.ID_FACT = SD(i).ID_FACT + AND NVL(J.ID_SUCURSALA, -99) = NVL(SD(i).ID_SUCURSALA, -99) + AND J.TOTCTVA = 0 + AND J.TOTFTVATAX = 0 + AND J.TOTTVATAX = 0 + AND J.TOTNETAX = 0 + AND J.RO24B = 0 + AND J.RO24T = 0 + AND J.RO20B = 0 + AND J.RO20T = 0 + AND J.RO21B = 0 + AND J.RO21T = 0 + AND J.RO11B = 0 + AND J.RO11T = 0 + AND J.RO19BCB = 0 + AND J.RO19BCT = 0 + AND J.RO19BVB = 0 + AND J.RO19BVT = 0 + AND J.RO19BFB = 0 + AND J.RO19BFT = 0 + AND J.RO09BCB = 0 + AND J.RO09BCT = 0 + AND J.RO09BVB = 0 + AND J.RO09BVT = 0 + AND J.RO09BFB = 0 + AND J.RO09BFT = 0 + AND J.RO05B = 0 + AND J.RO05T = 0 + AND J.RO21NB = 0 + AND J.RO21NT = 0 + AND J.RO11NB = 0 + AND J.RO11NT = 0 + AND J.RO24NB = 0 + AND J.RO24NT = 0 + AND J.RO20NB = 0 + AND J.RO20NT = 0 + AND J.RO19NB = 0 + AND J.RO19NT = 0 + AND J.RO9NB = 0 + AND J.RO9NT = 0 + AND J.RO5NB = 0 + AND J.RO5NT = 0 + AND J.ROSCN = 0 + AND J.FO21B = 0 + AND J.FO21T = 0 + AND J.FO24B = 0 + AND J.FO24T = 0 + AND J.FO20B = 0 + AND J.FO20T = 0 + AND J.FO19BCB = 0 + AND J.FO19BCT = 0 + AND J.FO19BVB = 0 + AND J.FO19BVT = 0 + AND J.FO19BFB = 0 + AND J.FO19BFT = 0 + AND J.XX21TIB = 0 + AND J.XX21TIT = 0 + AND J.XX11TIB = 0 + AND J.XX11TIT = 0 + AND J.XX19TIB = 0 + AND J.XX19TIT = 0 + AND J.XX9TIB = 0 + AND J.XX9TIT = 0 + AND J.FO09BCB = 0 + AND J.FO09BCT = 0 + AND J.FO09BVB = 0 + AND J.FO09BVT = 0 + AND J.FO09BFB = 0 + AND J.FO09BFT = 0 + AND J.FOSCN = 0 + AND J.CE24B = 0 + AND J.CE24T = 0 + AND J.CE20B = 0 + AND J.CE20T = 0 + AND J.CE5SB = 0 + AND J.CE5ST = 0 + AND J.CE9SB = 0 + AND J.CE9ST = 0 + AND J.CE21SB = 0 + AND J.CE21ST = 0 + AND J.CE24SB = 0 + AND J.CE24ST = 0 + AND J.CE20SB = 0 + AND J.CE20ST = 0 + AND J.CE19SB = 0 + AND J.CE19ST = 0 + AND J.CEBCB = 0 + AND J.CEBCT = 0 + AND J.CEBVB = 0 + AND J.CEBVT = 0 + AND J.CEBVSC = 0 + AND J.CEBVN = 0 + AND J.CEBFB = 0 + AND J.CEBFT = 0 + AND J.CEBFSC = 0 + AND J.CEBFN = 0 + AND J.CE21CTB = 0 + AND J.CE21CTT = 0 + AND J.CE11CTB = 0 + AND J.CE11CTT = 0 + AND J.CE19CTB = 0 + AND J.CE19CTT = 0 + AND J.CE9CTB = 0 + AND J.CE9CTT = 0 + AND J.CE5CTB = 0 + AND J.CE5CTT = 0 + AND J.CE21FTB = 0 + AND J.CE21FTT = 0 + AND J.CE11FTB = 0 + AND J.CE11FTT = 0 + AND J.CE19FTB = 0 + AND J.CE19FTT = 0 + AND J.CE9FTB = 0 + AND J.CE9FTT = 0 + AND J.CE5FTB = 0 + AND J.CE5FTT = 0 + AND J.TI21B = 0 + AND J.TI21T = 0 + AND J.TI11B = 0 + AND J.TI11T = 0 + AND J.TI24B = 0 + AND J.TI24T = 0 + AND J.TI20B = 0 + AND J.TI20T = 0 + AND J.TI19BCB = 0 + AND J.TI19BCT = 0 + AND J.TI19BVB = 0 + AND J.TI19BVT = 0 + AND J.TI19BFB = 0 + AND J.TI19BFT = 0 + AND J.TI09BVB = 0 + AND J.TI09BVT = 0 + AND J.TI09BFB = 0 + AND J.TI09BFT = 0 + AND J.ROTN = 0 + AND J.ROTN50 = 0 + AND J.ROTN100 = 0; + END IF; + END; + + <> + null; + end SCRIE_JC_2007; + + ------------------------------------------------------------------- + -- COMPLETARE JV2007 CU ID_SET 10616 STORNARE PLATA/INCASARE + ------------------------------------------------------------------- + Procedure COMPLETEAZA_JV_2007(tnAn IN JV2007.AN%TYPE, + tnLuna IN JV2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2) is + lcMerge VARCHAR2(32000); + begin + lcMerge := 'MERGE INTO JV2007 A ' || + 'USING (select :1 as an, + :2 as luna, + dataact, + dataireg, + nract, + id_part, + id_fdoc, + totctva, + cod, + serie_act, + id_sucursala, + id_fact, + totftvatax, + tottvatax, + totnetax + from (select row_number() over(partition by a1.id_fact order by a1.an desc, a1.luna desc) as nrcrt, + a1.* + from jv2007 a1 + where a1.id_Fact in (select distinct a2.id_factc + from ' || tcTabelSursa || + ' a2 left join documente b2 on a2.id_factc = b2.id_doc + where a2.id_set = 10616 + and a2.an = :3 + and a2.luna = :4 + and a2.sters = 0 + and a2.id_factc <> 0 + and NVL(b2.tva_incasare,0) = 1 ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ') + ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A1.') || + ') where nrcrt = 1 + and an * 12 + luna <> :5 * 12 + :6) B ' || + 'ON (A.AN = B.AN AND A.LUNA = B.LUNA AND A.ID_FACT = B.ID_FACT AND NVL(A.ID_SUCURSALA,-99)=NVL(B.ID_SUCURSALA,-99)) ' || + 'WHEN NOT MATCHED THEN ' || + 'insert (an,luna,dataact,dataireg,nract,id_part,id_fdoc,totctva,cod,serie_act,id_sucursala,id_fact,totftvatax,tottvatax,totnetax) ' || + 'values (b.an,b.luna,b.dataact,b.dataireg,b.nract,b.id_part,b.id_fdoc,b.totctva,b.cod,b.serie_act,b.id_sucursala,b.id_fact,b.totftvatax,b.tottvatax,b.totnetax)'; + + execute immediate lcMerge + using tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + + end COMPLETEAZA_JV_2007; + + ------------------------------------------------------------------- + -- COMPLETARE JC2007 CU ID_SET 10616 STORNARE PLATA/INCASARE + ------------------------------------------------------------------- + Procedure COMPLETEAZA_JC_2007(tnAn IN JC2007.AN%TYPE, + tnLuna IN JC2007.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2) is + lcMerge VARCHAR2(32000); + begin + lcMerge := 'MERGE INTO JC2007 A ' || + 'USING (select :1 as an, + :2 as luna, + dataact, + dataireg, + nract, + id_part, + id_fdoc, + totctva, + cod, + serie_act, + id_sucursala, + id_fact, + totftvatax, + tottvatax, + totnetax + from (select row_number() over(partition by a1.id_fact order by a1.an desc, a1.luna desc) as nrcrt, + a1.* + from jc2007 a1 + where a1.id_Fact in (select distinct a2.id_factd + from ' || tcTabelSursa || + ' a2 left join documente b2 on a2.id_factd = b2.id_doc + where a2.id_set = 10616 + and a2.an = :3 + and a2.luna = :4 + and a2.sters = 0 + and a2.id_factd <> 0 + and NVL(b2.tva_incasare,0) = 1 ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ') + ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A1.') || + ') where nrcrt = 1 + and an * 12 + luna <> :5 * 12 + :6) B ' || + 'ON (A.AN = B.AN AND A.LUNA = B.LUNA AND A.ID_FACT = B.ID_FACT AND NVL(A.ID_SUCURSALA,-99)=NVL(B.ID_SUCURSALA,-99)) ' || + 'WHEN NOT MATCHED THEN ' || + 'insert (an,luna,dataact,dataireg,nract,id_part,id_fdoc,totctva,cod,serie_act,id_sucursala,id_fact,totftvatax,tottvatax,totnetax) ' || + 'values (b.an,b.luna,b.dataact,b.dataireg,b.nract,b.id_part,b.id_fdoc,b.totctva,b.cod,b.serie_act,b.id_sucursala,b.id_fact,b.totftvatax,b.tottvatax,b.totnetax)'; + + execute immediate lcMerge + using tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + end COMPLETEAZA_JC_2007; + ----------------------------------------------------------------------- + Procedure COMPLETEAZA_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcTabelSursa IN VARCHAR2, + tcCondSucursala IN VARCHAR2, + tcCondInPlus IN VARCHAR2, + tcCont IN VARCHAR2, + tnIdPart IN NUMBER) is + ldDataNull DATE := TO_DATE('19700101', 'YYYYMMDD'); + lcMerge VARCHAR2(32000); + begin + -- conditia de la ON e luata de la incasari + -- inregistrarile vechi din IREG_PARTENERI le iau in functie de ID_FACTC/ID_FACTD pentru ca, + -- atunci cand a fost ales documentul pereche pe nota initiala, ID_FACT-ul respectiv exista in IREG_PARTENERI, indiferent daca + -- refacerea s-a facut dupa numar act sau id_fact + lcMerge := 'MERGE INTO IREG_PARTENERI I ' || 'USING ' || + '(select id_sucursala, + :1 as an, + :2 as luna, + cont, + acont, + id_part, + id_valuta, + id_fact, + id_fdoc, + id_lucrare, + id_set, + id_ctr, + id_jtva_coloana, + id_venchelt, + proc_tva, + curs, + dataact, + dataireg, + datascad, + nract, + serie_act, + id_responsabil, + cod, + explicatia, + explicatia4, + explicatia5, + precdeb + debit as precdeb, + preccred + credit as preccred, + precvaldeb + valdebit as precvaldeb, + precvalcred + valcredit as precvalcred + from (select row_number() over(partition by a1.id_fact order by a1.an desc, a1.luna desc) as nrcrt, + a1.* + from ireg_parteneri a1 + where a1.id_Fact in + (select distinct id_factc + from ' || tcTabelSursa || ' a2 + WHERE A2.AN = :3 + and A2.LUNA = :4 + and A2.STERS = 0 + and A2.ID_SET = 10616 + and A2.SCC = :5 + and NVL(A2.ID_FACTC,0) <> 0 + and NVL2(:6,A2.ID_PARTC,-1) = NVL(:7,-1) ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ' + UNION ALL + select distinct id_factd + from ' || tcTabelSursa || ' a2 + WHERE A2.AN = :8 + and A2.LUNA = :9 + and A2.STERS = 0 + and A2.ID_SET = 10616 + and A2.SCD = :10 + and NVL(A2.ID_FACTD,0) <> 0 + and NVL2(:11,A2.ID_PARTD,-1) = NVL(:12,-1) ' || + REPLACE(tcCondSucursala, 'ALIAS.', 'A2.') || ') + and A1.cont = :13 + and A1.dataact is not null + and A1.an * 12 + A1.luna < :14 * 12 + :15) + where nrcrt = 1) S ' || + 'ON (I.AN = S.AN AND I.LUNA = S.LUNA AND I.CONT = S.CONT AND NVL(I.ACONT, ''XXXX'') = NVL(S.ACONT, ''XXXX'') AND +NVL(I.NRACT,0) = NVL(S.NRACT,0) AND NVL(I.SERIE_ACT,''+_'')=NVL(S.SERIE_ACT,''+_'') AND NVL(I.DATAACT,:16) = NVL(S.DATAACT,:17) AND +NVL(I.DATAIREG,:18) = NVL(S.DATAIREG,:19) AND NVL(I.DATASCAD,:20) = NVL(S.DATASCAD,:21) AND +NVL(I.ID_PART,0) = NVL(S.ID_PART,0) AND NVL(I.ID_VALUTA,0) = NVL(S.ID_VALUTA,0) AND NVL(I.ID_SUCURSALA,0) = NVL(S.ID_SUCURSALA,0) ' || + tcCondInPlus || ')' || 'WHEN NOT MATCHED THEN ' || + 'INSERT (id_sucursala, an, luna, cont, acont, id_part, id_valuta,' || + 'id_fact, id_fdoc, id_lucrare, id_set, id_ctr, id_jtva_coloana,' || + 'id_venchelt, proc_tva, curs, dataact, dataireg, datascad, nract,serie_act,' || + 'id_responsabil, cod, explicatia, explicatia4, explicatia5,' || + 'precdeb, preccred, precvaldeb, precvalcred)' || + 'VALUES (S.id_sucursala, S.an, S.luna, S.cont, S.acont, S.id_part, S.id_valuta,' || + 'S.id_fact, S.id_fdoc, S.id_lucrare, S.id_set, S.id_ctr, S.id_jtva_coloana,' || + 'S.id_venchelt, S.proc_tva, S.curs, S.dataact, S.dataireg, S.datascad, S.nract, S.serie_act,' || + 'S.id_responsabil, S.cod, S.explicatia, S.explicatia4, S.explicatia5,' || + 'S.precdeb, S.preccred, S.precvaldeb, S.precvalcred)'; + + --pinfo(lcMerge, 'CompleteazaIregPart'); + + execute immediate lcMerge + using tnAn, tnLuna, tnAn, tnLuna, tcCont, tnIdPart, tnIdPart, tnAn, tnLuna, tcCont, tnIdPart, tnIdPart, tcCont, tnAn, tnLuna, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull; + end COMPLETEAZA_IREG_PARTENERI; + ----------------------------------------------------------------------- + FUNCTION VERIFICA_NOTE_CONTABILE(tlVerificAnalitic IN NUMBER) RETURN NUMBER IS + V_TOTAL NUMBER(10); + BEGIN + V_TOTAL := 0; + select sum(completare_partener + + DECODE(tlVerificAnalitic, 1, completare_analitic, 0) + + completare_pereche) as total + INTO V_TOTAL + from (select a.cont, + a.id_part, + a.analitic, + a.pereche, + a.cont_p, + a.cont_d, + b.cont as contpart, + b.fel_cont, + b.cu_inregistrari, + b.explicatie as explic_cont, + c.cont_c as exceptie, + c.debit as pozitie, + c.invers, + c1.lista, + NVL2(b.cont, decode(a.id_part, 0, 1, 0), 0) as completare_partener, + NVL2(d.cont, NVL2(a.analitic, 0, 1), 0) as completare_analitic, + NVL2(b.cont, + decode(a.cont_d, + 1, + (case + when a.pereche = 0 and b.cu_inregistrari = 1 and + b.fel_cont = 1 then + (case + when instr(c1.lista, a.cont_p) > 0 and c.debit = 0 and + c.invers = 1 then + 0 + else + 1 + end) + else + 0 + end), + 0, + (case + when a.pereche = 0 and b.cu_inregistrari = 1 and + b.fel_cont = 0 then + (case + when instr(c1.lista, a.cont_p) > 0 and c.debit = 1 and + c.invers = 1 then + 0 + else + 1 + end) + else + 0 + end)), + 0) as completare_pereche + from (select distinct scd as cont, + id_partd as id_part, + ascd as analitic, + pereched as pereche, + scc as cont_p, + 1 as cont_d + from act_temp + where sters = 0 + and scd is not null + and suma <> 0 + union all + select distinct scc as cont, + id_partc as id_part, + ascc as analitic, + perechec as pereche, + scd as cont_p, + 0 as cont_d + from act_temp + where sters = 0 + and scc is not null + and suma <> 0) a + left join vcoresp_tip_cont b + on a.cont = b.cont + left join exceptii_ireg c + on b.cont = c.cont + and c.invers = 1 + left join (select cont, stringagg(cont_c) as lista + from exceptii_ireg + where invers = 1 + group by cont) c1 + on b.cont = c1.cont + left join (select distinct cont + from vplcont_analitic + where inactiv = 0 + and an = pack_sesiune.getan()) d + on a.cont = d.cont); + + RETURN V_TOTAL; + END VERIFICA_NOTE_CONTABILE; + -------------------------------------------------------------------------- + --------------------------------------------------------------------------------------- + PROCEDURE SCRIE_IN_BALANTA(tcS in varchar2, + tnAn in BAL.AN%TYPE, + tnLuna in BAL.LUNA%TYPE, + tnScrie in number) IS + lnScrie NUMBER(1); -- 0/2 = SCRIERE/STERGERE; 1 = REFACERE + lcAct VARCHAR2(100); + lcMerge VARCHAR2(10000); + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + lnScrie := NVL(tnScrie, 0); + IF lnScrie = pack_contafin.nRefacere then + lcAct := 'ACT'; + ELSE + lcAct := 'ACT_TEMP'; + END IF; + + -- BALANTA SINTETICA + lcMerge := 'MERGE INTO BAL B + USING (SELECT ID_SUCURSALA, CONT, SUM(DEBIT) AS DEBIT, SUM(CREDIT) AS CREDIT + FROM (SELECT ID_SUCURSALA, scd as cont, + sum(suma) as DEBIT, + sum(0.0000) AS CREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + AND AN = :1 + AND LUNA = :2 + AND SCD IS NOT NULL ' || + lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCD + UNION ALL + SELECT ID_SUCURSALA, scc as cont, + sum(0.0000) AS DEBIT, + sum(suma) as CREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + AND AN = :3 + AND LUNA = :4 + AND SCC IS NOT NULL ' || + lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCC) + GROUP BY ID_SUCURSALA, CONT) A + ON (B.AN = :5 AND B.LUNA = :6 AND NVL(B.CONT, ''XXXX'') = NVL(A.CONT, ''XXXX'') + AND NVL(B.id_sucursala,0) = NVL(A.id_sucursala,0)) + WHEN MATCHED THEN + UPDATE + SET B.RULDEB = B.RULDEB + A.DEBIT, + B.RULCRED = B.RULCRED + A.CREDIT + WHEN NOT MATCHED THEN + INSERT + (ID_SUCURSALA, AN, LUNA, CONT, RULDEB, RULCRED) + VALUES + (A.ID_SUCURSALA, :7, :8, A.CONT, A.DEBIT, A.CREDIT)'; + + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + + -- BALANTA ANALITICA + lcMerge := 'MERGE INTO BALANA B + USING +(SELECT ID_SUCURSALA, CONT, ACONT, SUM(DEBIT) AS DEBIT, SUM(CREDIT) AS CREDIT + FROM (SELECT ID_SUCURSALA, scd as cont, ascd as acont, sum(suma) as DEBIT, sum(0.0000) AS CREDIT + FROM ' || lcAct || ' WHERE STERS = 0 AND SCD IS NOT NULL AND ASCD IS NOT NULL AND AN = :1 + AND LUNA = :2 ' || lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCD, ASCD + UNION ALL + SELECT ID_SUCURSALA, scc as cont, ascc as acont, sum(0.0000) AS DEBIT, sum(suma) as CREDIT + FROM ' || lcAct || ' WHERE STERS = 0 AND SCC IS NOT NULL AND ASCC IS NOT NULL AND AN = :3 + AND LUNA = :4 ' || lcWhereSucursale || ' + GROUP BY ID_SUCURSALA, SCC, ASCC) + GROUP BY ID_SUCURSALA, CONT, ACONT) A + ON (B.AN = :5 AND B.LUNA = :6 AND NVL(B.CONT,''XXXX'') = NVL(A.CONT,''XXXX'') AND NVL(B.ACONT,''XXXX'') = NVL(A.ACONT,''XXXX'') + AND NVL(B.id_sucursala,0) = NVL(A.id_sucursala,0)) + WHEN MATCHED THEN + UPDATE SET B.RULDEB = B.RULDEB + A.DEBIT, B.RULCRED = B.RULCRED + A.CREDIT + WHEN NOT MATCHED THEN + INSERT (ID_SUCURSALA, AN, LUNA, CONT, ACONT, RULDEB, RULCRED) + VALUES (A.ID_SUCURSALA, :7, :8, A.CONT, A.ACONT, A.DEBIT, A.CREDIT)'; + + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + + END SCRIE_IN_BALANTA; + + --------------------------------------------------------------- + + PROCEDURE SCRIE_IN_BALANTA_PARTENERI(tcs in varchar2, + tnAn in BALANTA_PARTENERI.AN%TYPE, + tnLuna in BALANTA_PARTENERI.LUNA%TYPE, + tcCont in BALANTA_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in BALANTA_PARTENERI.ID_PART%TYPE DEFAULT NULL) IS + lnScrie NUMBER(1); -- 0/2 = SCRIERE/STERGERE; 1 = REFACERE + lcAct VARCHAR2(100); + lcMerge VARCHAR2(10000); + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + lcUpdWherePartD varchar2(1000); + lcUpdWherePartC varchar2(1000); + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and id_sucursala = ' || lnIdSucursala; + end if; + + -- 30.06.2011 + if tnIdPart is not null then + lcUpdWherePartD := ' and id_partd = ' || tnIdPart; + lcUpdWherePartC := ' and id_partc = ' || tnIdPart; + end if; + -- 30.06.2011 ^ + + lnScrie := NVL(tnScrie, 0); + IF lnScrie = pack_contafin.nRefacere then + lcAct := 'ACT'; + ELSE + lcAct := 'ACT_TEMP'; + END IF; + + -- id_set 77772, 77773, 77774 - note reglare denominare 01-07-2005 + lcMerge := 'MERGE INTO BALANTA_PARTENERI B + USING (SELECT J.ID_SUCURSALA, + J.CONT, + J.ACONT, + J.ID_PART, + J.ID_VALUTA, + SUM(J.DEBIT) AS DEBIT, + SUM(J.CREDIT) AS CREDIT, + SUM(J.VALDEBIT) AS VALDEBIT, + SUM(J.VALCREDIT) AS VALCREDIT + FROM (SELECT ID_SUCURSALA, + scd as cont, + ascd as acont, + id_partd as id_part, + id_valuta, + sum(suma) as DEBIT, + 0.0000 AS CREDIT, + sum(suma_val) as VALDEBIT, + 0.0000 AS VALCREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + and scd is not null + AND AN = :1 + AND LUNA = :2 ' || lcUpdWherePartD || + lcWhereSucursale || case + when tcCont is not null then + 'AND scd = :3' + else + '' + end || ' AND ID_SET NOT IN (77772, 77773, 77774) + GROUP BY ID_SUCURSALA, SCD, ASCD, ID_PARTD, ID_VALUTA + UNION ALL + SELECT ID_SUCURSALA, scc as cont, + ascc as acont, + id_partc as id_part, + id_valuta, + 0.0000 AS DEBIT, + sum(suma) as CREDIT, + 0.0000 AS VALDEBIT, + sum(suma_val) as VALCREDIT + FROM ' || lcAct || + ' WHERE STERS = 0 + and scc is not null + AND AN = :4 + AND LUNA = :5 ' || lcUpdWherePartC || + lcWhereSucursale || case + when tcCont is not null then + 'AND scc = :6' + else + '' + end || ' AND ID_SET NOT IN (77772, 77773, 77774) + GROUP BY ID_SUCURSALA, SCC, ASCC, ID_PARTC, ID_VALUTA ) J join config_cont_ireg CI on J.cont=CI.cont + GROUP BY J.ID_SUCURSALA, J.CONT, J.ACONT, J.ID_PART, J.ID_VALUTA) A + ON (B.AN = :7 AND B.LUNA = :8 AND NVL(B.CONT, ''XXXX'') = NVL(A.CONT, ''XXXX'') + AND NVL(B.ACONT, ''XXXX'') = NVL(A.ACONT, ''XXXX'') AND B.ID_PART = A.ID_PART + AND B.ID_VALUTA = A.ID_VALUTA + AND NVL(B.id_sucursala,0) = NVL(A.id_sucursala,0)) + WHEN MATCHED THEN + UPDATE + SET B.DEBIT = B.DEBIT + A.DEBIT, + B.CREDIT = B.CREDIT + A.CREDIT, + B.VALDEBIT = B.VALDEBIT + A.VALDEBIT, + B.VALCREDIT = B.VALCREDIT + A.VALCREDIT + WHEN NOT MATCHED THEN + INSERT + (ID_SUCURSALA, + AN, + LUNA, + CONT, + ACONT, + ID_PART, + ID_VALUTA, + DEBIT, + CREDIT, + VALDEBIT, + VALCREDIT) + VALUES + (A.ID_SUCURSALA, + :9, + :10, + A.CONT, + A.ACONT, + A.ID_PART, + A.ID_VALUTA, + A.DEBIT, + A.CREDIT, + A.VALDEBIT, + A.VALCREDIT)'; + + if tcCont is not null then + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tcCont, tnAn, tnLuna, tcCont, tnAn, tnLuna, tnAn, tnLuna; + else + EXECUTE IMMEDIATE lcMerge + USING tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna, tnAn, tnLuna; + end if; + + END SCRIE_IN_BALANTA_PARTENERI; + + PROCEDURE SCRIE_IN_IREG_PARTENERI(tnAn in IREG_PARTENERI.AN%TYPE, + tnLuna in IREG_PARTENERI.LUNA%TYPE, + tcCont in IREG_PARTENERI.CONT%TYPE, + tnScrie in number, + tnIdPart in IREG_PARTENERI.ID_PART%TYPE DEFAULT NULL) IS + lnScrie NUMBER(1); -- 0/2 = SCRIERE/STERGERE; 1 = REFACERE + lcAct VARCHAR2(100); + lcMerge VARCHAR2(32000); + + lcRefacereNumarAct OPTIUNI.VARVALUE%Type; + lnRefacereNumarAct number(10) := 0; + lnFelCont CONFIG_CONT_IREG.FEL_CONT%TYPE; + lnCuInregistrari CONFIG_CONT_IREG.CU_INREGISTRARI%TYPE; + lnCuVenchelt CONFIG_CONT_IREG.CU_VENCHELT%TYPE; + lnCuProcTva CONFIG_CONT_IREG.CU_PROC_TVA%TYPE; + lcCondInPlus VARCHAR2(1000); + lcSelInPlus VARCHAR2(1000); + lcGrupInPlus VARCHAR2(1000); + lcInsertColInPlus VARCHAR2(1000); + lcInsertValInPlus VARCHAR2(1000); + tcAcontNull VARCHAR2(4) := 'XXXX'; + ldDataNull DATE := TO_DATE('19700101', 'YYYYMMDD'); + lnIdSucursala act.id_sucursala%type; + lcWhereSucursale varchar2(1000); + lcUpdWherePartAct varchar2(1000); + lcUpdWherePart varchar2(1000); + BEGIN + + lnIdSucursala := PACK_CONTAFIN.GET_ID_SUCURSALA(); + if lnIdSucursala is not null then + lcWhereSucursale := ' and ALIAS.id_sucursala = ' || lnIdSucursala; + end if; + + -- 30.06.2011 + if tnIdPart is not null then + lcUpdWherePartAct := ' and (ALIAS.id_partd = ' || tnIdPart || + ' OR ALIAS.id_partc = ' || tnIdPart || ')'; + lcUpdWherePart := ' and ALIAS.id_part = ' || tnIdPart; + end if; + -- 30.06.2011 ^ + + lnScrie := NVL(tnScrie, 0); + IF lnScrie = 1 then + lcAct := 'ACT'; + ELSE + lcAct := 'ACT_TEMP'; + END IF; + + -- folosesc imperecherea de inregistrari dupa numar act sau id_fact + lcRefacereNumarAct := PACK_SESIUNE.getOptiuneFirma('REFACERENUMARACT'); + IF lcRefacereNumarAct IS NULL THEN + lnRefacereNumarAct := 0; + ELSE + lnRefacereNumarAct := to_number(lcRefacereNumarAct); + END IF; + + -- felul contului; + begin + SELECT C.FEL_CONT, C.CU_INREGISTRARI, C.CU_VENCHELT, C.CU_PROC_TVA + INTO lnFelCont, lnCuInregistrari, lnCuVenchelt, lnCuProcTva + FROM VCONFIG_CONT_IREG C + WHERE CONT = tcCont + AND CU_INREGISTRARI = 1; + exception + when no_data_found then + lnCuInregistrari := 0; + end; + + IF lnCuInregistrari = 0 THEN + GOTO EndProc; + END IF; + -- IMPERECHERE DUPA ID_FACT + IF lnRefacereNumarAct = 0 THEN + lcCondInPlus := lcCondInPlus || ' AND I.ID_FACT = S.ID_FACT '; + lcSelInPlus := lcSelInPlus || ', ID_FACT '; + lcGrupInPlus := lcGrupInPlus || ', ID_FACT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_FACT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_FACT '; + ELSE + lcSelInPlus := lcSelInPlus || ', MAX(ID_FACT) AS ID_FACT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_FACT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_FACT '; + END IF; + -- GRUPARE DUPA TIP VENIT/CHELTUIALA + IF lnCuVenchelt = 1 THEN + lcCondInPlus := lcCondInPlus || + ' AND I.ID_VENCHELT = S.ID_VENCHELT '; + lcSelInPlus := lcSelInPlus || ', ID_VENCHELT '; + lcGrupInPlus := lcGrupInPlus || ',ID_VENCHELT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_VENCHELT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_VENCHELT '; + ELSE + lcSelInPlus := lcSelInPlus || + ', MAX(ID_VENCHELT) AS ID_VENCHELT '; + lcInsertColInPlus := lcInsertColInPlus || ', ID_VENCHELT '; + lcInsertValInPlus := lcInsertValInPlus || ', S.ID_VENCHELT '; + END IF; + -- GRUPARE DUPA PROCENT TVA/ID_JTVA + IF lnCuProcTva = 1 THEN + -- LA INREGISTRAREA 408 AM ID_JTVA_COLOANA RO09BFB, RO09BVB...., IAR LA REGULARIZARE 408 POT SA AM RO09NB (TVA INCASARE NEEXIGIBIL) + -- SI NU SE MAI PUPA INREGISTRARILE SI DUPA ID_JTVA_COLOANA + -- INCERC SA LE PUP DOAR DUPA PROC_TVA (STIU CA POATE SA SARA IN AER) :) + -- lcCondInPlus := lcCondInPlus || ' AND NVL(I.PROC_TVA,0) = NVL(S.PROC_TVA,0) AND NVL(I.ID_JTVA_COLOANA,0) = NVL(S.ID_JTVA_COLOANA,0) '; + lcCondInPlus := lcCondInPlus || + ' AND NVL(I.PROC_TVA,0) = NVL(S.PROC_TVA,0) '; + lcSelInPlus := lcSelInPlus || + ', PROC_TVA, MAX(ID_JTVA_COLOANA) AS ID_JTVA_COLOANA'; + lcGrupInPlus := lcGrupInPlus || ', PROC_TVA '; + lcInsertColInPlus := lcInsertColInPlus || + ', PROC_TVA, ID_JTVA_COLOANA '; + lcInsertValInPlus := lcInsertValInPlus || + ', S.PROC_TVA, S.ID_JTVA_COLOANA '; + END IF; + + pack_contafin.COMPLETEAZA_IREG_PARTENERI(tnAn, + tnLuna, + lcAct, + lcWhereSucursale, + lcCondInPlus, + tcCont, + tnIdPart); + -- SELECTEZ TOATE FACTURILE DIN REGISTRUL JURNAL + -- (CONTUL ESTE PE DEBIT SI ESTE ACTIV SAU + -- CONTUL ESTE PE CREDIT SI ESTE ACTIV SI ESTE EXCEPTIE SAU REEVALUARE IN VALUTA ETC. + -- NU ESTE 4111 = 4427 CU PERECHED SAU ID_FACTD COMPLETAT (REGULARIZARE AVANS) 419 = 4111; 4111 = 4427) + + -- INVERSEZ SUME, CONTURI, PARTENERI PENTRU EXCEPTII SI REEVALUARE IN VALUTA + -- GRUPEZ DUPA NRACT, DATACT ETC. + -- MERGE IN IREG_PARTENERI + -- WHEN MATCHED : ACTUALIZEZ SUMELE SI CURSUL VALUTAR PENTRU REEVALUARE SOLDURI IN VALUTA + -- : STERG LINIA DACA OPERATIA ESTE STERGERE SI AM NUMAI ZERO-URI + -- WHEN NOT MATCHED : ADAUG LINIE IN IREG_PARTENERI + + -- ID_SET = 90501 : REEVALUARE SOLDURI IN VALUTA LA 31.12.XXXX + -- A.ID_SET NOT IN (77771,77772,77773,77774) : NOTE REGULARIZARE DENOMINARE - AFECTEAZA DOAR BALANTA DE VERIFICARE + + lcMerge := 'MERGE INTO IREG_PARTENERI I USING (SELECT an, + luna, + cont, + acont, + nract, + serie_act, + dataact, + dataireg, + MAX(datascad) AS DATASCAD, + id_part, + id_valuta, + id_sucursala, + SUM(debit) AS DEBIT, + SUM(credit) AS CREDIT, + SUM(valdebit) AS VALDEBIT, + SUM(valcredit) AS VALCREDIT, + max(curs) as curs, + max(id_fdoc) as id_fdoc, + max(id_lucrare) as id_lucrare, + max(id_set) as id_set, + max(id_ctr) as id_ctr, + max(id_responsabil) as id_responsabil, + max(cod) as cod, + max(explicatia) as explicatia, + max(explicatia4) as explicatia4, + max(explicatia5) as explicatia5 ' || lcSelInPlus || + ' FROM (SELECT A.AN, + A.LUNA, + A.COD, + A.NRACT, + A.SERIE_ACT, + TRUNC(A.DATAACT) AS DATAACT, + TRUNC(A.DATASCAD) AS DATASCAD, + TRUNC(A.DATAIREG) AS DATAIREG, + :1 AS CONT, + (CASE + WHEN ((A.SCD = :2 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :3 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN A.ASCC ELSE A.ASCD END + ELSE CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN A.ASCD ELSE A.ASCC END + END) AS ACONT, + (CASE + WHEN ((A.SCD = :4 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :5 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA ELSE SUMA END + ELSE 0.00 + END) AS DEBIT, + (CASE + WHEN ((A.SCC = :6 AND CC.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCD = :7 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA ELSE SUMA END + ELSE 0.00 + END) AS CREDIT, + (CASE + WHEN ((A.SCD = :8 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :9 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1 )) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA_VAL ELSE SUMA_VAL END + ELSE 0.00 + END) AS VALDEBIT, + (CASE + WHEN ((A.SCC = :10 AND CC.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCD = :11 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1)) + THEN CASE WHEN NVL(E.EXCEPTIE,0) = 1 THEN -SUMA_VAL ELSE SUMA_VAL END + ELSE 0.00 + END) AS VALCREDIT, + (CASE + WHEN (A.SCD = :12 AND CD.FEL_CONT IN (0,2)) OR + (A.SCD = :13 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1) + THEN ID_PARTD + WHEN (A.SCC = :14 AND CC.FEL_CONT IN (1,2)) OR + (A.SCC = :15 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1) + THEN ID_PARTC + ELSE 0 + END) ID_PART, + A.ID_FACT, + A.ID_FDOC, + A.ID_VALUTA, + A.ID_SUCURSALA, + A.ID_CTR, + A.ID_LUCRARE, + A.ID_RESPONSABIL, + A.ID_SET, + A.ID_VENCHELT, + NVL(T.ID_BAZA, A.ID_JTVA_COLOANA) AS ID_JTVA_COLOANA, + A.PROC_TVA, + A.CURS, + A.explicatia, + A.explicatia4, + A.explicatia5 + FROM ' || lcAct || ' A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS SCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND CONT = ''' || tcCont || + ''') E ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN CONFIG_CONT_IREG CD ON A.SCD = CD.CONT + LEFT JOIN CONFIG_CONT_IREG CC ON A.SCC = CC.CONT + LEFT JOIN (select id_jtva_coloana, + connect_by_root id_jtva_coloana as id_baza + from jtva_coloane + where level > 1 + start with id_tva is not null + connect by prior id_tva = id_jtva_coloana) T ON A.ID_JTVA_COLOANA = T.ID_JTVA_COLOANA + WHERE A.AN = :16 + and A.LUNA = :17 + and A.STERS = 0 ' || + REPLACE(lcWhereSucursale, 'ALIAS.', 'A.') || + REPLACE(lcUpdWherePartAct, 'ALIAS.', 'A.') || ' + AND A.ID_SET NOT IN (77771,77772,77773,77774, 90501) ' || CASE + WHEN tcCont = '4111' THEN + ' AND NOT (A.SCD = ''4111'' AND A.SCC = ''4427'' AND (NVL(PERECHED,0) <> 0 OR NVL(ID_FACTD,0)<>0)) + AND NOT (A.SCD = ''419'' AND A.SCC = ''4111'' AND (NVL(ID_FACTD,0) <> 0 AND NVL(ID_FACTC,0)<>0))' + ELSE + '' + END || ' AND ((A.SCD = :18 AND CD.FEL_CONT IN (0,2) AND NVL(A.ID_FACTD,0) = 0) OR + (A.SCC = :19 AND CC.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 1) OR + (A.SCC = :20 AND CC.FEL_CONT IN (1,2) AND NVL(A.ID_FACTC,0) = 0) OR + (A.SCD = :21 AND CD.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 1))) + group by an, + luna, + cont, + acont, + nract, + serie_act, + dataact, + dataireg, + id_part, + id_valuta, id_sucursala ' || lcGrupInPlus || ') S +ON (I.AN = :22 AND I.LUNA = :23 AND I.CONT = :24 AND NVL(I.ACONT, :25) = NVL(S.ACONT, :26) AND +NVL(I.NRACT,0) = NVL(S.NRACT,0) AND NVL(I.SERIE_ACT,''+_'')=NVL(S.SERIE_ACT,''+_'') AND NVL(I.DATAACT,:27) = NVL(S.DATAACT,:28) AND +NVL(I.DATAIREG,:29) = NVL(S.DATAIREG,:30) AND NVL(I.DATASCAD,:31) = NVL(S.DATASCAD,:32) AND +NVL(I.ID_PART,0) = NVL(S.ID_PART,0) AND NVL(I.ID_VALUTA,0) = NVL(S.ID_VALUTA,0) AND NVL(I.ID_SUCURSALA,0) = NVL(S.ID_SUCURSALA,0) ' || + lcCondInPlus || ') WHEN MATCHED THEN +UPDATE +SET I.DEBIT = I.DEBIT + S.DEBIT, + I.CREDIT = I.CREDIT + S.CREDIT, + I.VALDEBIT = I.VALDEBIT + S.VALDEBIT, + I.VALCREDIT = I.VALCREDIT + S.VALCREDIT + +DELETE WHERE ' || lnScrie || ' = ' || pack_contafin.nStergere || + ' and I.precdeb = 0 + and I.preccred = 0 + and I.precvaldeb = 0 + and I.precvalcred = 0 + and I.debit = 0 + and I.credit = 0 + and I.valdebit = 0 + and I.valcredit = 0 + WHEN NOT MATCHED THEN + INSERT + (AN, LUNA, CONT, ACONT, ID_PART, ID_VALUTA, ID_SUCURSALA, + id_fdoc, id_lucrare, id_set, id_ctr, + curs, dataact, dataireg, datascad, nract, serie_act, + id_responsabil, cod, explicatia, explicatia4, explicatia5, + DEBIT, CREDIT, VALDEBIT, VALCREDIT ' || + lcInsertColInPlus || ') + VALUES + (:33, :34, S.CONT, S.ACONT, S.ID_PART, S.id_valuta, S.id_sucursala, + S.id_fdoc, S.id_lucrare, S.id_set, S.id_ctr, + S.curs, S.dataact, S.dataireg, S.datascad, S.nract, S.serie_act, + S.id_responsabil, S.cod, S.explicatia, S.explicatia4, S.explicatia5, + S.DEBIT, S.CREDIT, S.VALDEBIT, S.VALCREDIT ' || + lcInsertValInPlus || ')'; + + -- pInfo(lcMerge, 'SCRIE_IREG INCASARI 1'); + + EXECUTE IMMEDIATE lcMerge + USING tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcAcontNull, tcAcontNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, ldDataNull, tnAn, tnLuna; + + -- IMPERECHERE INCASARI/PLATI (CONT ACTIV PE CREDIT SAU PASIV PE DEBIT SI NU SUNT EXCEPTII) + -- GRUPEZ DUPA NRACT, MIN(IREG_PARTENERI.DATACT) ETC. + -- MERGE IN IREG_PARTENERI + -- WHEN MATCHED : ACTUALIZEZ SUMELE + -- : STERG LINIA DACA OPERATIA ESTE STERGERE SI AM NUMAI ZERO-URI + -- WHEN NOT MATCHED : ADAUG LINIE IN IREG_PARTENERI + + -- ID_SET = 90501 : REEVALUARE SOLDURI IN VALUTA LA 31.12.XXXX + -- A.ID_SET NOT IN (77771,77772,77773,77774) : NOTE REGULARIZARE DENOMINARE - AFECTEAZA DOAR BALANTA DE VERIFICARE + + lcMerge := 'MERGE INTO IREG_PARTENERI I USING (' || CASE lnRefacereNumarAct + WHEN 1 THEN + 'SELECT S1.an, + S1.luna, + S1.cont, + S1.acont, + S1.nract, + S1.id_part, + S1.id_valuta, + S1.id_sucursala, + S1.curs,' || CASE + WHEN lnCuProcTva = 1 THEN + 'S1.PROC_TVA, S1.ID_JTVA_COLOANA,' + ELSE + '' + END || CASE + WHEN lnCuVenchelt = 1 THEN + 'S1.ID_VENCHELT,' + ELSE + '' + END || 'S1.DEBIT, + S1.CREDIT, + S1.VALDEBIT, + S1.VALCREDIT, + S1.ID_FACT, + MIN(I1.DATAACT) AS DATAACT, + MAX(S1.ID_VENCHELT) AS ID_VENCHELT + FROM (' + ELSE + '' + END || 'SELECT an, + luna, + cont, + acont, + nract, + id_part, + id_valuta, + id_sucursala, + MAX(curs) AS CURS, + SUM(debit) AS DEBIT, + SUM(credit) AS CREDIT, + SUM(valdebit) AS VALDEBIT, + SUM(valcredit) AS VALCREDIT ' || lcSelInPlus || + ' FROM (SELECT A.AN, + A.LUNA, + A.COD, + CASE + WHEN (A.SCC = :1 AND NVL(CC.FEL_CONT, 0) = 0) OR + (A.SCC = :2 AND NVL(CC.FEL_CONT, 0) IN (1,2) AND NVL(A.PERECHEC, 0) <> 0) THEN + A.PERECHEC + WHEN (A.SCD = :3 AND NVL(CD.FEL_CONT, 0) = 1) OR + (A.SCD = :4 AND NVL(CD.FEL_CONT, 0) IN (0,2) AND NVL(A.PERECHED, 0) <> 0) THEN + A.PERECHED + ELSE + 0 + END NRACT, + CASE + WHEN (A.SCC = :5 AND NVL(CC.FEL_CONT, 0) = 0) OR + (A.SCC = :6 AND NVL(CC.FEL_CONT, 0) IN (1,2) AND NVL(A.ID_FACTC, 0) <> 0) THEN + A.ID_FACTC + WHEN (A.SCD = :7 AND NVL(CD.FEL_CONT, 0) = 1) OR + (A.SCD = :8 AND NVL(CD.FEL_CONT, 0) IN (0,2) AND NVL(A.ID_FACTD, 0) <> 0) THEN + A.ID_FACTD + ELSE + 0 + END ID_FACT, + :9 AS CONT, + DECODE(A.SCD, :10, A.ASCD, A.ASCC) AS ACONT, + (CASE + WHEN (A.SCD = :11 AND ((CD.FEL_CONT IN(1,2) AND A.ID_SET <> 90501) OR + (CD.FEL_CONT = 0 AND A.ID_SET = 90501))) OR + (A.SCC = :12 AND ((CC.FEL_CONT = 0 AND A.ID_SET = 90501) OR + (CC.FEL_CONT = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0))) THEN + (CASE + WHEN A.SCC = :13 AND ((CC.FEL_CONT = 0 AND A.ID_SET = 90501) OR + (CC.FEL_CONT = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0)) THEN + -A.SUMA + ELSE + A.SUMA + END) ELSE 0.00 END) AS DEBIT, + (CASE + WHEN (A.SCC = :14 AND ((CC.FEL_CONT IN(0,2) AND A.ID_SET <> 90501) OR + (CC.FEL_CONT = 1 AND A.ID_SET = 90501))) OR + (A.SCD = :15 AND ((CD.FEL_CONT = 1 AND A.ID_SET = 90501) OR + (CD.FEL_CONT = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0))) THEN + (CASE + WHEN A.SCD = :16 AND ((CD.FEL_CONT = 1 AND A.ID_SET = 90501) OR + (CD.FEL_CONT = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0)) THEN + -A.SUMA + ELSE + A.SUMA + END) ELSE 0.00 END) AS CREDIT, + (CASE + WHEN (A.SCD = :17 AND ((NVL(CD.FEL_CONT,0) IN(1,2) AND A.ID_SET <> 90501) OR + (NVL(CD.FEL_CONT,0) = 0 AND A.ID_SET = 90501))) OR + (A.SCC = :18 AND ((NVL(CC.FEL_CONT,0) = 0 AND A.ID_SET = 90501) OR + (NVL(CC.FEL_CONT,0) = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0))) + THEN + (CASE WHEN A.SCC = :19 AND ((NVL(CC.FEL_CONT,0) = 0 AND A.ID_SET = 90501) OR + (NVL(CC.FEL_CONT,0) = 1 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTC, 0) <> 0)) + THEN + -A.SUMA_VAL + ELSE + A.SUMA_VAL + END) + ELSE + 0.00 + END) AS VALDEBIT, + (CASE + WHEN (A.SCC = :20 AND ((NVL(CC.FEL_CONT,0) IN(0,2) AND A.ID_SET <> 90501) OR + (NVL(CC.FEL_CONT,0) = 1 AND A.ID_SET = 90501))) OR + (A.SCD = :21 AND ((NVL(CD.FEL_CONT,0) = 1 AND A.ID_SET = 90501) OR + (NVL(CD.FEL_CONT,0) = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0))) + THEN + (CASE WHEN A.SCD = :22 AND ((NVL(CD.FEL_CONT,0) = 1 AND A.ID_SET = 90501) OR + (NVL(CD.FEL_CONT,0) = 0 AND A.ID_SET <> 90501 AND NVL(A.ID_FACTD, 0) <> 0)) + THEN + -A.SUMA_VAL + ELSE + A.SUMA_VAL + END) + ELSE + 0.00 + END) AS VALCREDIT, + CASE + WHEN (A.SCC = :23 AND (CC.FEL_CONT IN(0,2) OR (CC.FEL_CONT = 1 AND A.ID_SET = 90501))) + THEN A.ID_PARTC + WHEN (A.SCD = :24 AND (CD.FEL_CONT IN(1,2) OR (CD.FEL_CONT = 0 AND (A.ID_SET = 90501 OR NVL(PERECHED,0)<>0 OR NVL(ID_FACTD,0)<>0)))) + THEN A.ID_PARTD + ELSE 0 + END ID_PART, + A.ID_VALUTA, + A.ID_SUCURSALA, + CASE WHEN A.ID_SET = 90501 THEN A.CURS ELSE 0 END AS CURS, + A.ID_VENCHELT, + A.ID_JTVA_COLOANA, + A.PROC_TVA + FROM ' || lcAct || ' A + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS SCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS SCC + FROM EXCEPTII_IREG + WHERE INVERS = 1 + AND CONT = ''' || tcCont || + ''') E ON A.SCD = E.SCD + AND A.SCC = E.SCC + LEFT JOIN CONFIG_CONT_IREG CD ON A.SCD = CD.CONT + LEFT JOIN CONFIG_CONT_IREG CC ON A.SCC = CC.CONT + WHERE A.AN = :25 + and A.LUNA = :26 + and A.STERS = 0 ' || + REPLACE(lcWhereSucursale, 'ALIAS.', 'A.') || + REPLACE(lcUpdWherePartAct, 'ALIAS.', 'A.') || ' + AND A.ID_SET NOT IN (77771,77772,77773,77774) + AND ((A.SCC = :27 AND CC.FEL_CONT = 0 AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCD = :28 AND CD.FEL_CONT = 1 AND NVL(E.EXCEPTIE, 0) = 0) OR + (A.SCC = :29 AND CC.FEL_CONT IN (1,2) AND NVL(E.EXCEPTIE, 0) = 0 AND NVL(A.ID_FACTC, 0) <> 0) OR + (A.SCD = :30 AND CD.FEL_CONT IN (0,2) AND NVL(E.EXCEPTIE, 0) = 0 AND NVL(A.ID_FACTD, 0) <> 0) OR + ((A.SCD = :31 OR A.SCC = :32) AND A.ID_SET = 90501) ' || + -- 4111 = 4427 (AVANS 419) + CASE + WHEN tcCont = '4111' THEN + ' OR (A.SCD = ''4111'' AND A.SCC = ''4427'' AND (NVL(A.PERECHED,0) <> 0 OR NVL(A.ID_FACTD,0)<>0)) + OR (A.SCD = ''419'' AND A.SCC = ''4111'' AND (NVL(A.ID_FACTD,0) <> 0 AND NVL(A.ID_FACTC,0)<>0))' + ELSE + '' + END || ')) + group by an, + luna, + cont, + acont, + nract, + id_part, + id_valuta,id_sucursala' || lcGrupInPlus || CASE lnRefacereNumarAct + WHEN 1 THEN + ') S1 + LEFT JOIN IREG_PARTENERI I1 ON I1.AN = ' || tnAn || + ' AND I1.LUNA = ' || tnLuna || + -- AM FOST NEVOIT - SA NU STRIC CELELALTE VARIABILE LEGATE :( + ' AND I1.CONT = ' || tcCont || + ' AND NVL(I1.ACONT, ''XXXX'') = + NVL(S1.ACONT, ''XXXX'') + AND I1.NRACT = S1.NRACT + AND I1.ID_PART = S1.ID_PART + AND I1.ID_VALUTA = S1.ID_VALUTA + AND NVL(I1.ID_SUCURSALA,0) = NVL(S1.ID_SUCURSALA,0) ' || + REPLACE(lcUpdWherePart, 'ALIAS.', 'I1.') || + ' GROUP BY S1.an, + S1.luna, + S1.cont, + S1.acont, + S1.nract, + S1.id_part, + S1.id_valuta, + S1.id_sucursala, + S1.curs,' || CASE + WHEN lnCuProcTva = 1 THEN + 'S1.PROC_TVA, S1.ID_JTVA_COLOANA,' + ELSE + '' + END || CASE + WHEN lnCuVenchelt = 1 THEN + 'S1.ID_VENCHELT,' + ELSE + '' + END || 'S1.DEBIT, + S1.CREDIT, + S1.VALDEBIT, + S1.VALCREDIT, + S1.ID_FACT' + ELSE + '' + END || ') S +ON (I.AN = :33 AND I.LUNA = :34 AND I.CONT = :35 AND NVL(I.ACONT, :36) = NVL(S.ACONT, :37) AND NVL(I.NRACT,0) = NVL(S.NRACT,0) AND ' || + CASE lnRefacereNumarAct + WHEN 1 THEN + ' NVL(I.DATAACT,TO_DATE(''19700101'', ''YYYYMMDD'')) = NVL(S.DATAACT,TO_DATE(''19700101'', ''YYYYMMDD'')) AND ' + ELSE + '' + END || + ' NVL(I.ID_PART,0) = NVL(S.ID_PART,0) AND NVL(I.ID_VALUTA,0) = NVL(S.ID_VALUTA,0) AND NVL(I.ID_SUCURSALA,0) = NVL(S.ID_SUCURSALA,0) ' || + lcCondInPlus || ') WHEN MATCHED THEN +UPDATE +SET I.DEBIT = I.DEBIT + S.DEBIT, + I.CREDIT = I.CREDIT + S.CREDIT, + I.VALDEBIT = I.VALDEBIT + S.VALDEBIT, + I.VALCREDIT = I.VALCREDIT + S.VALCREDIT, + I.CURS = (CASE NVL(S.CURS,0) WHEN 0 THEN I.CURS ELSE S.CURS END) + +DELETE WHERE ' || lnScrie || ' = ' || pack_contafin.nStergere || + ' and I.precdeb = 0 + and I.preccred = 0 + and I.precvaldeb = 0 + and I.precvalcred = 0 + and I.debit = 0 + and I.credit = 0 + and I.valdebit = 0 + and I.valcredit = 0 + WHEN NOT MATCHED THEN + INSERT + (AN, LUNA, CONT, ACONT, ID_PART, ID_VALUTA, ID_SUCURSALA, + nract, DEBIT, CREDIT, VALDEBIT, VALCREDIT ' || + lcInsertColInPlus || ') + VALUES + (:38, :39, S.CONT, S.ACONT, S.ID_PART, S.ID_VALUTA, S.ID_SUCURSALA, + S.nract, S.DEBIT, S.CREDIT, S.VALDEBIT, S.VALCREDIT' || + lcInsertValInPlus || ')'; + + -- pInfo(lcMerge, 'SCRIE_IREG INCASARI 2'); + + EXECUTE IMMEDIATE lcMerge + USING tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcCont, tcCont, tcCont, tcCont, tcCont, tnAn, tnLuna, tcCont, tcAcontNull, tcAcontNull, tnAn, tnLuna; + + <> + NULL; + + END SCRIE_IN_IREG_PARTENERI; + + --------------------------------------------------------------- + PROCEDURE EXECUTA_SCRIE_IN_IREG(tcS VARCHAR2, + tnAn in number, + tnLuna in number, + tcCont in varchar2, + tnScrie number, + tnVenChelt number) IS + BEGIN + -- TNSCRIE: 0 = SCRIERE; 2 = STERGERE + -- SE APELEAZA DOAR PENTRU ACT_TEMP, FARA CONT PRECIZAT + FOR ITEM IN (SELECT SCD AS CONT + FROM ACT_TEMP + UNION + SELECT SCC AS CONT + FROM ACT_TEMP) LOOP + SCRIE_IN_IREG_PARTENERI(tnAn, tnLuna, ITEM.CONT, tnScrie, null); + END LOOP; + + END EXECUTA_SCRIE_IN_IREG; + + ------------------------------------------------------------------- + PROCEDURE STERGE_TEMP_ACTRUL IS + BEGIN + DELETE FROM ACT_TEMP; + DELETE FROM RUL_TEMP; + DELETE FROM RUL_TEMP_OBINV; + END STERGE_TEMP_ACTRUL; + ------------------------------------------------------------------- + Procedure INIT_SCRIERE_ACT_RUL_LOCAL(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE) is + -- se apeleaza inainte de completarea act_temp din Fox + -- tnScrie_Sterge: 0 = scriere, 1 = refacere, 2 = stergere + begin + pack_contafin.STERGE_TEMP_ACTRUL(); + pack_contafin.INITIALIZEAZA_SCRIERE_ACT_RUL(tnIdUtil, + NULL, + tnAn, + tnLuna, + tnSuprascriereCod, + 1, + tnScrieSterge, + tnIdSucursala); + end; + ------------------------------------------------------------------- + PROCEDURE INITIALIZEAZA_SCRIERE_ACT_RUL(tnIdUtil ACT.ID_UTIL%TYPE, + tdDataOra ACT.DATAORA%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnSuprascriereCod NUMBER, + tnSuprascriereAnLuna NUMBER, + tnScrieSterge NUMBER, + tnIdSucursala ACT.ID_SUCURSALA%TYPE) IS + -- tnScrie_Sterge: 0 = scriere, 1 = refacere, 2 = stergere + BEGIN + pack_contafin.reset_variables(); + if tnSuprascriereCod = 0 then + pack_contafin.set_suprascriereCod(tnSuprascriereCod); + Else + if tnScrieSterge <> 2 then + pack_contafin.SET_COD(user); + end if; + end if; + pack_contafin.set_suprascriereAnLuna(tnSuprascriereAnLuna); + pack_contafin.set_idutil(tnIdUtil); + pack_contafin.set_dataora(NVL(tdDataOra, SYSDATE)); + pack_sesiune.setan(tnAn); + pack_sesiune.setluna(tnLuna); + pack_contafin.set_id_sucursala(tnIdSucursala); + END INITIALIZEAZA_SCRIERE_ACT_RUL; + ------------------------------------------------------------------- + + ------------------------------------------------------------------- + -- sterge un document direct din baza de date, complet + ------------------------------------------------------------------- + procedure sterge_document(tnCod in number, + tnAn in number, + tnLuna in number, + tnIdUtil in number) is + begin + pack_sesiune.setan(tnAn); + pack_sesiune.setluna(tnLuna); + pack_sesiune.set_id_util(tnIdUtil); + pack_contafin.sterge_document(tnCod); + end sterge_document; + + ------------------------------------------------------------------- + -- sterge un document direct din baza de date, complet + -- trebuie configurat an, luna, id_util + ------------------------------------------------------------------- + procedure sterge_document(V_cod in number) is + lnAn number(4) := 0; + lnLuna number(2) := 0; + lnAreReferinte number(1) := 0; + lnIdVanzare vanzari.id_vanzare%type; + lcMesajRefacere varchar2(3000); + lnIdUtil syn_utilizatori.id_util%type; + lnIdSet act.id_set%type; + lnIdFact act.id_fact%type; + lnIdFactD act.id_factd%type; + begin + + lnAn := pack_sesiune.getan(); + lnLuna := pack_sesiune.getluna(); + lnIdUtil := pack_sesiune.get_id_util(); + lnAreReferinte := pack_documente.ReferinteDocumenteNota(lnAn, + lnLuna, + V_cod); + + if lnAreReferinte = 1 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Documentul are referinte (incasari/plati). Nu poate fi sters.'); + goto sfarsit_procedura; + end if; + + insert into act_temp + (luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + id_act, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + validat, + id_utilv, + dataorav) + select luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + id_act, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + validat, + id_utilv, + dataorav + from act + where an = lnAn + and luna = lnLuna + and cod = V_cod + order by id_act; + + insert into rul_temp + (id_rul, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_reteta, + id_set, + id_sucursala, + id_obiect_depozit, + id_rul_aux, + nract, + id_utils, + dataoras, + serie, + id_valuta, + serie_act, + lot, + adata_expirare, + id_part_rez, + id_lucrare_rez) + select id_rul, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_reteta, + id_set, + id_sucursala, + id_obiect_depozit, + id_rul_aux, + nract, + id_utils, + dataoras, + serie, + id_valuta, + serie_act, + lot, + adata_expirare, + id_part_rez, + id_lucrare_rez + from rul + where an = lnAn + and luna = lnLuna + and cod = V_cod + order by id_rul; + + insert into rul_temp_obinv + (id_rul_obinv, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + datapif, + dns_luni, + dns_ramas, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_set, + pret_imputare, + nract, + id_utils, + dataoras, + id_rul_aux, + serie, + id_valuta, + serie_act, + id_sucursala) + select id_rul_obinv, + an, + luna, + cod, + nnir, + id_articol, + id_gestiune, + pret, + pretv, + tva, + tvav, + cant, + cante, + cont, + adaos, + id_lucrare, + id_responsabil, + dataact, + procent, + curs, + pretd, + id_util, + dataora, + id_sectie, + alcooltutun, + pretvtva, + acont, + datain, + dataout, + proc_disc, + discunitar, + proc_tva, + id_fact, + sters, + discount_tva, + adaos_tva, + proc_tvav, + datapif, + dns_luni, + dns_ramas, + valoare, + valoarev, + valtva, + valtvav, + valoare_adaos, + valtva_adaos, + valoare_discount, + valtva_discount, + id_gestiunec, + id_responsabilc, + id_tip_rulaj, + id_set, + pret_imputare, + nract, + id_utils, + dataoras, + id_rul_aux, + serie, + id_valuta, + serie_act, + id_sucursala + from rul_obinv + where an = lnAn + and luna = lnLuna + and cod = v_cod + order by id_rul_obinv; + + pack_contafin.finalizeaza_scriere_act_rul(lnIdUtil, + v_cod, + 2, + 0, + 0, + lcMesajRefacere); + + begin + select max(id_set), max(id_fact), max(id_factd) + into lnIdSet, lnIdFact, lnIdFactD + from act_temp; + + pack_contafin.finalizeaza_stergere_nota(lnLuna, + lnAn, + sysdate, + lnIdSet, + v_cod, + lnIdFact, + lnIdFactD, + lnIdUtil); + exception + WHEN NO_DATA_FOUND THEN + NULL; + END; + + <> + null; + end sterge_document; + + -------------------------------------------------------------------------- + -- initializeaza_act_rul + finalizeaza_document + cursor_verificare) + -------------------------------------------------------------------------- + procedure finalizeaza_document_verif(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnScrieSterge IN number, + tnDateCompletate IN number, + tnScadereStoc IN number, + tnCod IN ACT.COD%type, + tnIdUtil IN ACT.ID_UTIL%TYPE, + tdDataOra IN ACT.DATAORA%TYPE, + tnIdSucursala IN ACT.ID_SUCURSALA%TYPE, + tcSirModificariAcont IN VARCHAR2, + tcSirModificariPart IN VARCHAR2, + CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor) is + lcMesajRefacere VARCHAR2(3000); + begin + -- tnDateCompletate = 0 / 1 - cod / 2 - cod + an + luna + -- tnScrieSterge = 0 scriere/ 1- refacere / 2-stergere + + -- completare analitice si parteneri din configurari + pack_contafin.completeaza_analitice; + pack_contafin.completeaza_analitice_rul; + pack_contafin.completeaza_parteneri_gestiuni; + pack_contafin.sterge_analitice_gresite; + pack_contafin.sterge_analitice_gresite_rul; + + -- completare analitice si parteneri din verificare note contabile + if tcSirModificariAcont is not null or tcSirModificariPart is not null then + pack_contafin.finalizeaza_document_compl(tcSirModificariAcont, + tcSirModificariPart); + end if; + + -- verificare note contabile la scriere + if tnScrieSterge = 0 and pack_contafin.verifica_note_contabile(1) > 0 then + pack_contafin.cursor_verificare(CURSOR_VERIFICARE); + else + pack_contafin.initializeaza_scriere_act_rul(tnIdUtil, + tdDataOra, + tnAn, + tnLuna, + 1, + 1, + tnScrieSterge, + tnIdSucursala); + + pack_contafin.finalizeaza_scriere_act_rul(tnIdUtil, + tnCod, + tnScrieSterge, + 0, + 0, + lcMesajRefacere); + + OPEN CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + end if; + + end finalizeaza_document_verif; + + ----------------------------------------------------------------------- + -- completeaza act_temp cu analitice, parteneri din formularul de verificare + -- se apeleaza din finalizeaza_document_verif + ----------------------------------------------------------------------- + procedure finalizeaza_document_compl(V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2) is + V_SEPARATOR_LINIE VARCHAR2(5) := ';'; + V_SEPARATOR VARCHAR2(5) := '|'; + BEGIN + -- de mutat in pack_contafin + IF V_SIR_MODIFICARI_ACONT IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) - 1) as ascd, + rtrim(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR) as ascc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_ACONT, + V_SEPARATOR_LINIE)) + + )) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ASCD = B.ASCD, ASCC = B.ASCC; + + END IF; + + IF V_SIR_MODIFICARI_PART IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + nvl(to_number(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) - 1)), + 0) as id_partd, + nvl(to_number(rtrim(substr(lista || V_SEPARATOR || + V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR)), + 0) as id_partc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_PART, + V_SEPARATOR_LINIE)))) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ID_PARTD = B.ID_PARTD, ID_PARTC = B.ID_PARTC; + + END IF; + + end finalizeaza_document_compl; + + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT PACK_TYPES.tip_cursor) IS + BEGIN + OPEN V_CURSOR_VERIFICARE FOR + SELECT A.ID_ACT, + A.LUNA, + A.AN, + A.DATAIREG as datairegt, + A.NRACT, + A.SERIE_ACT, + A.DATAACT as dataactt, + A.suma, + A.EXPLICATIA, + A.SCD, + A.ASCD, + A.ASCD as ascd1, + A.SCC, + A.ASCC, + A.ASCC as ascc1, + A.PERECHED, + A.PERECHEC, + A.SUMA_VAL, + A.EXPLICATIA4, + A.EXPLICATIA5, + A.CURS, + A.DATASCAD as datascadt, + A.NEIMPOZAB, + A.NNIR, + A.ID_UTIL, + UTIL2.UTILIZATOR AS UTIL, + A.DATAORA, + A.ID_UTILS, + UTIL1.UTILIZATOR AS UTILS, + A.DATAORAS, + A.ID_RESPONSABIL, + RESP.DENUMIRE AS NRESP, + A.ID_VENCHELT, + VENCHELT.EXPLICATIE AS DST_CHLT, + A.ID_LUCRARE, + LUCR.NRORD, + A.ID_CTR, + CTR.CONTRACT, + A.ID_SECTIE, + SECTII.SECTIE, + A.PROC_TVA, + A.ID_SET, + A.ID_FACT, + A.ID_FACTD, + A.ID_FACTC, + A.ID_PARTD, + A.ID_PARTD AS ID_PARTD1, + PART1.NUME AS PARTD, + A.ID_PARTC, + A.ID_PARTC AS ID_PARTC1, + PART.NUME AS PARTC, + A.ID_SUCURSALA, + S.FIRMA AS SUCURSALA, + A.ID_FDOC, + FDOC.FEL_DOCUMENT AS FDOC, + A.ID_GESTIN, + A.ID_JTVA_COLOANA, + G1.NUME_GESTIUNE AS GESTIN, + A.ID_GESTOUT, + G2.NUME_GESTIUNE AS GESTOUT, + A.ID_VALUTA, + V.NUME_VAL, + 0000000000 as id_pol, + lpad(' ', 30, ' ') as nume_lista_preturi, + A.TVA_INCASARE + FROM ACT_TEMP A + LEFT JOIN NOM_FDOC FDOC + ON A.ID_FDOC = FDOC.ID_FDOC + LEFT JOIN SYN_NOM_FIRME S + ON A.ID_SUCURSALA = S.ID_FIRMA + LEFT JOIN NOM_PARTENERI PART + ON A.ID_PARTC = PART.ID_PART + LEFT JOIN NOM_PARTENERI PART1 + ON A.ID_PARTD = PART1.ID_PART + LEFT JOIN VNOM_VENCHEL VENCHELT + ON A.ID_VENCHELT = VENCHELT.ID_VENCHELT + LEFT JOIN NOM_PARTENERI RESP + ON A.ID_RESPONSABIL = RESP.ID_PART + LEFT JOIN SYN_UTILIZATORI UTIL1 + ON A.ID_UTILS = UTIL1.ID_UTIL + LEFT JOIN SYN_UTILIZATORI UTIL2 + ON A.ID_UTIL = UTIL2.ID_UTIL + LEFT JOIN VNOM_LUCRARI LUCR + ON A.ID_LUCRARE = LUCR.ID_LUCRARE + LEFT JOIN VCONTRACTE CTR + ON A.ID_CTR = CTR.ID_CTR + LEFT JOIN NOM_GESTIUNI G1 + ON A.ID_GESTIN = G1.ID_GESTIUNE + LEFT JOIN NOM_GESTIUNI G2 + ON A.ID_GESTOUT = G2.ID_GESTIUNE + LEFT JOIN NOM_VALUTE V + ON A.ID_VALUTA = V.ID_VALUTA + LEFT JOIN NOM_SECTII SECTII + ON A.ID_SECTIE = SECTII.ID_SECTIE + WHERE A.STERS = 0; + END cursor_verificare; + ------------------------------------------------------------ + Procedure final_scriere_act_rul_local(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnAn ACT.AN%TYPE, + tnLuna ACT.LUNA%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, + tnModificareNota NUMBER, + tcMesajRefacereNota OUT VARCHAR2) is + -- se apeleaza dupa pack_contafin.init_scriere_act_rul_local si dupa completarea act_temp din Fox + begin + pack_contafin.finalizeaza_scriere_act_rul(tnIdUtil, + tnCod, + tnScrieSterge, + tnModificareNota, + 0, -- tnScrieCumpVanz + tcMesajRefacereNota); + end final_scriere_act_rul_local; + ------------------------------------------------------------ + procedure finalizeaza_scriere_act_rul is + lcMesajRefacereNota VARCHAR2(3000); + begin + pack_contafin.finalizeaza_scriere_act_rul(pack_contafin.GET_IDUTIL(), + null, + 0, + 0, + 2, + lcMesajRefacereNota); + end finalizeaza_scriere_act_rul; + ------------------------------------------------------------ + procedure finalizeaza_scriere_act_rul(tnIdUtil SYN_UTILIZATORI.ID_UTIL%TYPE, + tnCod ACT.COD%TYPE, + tnScrieSterge NUMBER, -- 0 = scriere, 1 = refacere, 2 = stergere + tnModificareNota NUMBER, -- 0 = modificare, 1 = stergere + tnScrieCumpVanz NUMBER, -- 0 = cump + vanz, 1 = cumparari, 2 = vanzari + tcMesajRefacereNota OUT VARCHAR2) is + -- se apeleaza dupa pack_contafin.init_scriere_act_rul_local si dupa completarea act_temp din Fox + lcCorespDTva varchar2(100); + lcCorespD varchar2(100); + lcCorespCTva varchar2(100); + lcCorespC varchar2(100); + lcExceptii varchar2(2000); + lnNrInregRul number(10); + lnNrInregRulObinv number(10); + lnAn ACT.AN%type; + lnLuna ACT.LUNA%type; + + lcSetNuScrie optiuni.varvalue%type; + lnIdSet act.id_set%type; + lcSituatiiNuScrie optiuni.varvalue%type; + lnScrieBV number(1) := 1; + lnScrieBP number(1) := 1; + lnScrieIP number(1) := 1; + lnScrieTVA number(1) := 1; + lnScrieSTOC number(1) := 1; + begin + lnAn := pack_sesiune.getan(); + lnLuna := pack_sesiune.getluna(); + + -- LISTA DE SETURI PENTRU CARE NU SE APELEAZA SCRIEREA balanta, balanta parteneri, inregistrari parteneri, tva, stoc + -- Bonurile fiscale de la chioscuri + -- Se refac situatiile doar prin refaceri/redeschidere de luna + lcSetNuScrie := PACK_SESIUNE.getOptiuneFirma('SETURI_SITUATII_NU_SCRIE'); -- '25052|BV,BP,IP,TVA;' + select max(id_set) into lnIdSet from act_temp; + IF lcSetNuScrie IS NOT NULL and lnIdSet is not null THEN + SELECT MAX(UPPER(SITUATII)) + into lcSituatiiNuScrie + FROM (SELECT GETWORDNUM(SET_SITUATII, 1, '|') AS ID_SET, + GETWORDNUM(SET_SITUATII, 2, '|') AS SITUATII + FROM (SELECT getwordnum(lcSetNuScrie, B.RAND, ';') AS SET_SITUATII + FROM DUAL A, + (SELECT ROWNUM AS RAND + FROM USER_OBJECTS + WHERE ROWNUM < 100) B) + WHERE SET_SITUATII IS NOT NULL) + WHERE ID_SET = to_char(lnIdSet); + if lcSituatiiNuScrie LIKE '%BV%' then + lnScrieBV := 0; + end if; + if lcSituatiiNuScrie LIKE '%BP%' then + lnScrieBP := 0; + end if; + if lcSituatiiNuScrie LIKE '%IP%' then + lnScrieIP := 0; + end if; + if lcSituatiiNuScrie LIKE '%TVA%' then + lnScrieTVA := 0; + end if; + if lcSituatiiNuScrie LIKE '%STOC%' then + lnScrieSTOC := 0; + end if; + END IF; + + if tnScrieSterge <> 2 then + pack_contafin.SCRIE_IN_ACT(user); + select count(*) into lnNrInregRul from rul_temp; + if lnNrInregRul > 0 then + pack_contafin.SCRIE_IN_RUL(user); + end if; + + select count(*) into lnNrInregRulObinv from rul_temp_obinv; + if lnNrInregRulObinv > 0 then + pack_contafin.SCRIE_IN_RUL_OBINV(user); + end if; + else + pack_contafin.STERGE_DIN_ACT(user, + lnAn, + lnLuna, + tnCod, + tnIdUtil, + tnModificareNota); + select count(*) into lnNrInregRul from rul where cod = tnCod; + if lnNrInregRul > 0 then + pack_contafin.STERGE_DIN_RUL(user, lnAn, lnLuna, tnCod, tnIdUtil); + end if; + + select count(*) + into lnNrInregRulObinv + from rul_obinv + where cod = tnCod; + if lnNrInregRulObinv > 0 then + pack_contafin.STERGE_DIN_RUL_OBINV(user, + lnAn, + lnLuna, + tnCod, + tnIdUtil); + end if; + end if; + + if lnScrieBV = 1 then + pack_contafin.scrie_in_balanta(user, lnAn, lnLuna, tnScrieSterge); + end if; + if lnScrieBP = 1 then + pack_contafin.scrie_in_balanta_parteneri(user, + lnAn, + lnLuna, + NULL, + tnScrieSterge); + end if; + if lnScrieIP = 1 then + pack_contafin.executa_scrie_in_ireg(user, + lnAn, + lnLuna, + Null, + tnScrieSterge, + 0); + end if; + + if tnScrieCumpVanz <> 2 and lnScrieTVA = 1 then + If lnAn >= 2007 then + pack_contafin.SCRIE_JC_2007(lnAn, lnLuna, tnScrieSterge); + -- tnScrieSterge ar trebui sa aiba valoarea 0 sau 2 + Else + lcCorespDTva := '401,404,5121,5124,542,4427,4428'; + lcCorespD := '401,404,5121,5124,542,4427'; + lcCorespCTva := '0'; + lcCorespC := '0'; + select stringagg(cont_c) + INTO lcExceptii + from (select distinct cont_c + from exceptii_ireg + where cont in + (SELECT X as CONT + FROM table(charc2collection(lcCorespD, ','))) + and invers = 1 + union all + select '-1' + from dual); + pack_contafin.EXECUTA_SCRIE_TVA(user, + 'cump', + pack_contafin.getCotaTVAStandard(lnLuna, + lnAn), + CASE WHEN + lnAn * 12 + lnLuna >= 2025 * 12 + 8 THEN 1.11 ELSE 1.09 END, + lcCorespDtva, + lcCorespD, + lcCorespCtva, + lcCorespC, + '4426', + lcExceptii, + lnAn, + lnLuna, + tnScrieSterge); + End if; + end if; + + if tnScrieCumpVanz <> 1 and lnScrieTVA = 1 then + If lnAn >= 2007 then + pack_contafin.SCRIE_JV_2007(lnAn, lnLuna, tnScrieSterge); + -- tnScrieSterge ar trebui sa aiba valoarea 0 sau 2 + Else + lcCorespDTva := '411,4111,4112,4113,4114,4115,4116,4117,4428,4118'; + lcCorespD := '411,4111,4112,4113,4114,4115,4116,4117,4428,4118'; + lcCorespCTva := '411,4111,4112,4113,4114,4115,4116,4117,461,428,4281,4282,4426,4428'; + lcCorespC := '411,4111,4112,4113,4114,4115,4116,4117,461,428,4281,4282,4426,5121,5311'; + select stringagg(cont_c) + INTO lcExceptii + from (select distinct cont_c + from exceptii_ireg + where cont in + (SELECT X as CONT + FROM table(charc2collection(lcCorespC, ','))) + and invers = 1 + union all + select '419' as cont_c + from dual); + pack_contafin.EXECUTA_SCRIE_TVA(user, + 'vanz', + pack_contafin.getCotaTVAStandard(lnLuna, + lnAn), + CASE WHEN + lnAn * 12 + lnLuna >= 2025 * 12 + 8 THEN 1.11 ELSE 1.09 END, + lcCorespDtva, + lcCorespD, + lcCorespCtva, + lcCorespC, + '4427', + lcExceptii, + lnAn, + lnLuna, + tnScrieSterge); + End if; + End if; + + if lnNrInregRul > 0 and lnScrieSTOC = 1 then + pack_contafin.scrie_in_stoc(user, + lnAn, + lnLuna, + 0, + 'STOC', + 'ID_STOC', + '2=2'); + end if; + if lnNrInregRulObinv > 0 and lnScrieSTOC = 1 then + pack_contafin.scrie_in_stoc_obinv(user, + lnAn, + lnLuna, + 0, + 'STOC_OBINV', + 'ID_STOC', + '2=2'); + end if; + pack_refacere_nota.refacere_nota(lnAn, lnLuna, tcMesajRefacereNota); + end finalizeaza_scriere_act_rul; + ----------------------------------------------- + PROCEDURE finalizeaza_modificare_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER) IS + lnEInVanzari NUMBER(10); + lnCodNou NUMBER(10); + BEGIN + lnCodNou := pack_contafin.get_cod(); + SELECT COUNT(*) INTO lnEInVanzari FROM vanzari WHERE cod = tnCod; + + IF lnEInVanzari > 0 THEN + pack_facturare.actualizeaza_vanzari(tnCod, lnCodNou); + END IF; + + UPDATE atasamente_vanzari SET cod = lnCodNou WHERE cod = tnCod; + + CASE + WHEN tnIdSet = 90101 THEN + UPDATE gest_inventar + SET dataora_validat = pack_contafin.GET_DATAORA(), + validat = decode(validat, 0, 1, validat) -- pentru cazul in care se repuneau inregistrarile sterse + WHERE dataora_validat = tdDataOra + AND an = tnAn + AND luna = tnLuna; + WHEN tnIdSet IN (31003, 31004, 31005, 31011) THEN + -- daca se modifica o inregistrare stearsa, atunci trebuie sa repun si id_fact in nom_lucrari + UPDATE NOM_LUCRARI + SET ID_FACT = tnIdFact + WHERE ID_LUCRARE IN (SELECT DISTINCT ID_LUCRARE + FROM ACT + WHERE COD = lnCodNou + AND AN = tnAn + AND LUNA = tnLuna) + AND ID_FACT IS NULL; + /* WHEN tnIdSet = 90011 THEN + -- 426-5311 achitare drepturi neridicate lichidare + UPDATE sal_stat + SET achitlicnerid = 0 + WHERE id_fact_lic = tnIdFactD; + WHEN tnIdSet = 90013 THEN + -- 426-5311 achitare drepturi neridicate avans + UPDATE sal_stat SET achitavnerid = 0 WHERE id_fact_av = tnIdFactD;*/ + ELSE + lnEInVanzari := 0; + END CASE; + + END finalizeaza_modificare_nota; + ----------------------------------------------- + PROCEDURE finalizeaza_stergere_nota(tnLuna IN NUMBER, + tnAn IN NUMBER, + tdDataOra IN DATE, + tnIdSet IN NUMBER, + tnCod IN NUMBER, + tnIdFact IN NUMBER, + tnIdFactD IN NUMBER, + tnIdUtil IN NUMBER) IS + lnEInVanzari NUMBER(10); + BEGIN + SELECT COUNT(*) INTO lnEInVanzari FROM vanzari WHERE cod = tnCod; + + IF lnEInVanzari > 0 THEN + pack_facturare.sterge_din_vanzari(tnCod, tnAn, tnLuna, tnIdUtil); + END IF; + + UPDATE atasamente_vanzari + SET sters = 1, id_utils = tnIdUtil, dataoras = sysdate + WHERE cod = tnCod; + + CASE + WHEN tnIdSet = 90101 THEN + UPDATE gest_inventar + SET validat = 0 + WHERE dataora_validat = tdDataOra + AND an = tnAn + AND luna = tnLuna; + WHEN tnIdSet = 90010 THEN + -- 421-426 drepturi neridicate lichidare + UPDATE sal_stat + SET bifalicnerid = 0, sumalicnerid = 0, id_fact_lic = 0 + WHERE id_fact_lic = tnIdFact; + WHEN tnIdSet = 90011 THEN + -- 426-5311 achitare drepturi neridicate lichidare + UPDATE sal_stat + SET achitlicnerid = 0 + WHERE id_fact_lic = tnIdFactD; + WHEN tnIdSet = 90012 THEN + -- 425-426 drepturi neridicate avans + UPDATE sal_stat + SET bifaavnerid = 0, sumaavnerid = 0, id_fact_av = 0 + WHERE id_fact_av = tnIdFact; + WHEN tnIdSet = 90013 THEN + -- 426-5311 achitare drepturi neridicate avans + UPDATE sal_stat SET achitavnerid = 0 WHERE id_fact_av = tnIdFactD; + WHEN tnIdSet IN (31003, 31004, 31005, 31011) THEN + UPDATE nom_lucrari SET id_fact = Null WHERE id_fact = tnIdFact; + WHEN tnIdSet IN (32000, 32003, 32011, 32013) THEN + -- ROADEVIZE : raport de productie, inchidere comenzi regie/garantie, factura finala 1, factura finala 2 + UPDATE dev_oper + SET sters = 1, id_utils = tnIdUtil, dataoras = sysdate + WHERE id_fact = tnIdFact; + ELSE + lnEInVanzari := 0; + END CASE; + + END finalizeaza_stergere_nota; + ----------------------------------------------- + PROCEDURE completeaza_analitice IS + cursor crs is + select a.cont, + a.tabel_prefix, + a.col_prefix, + a.tabel_sufix, + a.col_sufix, + a.camp_leg_prefix, + a.camp_leg_sufix, + a.poz_start_prefix, + a.nr_return_prefix, + a.poz_start_sufix, + a.nr_return_sufix, + b.tip + from config_analitice a + join (select distinct scd as cont, 1 as tip + from act_temp + where ascd is null + union + select distinct scc as cont, 2 as tip + from act_temp + where ascc is null) b + on a.cont = b.cont; + crs_linie crs%rowtype; + lcMerge VARCHAR2(10000); + lcAnalitic VARCHAR2(1000); + lcColoanaP VARCHAR2(100); + lcColoanaS VARCHAR2(100); + lcTipCont VARCHAR(4); + lcTipAcont VARCHAR(4); + lcNumeColoanaP VARCHAR2(1000); + lcNumeColoanaS VARCHAR2(1000); + BEGIN + open crs; + loop + fetch crs + into crs_linie; + exit when crs%NOTFOUND; + if crs_linie.tip = 1 then + lcTipCont := 'SCD'; + lcTipAcont := 'ASCD'; + else + lcTipCont := 'SCC'; + lcTipAcont := 'ASCC'; + end if; + lcAnalitic := ''; + lcColoanaP := ''; + lcColoanaS := ''; + if crs_linie.tabel_prefix is not null then + lcColoanaP := 'A.' || crs_linie.camp_leg_prefix; + lcNumeColoanaP := crs_linie.camp_leg_prefix; + if UPPER(TRIM(crs_linie.camp_leg_prefix)) = 'ID_GESTIUNE' then + if crs_linie.tip = 1 then + lcNumeColoanaP := 'ID_GESTIN'; + else + lcNumeColoanaP := 'ID_GESTOUT'; + end if; + lcColoanaP := lcColoanaP || ' AS ' || lcNumeColoanaP; + end if; + lcAnalitic := 'substr(a.' || crs_linie.col_prefix || ',' || + crs_linie.poz_start_prefix || ',' || + crs_linie.nr_return_prefix || ')'; + end if; + if crs_linie.tabel_sufix is not null then + lcColoanaS := 'B.' || crs_linie.camp_leg_sufix; + lcNumeColoanaS := crs_linie.camp_leg_sufix; + if UPPER(TRIM(crs_linie.camp_leg_sufix)) = 'ID_GESTIUNE' then + if crs_linie.tip = 1 then + lcNumeColoanaS := 'ID_GESTIN'; + else + lcNumeColoanaS := 'ID_GESTOUT'; + end if; + lcColoanaS := lcColoanaS || ' AS ' || lcNumeColoanaS; + end if; + lcAnalitic := lcAnalitic || '||substr(b.' || crs_linie.col_sufix || ',' || + crs_linie.poz_start_sufix || ',' || + crs_linie.nr_return_sufix || ')'; + end if; + lcMerge := 'MERGE INTO ACT_TEMP A1 USING (SELECT ''' || crs_linie.cont || + ''' AS ' || lcTipCont || ',' || lcAnalitic || ' AS ' || + lcTipAcont || ',' || lcColoanaP || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + ',' || lcColoanaS + END) || ' FROM ' || crs_linie.tabel_prefix || ' A ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'LEFT JOIN ' || crs_linie.tabel_sufix || + ' B ON 1=1 AND A.STERS = 0 AND B.STERS = 0 ' + END) || 'WHERE A.STERS = 0) A2 ' || 'ON (A1.' || lcTipCont || + '=A2.' || lcTipCont || ' AND A1.' || (CASE + WHEN UPPER(lcNumeColoanaP) = 'CONT' THEN + lcTipCont + ELSE + lcNumeColoanaP + END) || '=A2.' || lcNumeColoanaP || ' ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'AND A1.' || (CASE + WHEN UPPER(lcNumeColoanaS) = 'CONT' THEN + lcTipCont + ELSE + lcNumeColoanaS + END) || '=A2.' || lcNumeColoanaS + END) || ') ' || 'WHEN MATCHED THEN UPDATE SET A1.' || + lcTipAcont || '=NVL(A1.' || lcTipAcont || ',A2.' || lcTipAcont || ')'; + + /* begin*/ + -- PINFO(lcMerge,'COMPLETEAZA_ANALITICE'); + EXECUTE IMMEDIATE lcMerge; + /* exception + when others then + raise_application_error(-20000, lcMerge); + end;*/ + -- La vanzarea de marfuri la pret de vanzare 4428 = 371 are completata ID_GESTOUT + -- functioneaza pentru contul 371 pe credit, dar nu pentru contul 4428 pe debit + -- mai repet o data completarea analiticelor si cu ID_GESTIN/ID_GESTOUT pentru analiticele ramase necompletate + if UPPER(TRIM(crs_linie.camp_leg_prefix)) = 'ID_GESTIUNE' then + if lcNumeColoanaP = 'ID_GESTIN' THEN + lcMerge := replace(lcMerge, 'ID_GESTIN', 'ID_GESTOUT'); + else + lcMerge := replace(lcMerge, 'ID_GESTOUT', 'ID_GESTIN'); + end if; + + EXECUTE IMMEDIATE lcMerge; + end if; + end loop; + close crs; + -- verificarea daca exista analitic in planul de conturi se face in sterge_analitice_gresite + END completeaza_analitice; + ----------------------------------------------------------------------- + PROCEDURE completeaza_analitice_rul IS + cursor crs is + select a.cont, + a.tabel_prefix, + a.col_prefix, + a.tabel_sufix, + a.col_sufix, + a.camp_leg_prefix, + a.camp_leg_sufix, + a.poz_start_prefix, + a.nr_return_prefix, + a.poz_start_sufix, + a.nr_return_sufix + from config_analitice a + where a.cont in + (select distinct cont from rul_temp where acont is null); + crs_linie crs%rowtype; + lcMerge VARCHAR2(10000); + lcAnalitic VARCHAR2(1000); + lcColoanaP VARCHAR2(100); + lcColoanaS VARCHAR2(100); + lcNumeColoanaP VARCHAR2(1000); + lcNumeColoanaS VARCHAR2(1000); + BEGIN + open crs; + loop + fetch crs + into crs_linie; + exit when crs%NOTFOUND; + lcAnalitic := ''; + lcColoanaP := ''; + lcColoanaS := ''; + if crs_linie.tabel_prefix is not null then + lcColoanaP := 'A.' || crs_linie.camp_leg_prefix; + lcNumeColoanaP := crs_linie.camp_leg_prefix; + lcAnalitic := 'substr(a.' || crs_linie.col_prefix || ',' || + crs_linie.poz_start_prefix || ',' || + crs_linie.nr_return_prefix || ')'; + end if; + if crs_linie.tabel_sufix is not null then + lcColoanaS := 'B.' || crs_linie.camp_leg_sufix; + lcNumeColoanaS := crs_linie.camp_leg_prefix; + lcAnalitic := lcAnalitic || '||substr(b.' || + crs_linie.col_sufix || ',' || + crs_linie.poz_start_sufix || ',' || + crs_linie.nr_return_sufix || ')'; + end if; + + lcMerge := 'MERGE INTO RUL_TEMP A1 USING (SELECT ''' || crs_linie.cont || + ''' AS CONT,' || lcAnalitic || ' AS ACONT,' || lcColoanaP || + (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + ',' || lcColoanaS + END) || ' FROM ' || crs_linie.tabel_prefix || ' A ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'LEFT JOIN ' || crs_linie.tabel_sufix || + ' B ON 1=1 AND A.STERS = 0 AND B.STERS = 0 ' + END) || 'WHERE A.STERS = 0) A2 ' || + 'ON (A1.CONT=A2.CONT AND A1.' || lcNumeColoanaP || '=A2.' || + lcNumeColoanaP || ' ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'AND A1.' || lcNumeColoanaS || '=A2.' || lcNumeColoanaS + END) || ') ' || + 'WHEN MATCHED THEN UPDATE SET A1.ACONT=NVL(A1.ACONT,A2.ACONT)'; + + /* begin*/ + EXECUTE IMMEDIATE lcMerge; + /* exception + when others then + raise_application_error(-20000, lcMerge); + end;*/ + + end loop; + close crs; + -- verificarea daca exista analitic in planul de conturi se face in sterge_analitice_gresite_rul + END completeaza_analitice_rul; + ----------------------------------------------------------------------- + PROCEDURE completeaza_parteneri_gestiuni IS + BEGIN + MERGE INTO ACT_TEMP A + USING (SELECT ID_PART, ID_GESTIUNE, CONT + FROM ASOCIERE_PARTENERI_GESTIUNI + WHERE ID_GESTIUNE IN (SELECT DISTINCT ID_GESTIN FROM ACT_TEMP) + AND CONT IN (SELECT CONT FROM config_cont_ireg)) B + ON (B.ID_GESTIUNE = A.ID_GESTIN AND B.CONT = A.SCD) + WHEN MATCHED THEN + UPDATE + SET ID_PARTD = DECODE(NVL(A.ID_PARTD, 0), 0, B.ID_PART, A.ID_PARTD); + + MERGE INTO ACT_TEMP A + USING (SELECT ID_PART, ID_GESTIUNE, CONT + FROM ASOCIERE_PARTENERI_GESTIUNI + WHERE ID_GESTIUNE IN (SELECT DISTINCT ID_GESTOUT FROM ACT_TEMP) + -- = pack_facturare.nid_gestiune_sursa + AND CONT IN (SELECT CONT FROM config_cont_ireg)) B + ON (B.ID_GESTIUNE = A.ID_GESTOUT AND B.CONT = A.SCC) + WHEN MATCHED THEN + UPDATE + SET ID_PARTC = DECODE(NVL(A.ID_PARTC, 0), 0, B.ID_PART, A.ID_PARTC); + END completeaza_parteneri_gestiuni; + ----------------------------------------------------------------------- + PROCEDURE sterge_analitice_gresite IS + BEGIN + MERGE INTO ACT_TEMP A + USING (SELECT ID_ACT, SUM(TIP) AS TIP + FROM (SELECT ID_ACT, 1 AS TIP + FROM ACT_TEMP + WHERE ASCD IS NOT NULL + AND TRIM(SCD) || '.' || TRIM(ASCD) NOT IN + (SELECT TRIM(CONT) || '.' || TRIM(ACONT) + FROM VPLCONT_ANALITIC + WHERE AN = pack_sesiune.getan()) + UNION ALL + SELECT ID_ACT, 2 AS TIP + FROM ACT_TEMP + WHERE ASCC IS NOT NULL + AND TRIM(SCC) || '.' || TRIM(ASCC) NOT IN + (SELECT TRIM(CONT) || '.' || TRIM(ACONT) + FROM VPLCONT_ANALITIC + WHERE AN = pack_sesiune.getan())) + GROUP BY ID_ACT) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE + SET ASCD = DECODE(B.TIP, 1, NULL, 3, NULL, A.ASCD), + ASCC = DECODE(B.TIP, 2, NULL, 3, NULL, A.ASCC); + + END sterge_analitice_gresite; + ----------------------------------------------------------------------- + PROCEDURE sterge_analitice_gresite_rul IS + BEGIN + UPDATE RUL_TEMP + SET ACONT = NULL + WHERE ACONT IS NOT NULL + AND TRIM(CONT) || '.' || TRIM(ACONT) NOT IN + (SELECT TRIM(CONT) || '.' || TRIM(ACONT) + FROM VPLCONT_ANALITIC + WHERE AN = pack_sesiune.getan()); + + END sterge_analitice_gresite_rul; + ----------------------------------------------------------------------- + FUNCTION verifica_id_documente(lcSirIdFact IN VARCHAR2) RETURN VARCHAR2 IS + lcSeparator VARCHAR2(1) := ','; + lcMesaj VARCHAR2(2000); + BEGIN + select stringagg(serie_act || ' ' || nract || '/' || + to_char(dataact, 'DD.MM.YYYY')) as mesaj + into lcMesaj + from documente + where sters = 1 + and id_doc in + (SELECT X as id_doc + FROM table(charn2collection(lcSirIdFact, lcSeparator))); + Return lcMesaj; + END; + + --------------------------------------------------------------------- + -- caut o inregistrare cu id_furnizor in rul_auxiliar si o intorc - pentru reciclarea inregistrarilor din rul_auxiliar + -- daca nu gasesc inregistrare, adaug una noua + --------------------------------------------------------------------- + function GetRulajAuxiliarFurnizor(tnIdFurnizor rul_auxiliar.id_furnizor%type) + return rul_auxiliar.id_rul_aux%type is + tnIdRulAux rul_auxiliar.id_rul_aux%type; + begin + select min(id_rul_aux) + into tnIdRulAux + from rul_auxiliar + where id_furnizor = tnIdFurnizor; + if tnIdRulAux is null then + insert into rul_auxiliar + (id_furnizor) + values + (tnIdFurnizor) + returning id_rul_aux into tnIdRulAux; + end if; + return tnIdRulAux; + + end GetRulajAuxiliarFurnizor; + + procedure GetRulajAuxiliarFurnizor(tnIdFurnizor IN rul_auxiliar.id_furnizor%type, + tnIdRulAux OUT rul_auxiliar.id_rul_aux%type) is + begin + tnIdRulAux := GetRulajAuxiliarFurnizor(tnIdFurnizor); + end; +BEGIN + nCod := 0; + dDataOra := SYSDATE; + nIdFact := 0; + nIdUtil := 0; +end PACK_CONTAFIN; +/ diff --git a/docs/service-auto/PACK_FACTURARE.pck b/docs/service-auto/PACK_FACTURARE.pck new file mode 100644 index 0000000..08bb360 --- /dev/null +++ b/docs/service-auto/PACK_FACTURARE.pck @@ -0,0 +1,16946 @@ +CREATE OR REPLACE PACKAGE "PACK_FACTURARE" is + + -- Author : MARIUS.ATANASIU + -- Created : 05/09/2005 09:25:00 AM + -- Purpose : + + -- 30.10.2009 + -- marius.mutu + -- nTipVanzareRetail in contabilizeaza_articol, scrie_tva + -- nTipIncasare: scrie_incsare2 + -- descarca_gestiune - tva adaos + + -- 20.03.2026 - duplicate CODMAT pe comanda: PRET in GROUP BY/JOIN (cursor_comanda, cursor_lucrare, inchide_comanda, adauga_articol_*) + -- 20.03.2026 - SIGN() fix for negative quantity (discount) lines in cursor_comanda and inchide_comanda + -- 20.03.2026 - Fix NULL SUMA in adauga_articol_factura: use PTVA from COMENZI_ELEMENTE for discount lines (NVL2) + -- 23.03.2026 - Optiune sortare articole pe factura: RF_SORTARE_COMANDA (1=alfabetic, 0=ordine comanda) in cursor_comanda + + cnume_program VARCHAR(30) := 'ROAFACTURARE'; + + TYPE cursor_facturare IS REF CURSOR; + TYPE tip_date_gestiune IS RECORD( + id_gestiune NOM_GESTIUNI.ID_GESTIUNE%TYPE, + id_tip_gest TIPURI_GESTIUNI.ID_TIPGEST%TYPE, + cont NOM_GESTIUNI.CONT%TYPE, + acont NOM_GESTIUNI.ACONT%TYPE); + + TYPE linie_stoc IS RECORD( + TIP NUMBER(1), + pret RUL.PRET%TYPE, + pretv RUL.PRETV%TYPE, + acont RUL.ACONT%TYPE, + cants STOC.CANTS%TYPE, + cant RUL.CANT%TYPE, + cante RUL.CANTE%TYPE, + tvav RUL.TVAV%TYPE, + proc_tvav RUL.PROC_TVAV%TYPE, + tva RUL.TVA%TYPE, + datain RUL.DATAIN%TYPE, + id_rul_aux RUL.ID_RUL_AUX%TYPE, + pretd RUL.PRETD%TYPE, + id_valuta RUL.ID_VALUTA%TYPE, + LOT RUL.LOT%TYPE, + ADATA_EXPIRARE RUL.ADATA_EXPIRARE%TYPE, + serie RUL.SERIE%TYPE, + ID_LUCRARE_REZ RUL.ID_LUCRARE_REZ%TYPE, + ID_PART_REZ RUL.ID_PART_REZ%TYPE, + PRETACHCTVA NOM_ARTICOLE.PRETACHCTVA%TYPE); + TYPE tab_stoc_type IS TABLE OF linie_stoc; + + TYPE articol_aviz IS RECORD( + ID_VANZARE VANZARI_DETALII.ID_VANZARE%TYPE, + ID_VANZARE_DET VANZARI_DETALII.ID_VANZARE_DET%TYPE, + CANTITATE VANZARI_DETALII.CANTITATE%TYPE, + CUSTODIE VANZARI_DETALII.CUSTODIE%TYPE, + COD ACT.COD%TYPE, + ID_FACT ACT.ID_FACT%TYPE, + NRACT ACT.NRACT%TYPE, + SERIE_ACT ACT.SERIE_ACT%TYPE, + DATAACT ACT.DATAACT%TYPE, + ASCD ACT.ASCD%TYPE, + ID_SECTIE ACT.ID_SECTIE%TYPE); + TYPE tab_articole_aviz_type IS TABLE OF articol_aviz; + + nid_tipnir SERII_TIPDOC.ID_TIPDOC%TYPE := 1; + nid_tipbon SERII_TIPDOC.ID_TIPDOC%TYPE := 2; + nid_tipfactura SERII_TIPDOC.ID_TIPDOC%TYPE := 5; + nid_tipaviz SERII_TIPDOC.ID_TIPDOC%TYPE := 6; + + -- 30.10.2009 + nTipVanzareRetail VANZARI.TIP%TYPE := 43; + -- 30.10.2009 ^ + -- 26.08.2009 + nTipFacturaHotel VANZARI.TIP%TYPE := 44; + nTipFacturaRestaurant VANZARI.TIP%TYPE := 45; + -- 26.08.2009 ^ + nTipNotaPlata VANZARI.TIP%TYPE := 46; + + nTipFacturaACN VANZARI.TIP%TYPE := 51; + + /*** Valori pentru (lnIdSet,tnTip) + ** Facturare + ** (25000,1) - pe baza de lista de preturi ( 25010 - daca e cu scadere din gestiune ) + ** (25001,2) - pe baza de contracte ( 25011 - daca e cu scadere din gestiune ) + ** (25002,3) - pe baza de comenzi ( 25012 - daca e cu scadere din gestiune ) + ** (25003,4) - pe baza de avize ( 25013 - daca e cu scadere din gestiune ) + ** (25004,5) - pe baza de lista de preturi in valuta ( 25014 - daca e cu scadere din gestiune ) + ** (25005,6) - pe baza de contract in valuta ( 25015 - daca e cu scadere din gestiune ) + ** (25006,7) - credit note + ** (25007,8) - retur factura in lei ( 25017 ) + ** (25008,9) - retur factura in valuta ( 25018 ) + ** (25009,10) - factura fiscala in valuta ( 25019 ) + ** (25042,43) - bon fiscal ROARETAIL ( 25052 - daca e cu scadere din gestiune ) + ** (25043,44) - factura hotel + ** (25044,45) - factura restaurant ( 25054 ) + ** (25045,46) - nota de plata restaurant ( 25055 ) + ** (25047,48) - factura marfa custodie cu desc. k ( 25057 ) + ** (25048,49) - factura marfa custodie fara desc. k ( 25058 ) + ** (25051,52) - pe baza de contract factura fiscala in valuta ( 25061 - daca e cu scadere din gestiune ) + + ** Avize de expeditie + ** (25020,21) - catre clienti din comanda ( 25030 - daca e cu scadere din gestiune ) + ** (25021,22) - catre clienti din lista ( 25031 - daca e cu scadere din gestiune ) + ** (25022,23) - transfer catre subunitati din lista ( 25032 - daca e cu scadere din gestiune ) + ** (25023,24) - aviz de retur ( 25033 - daca e cu scadere din gestiune ) + ** (25024,25) - transfer catre subunitati din comanda ( 25034 - daca e cu scadere din gestiune ) + ** (25025,26) - catre clienti din contract ( 25035 - daca e cu scadere din gestiune ) + ** (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + ** (25027,28) - catre clienti debitori din comanda ( 25037 - daca e cu scadere din gestiune ) + ** (25028,29) - catre clienti debitori din lista ( 25038 - daca e cu scadere din gestiune ) + ** (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune ) + ** (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + ** (25041,42) - catre clienti custodie pe baza de comanda ( 25051 - daca e cu scadere din gestiune ) + ** (25046,47) - catre clienti custodie pe baza de comanda ptr. descarcare cu K ( 25056 - daca e cu scadere din gestiune ) + ** (25049,50) - in lucru retur de la clienti custodie ( 25059 - daca e cu scadere din gestiune ) + + ** ROAGEST + ** (236/240/241/242,-6) - retur de la gestiune valorica + ** + ** ROARETAIL + ** (25042,43) - bonuri fiscale colectate de la magazine ( 25052 - daca e cu scadere din gestiune ) + + ** ROAACNPRO + ** (50100,51) - factura ROAACNPRO ( 25060 - daca e cu scadere din gestiune ) + */ + + -------------------------------------- + nTipIncasareBonFiscal NUMBER := 2; + nTipIncasareCardBancar NUMBER := 3; + nTipIncasareTichete NUMBER := 5; + nTipIncasareChitanta NUMBER := 11; + ------------------------------------ + nSaftPaymentCodeNumerar varchar2(9) := '10'; + nSaftPaymentCodeCard varchar2(9) := '48'; + ------------------------------------ + nid_act ACT.ID_ACT%TYPE; + nid_serie SERII.ID_SERIE%TYPE; + cserie_act SERII.SERIE%TYPE; + v_date_gestiune tip_date_gestiune; + ddata_curs DATE; + ddata_ireg ACT.DATAIREG%TYPE; + nid_fdoc ACT.ID_FDOC%TYPE; + ddata_act ACT.DATAACT%TYPE; + ddata_scadenta ACT.DATASCAD%TYPE; + nnumar_act ACT.NRACT%TYPE; + nid_part ACT.ID_PARTD%TYPE; + nid_part_rez ACT.ID_PARTD%TYPE; + nid_lucrare NOM_LUCRARI.ID_LUCRARE%TYPE; + nid_sectie_stoc NOM_SECTII.ID_SECTIE%TYPE; -- id_sectie pentru politica de preturi cu facturare din stoc + nid_gestiune_sursa NOM_GESTIUNI.ID_GESTIUNE%TYPE; + nid_responsabil ACT.ID_RESPONSABIL%TYPE; + cexplicatia4 ACT.EXPLICATIA4%TYPE; + nid_ordl DEV_ORDL.ID_ORDL%TYPE; + nid_set ACT.ID_SET%TYPE; + nid_util SYN_UTILIZATORI.ID_UTIL%TYPE; + nproc_tva_max ACT.PROC_TVA%TYPE; + cdescriere ACT.EXPLICATIA%TYPE; + ntip NUMBER(2); + nid_moneda_nationala NOM_VALUTE.ID_VALUTA%TYPE; + nid_fact ACT.ID_FACT%TYPE; + nid_factc ACT.ID_FACTC%TYPE; + nperechec ACT.PERECHEC%TYPE; + nid_partc ACT.ID_PARTC%TYPE; + nid_jtva_coloana ACT.ID_JTVA_COLOANA%TYPE; + nTaxCode ACT.TAXCODE%TYPE; + ntva_incasare NUMBER(1); + nid_comanda COMENZI.ID_COMANDA%TYPE; + nin_valuta VANZARI.IN_VALUTA%TYPE; + nid_valuta NOM_VALUTE.ID_VALUTA%TYPE; + nid_politica_stoc CRM_POLITICI_PRETURI.ID_POL%TYPE; + nid_sucursala SYN_NOM_FIRME.ID_FIRMA%TYPE; + nid_venchelt NOM_VENIT_CHELTUIELI.ID_VENCHELT%TYPE; + ntotftva ACT.SUMA%TYPE; + ntottva ACT.SUMA%TYPE; + ndifftva VANZARI.DIFTOTFTVA%TYPE; + ndiftva VANZARI.DIFTOTTVA%TYPE; + nfactavizcust NUMBER(1); + nafisare_scadenta VANZARI.AFISARE_SCADENTA%TYPE; + ncoeficient_k VANZARI.COEFICIENT_K%TYPE; + cserie_act_incasare SERII.SERIE%TYPE; + nnumar_act_incasare ACT.NRACT%TYPE; + ntip_doc_incasare NUMBER(2); -- 2 (BON FISCAL) sau 11 (CHITANTA) pentru SCRIE_IN_VANZARI + nsuma_incasare ACT.SUMA%TYPE; -- SUMA pentru SCRIE_IN_VANZARI + -- in rate sau articole + clistaid VARCHAR2(3000); + clistaid_avize VARCHAR2(3000); -- folosit pentru facturare din avize + nid_vanzare VANZARI.ID_VANZARE%TYPE; + ccod_retur VARCHAR2(3000); + + clista_cursuri VARCHAR2(1000); + + nluna ACT.LUNA%TYPE; + nan ACT.AN%TYPE; + nzecimale_procent NUMBER(2); + nscadere_stoc NUMBER(1) := 0; + ndiscount_evidentiat NUMBER(1) := 0; + cascc ACT.ASCC%TYPE; + cascd ACT.ASCD%TYPE; + + nnumar_bon ACT.NNIR%TYPE := 0; + nanalitice_378 NUMBER(1) := 0; + + ntip_factura VANZARI.TIP_FACTURA%TYPE; + nid_beneficiar VANZARI.ID_BENEFICIAR%TYPE; + ntip_saft VANZARI.TIP_SAFT%TYPE; -- EFACTURA 380/381/751 + + PROCEDURE verificare_setari_program(V_ID_UTIL IN NUMBER, + V_MESAJ OUT VARCHAR2); + + PROCEDURE initializeaza_facturare(V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_seturi_temp; + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TIP_FACTURA IN NUMBER, + V_ID_BENEFICIAR IN NUMBER, + V_TIP_SAFT IN NUMBER DEFAULT 380); + + PROCEDURE initializeaza_setari_facturare; + + PROCEDURE initializeaza_date_gestiune(V_ID_GESTIUNE IN NUMBER, + V_ID_TIPGEST IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2); + + PROCEDURE citeste_setari_document(V_TIP IN NUMBER, + V_ID_FDOC OUT NUMBER, + V_FDOC OUT VARCHAR2); + + PROCEDURE citeste_setari_partener(V_TIP IN NUMBER, + V_ID_PART OUT NUMBER, + V_DENUMIRE OUT VARCHAR2); + + PROCEDURE citeste_setari_pol_pret(V_TIP IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_POL OUT NUMBER, + V_DENUMIRE OUT VARCHAR2); + + PROCEDURE genereaza_numar_proforma(V_NR_PROFORMA OUT NUMBER); + + PROCEDURE completare_politica_stoc; + + PROCEDURE modificare_politica_stoc(V_ID_POL IN NUMBER); + + PROCEDURE cursor_preturi(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_contract(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_AGENT OUT NUMBER, + V_NUME_AGENT OUT VARCHAR2, + V_CURSOR OUT cursor_facturare, + V_CURSOR2 OUT cursor_facturare); + + PROCEDURE cursor_comanda(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_lucrare(V_DATA_CURS IN DATE, + V_ID_GESTIUNE IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_articole_k(V_DATA_CURS IN DATE, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_avize(V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_DISCOUNT OUT NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_aviz_nir(V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_FURNIZOR IN NUMBER, + V_NR_ACT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_retur(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_retur_document(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_COPIERE IN NUMBER, + V_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_copiere(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiune(V_DATA_CURS IN DATE, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiuni_articol(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiuni_articol_stoc0(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE cursor_gestiuni_articol_retur(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + PROCEDURE adauga_articol_factura_deviz(V_ID_ARTICOL IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_ID_JTVA_COLOANA_EX IN NUMBER DEFAULT NULL, + V_ID_CTR IN NUMBER DEFAULT NULL, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL); + + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_RUL_AUX IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL); + + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER); + + PROCEDURE adauga_articol_lucrare_pret(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_UTIL IN NUMBER, + V_PRETIN in number); + + PROCEDURE adauga_articol_set(V_ID_VANZARE_SET IN NUMBER, + V_DENUMIRE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_UM IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER); + + PROCEDURE adauga_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRET_ACHIZITIE_TEMP IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET_TEMP IN NUMBER, + V_ID_VALUTA_TEMP IN NUMBER, + V_PRETURI_CU_TVA_TEMP IN NUMBER, + V_IN_STOC_TEMP IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_PRETV_ORIG IN NUMBER, + V_ID_VANZARE_SET IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL); + + PROCEDURE sterge_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE adauga_diferente_pret(V_SIR_ID_TEMP IN VARCHAR2, + V_SIR_DIFERENTA IN VARCHAR, + V_ID_UTIL IN NUMBER); + + PROCEDURE adauga_rata_factura(V_ID_RATA IN NUMBER, + V_PRET IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL); + + PROCEDURE sterge_rata_factura(V_ID_RATA IN NUMBER, V_ID_UTIL IN NUMBER); + + PROCEDURE sterge_proforma_old(V_ID_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE sterge_factura(V_ID_VANZARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE sterge_proforma(V_ID_VANZARE IN NUMBER, V_ID_UTIL IN NUMBER); + + PROCEDURE scrie_proforma_old(V_DISCOUNT_PROFORMA IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_PROFORMA OUT NUMBER, + V_NUMAR_ACT OUT NUMBER); + + PROCEDURE scrie_proforma(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER); + + PROCEDURE inchide_comanda; + + PROCEDURE scrie_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_SERIE_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + /* PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/ + + PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + /* PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare);*/ + + PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare); + + /* PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/ + + PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + /* PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare);*/ + + PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + FUNCTION contabilizeaza_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER; + + FUNCTION contabilizeaza_rata(detalii_rata VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER; + + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER); + + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER); + + PROCEDURE scrie_fact_aviz_custodie(V_COD IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER); + + PROCEDURE transfera_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE); + + FUNCTION scrie_nota(V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, -- 0 DACA V_PRET NU CONTINE SI TVA-UL ( PRETUL FOLOSIT CA REFERINTA ) + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SCD IN VARCHAR2, + V_ASCD IN VARCHAR2, + V_SCC IN VARCHAR2, + V_ASCC IN VARCHAR2, + V_ID_GESTIN IN NUMBER, + V_ID_GESTOUT IN NUMBER, + V_ID_SET IN NUMBER, + V_CU_TVA IN NUMBER, -- 0 DACA SE SCRIE SI NOTA DE TVA + V_PTVA IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_PAYMENTCODE IN NUMBER DEFAULT NULL) RETURN NUMBER; + + PROCEDURE scrie_tva(V_SUMA IN NUMBER, + V_SUMA_VAL IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_PTVA IN NUMBER, + V_ID_FACT IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER); + + FUNCTION scrie_discount(V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_ASCC IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_CU_TVA IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) + RETURN NUMBER; + + PROCEDURE scrie_descarcare_k(V_COEFICIENT_K IN NUMBER); + + PROCEDURE scrie_avans(V_SUMA IN NUMBER); + + Procedure scrie_incasari(V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_CTR IN NUMBER); + + PROCEDURE scrie_incasare2(V_TIP IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_BANCASA IN NUMBER, + V_SUMA IN NUMBER, + V_ASCC IN ACT.ASCC%TYPE DEFAULT NULL, + V_PSCD IN ACT.SCD%TYPE DEFAULT NULL, + V_ASCD IN ACT.ASCD%TYPE DEFAULT NULL); + + /* PROCEDURE scrie_incasare(V_NUMAR_ACT_INCASARE IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_CASA IN NUMBER, + V_SUMA IN NUMBER);*/ + + PROCEDURE scrie_note_banca_compensari; + + /* PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER);*/ + + PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER); + + PROCEDURE scrie_atasamente_factura(V_ID_VANZARE IN NUMBER, + V_NUME_FRX IN NUMBER, + V_WDOCUMENT IN BLOB, + V_ID_UTIL IN NUMBER); + + PROCEDURE scrie_seturi; + + PROCEDURE scrie_seturi_proforma; + + PROCEDURE initializeaza_part_rez(V_ID_PART IN NUMBER); + + PROCEDURE cumuleaza_note_act; + + PROCEDURE cumuleaza_note_act_temp; + + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare); + + PROCEDURE modifica_date_factura(V_ID_VANZARE IN NUMBER, + V_ID_RUTA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_AGENT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_FACTURARE IN VANZARI.ID_FACTURARE%TYPE, + V_LISTARE_DETALIATA IN VANZARI.LISTARE_DETALIATA%TYPE, + V_TEXT_ADITIONAL IN VANZARI.TEXT_ADITIONAL%TYPE, + V_TIP_SAFT IN VANZARI.TIP_SAFT%TYPE DEFAULT NULL, + V_EFACTURA IN VANZARI.EFACTURA%TYPE DEFAULT NULL, + V_DATA_ACT IN VANZARI.DATA_ACT%TYPE DEFAULT NULL, + V_DATA_SCAD IN VANZARI.DATA_SCAD%TYPE DEFAULT NULL, + V_NUMAR_ACT IN VANZARI.NUMAR_ACT%TYPE DEFAULT NULL, + V_SERIE_ACT IN VANZARI.SERIE_ACT%TYPE DEFAULT NULL); + + PROCEDURE modifica_explicatie_articol(V_ID_VANZARE_DET IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL); + + PROCEDURE initializeaza_moneda_nationala; + + PROCEDURE scrie_cursuri_proforma(V_ID_PROFORMA IN NUMBER); + + PROCEDURE scrie_cursuri(V_ID_VANZARE IN NUMBER); + + PROCEDURE scrie_rate_factura(V_DATAORA IN DATE); + + FUNCTION calculeaza_k RETURN NUMBER; + + PROCEDURE calculeaza_pret(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER, + V_PRET_FARA_TVA OUT NUMBER, + V_PRET_TVA OUT NUMBER, + V_PRET_CU_TVA OUT NUMBER); + + /* function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) return number; + + function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) return number; + + function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) return number;*/ + + PROCEDURE calculeaza_sume(V_PRET_UNITAR IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER, + V_CANTITATE IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_SUMA_FARA_TVA OUT NUMBER, + V_SUMA_TVA OUT NUMBER, + V_SUMA_CU_TVA OUT NUMBER); + + /* PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER);*/ + + PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER); + + PROCEDURE finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER); + + /* PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER);*/ + + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER); + + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER); + + Procedure initializeaza_scriere_actrul(tdDataOra IN DATE, + tnSuprascriereCod IN NUMBER DEFAULT 1); + + PROCEDURE finalizeaza_scriere_actrul; + + PROCEDURE marcheaza_facturat(V_VERIFICARE IN NUMBER); + + PROCEDURE scrie_cantitati_vanzari_avize; + + PROCEDURE scrie_corespondente_vanzari(V_TIP IN NUMBER); + + PROCEDURE cauta_date_ultima_factura(V_ID_PART IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2); + + PROCEDURE cauta_date_ultima_factura_tip(V_TIP IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2); + + PROCEDURE cauta_date_comanda(V_ID_CLIENT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2); + + PROCEDURE cauta_date_comanda_gest(V_ID_GESTIUNE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2); + + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_cu_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_fara_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + FUNCTION calculeaza_total_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER; + + PROCEDURE actualizeaza_vanzari(V_COD_VECHI IN NUMBER, + V_COD_NOU IN NUMBER); + + PROCEDURE sterge_din_vanzari(V_COD IN NUMBER, + V_AN IN NUMBER, + V_LUNA IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE verifica_cursuri_valute(V_DATA_CURS IN DATE, + V_ID_UTIL IN NUMBER); + + PROCEDURE verifica_total_document; + + PROCEDURE verifica_analitice378; + + function GetAnaliticByGrupUtilizatori(tnIdUtilizator ACT.ID_UTIL%TYPE, + tcCont ACT.SCD%TYPE) + return ACT.ASCD%TYPE; + + FUNCTION GetAnaliticByArticol(tcCont RUL.CONT%TYPE, + tnIdGestiune RUL.ID_GESTIUNE%TYPE DEFAULT NULL, + tnIdArticol RUL.ID_ARTICOL%TYPE DEFAULT NULL) + return RUL.ACONT%TYPE; + + Procedure citeste_vanzari_seturi(V_COD IN NUMBER, + V_CURSOR OUT cursor_facturare); + + Procedure citeste_proforme_seturi(V_ID_PROFORMA IN NUMBER, + V_CURSOR OUT cursor_facturare); + + procedure adauga_note_tva_incasare; + + function citeste_lungcampexplart return NUMBER; + + function getAnaliticK(tnProcTvaV IN NUMBER) return VARCHAR2; + + procedure getSoldClient(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnIdPart IN NUMBER, + tnIdFact IN NUMBER default 0, + V_CURSOR OUT cursor_facturare); +end PACK_FACTURARE; +/ +CREATE OR REPLACE PACKAGE BODY "PACK_FACTURARE" is + -- ultima eroare atribuita : FACT-024 + + -- 09.02.2010 + -- marius.mutu + -- la vanzarea din stoc din ROARETAIL - aflu preturile de achizitie/vanzare, seria, gestiunea si trebuie sa intru pe ramura default + -- DESCARCAREA DE GESTIUNE OFFLINE TREBUIE RESCRISA SA FOLOSEASCA PROCEDURA PACK_RETAIL_STOC.SALVEAZABON + + -- 29.03.2010 + -- marius.mutu + -- adaugare GetAnaliticByArticol pentru obtinerea analiticului 607,608, 378,388 + -- dupa configurare_analitice pe gestiuni/articole in procedura descarcare_gestiune + + -- 08.07.2010 + -- marius.mutu + -- descarca_gestiune - In mesaj Eroare FACT-007 se afiseaza Id gestiune, Id articol + + -- 11.08.2010 + -- marius.mutu + -- scrie_incasari, transmit parametri V_SCD, V_ASCD la scrie_incasare2 + optiune pentru CONT DEBIT V_SCD + + -- 08.11.2010 + -- transfera_articol + -- (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + -- la retur transfer, trebuie schimbat semnul diferentei de pret + + -- 05.07.2011 + -- marius.mutu + -- contabilizeaza_articol - tratare exceptie NO_DATA_FOUND FACT-024 + + -- 13.01.2014 + -- marius.mutu + -- Am completat ID_RESPONSABIL la instructiunile INSERT INTO ACT_TEMP + + -- 03.02.2015 + -- marius.mutu + -- citeste_setari_document: adaugat PROFORMA, BON FISCAL + + -- 16.02.2015 + -- marius.mutu + -- CURSOR_PRETURI + -- FACTURARE LISTA PRETURI: se selecteaza toate articolele din lista de preturi, indiferent daca au stoc > 0 + -- optiunea RF_FACTURARE_FARA_STOC = 1 + -- descarca_gestiune: se pot vinde pe factura si articole retur (cante < 0) si articole care nu sunt in stoc (RF_FACTURARE_FARA_STOC) + + -- 06.03.2015 + -- marius.mutu + -- descarca_gestiune: la factura de vanzare lista de preturi se descarca mai intai + -- articolele retur din facturi anterioare, apoi + -- articolele din stoc (indiferent daca cantitate este pozitiva sau negativa), apoi + -- articolele fara stoc (RF_FACTURARE_FARA_STOC) + -- asa se pot factura articole din stoc, cu cantitate < 0 (retur, fara factura anterioara) + + -- 30.04.2015 + -- marius.mutu + -- descarca gestiune: la factura de vanzare lista de preturi s-au pus 2 ramuri + -- tip = 1 daca exista cantitate retur < 0 si lista articole retur din rulaj + tip = 2,3 + -- tip = 2,3 daca nu exista cantitate retur < 0 + lista articole retur din rulaj + -- pentru ca la conpress group statea sa parcurga tot rulajul de la tip = 1, chiar daca v_cante nu era < 0 + + -- 16.06.2015 + -- marius.mutu + -- modifica_date_factura + -- + id_facturare,listare_detaliata + + -- 01.02.2016 + -- marius.mutu + -- cumuleaza_note_act + -- sterg inregistrarile cu suma 0 doar daca am inregistrari cu suma <> 0 + -- altfel nu se inregistreaza nimic in Reg. Jurnal ACT, doar in RUL si VANZARI/VANZARI_DETALII + + -- getAnaliticK: tratare caz cota TVA 1.24, 1.20, 1.19 + + -- 18.03.2016 + -- marius.mutu + -- descarca_gestiune: PROC_TVAV_ORIG se ia din STOC daca este gestiune mf la pret de vz sau stoc.proc_tvav <> 0 + -- in loc sa se calculeze pack_sesiune.tva2proctva + + -- 14.07.2016 + -- marius.mutu + -- modifica_date_factura - adaugare parametru V_TEXT_ADITIONAL + + -- 08.12.2016 + -- marius.mutu + -- cursor_avize - factura din aviz. se iau si cantitatile negative, nu numai cele pozitive (avize de retur) + + -- 12.12.2016 + -- marius.mutu + -- scrie_factura_avize - daca articolele aveau discount unitar si nu era evidentiat distinct contabil, valoarea 4111 = 418 era (pret diminuat cu discount) - discount + -- am facut discountul = 0 pe ramura cu discount neevidentiat in notele contabile, dupa ce l-am extras din pret. + + -- 03.02.2017 + -- marius.mutu + -- cursor_preturi - la factura in valuta nu aducea articole discount 667. nu stiu de ce. la facturile in lei nu era restrictia. + + -- 03.02.2017 + -- marius.mutu + -- cursor_preturi - aviz de expeditie - se afiseaza si articole negestionabile + + -- 20.03.2017 + -- marius.mutu + -- denormalizare vanzari - completare date redundante pentru a nu se mai selecta de fiecare data pentru fact_vfacturi + -- scrie_incasari - se completeaza pack_Facturi.ntip_doc_incasare CHITANTA/BON FISCAL + -- scrie_in_vanzari - completare vanzari cu sume calculate din vanzari_detalii si act pentru a nu se mai calcula la fiecare selectie din fact_vfacturi + -- scrie_corespondente_vanzari - completare vanzari.avize cu seria/nr avize facturate pentru a nu se mai selecta din fact_vdetalii_avize + + -- 11.10.2017 + -- marius.mutu + -- pack_facturare.getAnaliticK - se folosesc optiuni noi pentru fiecare cota TVA + + -- 27.10.2017 + -- marius.mutu + -- pack_facturare.descarca_gestiune - vanzare de articole fara stoc - analiticul se completeaza conform configurarilor + + -- 16.03.2018 + -- marius.mutu + -- scrie_factura2 - tratare aviz retur tip = 24 + + -- 05.02.2019 + -- marius.mutu + -- scrie_in_vanzari, finalizeaza_avize_lucrare: corectate vanzari.total_fara_tva si total_cu_tva pe ramura cu seturi + + -- 21.03.2019 + -- marius.mutu + -- citeste_setari_document: adaugat FACTURA ROAACNPRO 51 + + -- 10.04.2019 + -- marius.mutu + -- adauga_articol_factura_stoc, adauga_articol_factura_deviz - completare VANZARI_DETALII_TEMP.ID_TEMP CU 0 (NOT NULL) + -- scrie_in_vanzari tip = 51 factura ACN + + -- 09.08.2019 + -- marius.mutu + -- adauga_articol_factura_deviz : V_ID_CTR + -- scrie_in_vanzari: VANZARI_DETALII_TEMP.ID_JTVA_COLOANA_EX + + -- 28.08.2019 + -- marius.mutu + -- finalizeaza_factura - completez id_fact + -- scrie_in_vanzari - completeaza data_scad, id_ctr + -- scrie_in_vanzari - completeaza id_valuta, curs, multiplicator. nu stiu de ce nu se completau + + -- 02.09.2019 + -- marius.mutu + -- scrie_in_vanzari - completeaza vanzari.valval, tvaval, totval + + -- 29.10.2019 + -- marius.mutu + -- sterge_factura pack_acn.sterge_vanzare pentru tip = 51 (ROAACNPRO) + -- initializeaza_date_factura, scrie_in_vanzari - completare vanzari.tip_factura, id_beneficiar + + -- 06.11.2019 + -- marius.mutu + -- scrie_nota, scrie_tva, verifica_totaluri - tratare cont 709 (rabat), la fel ca si 667 (discount) + + -- 03.07.2020 + -- marius.mutu + -- initializeaza_date_factura se initializeaza cu NULL ntip_doc_incasare, nsuma_incasare, clistaid_avize + -- ramaneau completate pe facturile urmatoare de la o factura anterioara + + -- 28.01.2021 + -- marius.mutu + -- MODIFICARE PACK_FACTURARE.SCRIE_PROFORMA, STERGE_PROFORMA sa scrie in VANZARI + -- + PACK_FACTURARE.cursor_retur_document = PACK_FACTURARE.cursor_retur + parametrul eproforma + + -- 26.03.2021 + -- marius.mutu + -- cursor_retur_document + parametru v_copiere, pentru atributul gestionabil + + -- 05.07.2021 + -- marius.mutu + -- scrie_in_vanzari - text aditional repl chr(170) cu chr(13) + chr(10) - bug da eroare la CHR(13) + chr(10) + + -- 27.07.2021 + -- marius.mutu + -- cursor_retur_document - completat cu coloane din vanzari_detalii + + -- 22.11.2021 + -- marius.mutu + -- scrie_incasare2 - INCASARE CARD 5125 IN LOC DE 5312 + -- citeste_setari_document + + -- 26.11.2021 + -- marius.mutu + -- scrie_incasari - initializare ntip_doc_incasare cu ultimul tip de incasare folosit + + -- 04.03.2022 + -- scrie_tva - explicatia in registrul jurnal fara 'TVA ' + + -- 22.03.2022 + -- ADAUGA_ARTICOL_FACTURA, ADAUGA_ARTICOL_FACTURA_DEVIZ, ADAUGA_ARTICOL_FACTURA_STOC, adauga_rata_factura, cumuleaza_note_act + V_TAXCODE (COD TAXA SAFT) + -- incasari - SAFT ACT.paymentcode + + -- 27.03.2022 + -- ADAUGA_ARTICOL_FACTURA, ADAUGA_ARTICOL_FACTURA_DEVIZ, ADAUGA_ARTICOL_FACTURA_STOC, adauga_rata_factura, TAXCODE NULL + + -- 09.06.2022 + -- SCRIE_TVA: COMPLETEAZA TAXCODE PE LINIA DE TVA + + -- 24.06.2022 + -- modifica_date_factura - COMPLETARE VANZARI.TIP_SAFT + + -- 27.01.2023 + -- scrie_in_vanzari corectare calcul valori in lei, daca factura este in valuta, total_ron = sum(pret_ron * cantitatea), in loc de total_valuta * curs + + -- 08.02.2023 + -- modifica_date_factura + efactura + + -- 22.02.2023 + -- scrie_in_vanzari corectare calcul valori in lei, daca factura este in valuta sau invoice, total_ron = sum(pret_ron * cantitatea), in loc de total_valuta * curs + + -- 08.05.2023 + -- verifica_total_document - completare TAXCODE SAFT + -- scrie_nota - tratare 512x - la incasarea cu cardul 5125 se aduna si suma de plata la total, apoi se scadea la verifica_total_document + + -- 22.05.2023 + -- modifica_explicatie_articol - completare TAXCODE SAFT + + -- 13.06.2023 + -- scriere ID_JTVA_COLOANA, SAFT.TAXCODE in RUL + -- descarca_gestiune + ID_JTVA_COLOANA, TAXCODE + -- facturare_articole2, contabilizeaza_articol > descarca_gestiune + + -- finalizeaza_factura - corectie vanzari.id_Fact daca factura este incasata + + -- 09.10.2023 + -- + getSoldClient + + -- 09.11.2023 + -- verifica_total_document - se exclud notele 512x = 4111 din valoarea facturii + + -- 17.11.2023 + -- adaugat tipul 52 factura fiscala in valuta pe contract + -- scrie_factura2 + + -- 22.11.2023 + -- getSoldClient - nu mai scad soldul 419. Presupun ca pentru avansuri 419 se emit facturi de avans 4111 si se storneaza avansul 419 pe factura finala + + -- 10.12.2023 + -- descarca_gestiune - 345: pun 711 = 345 valoare de achizitie, in loc de valoarea de vanzare + -- descarca_gestiune - 345: am pus 348 = 345, in loc de 348 = 711 + -- descarca_gestiune - 345: Se inregistreaza 345 = 348, 348 = 345 doar daca lnDescarcare345FaraAdaos = 0 + + -- 21.12.2023 scrie_nota - scrie_discount se completeaza taxcode pe linia 667 = 4111 + + -- 15.01.2024 + -- scrie_discount - corectie note 667 = 4111 pentru bonuri fiscale magazine, tip 43, scria 667 = 418 + + -- 23.04.2024 + -- GetAnaliticByGrupUtilizatori: se tine cont de inregistrarile sterse + + -- 04.06.2024 + -- cursor_gestiuni_articol, adauga_articol_factura, adauga_articol_factura_stoc, adauga_articol_factura_deviz, scrie_in_vanzari + LOT + + -- 18.10.2024 + -- initializeaza_date_factura.tip_saft + + -- 23.06.2025 + -- pack_facturare.modifica_date_factura - se pot modifica data_act, data_scad, numar_Act, serie_act + + -- 17.09.2025 + -- contabilizeaza_articol - limitare explicatie la 100 caractere + -- scrie_corespondente_vanzari - VANZARI.AVIZE maxim 1000 caractere + + PROCEDURE verificare_setari_program(V_ID_UTIL IN NUMBER, + V_MESAJ OUT VARCHAR2) IS + V_NR_INREGISTRARI NUMBER(5); + V_ID_TIPENTITATE SERII_TIPENTITATI.ID_TIPENTITATE%TYPE; + V_LUNA DATE; + BEGIN + V_MESAJ := NULL; + V_LUNA := to_date(pack_sesiune.getan() || pack_sesiune.getluna(), + 'YYYYMM'); + + -- verificare drepturi politici de preturi + SELECT COUNT(ID_POLITICA) + INTO V_NR_INREGISTRARI + FROM UTILIZATORI_ROL_INTERN A + LEFT JOIN POLITICI_GRUPURI B + ON A.ID_GRUP = B.ID_GRUP + WHERE A.STERS = 0 + AND B.STERS = 0 + AND A.ID_UTIL = V_ID_UTIL; + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := 'Nu aveti drepturi pe politicile de preturi! (ROAPRETURI)'; + END IF; + -- + -- verificare setari bonuri + SELECT ID_TIPENTITATE + INTO V_ID_TIPENTITATE + FROM SERII_TIPDOC + WHERE ID_TIPDOC = pack_facturare.nid_tipbon; + + CASE + WHEN V_ID_TIPENTITATE = 1 THEN + -- pe gestiuni + SELECT COUNT(B.ID_GESTIUNE) + INTO V_NR_INREGISTRARI + FROM GEST_CORESP_UTIL_GRUPE A + LEFT JOIN GEST_CORESP_GRUPE_GESTIUNI B + ON A.ID_GRUPE = B.ID_GRUPE + WHERE A.STERS = 0 + AND B.STERS = 0 + AND A.ID_UTIL = V_ID_UTIL + AND B.ID_GESTIUNE IN + (SELECT ID_ENTITATE + FROM PLAJE_NUMERE + WHERE STERS = 0 + AND INACTIV = 0 + AND ID_TIPDOC = pack_facturare.nid_tipbon + AND ID_TIPENTITATE = V_ID_TIPENTITATE + AND V_LUNA BETWEEN DATAI AND DATAS); + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu aveti drepturi pe gestiunile pentru care sunt configurate seriile de bonuri! (ROAGEST)'; + END IF; + + WHEN V_ID_TIPENTITATE = 2 THEN + -- o singura serie + V_MESAJ := V_MESAJ; + + WHEN V_ID_TIPENTITATE = 3 THEN + -- pe gestionar + SELECT COUNT(ID_PLAJA) + INTO V_NR_INREGISTRARI + FROM PLAJE_NUMERE + WHERE STERS = 0 + AND INACTIV = 0 + AND ID_TIPDOC = pack_facturare.nid_tipbon + AND ID_TIPENTITATE = V_ID_TIPENTITATE + AND V_LUNA BETWEEN DATAI AND DATAS; + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu aveti setata plaja de numere pentru bonuri! (ROAGEST)'; + END IF; + + ELSE + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Setare incorecta pentru seriile de bonuri! (ROAGEST)'; + END CASE; + + -- verificare drepturi gestiuni + SELECT COUNT(ID_GESTIUNE) + INTO V_NR_INREGISTRARI + FROM GEST_CORESP_UTIL_GRUPE A + LEFT JOIN GEST_CORESP_GRUPE_GESTIUNI B + ON A.ID_GRUPE = B.ID_GRUPE + WHERE A.STERS = 0 + AND B.STERS = 0 + AND A.ID_UTIL = V_ID_UTIL; + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu aveti drepturi pe gestiuni! (ROAGEST)'; + END IF; + + -- verificare curs valutar + SELECT COUNT(ID_CURS) + INTO V_NR_INREGISTRARI + FROM CURS A + WHERE A.STERS = 0 + AND A.DATA <= TRUNC(SYSDATE) + AND A.DATA2 >= TRUNC(SYSDATE); + + IF V_NR_INREGISTRARI = 0 THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || + 'Nu este setat cursul valutar pentru ziua de azi!'; + END IF; + + IF V_MESAJ IS NOT NULL THEN + V_MESAJ := V_MESAJ || CHR(13) || CHR(10) || CHR(13) || CHR(10) || + 'Faceti setarile necesare! '; + END IF; + + END verificare_setari_program; + ------------------------------------------------------------------- + PROCEDURE initializeaza_facturare(V_ID_UTIL IN NUMBER) IS + V_DENUMIRE_POL CRM_POLITICI_PRETURI.NUME_LISTA_PRETURI%TYPE; + BEGIN + pack_facturare.initializeaza_moneda_nationala(); + /* pack_facturare.nzecimale_pretval := PACK_SESIUNE.getoptiunefirma(USER, + 'PVAL'); + pack_facturare.nzecimale_sumaval := pack_facturare.nzecimale_pretval; + pack_facturare.nzecimale_preta := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRET'); + pack_facturare.nzecimale_sumaa := PACK_SESIUNE.getoptiunefirma(USER, + 'PC'); + pack_facturare.nzecimale_pretv := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRETV'); + pack_facturare.nzecimale_sumav := pack_facturare.nzecimale_sumaa;*/ + pack_facturare.nzecimale_procent := 3; + pack_facturare.citeste_setari_pol_pret(1, + V_ID_UTIL, + pack_facturare.nid_politica_stoc, + V_DENUMIRE_POL); + END initializeaza_facturare; + ------------------------------------------------------------------- + PROCEDURE initializeaza_seturi_temp IS + begin + DELETE FROM VANZARI_SETURI_TEMP; + end initializeaza_seturi_temp; + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + begin + -- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_explicatia4, v_id_ordl + pack_facturare.initializeaza_date_factura(V_DATA_IREG, + V_ID_FDOC, + V_DATA_ACT, + V_DATA_SCADENTA, + V_SERIE_FACTURA, + V_NUMAR_ACT, + V_ID_CLIENT, + V_ID_LUCRARE, + V_ID_SECTIE, + V_ID_VENCHELT, + V_ID_RESPONSABIL, + NULL, + NULL, + V_LISTAID, + V_DESCRIERE, + V_TIP, + V_ID_SET, + V_DATA_CURS, + V_ID_VALUTA, + V_IN_VALUTA, + V_TVA_INCASARE, + V_ID_SUCURSALA, + V_ID_UTIL, + NULL, + NULL, + NULL); + end initializeaza_date_factura; + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + -- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_id_ordl + pack_facturare.initializeaza_date_factura(V_DATA_IREG, + V_ID_FDOC, + V_DATA_ACT, + V_DATA_SCADENTA, + V_SERIE_FACTURA, + V_NUMAR_ACT, + V_ID_CLIENT, + V_ID_LUCRARE, + V_ID_SECTIE, + V_ID_VENCHELT, + V_ID_RESPONSABIL, + V_EXPLICATIA4, + NULL, + V_LISTAID, + V_DESCRIERE, + V_TIP, + V_ID_SET, + V_DATA_CURS, + V_ID_VALUTA, + V_IN_VALUTA, + V_TVA_INCASARE, + V_ID_SUCURSALA, + V_ID_UTIL, + NULL, + NULL, + NULL); + END initializeaza_date_factura; + + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + -- pentru compatibilitate cu restul aplicatiilor care apeleaza fara v_tip_factura, v_id_beneficiar + pack_facturare.initializeaza_date_factura(V_DATA_IREG, + V_ID_FDOC, + V_DATA_ACT, + V_DATA_SCADENTA, + V_SERIE_FACTURA, + V_NUMAR_ACT, + V_ID_CLIENT, + V_ID_LUCRARE, + V_ID_SECTIE, + V_ID_VENCHELT, + V_ID_RESPONSABIL, + V_EXPLICATIA4, + V_ID_ORDL, + V_LISTAID, + V_DESCRIERE, + V_TIP, + V_ID_SET, + V_DATA_CURS, + V_ID_VALUTA, + V_IN_VALUTA, + V_TVA_INCASARE, + V_ID_SUCURSALA, + V_ID_UTIL, + NULL, + NULL, + NULL); + END initializeaza_date_factura; + + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_factura(V_DATA_IREG IN DATE, + V_ID_FDOC IN NUMBER, + V_DATA_ACT IN DATE, + V_DATA_SCADENTA IN DATE, + V_SERIE_FACTURA IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_CLIENT IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_RESPONSABIL IN NUMBER, + V_EXPLICATIA4 IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_DESCRIERE IN VARCHAR2, + V_TIP IN NUMBER, + V_ID_SET IN NUMBER, + V_DATA_CURS IN DATE, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_TVA_INCASARE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TIP_FACTURA IN NUMBER, + V_ID_BENEFICIAR IN NUMBER, + V_TIP_SAFT IN NUMBER DEFAULT 380) IS + BEGIN + DELETE FROM VANZARI_DETALII_TEMP; + pack_facturare.nid_act := 0; + pack_facturare.ntotftva := 0; + pack_facturare.ntottva := 0; + pack_facturare.ndifftva := 0; + pack_facturare.ndiftva := 0; + pack_facturare.nid_fact := -1; + + pack_facturare.nfactavizcust := 0; + pack_facturare.nid_util := V_ID_UTIL; + pack_facturare.nid_sucursala := V_ID_SUCURSALA; + + pack_facturare.initializeaza_facturare(pack_facturare.nid_util); + pack_facturare.initializeaza_seturi_temp(); + + v_date_gestiune.id_gestiune := NULL; + v_date_gestiune.id_tip_gest := NULL; + v_date_gestiune.cont := NULL; + v_date_gestiune.acont := NULL; + + pack_facturare.ndiscount_evidentiat := PACK_SESIUNE.getoptiunefirma(USER, + 'DISCOUNTEVIDENTIAT'); + pack_facturare.cascd := NULL; + pack_facturare.cascc := NULL; + pack_facturare.nid_jtva_coloana := NULL; + pack_facturare.nTaxCode := NULL; + pack_facturare.ddata_curs := V_DATA_CURS; + pack_facturare.ddata_ireg := V_DATA_IREG; + pack_facturare.nid_fdoc := V_ID_FDOC; + pack_facturare.ddata_act := V_DATA_ACT; + pack_facturare.ddata_scadenta := V_DATA_SCADENTA; + pack_facturare.cserie_act := TRIM(V_SERIE_FACTURA); + pack_facturare.nnumar_act := V_NUMAR_ACT; + IF V_TIP IN (23, 25, 27, 30, 41, -6) THEN + pack_facturare.nid_gestiune_sursa := V_ID_CLIENT; + pack_facturare.nid_part := 0; + ELSE + pack_facturare.nid_gestiune_sursa := 0; + pack_facturare.nid_part := V_ID_CLIENT; + END IF; + pack_facturare.nid_lucrare := nvl(V_ID_LUCRARE, 0); + pack_facturare.nid_venchelt := V_ID_VENCHELT; + pack_facturare.nid_sectie_stoc := V_ID_SECTIE; + pack_facturare.nid_responsabil := V_ID_RESPONSABIL; + pack_facturare.nid_ordl := V_ID_ORDL; + pack_facturare.cexplicatia4 := V_EXPLICATIA4; + pack_facturare.nid_set := V_ID_SET; + pack_facturare.ntip := V_TIP; + pack_facturare.clistaid := V_LISTAID; + pack_facturare.cdescriere := V_DESCRIERE; + pack_facturare.nproc_tva_max := -1; + pack_facturare.clista_cursuri := NULL; + pack_facturare.nperechec := 0; + pack_facturare.nid_factc := 0; + pack_facturare.nid_partc := 0; + pack_facturare.nan := EXTRACT(YEAR FROM V_DATA_IREG); + pack_facturare.nluna := EXTRACT(MONTH FROM V_DATA_IREG); + pack_facturare.ntva_incasare := V_TVA_INCASARE; + pack_facturare.cserie_act_incasare := NULL; + pack_facturare.nnumar_act_incasare := NULL; + + pack_facturare.ntip_doc_incasare := NULL; + pack_facturare.nsuma_incasare := NULL; + pack_facturare.clistaid_avize := NULL; + + pack_facturare.verifica_analitice378(); + + pack_facturare.nin_valuta := V_IN_VALUTA; + pack_facturare.nid_valuta := V_ID_VALUTA; + + IF pack_facturare.ntip IN (3, 21, 28, 42, 47) THEN + -- facturare de pe comanda + -- aviz de pe comanda + pack_facturare.nid_comanda := to_number(pack_facturare.clistaid); + ELSE + pack_facturare.nid_comanda := NULL; + END IF; + + pack_facturare.ntip_factura := V_TIP_FACTURA; + pack_facturare.nid_beneficiar := V_ID_BENEFICIAR; + pack_facturare.ntip_saft := V_TIP_SAFT; + + END initializeaza_date_factura; + ------------------------------------------------------------------- + PROCEDURE initializeaza_setari_facturare IS + BEGIN + BEGIN + SELECT TO_NUMBER(NVL(VARVALUE, '0')) + INTO pack_facturare.nscadere_stoc + FROM OPTIUNI + WHERE PROGRAM = pack_facturare.cnume_program + AND VARNAME = 'SCADERESTOC'; + + IF pack_facturare.nscadere_stoc = 1 AND pack_facturare.ntip <> 4 THEN + SELECT MAX(NVL(IN_STOC, 0)) + INTO pack_facturare.nscadere_stoc + FROM VANZARI_DETALII_TEMP + WHERE ID_RATA IS NULL; + + IF pack_facturare.nscadere_stoc = 1 THEN + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + END IF; + END IF; + EXCEPTION + WHEN NO_DATA_FOUND THEN + pack_facturare.nscadere_stoc := 0; + END; + END initializeaza_setari_facturare; + ------------------------------------------------------------------- + PROCEDURE initializeaza_date_gestiune(V_ID_GESTIUNE IN NUMBER, + V_ID_TIPGEST IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2) IS + BEGIN + v_date_gestiune.id_gestiune := V_ID_GESTIUNE; + v_date_gestiune.id_tip_gest := V_ID_TIPGEST; + v_date_gestiune.cont := V_CONT; + v_date_gestiune.acont := V_ACONT; + END initializeaza_date_gestiune; + ------------------------------------------------------------------- + PROCEDURE citeste_setari_document(V_TIP IN NUMBER, + V_ID_FDOC OUT NUMBER, + V_FDOC OUT VARCHAR2) IS + V_VARNAME OPTIUNI.VARNAME%TYPE; + BEGIN + CASE + WHEN V_TIP BETWEEN 1 AND 20 OR V_TIP BETWEEN - 4 AND - 1 OR + V_TIP IN (-8, -11, -12, 45, 48, 49, 50, 51, 52) THEN + -- id_fdoc_factura + V_VARNAME := 'ID_FDOC_FACT'; + WHEN V_TIP IN (24, 41, -6, -7, -13) THEN + -- id_fdoc_aviz_retur + V_VARNAME := 'ID_FDOC_AVIZ_RETUR'; + WHEN V_TIP BETWEEN 21 AND 40 OR V_TIP in (47, 42, -9, -10) THEN + -- id_fdoc_aviz + V_VARNAME := 'ID_FDOC_AVIZ'; + WHEN V_TIP = 0 THEN + -- id_fdoc_compensare + V_VARNAME := 'ID_FDOC_COMPENSARE'; + WHEN V_TIP = -100 THEN + -- id_fdoc_chitanta + V_VARNAME := 'ID_FDOC_CHITANTA'; + WHEN V_TIP = -101 THEN + -- id_fdoc_bonfiscal + V_VARNAME := 'ID_FDOC_BONFISCAL'; + WHEN V_TIP = -102 THEN + -- id_fdoc_proforma + V_VARNAME := 'ID_FDOC_PROFORMA'; + WHEN V_TIP = -103 THEN + -- id_fdoc_card + V_VARNAME := 'ID_FDOC_CARD'; + ELSE + -- id_fdoc_factura + V_VARNAME := 'ID_FDOC_FACT'; + END CASE; + + BEGIN + SELECT TO_NUMBER(A.VARVALUE), B.FEL_DOCUMENT + INTO V_ID_FDOC, V_FDOC + FROM OPTIUNI A + LEFT JOIN NOM_FDOC B + ON TO_NUMBER(A.VARVALUE) = B.ID_FDOC + WHERE A.VARNAME = V_VARNAME + AND (A.PROGRAM = pack_facturare.cnume_program OR + A.PROGRAME LIKE '%' || pack_facturare.cnume_program || '%') + AND B.STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_FDOC := NULL; + V_FDOC := ''; + END; + END citeste_setari_document; + ------------------------------------------------------------------- + PROCEDURE citeste_setari_partener(V_TIP IN NUMBER, + V_ID_PART OUT NUMBER, + V_DENUMIRE OUT VARCHAR2) IS + V_VARNAME OPTIUNI.VARNAME%TYPE; + BEGIN + CASE + WHEN V_TIP = 0 THEN + -- id_part_banca_comp + V_VARNAME := 'ID_PART_BANCA_COMP'; + WHEN V_TIP = 1 THEN + V_VARNAME := 'ID_PART_CASA'; + END CASE; + + BEGIN + SELECT TO_NUMBER(A.VARVALUE), B.DENUMIRE + INTO V_ID_PART, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN NOM_PARTENERI B + ON TO_NUMBER(A.VARVALUE) = B.ID_PART + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = V_VARNAME + AND B.STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_PART := NULL; + V_DENUMIRE := ''; + END; + END citeste_setari_partener; + ------------------------------------------------------------------- + PROCEDURE citeste_setari_pol_pret(V_TIP IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_POL OUT NUMBER, + V_DENUMIRE OUT VARCHAR2) IS + BEGIN + BEGIN + CASE + WHEN V_TIP IN (23, 30, 41) THEN + SELECT TO_NUMBER(A.VARVALUE), B.NUME + INTO V_ID_POL, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN CRM_VPOLPRETCURUTIL B + ON TO_NUMBER(A.VARVALUE) = B.ID_POL + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = 'ID_POL_PRET_TR' + AND B.ID_UTIL = V_ID_UTIL; + WHEN V_TIP = 1 THEN + SELECT TO_NUMBER(A.VARVALUE), B.NUME + INTO V_ID_POL, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN CRM_VPOLPRETCURUTIL B + ON TO_NUMBER(A.VARVALUE) = B.ID_POL + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = 'ID_POL_PRET_STOC' + AND B.ID_UTIL = V_ID_UTIL; + WHEN V_TIP IN (48, 49) THEN + SELECT TO_NUMBER(A.VARVALUE), B.NUME + INTO V_ID_POL, V_DENUMIRE + FROM OPTIUNI A + LEFT JOIN CRM_VPOLPRETCURUTIL B + ON TO_NUMBER(A.VARVALUE) = B.ID_POL + WHERE A.PROGRAM = pack_facturare.cnume_program + AND A.VARNAME = 'IDPOLPRETFACTK' + AND B.ID_UTIL = V_ID_UTIL; + END CASE; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_POL := NULL; + V_DENUMIRE := ''; + END; + END citeste_setari_pol_pret; + ------------------------------------------------------------------- + PROCEDURE genereaza_numar_proforma(V_NR_PROFORMA OUT NUMBER) IS + BEGIN + pack_serii_numere.dezaloca_numar(pack_facturare.nid_tipfactura); + + SELECT SEQ_NR_PROFORME.NEXTVAL INTO V_NR_PROFORMA FROM DUAL; + + pack_facturare.nnumar_act := V_NR_PROFORMA; + END genereaza_numar_proforma; + ------------------------------------------------------------------- + PROCEDURE completare_politica_stoc IS + BEGIN + IF pack_facturare.nid_politica_stoc IS NOT NULL THEN + MERGE INTO CRM_POLITICI_PRET_ART A + USING (SELECT ID_ARTICOL + FROM NOM_ARTICOLE + WHERE STERS = 0 + AND INACTIV = 0 + AND IN_STOC = 1) B + ON (A.ID_POL = pack_facturare.nid_politica_stoc AND A.ID_ARTICOL = B.ID_ARTICOL) + WHEN NOT MATCHED THEN + INSERT + (ID_POL, ID_ARTICOL, ID_VALUTA) + VALUES + (pack_facturare.nid_politica_stoc, + B.ID_ARTICOL, + pack_facturare.nid_moneda_nationala); + + UPDATE NOM_ARTICOLE + SET IN_CRM = 1 + WHERE ID_ARTICOL IN + (SELECT ID_ARTICOL + FROM CRM_POLITICI_PRET_ART + WHERE STERS = 0 + AND ID_POL = pack_facturare.nid_politica_stoc) + AND IN_CRM = 0; + END IF; + END completare_politica_stoc; + ------------------------------------------------------------------- + PROCEDURE modificare_politica_stoc(V_ID_POL IN NUMBER) is + BEGIN + UPDATE CRM_POLITICI_PRETURI + SET ID_VALUTA = pack_def.GetIdMonedaNationala() + WHERE ID_POL = V_ID_POL; + + UPDATE CRM_POLITICI_PRET_ART + SET PRET = 0, + PRETFTVA = 0, + PRETCTVA = 0, + PROC_TVAV = NULL, + DISCOUNT_UNITAR = NULL, + ID_VALUTA = pack_def.GetIdMonedaNationala() + WHERE ID_POL = V_ID_POL; + END modificare_politica_stoc; + ------------------------------------------------------------------- + PROCEDURE cursor_preturi(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + lnFacturareFaraStoc NUMBER(1) := 0; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + pack_facturare.completare_politica_stoc(); + + pack_facturare.verifica_cursuri_valute(V_DATA_CURS, V_ID_UTIL); + + -- FACTURARE LISTA PRETURI: se selecteaza toate articolele din lista de preturi, indiferent daca au stoc > 0 + lnFacturareFaraStoc := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_FACTURARE_FARA_STOC'), + '0')); + + CASE + WHEN V_TIP = 45 THEN + -- factura restaurant + OPEN V_CURSOR FOR + SELECT rownum as id_c, + B.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + B.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + 1 AS CANTITATE, + B.PROC_TVAV, + A.PRETURI_CU_TVA, + F.CURS, + F.MULTIPLICATOR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + G.NUME_VAL, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1), + 1, + 0) AS MODIFICABIL, + A.ID_GESTIUNE, + '371' AS CONT + FROM (select a1.id_util, + a3.id_pol, + a3.preturi_cu_tva, + a3.nume_lista_preturi, + a3.id_nota, + a6.id_gestiune + from utilizatori_rol_intern a1 + left join politici_grupuri a2 + on a1.id_grup = a2.id_grup + left join crm_politici_preturi a3 + on a2.id_politica = a3.id_pol + left join crm_note_vanzari a4 + on a3.id_nota = a4.id_nota + left join note_contabile a5 + on a4.id_set = a5.id_set + left join rest_coresp_pol_gest a6 + on a3.id_pol = a6.id_pol + where a1.sters = 0 + and a2.sters = 0 + and a3.sters = 0 + and a1.id_util = V_ID_UTIL + and NVL(a5.in_valuta, 0) = 0 + and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')), + sysdate), + sysdate) between a3.datai and + NVL(a3.datas, to_date('300012', 'YYYYMM')) + and NVL(a1.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + and nvl(a6.id_rest_locatie, 0) = + NVL(V_ID_GESTIUNE_INIT, -1)) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) F + ON B.ID_VALUTA = F.ID_VALUTA + LEFT JOIN NOM_VALUTE G + ON B.ID_VALUTA = G.ID_VALUTA + ORDER BY C.DENUMIRE; + WHEN V_TIP IN (1, 2) THEN + -- factura in lei + OPEN V_CURSOR FOR + SELECT rownum as id_c, + B.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + B.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND E.CANTITATE < 0 THEN + 0 + ELSE + NVL(E.CANTITATE, 0) + END) AS CANTITATE, + B.PROC_TVAV, + A.PRETURI_CU_TVA, + F.CURS, + F.MULTIPLICATOR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(NVL(B.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + G.NUME_VAL, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1), + 1, + 0) AS MODIFICABIL + FROM (select a1.id_util, + a3.id_pol, + a3.preturi_cu_tva, + a3.nume_lista_preturi, + a3.id_nota + from utilizatori_rol_intern a1 + left join politici_grupuri a2 + on a1.id_grup = a2.id_grup + left join crm_politici_preturi a3 + on a2.id_politica = a3.id_pol + left join crm_note_vanzari a4 + on a3.id_nota = a4.id_nota + left join note_contabile a5 + on a4.id_set = a5.id_set + where a1.sters = 0 + and a2.sters = 0 + and a3.sters = 0 + and a1.id_util = V_ID_UTIL + and NVL(a5.in_valuta, 0) = 0 + and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')), + sysdate), + sysdate) between a3.datai and + NVL(a3.datas, to_date('300012', 'YYYYMM')) + and NVL(a1.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT D1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI D1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE D2 + ON D1.ID_GRUPE = D2.ID_GRUPE + WHERE D1.STERS = 0 + AND D2.STERS = 0 + AND D2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + D1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) E + ON B.ID_ARTICOL = E.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) F + ON B.ID_VALUTA = F.ID_VALUTA + LEFT JOIN NOM_VALUTE G + ON B.ID_VALUTA = G.ID_VALUTA + WHERE (lnFacturareFaraStoc = 1 and NVL(E.CANTITATE, 0) <= 0) + OR DECODE(NVL(C.IN_STOC, 2), 1, NVL(E.CANTITATE, 0), 2, 0, 1) > 0 + ORDER BY C.DENUMIRE; + + WHEN V_TIP IN (5, 6, 10, 52) THEN + -- factura in valuta + OPEN V_CURSOR FOR + SELECT rownum as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + V_ID_VALUTA AS ID_VALUTA, -- A.ID_VALUTA + A.NUME_LISTA_PRETURI, + ROUND(NVL(D.CURS, 0) * + ROUND(A.DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS DISCOUNT_UNITAR, + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) AS DISCOUNT_UNITAR_VAL, + A.CODMAT, + A.CODBARE, + A.DENUMIRE, + NVL(A.UM, '') AS UM, + A.GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN + 0 + ELSE + NVL(C.CANTITATE, 0) + END) AS CANTITATE, + A.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + ROUND(NVL(D.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS PRET, + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) AS PRET_VAL, + 1 AS TIP_VALUTA, + E.NUME_VAL + FROM FACT_VPRETURI_UTILIZATOR A + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A2 + ON A1.ID_GRUPE = A2.ID_GRUPE + WHERE A1.STERS = 0 + AND A2.STERS = 0 + AND A2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + A1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) C + ON A.ID_ARTICOL = C.ID_ARTICOL + /* AND NVL(C.ID_RUL_AUX, 0) = 0*/ + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) D + ON V_ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON V_ID_VALUTA = E.ID_VALUTA + WHERE A.ID_UTIL = V_ID_UTIL + -- AND A.ID_VALUTA = V_ID_VALUTA AND A.IN_VALUTA = 1 + AND ((A.ID_VALUTA = V_ID_VALUTA AND A.IN_VALUTA = 1) OR + A.ID_POL = pack_facturare.nid_politica_stoc) + AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR + DECODE(A.GESTIONABIL, 1, NVL(C.CANTITATE, 0), 1) > 0) + ORDER BY A.DENUMIRE; + + WHEN V_TIP = 7 THEN + -- credit note + OPEN V_CURSOR FOR + SELECT rownum as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + V_ID_VALUTA AS ID_VALUTA, -- A.ID_VALUTA + A.NUME_LISTA_PRETURI, + ROUND(NVL(D.CURS, 0) * + ROUND(A.DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS DISCOUNT_UNITAR, + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) AS DISCOUNT_UNITAR_VAL, + A.CODMAT, + A.CODBARE, + A.DENUMIRE, + NVL(A.UM, '') AS UM, + A.GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN + 0 + ELSE + NVL(C.CANTITATE, 0) + END) AS CANTITATE, + A.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + ROUND(NVL(D.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) AS PRET, + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) AS PRET_VAL, + 1 AS TIP_VALUTA, + E.NUME_VAL + FROM FACT_VPRETURI_UTILIZATOR A + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A2 + ON A1.ID_GRUPE = A2.ID_GRUPE + WHERE A1.STERS = 0 + AND A2.STERS = 0 + AND A2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + A1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND ID_VALUTA = V_ID_VALUTA + AND STERS = 0) D + ON V_ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON V_ID_VALUTA = E.ID_VALUTA + WHERE A.ID_UTIL = V_ID_UTIL + AND A.ID_VALUTA = V_ID_VALUTA + AND A.IN_VALUTA = 1 + AND NVL(A.nota_discount, 0) = 1 + AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR + DECODE(A.GESTIONABIL, 1, NVL(C.CANTITATE, 0), 1) > 0) + ORDER BY A.DENUMIRE; + ELSE + -- aviz + OPEN V_CURSOR FOR + SELECT rownum as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + A.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(A.DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.DISCOUNT_UNITAR, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + A.CODMAT, + A.CODBARE, + A.DENUMIRE, + NVL(A.UM, '') AS UM, + A.GESTIONABIL, + (CASE + WHEN lnFacturareFaraStoc = 1 AND C.CANTITATE < 0 THEN + 0 + ELSE + NVL(C.CANTITATE, 0) + END) AS CANTITATE, + A.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(E.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + E.NUME_VAL, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, A.ID_POL + 1), + 1, + 0) AS MODIFICABIL + FROM FACT_VPRETURI_UTILIZATOR A + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANTITATE + FROM STOC + WHERE LUNA = V_LUNA + AND AN = V_AN + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND ID_GESTIUNE IN + (SELECT DISTINCT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A2 + ON A1.ID_GRUPE = A2.ID_GRUPE + WHERE A1.STERS = 0 + AND A2.STERS = 0 + AND A2.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE_INIT, + A1.ID_GESTIUNE, + -1) = NVL(V_ID_GESTIUNE_INIT, -1)) + GROUP BY ID_ARTICOL) C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) D + ON A.ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON A.ID_VALUTA = E.ID_VALUTA + WHERE A.ID_UTIL = V_ID_UTIL + AND ((lnFacturareFaraStoc = 1 and NVL(C.CANTITATE, 0) <= 0) OR + DECODE(NVL(A.GESTIONABIL, 2), + 1, + NVL(C.CANTITATE, 0), + 2, + 0, + 1) > 0) + ORDER BY A.DENUMIRE; + + END CASE; + END cursor_preturi; + ------------------------------------------------------------------- + PROCEDURE cursor_contract(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_GESTIUNE_INIT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_AGENT OUT NUMBER, + V_NUME_AGENT OUT VARCHAR2, + V_CURSOR OUT cursor_facturare, + V_CURSOR2 OUT cursor_facturare) IS + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + BEGIN + SELECT DISTINCT ID_AGENT, NUME_AGENT + INTO V_ID_AGENT, V_NUME_AGENT + FROM VCONTRACTE + WHERE ID_CTR IN + (SELECT X as ID_CTR + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))); + EXCEPTION + WHEN TOO_MANY_ROWS THEN + V_ID_AGENT := NULL; + V_NUME_AGENT := NULL; + END; + + -- verificare ca exista cursul pentru valutele din CTR_SCADENTAR si CTR_ARTICOLE + WITH CRS AS + (SELECT X as ID_CTR + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT NVL(C.ID_VALUTA, B.ID_VALUTA) AS ID_VALUTA + FROM CONTRACTE A + LEFT JOIN CTR_ARTICOLE B + ON A.ID_CTR = B.ID_CTR + AND A.OPT_FACTURARE = 3 + LEFT JOIN CTR_SCADENTAR C + ON A.ID_CTR = B.ID_CTR + AND A.OPT_FACTURARE IN (1, 2) + WHERE A.ID_CTR IN (SELECT ID_CTR FROM CRS) + AND A.STERS = 0 + AND A.INACTIV = 0) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + OPEN V_CURSOR2 FOR + WITH CRS AS + (SELECT X as ID_CTR + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT rownum - 10000 as id_c, + id_ctr, + id_articol, + id_rata, + id_pol, + id_valuta, + numar || '/' || to_char(data, 'DD.MM.YYYY') as numar_contract, + numar, + data, + discount_unitar, + discount_unitar_val, + codmat, + codbare, + denumire, + preturi_cu_tva, + um, + gestionabil, + cantitate, + proc_tvav, + curs, + multiplicator, + pret, + pret_val, + tip_valuta, + nume_val, + nr_rata, + data_rata, + data_scadenta, + explicatie, + opt_facturare + FROM (SELECT A.ID_CTR, + C.ID_ARTICOL, + NULL as id_rata, + C.ID_POL, + B.ID_VALUTA, + A.NUMAR, + A.DATA, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretvval) + + * B.COEF_DISCOUNT / 100, + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretv) * + B.COEF_DISCOUNT / 100, + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretvval) * + B.COEF_DISCOUNT / 100, + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + E.CODMAT, + E.CODBARE, + E.DENUMIRE, + B.PRET_CU_TVA AS PRETURI_CU_TVA, + NVL(E.UM, '') AS UM, + E.IN_STOC AS GESTIONABIL, + B.CANT AS CANTITATE, + C.PROC_TVAV, + F.CURS, + F.MULTIPLICATOR, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(F.CURS, 0) * + ROUND(B.PRET_UNITAR, + pack_sesiune.nzecimale_pretvval) / + NVL(F.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(B.PRET_UNITAR, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(G.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(B.PRET_UNITAR, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(G.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + G.NUME_VAL, + NULL as NR_RATA, + null as data_rata, + null as data_scadenta, + '' as explicatie, + A.OPT_FACTURARE + FROM (SELECT ID_CTR, NUMAR, DATA, OPT_FACTURARE + FROM CONTRACTE + WHERE ID_CTR in (SELECT ID_CTR FROM CRS) + AND OPT_FACTURARE = 3 + AND STERS = 0) A + LEFT JOIN CTR_ARTICOLE B + ON A.ID_CTR = B.ID_CTR + LEFT JOIN CRM_POLITICI_PRET_ART C + ON B.ID_POL_ART = C.ID_POL_ART + LEFT JOIN NOM_ARTICOLE E + ON C.ID_ARTICOL = E.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) F + ON B.ID_VALUTA = F.ID_VALUTA + LEFT JOIN NOM_VALUTE G + ON B.ID_VALUTA = G.ID_VALUTA + UNION ALL + SELECT A01.ID_CTR, + null as id_articol, + B01.ID_RATA, + NULL AS ID_POL, + B01.ID_VALUTA, + A01.NUMAR, + A01.DATA, + 0 as discount_unitar, + 0 as discount_unitar_val, + null as codmat, + null as codbare, + B01.DEN_RATA as denumire, + B01.PRET_CU_TVA AS PRETURI_CU_TVA, + NULL AS UM, + 0 as gestionabil, + 1 as cantitate, + (A01.PROC_TVA + 100) / 100 AS PROC_TVAV, + E01.CURS, + E01.MULTIPLICATOR, + (CASE + WHEN NVL(F01.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E01.CURS, 0) * + (ROUND(B01.VALRATA, + pack_sesiune.nzecimale_pretvval) - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0))) / + NVL(E01.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(ROUND(B01.VALRATA, pack_sesiune.nzecimale_pretv) - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0)), + pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F01.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(ROUND(B01.VALRATA, + pack_sesiune.nzecimale_pretvval) - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0)), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F01.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F01.NUME_VAL, + B01.NR_RATA, + B01.DATA_RATA, + B01.DATA_SCADENTA, + UPPER(NVL(C01.DENUMIRE, B01.DEN_RATA)) AS EXPLICATIE, + A01.OPT_FACTURARE + FROM (SELECT ID_CTR, NUMAR, DATA, OPT_FACTURARE, PROC_TVA + FROM CONTRACTE + WHERE STERS = 0 + AND ID_CTR in (SELECT ID_CTR FROM CRS) + AND OPT_FACTURARE IN (1, 2)) A01 + LEFT JOIN CTR_SCADENTAR B01 + ON A01.ID_CTR = B01.ID_CTR + AND B01.STERS = 0 + LEFT JOIN (SELECT DENUMIRE, ID_CTR AS ID_CONTRACT + FROM (SELECT C1.ID_CTR, + C3.DENUMIRE, + ROW_NUMBER() OVER(PARTITION BY C1.ID_CTR ORDER BY C1.ID_CTR_ART) AS NRCRT + FROM CTR_ARTICOLE C1 + LEFT JOIN CRM_POLITICI_PRET_ART C2 + ON C1.ID_POL_ART = C2.ID_POL_ART + LEFT JOIN NOM_ARTICOLE C3 + ON C2.ID_ARTICOL = C3.ID_ARTICOL + WHERE C1.id_ctr in + (SELECT ID_CTR FROM CRS)) + WHERE NRCRT = 1) C01 + ON A01.ID_CTR = C01.ID_CONTRACT + AND A01.OPT_FACTURARE = 2 + -- 14.11.2012 : am scos round(...) de la valvaluta si valvalutactva - trebuie rotunjite in fct. de id_valuta + LEFT JOIN (SELECT SUM(VALVALUTA) AS VALVALUTA, + SUM(VALVALUTACTVA) AS VALVALUTACTVA, + ID_RATA + FROM CTR_RATE_FACTURI + WHERE STERS = 0 + GROUP BY ID_RATA) D01 + ON B01.ID_RATA = D01.ID_RATA + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E01 + ON B01.ID_VALUTA = E01.ID_VALUTA + LEFT JOIN NOM_VALUTE F01 + ON B01.ID_VALUTA = F01.ID_VALUTA + -- 14.11.2012 : am scos round(...) de la valrata - trebuie rotunjita in fct. de id_valuta + WHERE B01.VALRATA - + DECODE(B01.PRET_CU_TVA, + 0, + NVL(D01.VALVALUTA, 0), + NVL(D01.VALVALUTACTVA, 0)) > 0) + ORDER BY data, numar, data_rata, denumire; + + pack_facturare.cursor_preturi(V_DATA_CURS, + V_TIP, + V_ID_VALUTA, + V_ID_GESTIUNE_INIT, + V_LUNA, + V_AN, + V_ID_UTIL, + V_ID_SUCURSALA, + V_CURSOR); + + END cursor_contract; + ------------------------------------------------------------------- + PROCEDURE cursor_comanda(V_DATA_CURS IN DATE, + V_TIP IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + V_TIP_SORTARE NUMBER(1) := NVL(pack_sesiune.getOptiuneFirma('RF_SORTARE_COMANDA'), 1); + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + V_ID_COMANDA := TO_NUMBER(V_LISTAID); + + -- verificare ca exista cursul pentru valutele din COMENZI_ELEMENTE + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT ID_VALUTA + FROM COMENZI_ELEMENTE + WHERE ID_COMANDA = V_ID_COMANDA) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + IF V_TIP <= 20 THEN + -- factura + OPEN V_CURSOR FOR + SELECT ROWNUM as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + A.ID_VALUTA, + G.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANTITATE, + NVL2(A.PTVA, 1+A.PTVA/100, B.PROC_TVAV) AS PROC_TVAV, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F.NUME_VAL + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + AND A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI G + ON B.ID_POL = G.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, B1.PRET, SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + AND A1.ID_COMANDA = V_ID_COMANDA + GROUP BY B1.ID_ARTICOL, B1.PRET) D + ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E + ON A.ID_VALUTA = E.ID_VALUTA + LEFT JOIN NOM_VALUTE F + ON A.ID_VALUTA = F.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_COMANDA = V_ID_COMANDA + AND SIGN(A.CANTITATE) * (A.CANTITATE - NVL(D.CANTITATE, 0)) > 0 + ORDER BY CASE WHEN V_TIP_SORTARE = 1 THEN C.DENUMIRE END ASC, + CASE WHEN V_TIP_SORTARE = 0 THEN A.ID_COMANDA_ELEMENT END ASC; + ELSE + -- aviz + OPEN V_CURSOR FOR + SELECT ROWNUM as id_c, + A.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + A.ID_VALUTA, + G.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0) + + NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANTITATE, + NVL2(A.PTVA, 1+A.PTVA/100, B.PROC_TVAV) AS PROC_TVAV, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F.NUME_VAL + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + AND A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI G + ON B.ID_POL = G.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, B1.PRET, SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + AND A1.ID_COMANDA = V_ID_COMANDA + GROUP BY B1.ID_ARTICOL, B1.PRET) D + ON A.ID_ARTICOL = D.ID_ARTICOL AND A.PRET = D.PRET + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E + ON A.ID_VALUTA = E.ID_VALUTA + LEFT JOIN NOM_VALUTE F + ON A.ID_VALUTA = F.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_COMANDA = V_ID_COMANDA + AND SIGN(A.CANTITATE) * (A.CANTITATE - NVL(D.CANTITATE, 0)) > 0 + ORDER BY CASE WHEN V_TIP_SORTARE = 1 THEN C.DENUMIRE END ASC, + CASE WHEN V_TIP_SORTARE = 0 THEN A.ID_COMANDA_ELEMENT END ASC; + END IF; + END cursor_comanda; + ------------------------------------------------------------------- + PROCEDURE cursor_lucrare(V_DATA_CURS IN DATE, + V_ID_GESTIUNE IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + -- verificare ca exista cursul pentru valutele din COMENZI_ELEMENTE + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT ID_VALUTA + FROM COMENZI_ELEMENTE + WHERE ID_COMANDA IN + (SELECT ID_COMANDA + FROM COMENZI + WHERE ID_LUCRARE = V_ID_LUCRARE + AND STERS = 0 + AND ID_SUCURSALA = V_ID_SUCURSALA)) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + IF TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('FACTALGREPCOM'), '0')) = 1 THEN + -- in gestiunea sursa exista un singur cont + OPEN V_CURSOR FOR + select A1.id_articol, + A1.id_comanda, + A1.id_comanda_element, + A1.id_gestiune, + A1.id_pol, + A1.cont, + A3.nume_gestiune, + A2.codmat, + A2.codbare, + A2.denumire, + A1.cant_com, + A1.cant_ramasa, + A1.cant_stoc, + A1.cantitate, + A1.cant_stoc - + (SUM(a1.cantitate) over(partition by a1.id_articol)) as cant_disp, + A1.ID_VALUTA, + NVL(A4.PROC_TVAV, 1) AS PROC_TVAV, + A1.PRET_CU_TVA AS PRETURI_CU_TVA, + NVL(A5.CURS, 0) AS CURS, + NVL(A5.MULTIPLICATOR, 1) AS MULTIPLICATOR, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS PRET, + 1 - NVL(A6.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + A6.NUME_VAL, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) + ROUND((CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) * (CASE + WHEN A1.PRET_CU_TVA = 0 THEN + A4.PROC_TVAV - 1 + ELSE + 0 + END), + pack_sesiune.nzecimale_pretv) AS PRETCTVA + from (SELECT CRS.ID_ARTICOL, + CRS.ID_VALUTA, + CRS.PRET_CU_TVA, + CRS.PRET, + CRS.ID_POL, + CRS.ID_COMANDA_ELEMENT, + CRS.ID_COMANDA, + CRS.ID_GESTIUNE, + CRS.CONT, + CRS.PROCENT, + CRS.CANT_COM, + CRS.CANT_RAMASA, + CRS.CANT_STOC, + CRS.CANT_REP, + CRS.INCOMPLET, + CRS.cant_rep + (case + when CRS.incomplet = 1 and CRS.cant_stoc > 0 and + CRS.cant_stoc - sum(CRS.cant_rep) + over(partition by CRS.id_articol) > 0 then + trunc((CRS.cant_stoc - sum(CRS.cant_rep) + over(partition by CRS.id_articol)) / + sum(CRS.incomplet) + over(partition by CRS.id_articol)) + + (case + when mod((CRS.cant_stoc - sum(CRS.cant_rep) + over(partition by CRS.id_articol)), + sum(CRS.incomplet) + over(partition by CRS.id_articol)) >= + row_number() + over(partition by CRS.id_articol order by + CRS.incomplet desc, + CRS.procent desc) then + 1 + else + 0 + end) + else + 0 + end) as cantitate + FROM (SELECT A.ID_ARTICOL, + A.ID_VALUTA, + A.PRET_CU_TVA, + A.PRET - NVL(A.DISCOUNT_UNITAR, 0) AS PRET, + A.ID_POL, + A.ID_COMANDA_ELEMENT, + COM.ID_COMANDA, + COM.ID_GESTIUNE, + STOC.CONT, + FLOOR(RATIO_TO_REPORT(A.CANTITATE - + NVL(D.CANTITATE, 0)) + OVER(PARTITION BY A.ID_ARTICOL) * 100) / 100 as procent, + A.CANTITATE AS CANT_COM, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANT_RAMASA, + NVL(STOC.CANT_STOC, 0) AS CANT_STOC, + (case + when NVL(STOC.CANT_STOC, 0) - + (SUM(A.CANTITATE - NVL(D.CANTITATE, 0)) + OVER(PARTITION BY A.ID_ARTICOL)) > 0 and + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 and + NVL(STOC.CANT_STOC, 0) > 0 then + A.CANTITATE - NVL(D.CANTITATE, 0) + when NVL(STOC.CANT_STOC, 0) > 0 and + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 then + LEAST(A.CANTITATE - NVL(D.CANTITATE, 0), + FLOOR(FLOOR(RATIO_TO_REPORT(A.CANTITATE - + NVL(D.CANTITATE, + 0)) + OVER(PARTITION BY + A.ID_ARTICOL) * 100) / 100 * + NVL(STOC.CANT_STOC, 0))) + else + 0 + end) AS CANT_REP, + (case + when NVL(STOC.CANT_STOC, 0) - + (SUM(A.CANTITATE - NVL(D.CANTITATE, 0)) + OVER(PARTITION BY A.ID_ARTICOL)) > 0 and + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 and + NVL(STOC.CANT_STOC, 0) > 0 then + 0 + when A.CANTITATE - NVL(D.CANTITATE, 0) - + FLOOR(FLOOR(RATIO_TO_REPORT(A.CANTITATE - + NVL(D.CANTITATE, + 0)) + OVER(PARTITION BY + A.ID_ARTICOL) * 100) / 100 * + NVL(STOC.CANT_STOC, 0)) > 0 AND + NVL(STOC.CANT_STOC, 0) > 0 AND + A.CANTITATE - NVL(D.CANTITATE, 0) > 0 then + 1 + else + 0 + end) AS incomplet + FROM COMENZI COM + LEFT JOIN COMENZI_ELEMENTE A + ON COM.ID_COMANDA = A.ID_COMANDA + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, + A1.ID_COMANDA, + B1.PRET, + SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA, B1.PRET) D + ON A.ID_ARTICOL = D.ID_ARTICOL + AND A.ID_COMANDA = D.ID_COMANDA + AND A.PRET = D.PRET + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANT_STOC, + CONT + FROM STOC + WHERE AN = V_AN + AND LUNA = V_LUNA + AND ID_GESTIUNE = V_ID_GESTIUNE + AND NVL2(V_ID_SUCURSALA, + ID_SUCURSALA, + -99) = + NVL(V_ID_SUCURSALA, -99) + GROUP BY ID_ARTICOL, CONT) STOC + ON A.ID_ARTICOL = STOC.ID_ARTICOL + WHERE A.STERS = 0 + AND COM.ID_LUCRARE = V_ID_LUCRARE + AND COM.STERS = 0 + AND COM.ID_SECTIE IN + (SELECT ID_SECTIE + FROM NOM_SECTII + WHERE STERS = 0 + AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) + AND C.IN_STOC = 1 + AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0 + AND COM.ID_GESTIUNE IS NOT NULL + order by 1, 2 desc) CRS) A1 + LEFT JOIN NOM_ARTICOLE A2 + ON A1.ID_ARTICOL = A2.ID_ARTICOL + LEFT JOIN NOM_GESTIUNI A3 + ON A1.ID_GESTIUNE = A3.ID_GESTIUNE + LEFT JOIN CRM_POLITICI_PRET_ART A4 + ON A1.ID_POL = A4.ID_POL + AND A1.ID_ARTICOL = A4.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) A5 + ON A1.ID_VALUTA = A5.ID_VALUTA + LEFT JOIN NOM_VALUTE A6 + ON A1.ID_VALUTA = A6.ID_VALUTA + ORDER BY a2.denumire, a2.codmat, a3.nume_gestiune; + + ELSE + + OPEN V_CURSOR FOR + select A1.id_articol, + A1.id_comanda, + A1.id_comanda_element, + A1.id_gestiune, + A1.id_pol, + A1.cont, + A3.nume_gestiune, + A2.codmat, + A2.codbare, + A2.denumire, + A1.cant_com, + A1.cant_ramasa, + A1.cant_stoc, + A1.CANT_REP as cantitate, + A1.cant_stoc - + (SUM(a1.CANT_REP) over(partition by a1.id_articol)) as cant_disp, + A1.ID_VALUTA, + NVL(A4.PROC_TVAV, 1) AS PROC_TVAV, + A1.PRET_CU_TVA AS PRETURI_CU_TVA, + NVL(A5.CURS, 0) AS CURS, + NVL(A5.MULTIPLICATOR, 1) AS MULTIPLICATOR, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS PRET, + 1 - NVL(A6.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + A6.NUME_VAL, + (CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) + ROUND((CASE + WHEN NVL(A6.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A5.CURS, 0) * + (ROUND(A1.PRET, pack_sesiune.nzecimale_pretvval) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval)) / + NVL(A5.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A1.PRET, pack_sesiune.nzecimale_pretv) - + ROUND(NVL(A4.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) * (CASE + WHEN A1.PRET_CU_TVA = 0 THEN + A4.PROC_TVAV - 1 + ELSE + 0 + END), + pack_sesiune.nzecimale_pretv) AS PRETCTVA + from (SELECT A.ID_ARTICOL, + A.ID_VALUTA, + A.PRET_CU_TVA, + A.PRET - NVL(A.DISCOUNT_UNITAR, 0) AS PRET, + A.ID_POL, + A.ID_COMANDA_ELEMENT, + COM.ID_COMANDA, + COM.ID_GESTIUNE, + STOC.CONT, + A.CANTITATE AS CANT_COM, + A.CANTITATE - NVL(D.CANTITATE, 0) AS CANT_RAMASA, + NVL(STOC.CANT_STOC, 0) AS CANT_STOC, + (CASE + WHEN NVL(STOC.CANT_STOC, 0) > 0 THEN + A.CANTITATE - NVL(D.CANTITATE, 0) + ELSE + 0 + END) AS CANT_REP, + 0 AS incomplet + FROM COMENZI COM + LEFT JOIN COMENZI_ELEMENTE A + ON COM.ID_COMANDA = A.ID_COMANDA + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT B1.ID_ARTICOL, + A1.ID_COMANDA, + B1.PRET, + SUM(B1.CANTITATE) AS CANTITATE + FROM VANZARI A1 + LEFT JOIN VANZARI_DETALII B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND B1.STERS = 0 + WHERE A1.STERS = 0 + GROUP BY B1.ID_ARTICOL, A1.ID_COMANDA, B1.PRET) D + ON A.ID_ARTICOL = D.ID_ARTICOL + AND A.ID_COMANDA = D.ID_COMANDA + AND A.PRET = D.PRET + LEFT JOIN (SELECT ID_ARTICOL, + SUM(CANTS + CANT - CANTE) AS CANT_STOC, + CONT + FROM STOC + WHERE AN = V_AN + AND LUNA = V_LUNA + AND ID_GESTIUNE = V_ID_GESTIUNE + AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + GROUP BY ID_ARTICOL, CONT) STOC + ON A.ID_ARTICOL = STOC.ID_ARTICOL + WHERE A.STERS = 0 + AND COM.ID_LUCRARE = V_ID_LUCRARE + AND COM.STERS = 0 + AND COM.ID_SECTIE IN + (SELECT ID_SECTIE + FROM NOM_SECTII + WHERE STERS = 0 + AND NVL2(V_ID_SUCURSALA, ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) + AND C.IN_STOC = 1 + AND A.CANTITATE - NVL(D.CANTITATE, 0) > 0 + AND COM.ID_GESTIUNE IS NOT NULL + order by 1, 2 desc) A1 + LEFT JOIN NOM_ARTICOLE A2 + ON A1.ID_ARTICOL = A2.ID_ARTICOL + LEFT JOIN NOM_GESTIUNI A3 + ON A1.ID_GESTIUNE = A3.ID_GESTIUNE + LEFT JOIN CRM_POLITICI_PRET_ART A4 + ON A1.ID_POL = A4.ID_POL + AND A1.ID_ARTICOL = A4.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) A5 + ON A1.ID_VALUTA = A5.ID_VALUTA + LEFT JOIN NOM_VALUTE A6 + ON A5.ID_VALUTA = A6.ID_VALUTA + ORDER BY a2.denumire, a2.codmat, a3.nume_gestiune; + END IF; + + END cursor_lucrare; + ------------------------------------------------------------------- + PROCEDURE cursor_articole_k(V_DATA_CURS IN DATE, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + OPEN V_CURSOR FOR + SELECT rownum as id_c, + B.ID_ARTICOL, + NULL AS LOT, + NULL as SERIE, + A.ID_POL, + B.ID_VALUTA, + A.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + C.IN_STOC AS GESTIONABIL, + 0 AS CANTITATE, + B.PROC_TVAV, + A.PRETURI_CU_TVA, + D.CURS, + D.MULTIPLICATOR, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(D.CURS, 0) * + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) / + NVL(D.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(E.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(E.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + E.NUME_VAL + FROM (select a1.id_util, + a3.id_pol, + a3.preturi_cu_tva, + a3.nume_lista_preturi, + a3.id_nota + from utilizatori_rol_intern a1 + left join politici_grupuri a2 + on a1.id_grup = a2.id_grup + left join crm_politici_preturi a3 + on a2.id_politica = a3.id_pol + left join crm_note_vanzari a4 + on a3.id_nota = a4.id_nota + left join note_contabile a5 + on a4.id_set = a5.id_set + where a1.sters = 0 + and a2.sters = 0 + and a3.sters = 0 + and a1.id_util = V_ID_UTIL + and NVL(a5.in_valuta, 0) = 0 + and least(NVL(last_day(to_date(V_AN || V_LUNA, 'YYYYMM')), + sysdate), + sysdate) between a3.datai and + NVL(a3.datas, to_date('300012', 'YYYYMM')) + and NVL(a1.ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99) + and a3.id_pol = + to_number(pack_sesiune.getoptiunefirma('IDPOLPRETFACTK'))) A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) D + ON B.ID_VALUTA = D.ID_VALUTA + LEFT JOIN NOM_VALUTE E + ON B.ID_VALUTA = E.ID_VALUTA + WHERE C.IN_STOC = 0 + AND C.IN_CRM = 1 + AND C.STERS = 0 + AND C.INACTIV = 0 + ORDER BY C.DENUMIRE; + + END cursor_articole_k; + ------------------------------------------------------------------- + PROCEDURE cursor_avize(V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_DISCOUNT OUT NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + V_DISCOUNT := 0; + + OPEN V_CURSOR FOR + WITH CRS AS + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT ROWNUM AS ID_C, + A.ID_ARTICOL, + A.LOT, + A.SERIE, + A.ID_POL, + A.ID_VALUTA, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + 0 AS GESTIONABIL, + A.CANTITATE - NVL(B.CANTITATE, 0) AS CANTITATE, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.ID_GESTIUNE, + A.CONT, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + A.CURS, + A.MULTIPLICATOR, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_VALUTAD AS ID_VALUTA_D, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(D.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + D.NUME_VAL + FROM (SELECT A1.ID_ARTICOL, + A1.LOT, + A1.SERIE, + A1.ID_POL, + A1.DISCOUNT_UNITAR, + SUM(A1.CANTITATE) AS CANTITATE, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL(A1.ID_GESTIUNE, -1000) AS ID_GESTIUNE, + NVL(A1.CONT, 'XXXX') AS CONT, + A1.PRET_CU_TVA, + A1.PRET_ACHIZITIE, + A1.PRETD, + A1.ID_VALUTAD, + A1.PRET, + A1.ID_VALUTA, + NVL(B1.CURS, 0) AS CURS, + NVL(B1.MULTIPLICATOR, 1) AS MULTIPLICATOR + FROM VANZARI_DETALII A1 + LEFT JOIN VANZARI_CURSURI B1 + ON A1.ID_VANZARE = B1.ID_VANZARE + AND A1.ID_VALUTA = B1.ID_VALUTA + WHERE A1.STERS = 0 + AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS) + GROUP BY A1.ID_ARTICOL, + A1.ID_POL, + A1.LOT, + A1.SERIE, + A1.DISCOUNT_UNITAR, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL(A1.ID_GESTIUNE, -1000), + NVL(A1.CONT, 'XXXX'), + A1.PRET_CU_TVA, + A1.PRET_ACHIZITIE, + A1.PRETD, + A1.ID_VALUTAD, + A1.PRET, + A1.ID_VALUTA, + NVL(B1.CURS, 0), + NVL(B1.MULTIPLICATOR, 1)) A + LEFT JOIN (SELECT A2.ID_ARTICOL, + A2.LOT, + A2.SERIE, + A2.ID_POL, + A2.DISCOUNT_UNITAR, + SUM(B2.CANTITATE) AS CANTITATE, + A2.PROC_TVAV, + A2.ID_JTVA_COLOANA, + NVL(A2.ID_GESTIUNE, -1000) AS ID_GESTIUNE, + NVL(A2.CONT, 'XXXX') AS CONT, + A2.PRET_CU_TVA, + A2.PRET_ACHIZITIE, + A2.PRETD, + A2.ID_VALUTAD, + A2.PRET, + A2.ID_VALUTA + FROM VANZARI_DETALII A2 + RIGHT JOIN VANZARI_CANTITATI B2 + ON A2.ID_VANZARE_DET = B2.ID_VANZARE_DET_AVIZ + WHERE A2.STERS = 0 + AND A2.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS) + AND B2.STERS = 0 + GROUP BY A2.ID_ARTICOL, + A2.ID_POL, + A2.LOT, + A2.SERIE, + A2.DISCOUNT_UNITAR, + A2.PROC_TVAV, + A2.ID_JTVA_COLOANA, + NVL(A2.ID_GESTIUNE, -1000), + NVL(A2.CONT, 'XXXX'), + A2.PRET_CU_TVA, + A2.PRET_ACHIZITIE, + A2.PRETD, + A2.ID_VALUTAD, + A2.PRET, + A2.ID_VALUTA) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_POL = B.ID_POL + AND NVL(A.LOT, '+_') = NVL(B.LOT, '+_') + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND A.DISCOUNT_UNITAR = B.DISCOUNT_UNITAR + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_JTVA_COLOANA, -9999) = NVL(B.ID_JTVA_COLOANA, -9999) + AND NVL(A.ID_GESTIUNE, -9999) = NVL(B.ID_GESTIUNE, -9999) + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND A.PRET_CU_TVA = B.PRET_CU_TVA + AND A.PRET = B.PRET + AND A.ID_VALUTA = B.ID_VALUTA + AND NVL(A.PRET_ACHIZITIE, 0) = NVL(B.PRET_ACHIZITIE, 0) + AND NVL(A.PRETD, 0) = NVL(B.PRETD, 0) + AND NVL(A.ID_VALUTAD, -99) = NVL(B.ID_VALUTAD, -99) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN NOM_VALUTE D + ON A.ID_VALUTA = D.ID_VALUTA + WHERE A.CANTITATE <> NVL(B.CANTITATE, 0) + ORDER BY C.DENUMIRE; + + END cursor_avize; + ------------------------------------------------------------------- + PROCEDURE cursor_aviz_nir(V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_FURNIZOR IN NUMBER, + V_NR_ACT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + + BEGIN + OPEN V_CURSOR FOR + select rownum as id_c, + rownum as id_temp, + a.ID_ARTICOL, + a.LOT, + a.SERIE, + a.ID_GESTIUNE, + b.ID_VALUTA, + 0 as discount_unitar, + c.CODMAT, + c.DENUMIRE, + Nvl(c.UM, Chr(32)) as um, + 1 as gestionabil, + a.CANT as cantitate, + a.PROC_TVAV, + decode(d.nr_pag, 6, 1, 7, 1, 0) as preturi_cu_tva, + 0 as CURS, + 1 as multiplicator, + a.PRET as preta, + a.pretv + a.tvav as pretctva, + a.pretv as pretftva, + a.tvav, + 0 as pret_val, + b.nume_val, + 0 as discount_unitar_val, + 0 as tip_valuta, + a.cont, + a.pretd, + a.id_valuta as id_valuta_d + from rul A + left join (select id_valuta, nume_val + from vnom_valute + where moneda_nationala = 1 + and rownum = 1) b + on 1 = 1 + left join nom_articole c + on a.id_articol = c.id_articol + left join nom_gestiuni d + on a.id_gestiune = d.id_gestiune + where a.sters = 0 + and a.id_gestiune = V_ID_GESTIUNE_DEST + and a.cod in (select max(a1.cod) + from act a1 + where a1.sters = 0 + and a1.id_partc = V_ID_FURNIZOR + and a1.scc = '401' + and a1.nract = V_NR_ACT + and NVL2(V_ID_SUCURSALA, a1.id_sucursala, -1) = + NVL(V_ID_SUCURSALA, -1)); + END cursor_aviz_nir; + ------------------------------------------------------------------- + PROCEDURE cursor_retur(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_COPIERE NUMBER := 0; + V_PROFORMA NUMBER := 0; + BEGIN + pack_facturare.cursor_retur_document(V_IN_VALUTA, + V_LISTAID, + V_COPIERE, + V_PROFORMA, + V_ID_UTIL, + V_CURSOR); + END; + + PROCEDURE cursor_retur_document(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_COPIERE IN NUMBER, + V_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + -- V_COPIERE: 1 (COPIERE) GESTIONABIL = NOM_ARTICOLE.IN_STOC, 0 (RETUR) GESTIONABIL = VANZARI_DETALII.ID_GEST <> 0 + -- V_PROFORMA: Daca este proforma (1), fac articolele negestionabile sa pot alege orice cantitate + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + OPEN V_CURSOR FOR + WITH CRS AS + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT ROWNUM AS ID_C, + A.ID_ARTICOL, + A.LOT, + A.SERIE, + A.ID_POL, + A.ID_VALUTA, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + B.CODMAT, + B.CODBARE, + B.DENUMIRE, + NVL(B.UM, '') AS UM, + (case + when V_PROFORMA = 1 then + 0 + when V_COPIERE = 1 then + B.IN_STOC + else + A.GESTIONABIL + end) AS GESTIONABIL, + A.CANTITATE, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + A.CURS, + A.MULTIPLICATOR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) + A.DIFERENTA AS PRET, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(C.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + C.NUME_VAL, + A.EXPLICATIE, + nvl(A.ID_GESTIUNE, 0) as ID_GESTIUNE, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_JTVA_COLOANA_EX + FROM (SELECT A1.ID_ARTICOL, + A1.LOT, + A1.SERIE, + A1.ID_POL, + A1.DISCOUNT_UNITAR, + A1.DIFERENTA, + --SUM(A1.CANTITATE) AS CANTITATE, + A1.CANTITATE, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL2(A1.ID_GESTIUNE, 1, 0) AS GESTIONABIL, + A1.PRET_CU_TVA, + A1.PRET, + A1.ID_VALUTA, + NVL(A2.CURS, 0) AS CURS, + NVL(A2.MULTIPLICATOR, 1) AS MULTIPLICATOR, + A1.EXPLICATIE, + A1.ID_GESTIUNE, + A1.PRET_ACHIZITIE, + A1.PRETD, + A1.ID_JTVA_COLOANA_EX + FROM VANZARI_DETALII A1 + LEFT JOIN VANZARI_CURSURI A2 + ON A1.ID_VANZARE = A2.ID_VANZARE + AND A1.ID_VALUTA = A2.ID_VALUTA + WHERE A1.STERS = 0 + AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN NOM_VALUTE C + ON A.ID_VALUTA = C.ID_VALUTA + ORDER BY B.DENUMIRE; + + END cursor_retur_document; + ----------------------------------------------------------------- + PROCEDURE cursor_copiere(V_IN_VALUTA IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + OPEN V_CURSOR FOR + WITH CRS AS + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR))) + SELECT ROWNUM AS ID_C, + A.ID_ARTICOL, + A.LOT, + A.SERIE, + A.ID_POL, + A.ID_VALUTA, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + B.CODMAT, + B.CODBARE, + B.DENUMIRE, + NVL(B.UM, '') AS UM, + A.GESTIONABIL, + A.CANTITATE, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.PRET_CU_TVA AS PRETURI_CU_TVA, + A.CURS, + A.MULTIPLICATOR, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.CURS * + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(A.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(A.PRET, pack_sesiune.nzecimale_pretv) + END) + A.DIFERENTA AS PRET, + (CASE + WHEN NVL(C.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(A.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(C.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + C.NUME_VAL + FROM (SELECT A1.ID_ARTICOL, + A1.LOT, + A1.SERIE, + A1.ID_POL, + A1.DISCOUNT_UNITAR, + A1.DIFERENTA, + --SUM(A1.CANTITATE) AS CANTITATE, + A1.CANTITATE, + A1.PROC_TVAV, + A1.ID_JTVA_COLOANA, + NVL2(A1.ID_GESTIUNE, 1, 0) AS GESTIONABIL, + A1.PRET_CU_TVA, + A1.PRET, + A1.ID_VALUTA, + NVL(A2.CURS, 0) AS CURS, + NVL(A2.MULTIPLICATOR, 1) AS MULTIPLICATOR + FROM VANZARI_DETALII A1 + LEFT JOIN VANZARI_CURSURI A2 + ON A1.ID_VANZARE = A2.ID_VANZARE + AND A1.ID_VALUTA = A2.ID_VALUTA + WHERE A1.STERS = 0 + AND A1.ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN NOM_VALUTE C + ON A.ID_VALUTA = C.ID_VALUTA + ORDER BY B.DENUMIRE; + + END cursor_copiere; + ------------------------------------------------------------------- + PROCEDURE cursor_gestiune(V_DATA_CURS IN DATE, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_NR_INREGISTRARI NUMBER(10); + V_NR_INREGISTRARI_TOT NUMBER(10); + BEGIN + pack_facturare.initializeaza_facturare(V_ID_UTIL); + + -- verificare ca exista cursul pentru valutele din CRM_POLITICI_PRET_ART + SELECT SUM(CASE + WHEN B.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + SUM(CASE + WHEN A.ID_VALUTA <> pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) + INTO V_NR_INREGISTRARI, V_NR_INREGISTRARI_TOT + FROM (SELECT DISTINCT A2.ID_VALUTA + FROM STOC A1 + LEFT JOIN CRM_POLITICI_PRET_ART A2 + ON A1.ID_ARTICOL = A2.ID_ARTICOL + WHERE A1.ID_GESTIUNE = V_ID_GESTIUNE + AND A2.ID_POL = V_ID_POL + AND NVL(A1.ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS; + + IF V_NR_INREGISTRARI <> V_NR_INREGISTRARI_TOT THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || ' !'); + END IF; + + -- nu se mai verifica dreptul pe gestiune + -- v_id_gestiune este dintre gestiunile pe care are drepturi utilizatorul + OPEN V_CURSOR FOR + SELECT ROWNUM as id_c, A.* + FROM (SELECT A.ID_ARTICOL, + NULL AS LOT, + NULL AS SERIE, + V_ID_GESTIUNE AS ID_GESTIUNE, + --A.CONT, + B.ID_POL, + B.ID_VALUTA, + D.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, '') AS UM, + 1 AS GESTIONABIL, + SUM(NVL(A.CANTS + A.CANT - A.CANTE, 0)) AS CANTITATE, + B.PROC_TVAV, + D.PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(B.PRET, pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(B.PRET, pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(B.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + 1 - NVL(F.MONEDA_NATIONALA, 1) AS TIP_VALUTA, + F.NUME_VAL, + DECODE(B.ID_POL, + NVL(pack_facturare.nid_politica_stoc, + B.ID_POL + 1), + 1, + 0) AS MODIFICABIL + FROM (SELECT ID_ARTICOL, CANT, CANTS, CANTE + FROM STOC + WHERE AN = V_AN + AND LUNA = V_LUNA + AND ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99)) A + JOIN (SELECT ID_ARTICOL, + ID_POL, + ID_VALUTA, + DISCOUNT_UNITAR, + PROC_TVAV, + PRET + FROM CRM_POLITICI_PRET_ART + WHERE ID_POL = V_ID_POL) B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN CRM_POLITICI_PRETURI D + ON B.ID_POL = D.ID_POL + LEFT JOIN (SELECT ID_VALUTA, CURS, MULTIPLICATOR + FROM CURS + WHERE DATA <= V_DATA_CURS + AND DATA2 >= V_DATA_CURS + AND STERS = 0) E + ON B.ID_VALUTA = E.ID_VALUTA + LEFT JOIN NOM_VALUTE F + ON B.ID_VALUTA = F.ID_VALUTA + GROUP BY A.ID_ARTICOL, + -- A.CONT, + B.ID_POL, + B.ID_VALUTA, + D.NUME_LISTA_PRETURI, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(B.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + C.CODMAT, + C.CODBARE, + C.DENUMIRE, + NVL(C.UM, ''), + C.IN_STOC, + B.PROC_TVAV, + D.PRETURI_CU_TVA, + E.CURS, + E.MULTIPLICATOR, + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(E.CURS, 0) * + ROUND(B.PRET, + pack_sesiune.nzecimale_pretvval) / + NVL(E.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(B.PRET, pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(F.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(B.PRET, pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + 1 - NVL(F.MONEDA_NATIONALA, 1), + F.NUME_VAL + ORDER BY C.DENUMIRE) A + WHERE A.CANTITATE > 0; + + END cursor_gestiune; + ------------------------------------------------------------------- + PROCEDURE cursor_gestiuni_articol(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + BEGIN + OPEN V_CURSOR FOR + SELECT 0 AS ALES, + A.ID_GESTIUNE, + A.CANTITATE, + A.CONT, + A.ACONT, + A.LOT, + A.SERIE, + A.PRET, + A.PRETD, + A.ID_VALUTA, + B.NUME_GESTIUNE, + A.DATAIN, + A.PRETV, + A.PRETVCTVA, + A.ID_PART_REZ, + A.ID_LUCRARE_REZ, + C.DENUMIRE AS PART_REZ, + D.NRORD AS NRORD_REZ, + E.NUME_VAL + FROM (SELECT A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + SUM(NVL(A2.CANTS + A2.CANT - A2.CANTE, 0)) AS CANTITATE, + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.PRETV + A2.TVAV as PRETVCTVA, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ + FROM (SELECT DISTINCT A11.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A11 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A12 + ON A11.ID_GRUPE = A12.ID_GRUPE + WHERE A11.STERS = 0 + AND A12.STERS = 0 + AND A12.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) = + NVL(V_ID_GESTIUNE, 2)) A1 + LEFT JOIN STOC A2 + ON A1.ID_GESTIUNE = A2.ID_GESTIUNE + AND A2.LUNA = V_LUNA + AND A2.AN = V_AN + AND NVL2(V_ID_SUCURSALA, A2.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND A2.ID_ARTICOL = V_ID_ARTICOL + GROUP BY A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.TVAV, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ) A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_PARTENERI C + ON A.ID_PART_REZ = C.ID_PART + LEFT JOIN VNOM_LUCRARI D + ON A.ID_LUCRARE_REZ = D.ID_LUCRARE + LEFT JOIN NOM_VALUTE E + ON A.ID_VALUTA = E.ID_VALUTA + WHERE A.CANTITATE > 0 + ORDER BY A.DATAIN, + B.NUME_GESTIUNE, + A.LOT, + A.SERIE, + A.PRET, + A.PRETV, + A.CONT, + A.ACONT, + C.DENUMIRE, + D.NRORD; + + END cursor_gestiuni_articol; + + ------------------------------------------------------------------- + -- adaugare articol gestionabil pe factura, daca nu exista in stoc + -- pentru optiunea RF_FACTURARE_FARA_STOC = 1 + -- se selecteaza din stoc datele de pe ultima intrare, ultimele 12 luni + ------------------------------------------------------------------- + PROCEDURE cursor_gestiuni_articol_stoc0(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + BEGIN + OPEN V_CURSOR FOR + SELECT 0 AS ALES, + A.ID_GESTIUNE, + A.CANTITATE, + CAST(NVL2(B.CONT, B.CONT, NVL2(A.CONT, A.CONT, '371')) AS + VARCHAR2(4)) AS CONT, + A.ACONT, + A.LOT, + A.SERIE, + NVL(A.PRET, 0.00) AS PRET, + NVL(A.PRETD, 0.00) AS PRETD, + A.ID_VALUTA, + B.NUME_GESTIUNE, + A.DATAIN, + NVL(A.PRETV, 0.00) AS PRETV, + NVL(A.PRETVCTVA, 0.00) AS PRETVCTVA, + A.ID_PART_REZ, + A.ID_LUCRARE_REZ, + C.DENUMIRE AS PART_REZ, + D.NRORD AS NRORD_REZ, + E.NUME_VAL + FROM (SELECT A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + 1000 AS CANTITATE, -- cantitate suficienta 1000 pentru vanzarea articolelor gestionabile fara stoc + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.PRETV + A2.TVAV as PRETVCTVA, + CAST(NULL AS Number(10, 0)) AS ID_PART_REZ, + CAST(NULL AS Number(10, 0)) AS ID_LUCRARE_REZ + FROM (SELECT DISTINCT A11.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A11 + JOIN GEST_CORESP_UTIL_GRUPE A12 + ON A11.ID_GRUPE = A12.ID_GRUPE + JOIN NOM_GESTIUNI A13 + ON A11.ID_GESTIUNE = A13.ID_GESTIUNE + WHERE A11.STERS = 0 + AND A12.STERS = 0 + AND A12.ID_UTIL = V_ID_UTIL + AND A13.STERS = 0 + AND A13.INACTIV = 0 + AND A13.NR_PAG IN (2, 4, 5, 6, 7) + AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) = + NVL(V_ID_GESTIUNE, 2)) A1 + LEFT JOIN STOC A2 + ON A1.ID_GESTIUNE = A2.ID_GESTIUNE + AND A2.AN >= V_AN - 1 -- anul precedent si anul curent + AND A2.PRET <> 0 + AND NVL2(V_ID_SUCURSALA, A2.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + AND A2.ID_ARTICOL = V_ID_ARTICOL + GROUP BY A1.ID_GESTIUNE, + A2.ID_ARTICOL, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + A2.LOT, + A2.SERIE, + A2.CONT, + A2.ACONT, + A2.DATAIN, + A2.PRETV, + A2.TVAV, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ) A + LEFT JOIN NOM_GESTIUNI B + ON A.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_PARTENERI C + ON A.ID_PART_REZ = C.ID_PART + LEFT JOIN VNOM_LUCRARI D + ON A.ID_LUCRARE_REZ = D.ID_LUCRARE + LEFT JOIN NOM_VALUTE E + ON A.ID_VALUTA = E.ID_VALUTA + ORDER BY NVL(A.DATAIN, TO_DATE('1900', 'YYYY')) DESC, + B.NUME_GESTIUNE, + A.LOT, + A.SERIE, + A.PRET, + A.PRETV, + A.CONT, + A.ACONT, + C.DENUMIRE, + D.NRORD; + + END cursor_gestiuni_articol_stoc0; + ------------------------------------------------------------------- + PROCEDURE cursor_gestiuni_articol_retur(V_ID_ARTICOL IN NUMBER, + V_TIP IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER, + V_LISTAID IN VARCHAR2, + V_ID_SUCURSALA IN NUMBER, + V_CURSOR OUT cursor_facturare) IS + V_SEPARATOR VARCHAR2(10) := ','; + BEGIN + OPEN V_CURSOR FOR + WITH CRS AS + ( + + SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR)) + + ) + SELECT 0 AS ALES, + A1.ID_GESTIUNE, + A2.CANTITATE, + A2.CONT, + A2.ACONT, + A2.LOT, + A2.SERIE, + A2.PRET, + A2.PRETD, + A2.ID_VALUTA, + B.NUME_GESTIUNE, + A2.DATAIN, + A2.PRETV, + A2.PRETVCTVA, + A2.ID_PART_REZ, + A2.ID_LUCRARE_REZ, + C.DENUMIRE AS PART_REZ, + D.NRORD AS NRORD_REZ, + E.NUME_VAL + FROM (SELECT DISTINCT A11.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A11 + LEFT JOIN GEST_CORESP_UTIL_GRUPE A12 + ON A11.ID_GRUPE = A12.ID_GRUPE + WHERE A11.STERS = 0 + AND A12.STERS = 0 + AND A12.ID_UTIL = V_ID_UTIL + AND NVL2(V_ID_GESTIUNE, A11.ID_GESTIUNE, 2) = + NVL(V_ID_GESTIUNE, 2)) A1 + LEFT JOIN (SELECT SUM(A22.CANTE) AS CANTITATE, + A22.ID_GESTIUNE, + A23.NR_PAG, + A22.ID_ARTICOL, + A22.PRET, + A22.PRETD, + A22.ID_VALUTA, + A22.LOT, + A22.SERIE, + A22.CONT, + A22.ACONT, + A22.DATAIN, + A22.PRETV, + A22.PRETV + A22.TVAV AS PRETVCTVA, + A22.ID_PART_REZ, + A22.ID_LUCRARE_REZ + FROM (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN (SELECT ID_VANZARE FROM CRS)) A21 + LEFT JOIN RUL A22 + ON A21.COD = A22.COD + AND A22.STERS = 0 + AND A22.ID_TIP_RULAJ = 0 + AND A22.ID_ARTICOL = V_ID_ARTICOL + AND NVL2(V_ID_SUCURSALA, A22.ID_SUCURSALA, -99) = + NVL(V_ID_SUCURSALA, -99) + LEFT JOIN NOM_GESTIUNI A23 + ON A22.ID_GESTIUNE = A23.ID_GESTIUNE + GROUP BY A22.ID_GESTIUNE, + A23.NR_PAG, + A22.ID_ARTICOL, + A22.PRET, + A22.PRETD, + A22.ID_VALUTA, + A22.LOT, + A22.SERIE, + A22.CONT, + A22.ACONT, + A22.DATAIN, + A22.PRETV, + A22.TVAV, + A22.ID_PART_REZ, + A22.ID_LUCRARE_REZ) A2 + ON A1.ID_GESTIUNE = A2.ID_GESTIUNE + LEFT JOIN NOM_GESTIUNI B + ON A1.ID_GESTIUNE = B.ID_GESTIUNE + LEFT JOIN NOM_PARTENERI C + ON A2.ID_PART_REZ = C.ID_PART + LEFT JOIN VNOM_LUCRARI D + ON A2.ID_LUCRARE_REZ = D.ID_LUCRARE + LEFT JOIN NOM_VALUTE E + ON A2.ID_VALUTA = E.ID_VALUTA + WHERE A2.CANTITATE > 0 + ORDER BY A2.DATAIN, + B.NUME_GESTIUNE, + A2.LOT, + A2.SERIE, + A2.PRET, + A2.PRETV, + A2.CONT, + A2.ACONT, + C.DENUMIRE, + D.NRORD; + + END cursor_gestiuni_articol_retur; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura_deviz(V_ID_ARTICOL IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_ID_JTVA_COLOANA_EX IN NUMBER DEFAULT NULL, + V_ID_CTR IN NUMBER DEFAULT NULL, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL) IS + BEGIN + INSERT INTO VANZARI_DETALII_TEMP + (ID_ARTICOL, + EXPLICATIA, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + ID_JTVA_COLOANA_EX, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + PRET_CU_TVA, + IN_STOC, + ID_TEMP, + ID_CTR, + TAXCODE, + LOT) + VALUES + (V_ID_ARTICOL, + V_EXPLICATIE, + V_SERIE, + V_PRET_ACHIZITIE, + V_PRETD, + V_ID_VALUTAD, + V_PRET, + V_PROC_TVAV, + V_ID_JTVA_COLOANA, + V_ID_JTVA_COLOANA_EX, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE, + V_CONT, + NVL(V_ID_VALUTA, pack_facturare.nid_moneda_nationala), + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_PRET_CU_TVA, + 1, + 0, + V_ID_CTR, + decode(V_TAXCODE, 0, null, V_TAXCODE), + V_LOT); + END adauga_articol_factura_deviz; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_RUL_AUX IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL) IS + lcExplicatia varchar2(240); + BEGIN + if pack_facturare.ntip = 50 and nvl(V_ID_RUL_AUX, 0) <> 0 then + select to_char(V_CANTITATE / ROUND(LUNGIME * LATIME / 1000000, 2)) || + ' buc. - ' || to_char(LUNGIME) || 'x' || to_char(LATIME) + into lcExplicatia + from DEV_ESTIMARI_PRODUSE + where id_dev_estimare_prod in + (select id_dev_estimare_prod + from rul_auxiliar + where id_rul_aux = V_ID_RUL_AUX) + and sters = 0; + end if; + INSERT INTO VANZARI_DETALII_TEMP + (ID_ARTICOL, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + PRET_CU_TVA, + IN_STOC, + EXPLICATIA, + ID_TEMP, + TAXCODE, + LOT) + VALUES + (V_ID_ARTICOL, + V_SERIE, + V_PRET_ACHIZITIE, + V_PRETD, + V_ID_VALUTAD, + V_PRET, + V_PROC_TVAV, + V_ID_JTVA_COLOANA, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE, + V_CONT, + NVL(V_ID_VALUTA, pack_facturare.nid_moneda_nationala), + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_PRET_CU_TVA, + 1, + lcExplicatia, + 0, + decode(V_TAXCODE, 0, NULL, V_TAXCODE), + V_LOT); + END adauga_articol_factura_stoc; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura_stoc(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN NUMBER, + V_PRET_CU_TVA IN NUMBER) is + begin + adauga_articol_factura_stoc(V_ID_ARTICOL, + V_SERIE, + V_PRET_ACHIZITIE, + V_PRETD, + V_ID_VALUTAD, + V_PRET, + V_ID_VALUTA, + V_CURS, + V_MULTIPLICATOR, + V_PROC_TVAV, + V_ID_JTVA_COLOANA, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE, + V_CONT, + V_PRET_CU_TVA, + null, + null, + null, + null); + end; + ------------------------------------------------------------------- + + PROCEDURE adauga_articol_lucrare_pret(V_ID_COMANDA IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_POL IN NUMBER, + V_CANTITATE IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_GESTIUNE_DEST IN NUMBER, + V_ID_UTIL IN NUMBER, + V_PRETIN IN NUMBER) IS + V_PRET CRM_POLITICI_PRET_ART.PRET%TYPE; + V_DISCOUNT_UNITAR CRM_POLITICI_PRET_ART.DISCOUNT_UNITAR%TYPE; + V_PROC_TVAV CRM_POLITICI_PRET_ART.PROC_TVAV%TYPE; + V_ID_VALUTA CRM_POLITICI_PRET_ART.ID_VALUTA%TYPE; + V_PRETURI_CU_TVA CRM_POLITICI_PRETURI.PRETURI_CU_TVA%TYPE; + V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE; + V_CODMAT NOM_ARTICOLE.CODMAT%TYPE; + V_NR_COMANDA COMENZI.NR_COMANDA%TYPE; + BEGIN + BEGIN + SELECT NVL(V_PRETIN, A.PRET) as PRET, + NVL(C.PROC_TVAV, (D.COTA_TVA + 100) / 100), + C.ID_VALUTA, + B.PRETURI_CU_TVA, + NVL(C.DISCOUNT_UNITAR, 0) + NVL(A.DISCOUNT_UNITAR, 0) + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_DISCOUNT_UNITAR + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRETURI B + ON A.ID_POL = B.ID_POL + LEFT JOIN CRM_POLITICI_PRET_ART C + ON A.ID_POL = C.ID_POL + AND A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN JTVA_COLOANE D + ON D.ID_JTVA_COLOANA = V_ID_JTVA_COLOANA + WHERE A.ID_COMANDA = V_ID_COMANDA + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_POL = V_ID_POL + AND A.PRET = V_PRETIN + AND A.STERS = 0; + EXCEPTION + WHEN TOO_MANY_ROWS THEN + SELECT DENUMIRE, CODMAT + INTO V_DENUMIRE, V_CODMAT + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL; + + SELECT NR_COMANDA + INTO V_NR_COMANDA + FROM COMENZI + WHERE ID_COMANDA = V_ID_COMANDA; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || V_DENUMIRE || ' cu codul ' || + V_CODMAT || ' este dublat pe comanda ' || + V_NR_COMANDA || ' !'); + END; + + INSERT INTO VANZARI_DETALII_TEMP + (ID_ARTICOL, + ID_POL, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_GESTIUNE_DEST, + ID_COMANDA, + ID_UTIL, + ID_TEMP) + SELECT V_ID_ARTICOL, + V_ID_POL, + V_PRET, + V_PRETURI_CU_TVA, + V_PROC_TVAV, + V_CANTITATE, + V_DISCOUNT_UNITAR, + pack_facturare.nid_gestiune_sursa, + V_CONT, + V_ID_VALUTA, + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_ID_JTVA_COLOANA, + 1, + V_ID_GESTIUNE_DEST, + V_ID_COMANDA, + V_ID_UTIL, + COUNT(*) + 1 + FROM VANZARI_DETALII_TEMP; + + END adauga_articol_lucrare_pret; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_set(V_ID_VANZARE_SET IN NUMBER, + V_DENUMIRE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_UM IN VARCHAR2, + V_SERIE IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER) is + begin + INSERT INTO VANZARI_SETURI_TEMP + (ID_VANZARE_SET, + DENUMIRE, + EXPLICATIE, + CANTITATE, + UM, + SERIE, + PRET, + DISCOUNT_UNITAR) + VALUES + ((-1) * V_ID_VANZARE_SET, + V_DENUMIRE, + V_EXPLICATIE, + V_CANTITATE, + V_UM, + V_SERIE, + V_PRET, + V_DISCOUNT_UNITAR); + end adauga_articol_set; + ------------------------------------------------------------------- + PROCEDURE adauga_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_EXPLICATIE IN VARCHAR2, + V_ID_POL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_PRET_ACHIZITIE_TEMP IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRET_TEMP IN NUMBER, + V_ID_VALUTA_TEMP IN NUMBER, + V_PRETURI_CU_TVA_TEMP IN NUMBER, + V_IN_STOC_TEMP IN NUMBER, + V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_CONT IN VARCHAR2, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_PRETV_ORIG IN NUMBER, + V_ID_VANZARE_SET IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_LOT IN VARCHAR2 DEFAULT NULL) IS + V_ID_GESTIUNE2 NOM_GESTIUNI.ID_GESTIUNE%TYPE; + V_CONT2 VARCHAR2(4); + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + + V_PRET_ACHIZITIE VANZARI_DETALII.PRET_ACHIZITIE%TYPE; + V_ID_POLITICA_PRETACH CRM_POLITICI_PRETURI.ID_POL%TYPE; + V_PROCENT_ADAOS NUMBER(10, 2); + + V_PRET CRM_POLITICI_PRET_ART.PRET%TYPE; + V_PROC_TVAV CRM_POLITICI_PRET_ART.PROC_TVAV%TYPE; + V_ID_VALUTA CRM_POLITICI_PRET_ART.ID_VALUTA%TYPE; + V_PRETURI_CU_TVA CRM_POLITICI_PRETURI.PRETURI_CU_TVA%TYPE; + V_IN_STOC NOM_ARTICOLE.IN_STOC%TYPE; + V_OPT_FACTURARE CONTRACTE.OPT_FACTURARE%TYPE; + BEGIN + V_PRET_ACHIZITIE := V_PRET_ACHIZITIE_TEMP; + IF V_ID_GESTIUNE <> -1000 THEN + V_ID_GESTIUNE2 := V_ID_GESTIUNE; + END IF; + IF V_CONT <> 'XXXX' THEN + V_CONT2 := V_CONT; + END IF; + + IF pack_facturare.ntip IN (2, 6, 26, 52) THEN + -- factura / aviz pe baza de contract + BEGIN + SELECT NVL(OPT_FACTURARE, 3) + INTO V_OPT_FACTURARE + FROM CONTRACTE + WHERE ID_CTR = V_ID_CTR; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_OPT_FACTURARE := 4; + END; + END IF; + + CASE + WHEN pack_facturare.ntip IN (3, 21, 28, 42, 47) THEN + -- facturare/aviz din comenzi + V_ID_COMANDA := to_number(pack_facturare.clistaid); + + SELECT A.PRET, + NVL2(A.PTVA, ROUND((A.PTVA + 100) / 100, 2), C.PROC_TVAV), + C.ID_VALUTA, + B.PRETURI_CU_TVA, + D.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM COMENZI_ELEMENTE A + LEFT JOIN CRM_POLITICI_PRETURI B + ON A.ID_POL = B.ID_POL + LEFT JOIN CRM_POLITICI_PRET_ART C + ON A.ID_POL = C.ID_POL + AND A.ID_ARTICOL = C.ID_ARTICOL + LEFT JOIN NOM_ARTICOLE D + ON A.ID_ARTICOL = D.ID_ARTICOL + WHERE A.ID_COMANDA = V_ID_COMANDA + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.PRET = V_PRET_TEMP + AND A.STERS = 0; + + WHEN pack_facturare.ntip = 4 THEN + -- facturare din avize + SELECT DISTINCT A.PRET, + A.PROC_TVAV, + A.ID_VALUTA, + A.PRET_CU_TVA, + B.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM VANZARI_DETALII A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_POL = V_ID_POL + AND NVL(A.ID_GESTIUNE, -1000) = V_ID_GESTIUNE + AND A.DISCOUNT_UNITAR = V_DISCOUNT_UNITAR + AND NVL(A.CONT, 'XXXX') = V_CONT + AND A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') AS num_tab))); + WHEN pack_facturare.ntip = 45 THEN + -- facturare restaurant + BEGIN + V_ID_POLITICA_PRETACH := to_number(pack_sesiune.getoptiunefirma('ID_POLPRODREST')); + V_PROCENT_ADAOS := to_number(pack_sesiune.getoptiunefirma('RESTPROCADAOS')); + V_PRET := V_PRET_TEMP; + V_ID_VALUTA := V_ID_VALUTA_TEMP; + V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP; + V_IN_STOC := V_IN_STOC_TEMP; + + SELECT ROUND((A.COTA_TVA + 100) / 100, 2), + NVL2(B.PRETFTVA, + round(decode(B.ID_VALUTA, + pack_def.GetIdMonedaNationala(), + 1, + V_CURS) * NVL(B.PRETFTVA, 0), + pack_sesiune.nzecimale_preta), + NVL2(V_PROCENT_ADAOS, + round(pack_sesiune.calculeaza_pret_fara_tva(V_PRET, + V_CURS, + V_ID_VALUTA, + (A.COTA_TVA + 100) / 100, + V_PRETURI_CU_TVA, + 1) * 100 / + (100 + V_PROCENT_ADAOS), + pack_sesiune.nzecimale_preta), + 0)) + INTO V_PROC_TVAV, V_PRET_ACHIZITIE + FROM JTVA_COLOANE A + LEFT JOIN (SELECT PRETFTVA, ID_VALUTA + FROM CRM_POLITICI_PRET_ART + WHERE NVL2(V_ID_POLITICA_PRETACH, ID_POL, 1) = + NVL(V_ID_POLITICA_PRETACH, 2) + AND ID_ARTICOL = V_ID_ARTICOL) B + ON 1 = 1 + WHERE A.ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu a fost gasita cota de TVA! (FACT-018 : ' || + V_ID_ARTICOL || ')'); + END; + WHEN V_OPT_FACTURARE = 3 THEN + -- facturare/aviz de pe contract cu preturile de pe contract + BEGIN + SELECT DECODE(A.PRET_UNITAR, 0, V_PRET_TEMP, A.PRET_UNITAR), + B.PROC_TVAV, + B.ID_VALUTA, + A.PRET_CU_TVA, + C.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM CTR_ARTICOLE A + LEFT JOIN CRM_POLITICI_PRET_ART B + ON A.ID_POL_ART = B.ID_POL_ART + LEFT JOIN NOM_ARTICOLE C + ON B.ID_ARTICOL = C.ID_ARTICOL + WHERE B.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_CTR = V_ID_CTR + AND B.ID_POL = V_ID_POL; + EXCEPTION + WHEN NO_DATA_FOUND THEN + BEGIN + SELECT ROUND((COTA_TVA + 100) / 100, 2) + INTO V_PROC_TVAV + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu a fost gasita cota de TVA! (FACT-012 : ' || + V_ID_ARTICOL || ')'); + END; + + V_PRET := V_PRET_TEMP; + V_ID_VALUTA := V_ID_VALUTA_TEMP; + V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP; + V_IN_STOC := V_IN_STOC_TEMP; + END; + + ELSE + BEGIN + SELECT ROUND((COTA_TVA + 100) / 100, 2) + INTO V_PROC_TVAV + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu a fost gasita cota de TVA! (FACT-013 : ' || + V_ID_ARTICOL || ')'); + END; + + V_PRET := V_PRET_TEMP; + V_ID_VALUTA := V_ID_VALUTA_TEMP; + V_PRETURI_CU_TVA := V_PRETURI_CU_TVA_TEMP; + V_IN_STOC := V_IN_STOC_TEMP; + /* SELECT A.PRET, + A.PROC_TVAV, + A.ID_VALUTA, + B.PRETURI_CU_TVA, + C.IN_STOC + INTO V_PRET, + V_PROC_TVAV, + V_ID_VALUTA, + V_PRETURI_CU_TVA, + V_IN_STOC + FROM CRM_POLITICI_PRET_ART A + LEFT JOIN CRM_POLITICI_PRETURI B ON A.ID_POL = B.ID_POL + LEFT JOIN NOM_ARTICOLE C ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_POL = V_ID_POL;*/ + + END CASE; + + INSERT INTO VANZARI_DETALII_TEMP + (ID_TEMP, + ID_ARTICOL, + SERIE, + LOT, + EXPLICATIA, + ID_POL, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_VANZARE_SET, + ID_PART_REZ, + ID_LUCRARE_REZ, + PRETV_ORIG, + CUSTODIE, + ID_CTR, + ID_UTIL, + TAXCODE) + VALUES + (V_ID_TEMP, + V_ID_ARTICOL, + V_SERIE, + V_LOT, + V_EXPLICATIE, + V_ID_POL, + NVL(V_PRET_ACHIZITIE, 0), + NVL(V_PRETD, 0), + V_ID_VALUTAD, + V_PRET, + V_PRETURI_CU_TVA, + V_PROC_TVAV, + V_CANTITATE, + V_DISCOUNT_UNITAR, + V_ID_GESTIUNE2, + V_CONT2, + V_ID_VALUTA, + DECODE(V_CURS, 0, 1, V_CURS), + V_MULTIPLICATOR, + V_ID_JTVA_COLOANA, + V_IN_STOC, + (-1) * V_ID_VANZARE_SET, + V_ID_PART_REZ, + V_ID_LUCRARE_REZ, + V_PRETV_ORIG, + (CASE WHEN pack_facturare.ntip IN (42, 47) OR + pack_facturare.v_date_gestiune.cont = '357' THEN 1 ELSE 0 END), + V_ID_CTR, + V_ID_UTIL, + decode(V_TAXCODE, 0, NULL, V_TAXCODE)); + + END adauga_articol_factura; + ------------------------------------------------------------------- + PROCEDURE sterge_articol_factura(V_ID_TEMP IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + DELETE FROM VANZARI_DETALII_TEMP WHERE ID_TEMP = V_ID_TEMP; + END sterge_articol_factura; + ------------------------------------------------------------------- + PROCEDURE adauga_diferente_pret(V_SIR_ID_TEMP IN VARCHAR2, + V_SIR_DIFERENTA IN VARCHAR, + V_ID_UTIL IN NUMBER) IS + V_SEPARATOR VARCHAR2(1) := '|'; + BEGIN + MERGE INTO VANZARI_DETALII_TEMP A + USING (SELECT ID_TEMP, SUM(DIFERENTA) AS DIFERENTA + FROM (SELECT to_number(substr(V_SIR_ID_TEMP, + decode(rownum, + 1, + 1, + instr(V_SIR_ID_TEMP, + V_SEPARATOR, + 1, + rownum - 1) + 1), + instr(V_SIR_ID_TEMP, + V_SEPARATOR, + 1, + rownum) - + decode(rownum, + 1, + 0, + instr(V_SIR_ID_TEMP, + V_SEPARATOR, + 1, + rownum - 1)) - 1)) AS ID_TEMP, + to_number(substr(V_SIR_DIFERENTA, + decode(rownum, + 1, + 1, + instr(V_SIR_DIFERENTA, + V_SEPARATOR, + 1, + rownum - 1) + 1), + instr(V_SIR_DIFERENTA, + V_SEPARATOR, + 1, + rownum) - + decode(rownum, + 1, + 0, + instr(V_SIR_DIFERENTA, + V_SEPARATOR, + 1, + rownum - 1)) - 1)) AS DIFERENTA + FROM dual + CONNECT BY level <= + length(V_SIR_ID_TEMP) - + length(REPLACE(V_SIR_ID_TEMP, V_SEPARATOR))) + GROUP BY ID_TEMP) B + ON (A.ID_TEMP = B.ID_TEMP) + WHEN MATCHED THEN + UPDATE SET DIFERENTA = B.DIFERENTA; + END adauga_diferente_pret; + ------------------------------------------------------------------- + PROCEDURE adauga_rata_factura(V_ID_RATA IN NUMBER, + V_PRET IN NUMBER, + V_CURS IN NUMBER, + V_MULTIPLICATOR IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) IS + V_CANTITATE VANZARI_DETALII.CANTITATE%TYPE := 1; + V_PRETURI_CU_TVA VANZARI_DETALII.PRET_CU_TVA%TYPE; + V_PROC_TVAV VANZARI_DETALII.PROC_TVAV%TYPE; + V_ID_CTR CONTRACTE.ID_CTR%TYPE; + + V_ID_VALUTA NOM_VALUTE.ID_VALUTA%TYPE; + lnIdTemp NUMBER(10); + BEGIN + SELECT (B.PROC_TVA + 100) / 100 AS PROC_TVAV, + A.ID_VALUTA, + A.ID_CTR, + A.PRET_CU_TVA + INTO V_PROC_TVAV, V_ID_VALUTA, V_ID_CTR, V_PRETURI_CU_TVA + FROM CTR_SCADENTAR A + LEFT JOIN CONTRACTE B + ON A.ID_CTR = B.ID_CTR + WHERE A.ID_RATA = V_ID_RATA; + + SELECT COUNT(*) + 1 INTO lnIdTemp from vanzari_detalii_temp; + + INSERT INTO VANZARI_DETALII_TEMP + (ID_RATA, + PRET, + PROC_TVAV, + CANTITATE, + ID_VALUTA, + CURS, + MULTIPLICATOR, + EXPLICATIA, + PRET_CU_TVA, + ID_JTVA_COLOANA, + ID_CTR, + ID_UTIL, + ID_TEMP, + TAXCODE) + VALUES + (V_ID_RATA, + V_PRET, + V_PROC_TVAV, + V_CANTITATE, + V_ID_VALUTA, + V_CURS, + V_MULTIPLICATOR, + V_EXPLICATIE, + V_PRETURI_CU_TVA, + V_ID_JTVA_COLOANA, + V_ID_CTR, + V_ID_UTIL, + lnIdTemp, + decode(V_TAXCODE, 0, NULL, V_TAXCODE)); + + END adauga_rata_factura; + ------------------------------------------------------------------- + PROCEDURE sterge_rata_factura(V_ID_RATA IN NUMBER, V_ID_UTIL IN NUMBER) IS + BEGIN + DELETE FROM VANZARI_DETALII_TEMP WHERE ID_RATA = V_ID_RATA; + END sterge_rata_factura; + ------------------------------------------------------------------- + PROCEDURE sterge_proforma_old(V_ID_PROFORMA IN NUMBER, + V_ID_UTIL IN NUMBER) IS + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0; + V_DATAORA DATE := SYSDATE; + + BEGIN + UPDATE PROFORME_DETALII + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_PROFORMA = V_ID_PROFORMA + AND STERS = V_NESTERS; + + UPDATE PROFORME + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_PROFORMA = V_ID_PROFORMA; + + END sterge_proforma_old; + + ------------------------------------------------------------------- + PROCEDURE sterge_factura(V_ID_VANZARE IN NUMBER, + V_LUNA IN NUMBER, + V_AN IN NUMBER, + V_ID_UTIL IN NUMBER) IS + TYPE sir_id_rata IS TABLE OF VANZARI_DETALII.ID_RATA%TYPE; + arr_id_rata sir_id_rata; + + V_COD ACT.COD%TYPE; + V_ID_SET XSETS.ID_SET%TYPE := 0; + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0; + V_DATAORA DATE := SYSDATE; + V_TIP VANZARI.TIP%TYPE; + + V_NR_AVIZE_FACT NUMBER(10); + V_NR_FACT_RETUR NUMBER(10); + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + BEGIN + -- pentru o factura : + -- verific daca exista facturi de retur + SELECT COUNT(*) + INTO V_NR_FACT_RETUR + FROM VANZARI_CORESP + WHERE STERS = 0 + AND ID_VANZARE_AVIZ = V_ID_VANZARE + AND TIP = 3; + + IF V_NR_FACT_RETUR > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Pentru acesta factura s-au emis facturi de retur. Trebuie sa stergeti mai intai factura de retur!'); + END IF; + + -- ptr. un aviz normal: + -- verific daca exista facturi sau avize de retur pe avizul resp. + SELECT COUNT(*) + INTO V_NR_AVIZE_FACT + FROM VANZARI_CORESP + WHERE STERS = 0 + AND ID_VANZARE_AVIZ = V_ID_VANZARE + AND TIP IN (1, 2); + + IF V_NR_AVIZE_FACT > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Pe acest aviz s-au emis facturi / aviz de retur. Trebuie sa stergeti mai intai facturile / avizul de retur!'); + END IF; + + -- ptr. o factura din aviz: + -- verific daca sunt avize de retur pe avizele pentru care s-a emis factura resp. + SELECT COUNT(*) + INTO V_NR_AVIZE_FACT + FROM VANZARI_CORESP + WHERE STERS = 0 + AND ID_VANZARE_AVIZ IN (SELECT ID_VANZARE_AVIZ + FROM VANZARI_CORESP + WHERE ID_VANZARE_FACT = V_ID_VANZARE + AND TIP = 1) + AND TIP = 2; + + IF V_NR_AVIZE_FACT > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Pe unul dintre avizele facturate s-a emis si aviz de retur! ' || + 'Trebuie sa stergeti avizul de retur mai intai!'); + END IF; + + UPDATE VANZARI + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE + RETURNING COD, TIP, ID_COMANDA INTO V_COD, V_TIP, V_ID_COMANDA; + + CASE + WHEN V_TIP = 24 THEN + -- aviz de retur + UPDATE VANZARI + SET FACTURAT = 0, ID_UTILFACT = NULL, DATA_FACTURAT = NULL + WHERE ID_VANZARE IN (SELECT ID_VANZARE_AVIZ + FROM VANZARI_CORESP + WHERE ID_VANZARE_FACT = V_ID_VANZARE + AND STERS = 0) + AND FACTURAT = 1; + + WHEN V_TIP > 20 and + V_TIP not in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata) THEN + -- alte tipuri de avize + UPDATE VANZARI_CANTITATI + SET STERS = 1 + WHERE ID_VANZARE_DET_AVIZ IN + (SELECT ID_VANZARE_DET AS ID_VANZARE_DET_AVIZ + FROM VANZARI_DETALII + WHERE ID_VANZARE = V_ID_VANZARE + AND STERS = 0); + + WHEN V_TIP = 4 THEN + -- factura din aviz + UPDATE VANZARI + SET FACTURAT = 0, ID_UTILFACT = NULL, DATA_FACTURAT = NULL + WHERE ID_VANZARE IN (SELECT ID_VANZARE_AVIZ + FROM VANZARI_CORESP + WHERE ID_VANZARE_FACT = V_ID_VANZARE + AND STERS = 0) + AND FACTURAT = 1; + + UPDATE VANZARI_CANTITATI + SET STERS = 1 + WHERE ID_VANZARE_DET IN + (SELECT ID_VANZARE_DET + FROM VANZARI_DETALII + WHERE ID_VANZARE = V_ID_VANZARE); + + WHEN V_TIP = pack_facturare.nTipFacturaRestaurant THEN + SELECT DISTINCT ID_SET + INTO V_ID_SET + FROM ACT + WHERE COD IN + (SELECT COD FROM VANZARI WHERE ID_VANZARE = V_ID_VANZARE); + + ELSE + V_STERS := 1; + END CASE; + + IF V_ID_COMANDA IS NOT NULL THEN + UPDATE COMENZI_ELEMENTE + SET STERS = V_STERS, DATAORAS = V_DATAORA, ID_UTILS = V_ID_UTIL + WHERE ID_COMANDA = V_ID_COMANDA + AND CANTITATE < 0; + END IF; + + UPDATE VANZARI_DETALII + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE + AND STERS = V_NESTERS + RETURNING ID_RATA BULK COLLECT INTO arr_id_rata; + + IF V_TIP IN (2, 6, 52) THEN + FOR i IN arr_id_rata.FIRST .. arr_id_rata.LAST LOOP + IF arr_id_rata(i) IS NOT NULL THEN + UPDATE CTR_RATE_FACTURI + SET STERS = V_STERS, + ID_UTILS = V_ID_UTIL, + DATAORAS = V_DATAORA + WHERE ID_FACT IN + (SELECT DISTINCT ID_FACT FROM ACT WHERE COD = V_COD) + AND ID_RATA = arr_id_rata(i) + AND STERS = V_NESTERS; + END IF; + END LOOP; + + END IF; + + UPDATE VANZARI_CORESP + SET STERS = V_STERS + WHERE ID_VANZARE_FACT = V_ID_VANZARE + OR ID_VANZARE_AVIZ = V_ID_VANZARE; + + CASE + WHEN V_TIP IN (pack_facturare.nTipFacturaRestaurant, nTipNotaPlata) AND + V_ID_SET <> + 25000 + pack_facturare.nTipFacturaRestaurant - 1 + 10 then + pack_restaurant.sterge_vanzare(V_ID_VANZARE, V_ID_UTIL); + + WHEN V_TIP = pack_facturare.nTipFacturaHotel then + pack_hotel.sterge_vanzare(V_ID_VANZARE, V_ID_UTIL); + + WHEN V_TIP = pack_facturare.nTipFacturaACN then + -- apelez cu execute immediate pentru ca nu exista pack_acn decat pe firma ACN + if pack_migrare.ObjectExist('PACK_ACN') = 1 then + execute immediate 'begin pack_acn.sterge_vanzare(:1, :2); end;' + using V_ID_VANZARE, V_ID_UTIL; + end if; + + ELSE + NULL; + END CASE; + + END sterge_factura; + + ------------------------------------------------------------------- + PROCEDURE sterge_proforma(V_ID_VANZARE IN NUMBER, V_ID_UTIL IN NUMBER) IS + TYPE sir_id_rata IS TABLE OF VANZARI_DETALII.ID_RATA%TYPE; + arr_id_rata sir_id_rata; + + V_COD ACT.COD%TYPE; + V_ID_SET XSETS.ID_SET%TYPE := 0; + V_STERS NUMBER(1) := 1; + V_NESTERS NUMBER(1) := 0; + V_DATAORA DATE := SYSDATE; + V_TIP VANZARI.TIP%TYPE; + + V_NR_AVIZE_FACT NUMBER(10); + V_NR_FACT_RETUR NUMBER(10); + V_ID_COMANDA COMENZI.ID_COMANDA%TYPE; + BEGIN + + UPDATE VANZARI + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE; + + UPDATE VANZARI_DETALII + SET STERS = V_STERS, ID_UTILS = V_ID_UTIL, DATAORAS = V_DATAORA + WHERE ID_VANZARE = V_ID_VANZARE + AND STERS = V_NESTERS; + + END sterge_proforma; + + PROCEDURE scrie_proforma(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) is + begin + pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + pack_facturare.nid_vanzare); + if pack_facturare.nid_vanzare is not null then + V_ID_VANZARE := pack_facturare.nid_vanzare; + + -- completez vanzari.eproforma + update vanzari + set eproforma = 1 + where id_vanzare = pack_facturare.nid_vanzare; + end if; + end; + + ------------------------------------------------------------------- + PROCEDURE scrie_proforma_old(V_DISCOUNT_PROFORMA IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_PROFORMA OUT NUMBER, + V_NUMAR_ACT OUT NUMBER) IS + + V_DATAORA DATE := SYSDATE; + + BEGIN + pack_serii_numere.dezaloca_numar(pack_facturare.nid_tipfactura); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.genereaza_numar_proforma(V_NUMAR_ACT); + + INSERT /*+ APPEND */ + INTO PROFORME + (id_util, + dataora, + id_part, + id_comanda, + numar_act, + tip, + data_act, + discount, + discount_evidentiat, + text_aditional, + in_valuta, + id_sucursala) + VALUES + (pack_facturare.nid_util, + V_DATAORA, + pack_facturare.nid_part, + pack_facturare.nid_comanda, + pack_facturare.nnumar_act, + pack_facturare.ntip, + pack_facturare.ddata_act, + V_DISCOUNT_PROFORMA, + pack_facturare.ndiscount_evidentiat, + REPLACE(V_TEXT_ADITIONAL, CHR(13) || CHR(10), CHR(32)), + pack_facturare.nin_valuta, + pack_facturare.nid_sucursala) + RETURNING ID_PROFORMA INTO V_ID_PROFORMA; + + pack_facturare.scrie_cursuri_proforma(V_ID_PROFORMA); + + pack_facturare.scrie_seturi_proforma; + + INSERT /*+ APPEND */ + INTO PROFORME_DETALII + (ID_PROFORMA, + ID_ARTICOL, + ID_POL, + CANTITATE, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + EXPLICATIE, + CONT, + PRET_CU_TVA, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_CTR, + ID_PROFORMA_SET) + SELECT V_ID_PROFORMA AS ID_PROFORMA, + ID_ARTICOL, + ID_POL, + CANTITATE, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + EXPLICATIA AS EXPLICATIE, + CONT, + PRET_CU_TVA, + SERIE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_CTR, + DECODE(ID_VANZARE_SET, 0, NULL, ID_VANZARE_SET) AS ID_PROFORMA_SET + FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-001)'); + END IF; + + END scrie_proforma_old; + ------------------------------------------------------------------- + PROCEDURE inchide_comanda IS + BEGIN + INSERT INTO COMENZI_ELEMENTE + (ID_COMANDA, + ID_ARTICOL, + ID_POL, + PRET, + DISCOUNT_UNITAR, + CANTITATE, + ID_VALUTA, + PRET_CU_TVA) + SELECT to_number(pack_facturare.clistaid) AS ID_COMANDA, + A.ID_ARTICOL, + A.ID_POL, + A.PRET, + A.DISCOUNT_UNITAR, + NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0) - A.CANTITATE AS CANTITATE, + A.ID_VALUTA, + A.PRET_CU_TVA + FROM COMENZI_ELEMENTE A + LEFT JOIN (SELECT ID_ARTICOL, + ID_POL, + ID_VALUTA, + PRET, + SUM(CANTITATE) AS CANTITATE + FROM VANZARI_DETALII_TEMP + GROUP BY ID_ARTICOL, ID_POL, ID_VALUTA, PRET) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_POL = B.ID_POL + AND A.ID_VALUTA = B.ID_VALUTA + AND A.PRET = B.PRET + LEFT JOIN (SELECT B.ID_ARTICOL, + B.ID_POL, + B.ID_VALUTA, + B.PRET, + SUM(B.CANTITATE) AS CANTITATE + FROM VANZARI A + LEFT JOIN VANZARI_DETALII B + ON A.ID_VANZARE = B.ID_VANZARE + AND B.STERS = 0 + WHERE A.ID_COMANDA = to_number(pack_facturare.clistaid) + AND A.STERS = 0 + GROUP BY B.ID_ARTICOL, B.ID_POL, B.ID_VALUTA, B.PRET) C + ON A.ID_ARTICOL = C.ID_ARTICOL + AND A.ID_POL = C.ID_POL + AND A.ID_VALUTA = C.ID_VALUTA + AND A.PRET = C.PRET + WHERE A.STERS = 0 + AND A.ID_COMANDA = to_number(pack_facturare.clistaid) + AND SIGN(A.CANTITATE) * A.CANTITATE > SIGN(A.CANTITATE) * (NVL(C.CANTITATE, 0) + NVL(B.CANTITATE, 0)); + + END inchide_comanda; + ------------------------------------------------------------------- + PROCEDURE scrie_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_ID_SERIE_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + CURSOR CRS IS + SELECT ROWNUM AS NRCRT, ID_COMANDA, ID_GESTIUNE + FROM (SELECT ID_COMANDA, ID_GESTIUNE + FROM COMENZI + WHERE STERS = 0 + AND ID_LUCRARE = pack_facturare.nid_lucrare + -- modificare 11.07 + AND ID_COMANDA IN + (SELECT ID_COMANDA FROM VANZARI_DETALII_TEMP) + -- AND ID_GESTIUNE IN + -- (SELECT DISTINCT ID_GESTIUNE_DEST FROM VANZARI_DETALII_TEMP) + -- modificare 11.07 ^ + ORDER BY ID_COMANDA); + CRS_LINIE CRS%ROWTYPE; + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + + NR_AVIZ NUMBER(5) := 0; + NR_ELEMENT NUMBER(5) := 0; + ELEM_OPTIUNE NUMBER(5) := 0; + BEGIN + DELETE FROM VANZARI_TEMP; + pack_contafin.sterge_temp_actrul(); + pack_facturare.initializeaza_setari_facturare(); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.nid_serie := V_ID_SERIE_ACT; + ELEM_OPTIUNE := NVL(pack_sesiune.getoptiunefirma('NRMAXELEMPAG'), + 9999); + + OPEN CRS; + LOOP + FETCH CRS + INTO CRS_LINIE; + EXIT WHEN CRS%NOTFOUND; + + IF CRS_LINIE.NRCRT > 1 THEN + IF pack_facturare.nid_serie IS NULL THEN + pack_facturare.nnumar_act := pack_facturare.nnumar_act + 1; + ELSE + pack_serii_numere.aloca_numar(pack_facturare.nid_tipaviz, + pack_facturare.nid_serie, + NULL, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_act); + END IF; + END IF; + + pack_facturare.nid_comanda := CRS_LINIE.ID_COMANDA; + pack_facturare.v_date_gestiune.id_gestiune := CRS_LINIE.ID_GESTIUNE; + pack_facturare.v_date_gestiune.acont := NULL; + + SELECT NR_PAG, CONT, ACONT + INTO pack_facturare.v_date_gestiune.id_tip_gest, + pack_facturare.v_date_gestiune.cont, + pack_facturare.v_date_gestiune.acont + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = pack_facturare.v_date_gestiune.id_gestiune; + + INSERT INTO VANZARI_TEMP + (id_gestiune_dest, id_lucrare, numar_act, id_comanda, id_gestiune) + values + (pack_facturare.v_date_gestiune.id_gestiune, + pack_facturare.nid_lucrare, + pack_facturare.nnumar_act, + pack_facturare.nid_comanda, + pack_facturare.nid_gestiune_sursa); + + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + + SELECT * + BULK COLLECT + INTO tab_detalii + FROM VANZARI_DETALII_TEMP + WHERE ID_COMANDA = CRS_LINIE.ID_COMANDA; + -- modificare 11.07 : WHERE ID_GESTIUNE_DEST = pack_facturare.v_date_gestiune.id_gestiune; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-002)'); + END IF; + + NR_AVIZ := 1; + NR_ELEMENT := 0; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + -- modificare 01.07.2008 + -- daca depasesc un anumit numar de elemente pe aviz, generez datele pentru urmatorul + NR_ELEMENT := NR_ELEMENT + 1; + IF NR_AVIZ < FLOOR((NR_ELEMENT - 1) / ELEM_OPTIUNE) + 1 THEN + NR_AVIZ := NR_AVIZ + 1; + IF pack_facturare.nid_serie IS NULL THEN + pack_facturare.nnumar_act := pack_facturare.nnumar_act + 1; + ELSE + pack_serii_numere.aloca_numar(pack_facturare.nid_tipaviz, + pack_facturare.nid_serie, + NULL, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_act); + END IF; + + INSERT INTO VANZARI_TEMP + (id_gestiune_dest, + id_lucrare, + numar_act, + id_comanda, + id_gestiune) + values + (pack_facturare.v_date_gestiune.id_gestiune, + pack_facturare.nid_lucrare, + pack_facturare.nnumar_act, + pack_facturare.nid_comanda, + pack_facturare.nid_gestiune_sursa); + + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + + END IF; + -- modificare 01.07.2008 ^ + + pack_facturare.transfera_articol(tab_detalii(i)); + END LOOP; + END LOOP; + + CLOSE CRS; + + -- cumulare note + pack_facturare.cumuleaza_note_act(); + -- pack_facturare.completeaza_analitice(); am mutat-o in cumuleaza_note_act + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + else + pack_facturare.finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA); + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + end if; + V_ID_VANZARE := NULL; + + END scrie_avize_lucrare; + ------------------------------------------------------------------- + /* PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_factura2(V_TOTFTVA, + V_TOTTVA, + V_DISCOUNT_FACTURA, + V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_DISCOUNT_EVIDENTIAT, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE, + V_CURSOR_VERIFICARE); + + end;*/ + ------------------------------------------------------------------- + + PROCEDURE scrie_factura2(V_TOTFTVA IN NUMBER, + V_TOTTVA IN NUMBER, + V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + -- V_LISTA_INCASARE : tip1|valoare1|id_bancasa1;tip2|valoare2|id_bancasa2 (pentru incasari cu mai multe tipuri ex: NUMERAR + CARD + TICHETE) + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0; + V_ASCD ACT.ASCD%TYPE; + V_ID_SECTIE ACT.ID_SECTIE%TYPE; + V_ID_CTR ACT.ID_CTR%TYPE; + V_SEPARATOR VARCHAR2(1) := ','; + BEGIN + pack_contafin.sterge_temp_actrul(); + pack_facturare.ntotftva := V_TOTFTVA; + pack_facturare.ntottva := V_TOTTVA; + + pack_facturare.initializeaza_setari_facturare(); + + IF pack_facturare.nscadere_stoc = 0 AND + pack_facturare.ntip IN (23, 25, 30, 41) THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista configurari pentru transfer intre subunitati fara scadere din stoc! (FACT-003)'); + END IF; + + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + + SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-004)'); + END IF; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + + CASE + WHEN pack_facturare.ntip IN (23, 25, 30, 41) THEN + -- transfer intre subunitati + V_INCASAT_CALCUL := 0; + pack_facturare.transfera_articol(tab_detalii(i)); + /* WHEN pack_facturare.ntip = pack_facturare.nTipNotaPlata THEN + pack_facturare.descarca_gestiune(tab_detalii(i).id_articol, + tab_detalii(i).serie, + tab_detalii(i).pret_achizitie, + tab_detalii(i).pretd, + tab_detalii(i).id_valutad, + tab_detalii(i).pretv_orig, + tab_detalii(i).pret, + tab_detalii(i).diferenta, + tab_detalii(i).proc_tvav, + tab_detalii(i).pret_cu_tva, + tab_detalii(i).cantitate, + tab_detalii(i).discount_unitar, + tab_detalii(i).id_gestiune, + pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE + tab_detalii(i).cont, + pack_facturare.nid_venchelt, -- V_ID_VENCHELT + tab_detalii(i).id_valuta, + tab_detalii(i).curs, + NULL, -- V_ID_PART_REZ + NULL);*/ + WHEN pack_facturare.ntip IN (42, 47) THEN + V_INCASAT_CALCUL := 0; + pack_facturare.nfactavizcust := 1; + pack_facturare.descarca_gestiune(tab_detalii (i).id_articol, + tab_detalii (i).serie, + tab_detalii (i).pret_achizitie, + tab_detalii (i).pretd, + tab_detalii (i).id_valutad, + tab_detalii (i).pretv_orig, + tab_detalii (i).pret, + tab_detalii (i).diferenta, + tab_detalii (i).proc_tvav, + tab_detalii (i).pret_cu_tva, + tab_detalii (i).cantitate, + tab_detalii (i).discount_unitar, + tab_detalii (i).id_gestiune, + pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE + tab_detalii (i).cont, + pack_facturare.nid_venchelt, -- V_ID_VENCHELT + tab_detalii (i).id_valuta, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + NULL, -- V_ID_PART_REZ + NULL, + tab_detalii (i).id_jtva_coloana, + tab_detalii (i).taxcode); + pack_facturare.nfactavizcust := 0; + WHEN pack_facturare.ntip IN (2, 6, 52) AND + NVL(tab_detalii(i).id_rata, 0) <> 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_rata(tab_detalii(i)); + ELSE + -- 24 = AVIZ RETUR + IF pack_facturare.ntip = 24 THEN + SELECT STRINGAGG(COD) + INTO pack_facturare.ccod_retur + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid, + V_SEPARATOR))); + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_articol(tab_detalii(i)); + END CASE; + + END LOOP; + + IF pack_facturare.ntip in (48, 49) THEN + pack_facturare.scrie_descarcare_k(V_PARAMETRU_ADITIONAL); + END IF; + + BEGIN + SELECT ID_CTR + INTO V_ID_CTR + FROM (SELECT SUM(SUMA), ID_CTR + FROM ACT_TEMP + WHERE SCD IN ('4111', '418') + GROUP BY ID_CTR + ORDER BY 1) + WHERE ROWNUM < 2; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_CTR := NULL; + END; + + IF V_DISCOUNT_FACTURA <> 0 THEN + SELECT DISTINCT ASCD, ID_SECTIE + INTO V_ASCD, V_ID_SECTIE + FROM ACT_TEMP + WHERE SCD IN ('4111', '418', '461') + AND ROWNUM < 2; + + V_DISCOUNT_TOTAL_CU_TVA := pack_facturare.scrie_discount(1, + V_DISCOUNT_FACTURA, + pack_facturare.nid_valuta, + pack_facturare.nin_valuta, + V_ASCD, + V_ID_SECTIE, + V_ID_CTR, + 1, + (100 + + pack_facturare.nproc_tva_max) / 100, + 0, + 1, -- V_CU_TVA + pack_facturare.nid_jtva_coloana, + pack_facturare.nTaxCode); + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL - V_DISCOUNT_TOTAL_CU_TVA; + + /* IF V_AVANS <> 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - ABS(v_avans); + pack_facturare.scrie_avans(V_ID_CONTRACT, (-1) * ABS(v_avans)); + END IF;*/ + + IF V_LISTA_INCASARE IS NOT NULL THEN + pack_facturare.scrie_incasari(V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_CTR); + END IF; + + -- cumulare note + pack_facturare.cumuleaza_note_act(); + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + V_ID_VANZARE := NULL; + else + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_PARAMETRU_ADITIONAL); + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM VACT WHERE 1 = 2; + V_ID_VANZARE := pack_facturare.nid_vanzare; + end if; + + END scrie_factura2; + ------------------------------------------------------------------- + /* PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_factura_avize_retur(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_DISCOUNT_EVIDENTIAT, + V_TEXT_ADITIONAL, + V_TEXT_ADITIONAL_RETUR, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_SERIE_ACT, + V_NUMAR_ACT, + V_ID_VANZARE, + V_ID_VANZARE_RETUR, + V_CURSOR_RETUR); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_factura_avize_retur(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_TEXT_ADITIONAL_RETUR IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_SERIE_ACT IN VARCHAR2, + V_NUMAR_ACT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_ID_VANZARE_RETUR OUT NUMBER, + V_CURSOR_RETUR OUT cursor_facturare) IS + + lcSirIdFacturi VARCHAR2(3000); + V_NUME_DOC NOM_FDOC.FEL_DOCUMENT%TYPE; + V_CURSOR_VERIFICARE cursor_facturare; + V_SCRIS NUMBER(1); + V_SEPARATOR VARCHAR2(1) := ','; + BEGIN + IF V_SIR_MODIFICARI_ACONT IS NOT NULL OR + V_SIR_MODIFICARI_PART IS NOT NULL THEN + -- nu a fost scrisa factura la prima apelare + pack_facturare.finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE); + END IF; + -- scrie avizul de retur + DELETE FROM VANZARI_DETALII_TEMP; + + SELECT STRINGAGG(COD) + INTO pack_facturare.ccod_retur + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid, + V_SEPARATOR))); + + SELECT STRINGAGG(ID_VANZARE_FACT) + INTO lcSirIdFacturi + FROM (SELECT DISTINCT ID_VANZARE_FACT + FROM VANZARI_CORESP + WHERE ID_VANZARE_AVIZ IN + (SELECT X AS ID_VANZARE_AVIZ + FROM table(charn2collection(pack_Facturare.clistaid, + V_SEPARATOR))) + AND STERS = 0 + AND TIP = 1); + + INSERT INTO VANZARI_DETALII_TEMP + (CUSTODIE, + ID_ARTICOL, + SERIE, + ID_POL, + DISCOUNT_UNITAR, + PRET, + CANTITATE, + PROC_TVAV, + ID_GESTIUNE, + CONT, + ID_UTIL, + ID_VALUTA, + PRET_CU_TVA, + ID_JTVA_COLOANA, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + IN_STOC, + CURS, + MULTIPLICATOR) + SELECT CUSTODIE, + ID_ARTICOL, + SERIE, + ID_POL, + DISCOUNT_UNITAR, + PRET, + CANTITATE, + PROC_TVAV, + ID_GESTIUNE, + CONT, + ID_UTIL, + ID_VALUTA, + PRET_CU_TVA, + (CASE + WHEN ID_JTVA_COLOANA IS NULL THEN + (CASE PROC_TVAV + WHEN 1.24 THEN + 15 + WHEN 1.19 THEN + 1 + WHEN 1.09 THEN + 3 + ELSE + 8 + END) + ELSE + ID_JTVA_COLOANA + END) AS ID_JTVA_COLOANA, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + 1 AS IN_STOC, + CURS, + MULTIPLICATOR + FROM (SELECT A.CUSTODIE, + A.ID_ARTICOL, + A.SERIE, + A.ID_POL, + NVL(A.DISCOUNT_UNITAR, 0) AS DISCOUNT_UNITAR, + A.PRET, + SUM(CASE + WHEN A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(lcSirIdFacturi, + V_SEPARATOR))) THEN + A.CANTITATE + ELSE + (-1) * A.CANTITATE + END) AS CANTITATE, + A.PROC_TVAV, + A.ID_GESTIUNE, + A.CONT, + pack_facturare.nid_util AS ID_UTIL, + A.ID_VALUTA, + A.PRET_CU_TVA, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_VALUTAD, + NVL(B.CURS, 1) AS CURS, + NVL(B.MULTIPLICATOR, 1) AS MULTIPLICATOR, + A.ID_JTVA_COLOANA + FROM VANZARI_DETALII A + LEFT JOIN VANZARI_CURSURI B + ON A.ID_VANZARE = B.ID_VANZARE + AND A.ID_VALUTA = B.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid || + V_SEPARATOR || + lcSirIdFacturi, + V_SEPARATOR))) + GROUP BY A.CUSTODIE, + A.ID_ARTICOL, + A.ID_POL, + NVL(A.DISCOUNT_UNITAR, 0), + A.SERIE, + A.PRET_ACHIZITIE, + A.PRETD, + A.ID_VALUTAD, + A.PRET, + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + A.ID_GESTIUNE, + A.CONT, + A.ID_VALUTA, + A.PRET_CU_TVA, + NVL(B.CURS, 1), + NVL(B.MULTIPLICATOR, 1)) + WHERE CANTITATE < 0; + + /* lcSelect_discount := 'SELECT (-1)*SUM(DISCOUNT) FROM VANZARI WHERE ID_VANZARE IN (' || + pack_facturare.v_listaid || ')'; + + EXECUTE IMMEDIATE lcSelect_discount + INTO V_DISCOUNT_AVIZ;*/ + + pack_facturare.nperechec := 0; + pack_facturare.nid_factc := 0; + + pack_facturare.ntip := 24; + -- numar aviz retur + pack_facturare.cserie_act := V_SERIE_ACT; + pack_facturare.nnumar_act := V_NUMAR_ACT; + + pack_facturare.nid_set := 25000 + pack_facturare.ntip - 1 + + pack_facturare.nscadere_stoc * 10; + + pack_facturare.citeste_setari_document(pack_facturare.ntip, + pack_facturare.nid_fdoc, + V_NUME_DOC); + -- numar de bon pentru retur + pack_serii_numere.aloca_numar(pack_facturare.nid_tipbon, + NULL, + pack_facturare.nid_gestiune_sursa, + pack_facturare.nid_util, + pack_facturare.nid_sucursala, + pack_facturare.nnumar_bon); + + pack_facturare.scrie_aviz_retur(V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL_RETUR, + V_DISCOUNT_EVIDENTIAT, + V_SCRIS, + V_ID_VANZARE_RETUR, + V_CURSOR_VERIFICARE); + + CLOSE V_CURSOR_VERIFICARE; + + IF V_SCRIS = 0 THEN + pack_facturare.finalizeaza_factura(0, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL_RETUR, + 0); + V_ID_VANZARE_RETUR := pack_facturare.nid_vanzare; + END IF; + + OPEN V_CURSOR_RETUR FOR + SELECT ID_VANZARE_DET, + NULL AS EXPLICATIE, + DENUMIRE, + SERIE, + DISCOUNT_UNITAR, + DISCOUNT_UNITAR_VAL, + PRET, + PRET_VAL, + CURS, + MULTIPLICATOR, + CANTITATE, + PROC_TVAV, + UM, + ID_VALUTA, + PRET_CU_TVA, + TIP_VALUTA, + CODMAT, + CODMATF, + ID_JTVA_COLOANA, + CODBARE, + 0 AS PRET_ACHIZITIE, + NULL AS ID_VANZARE_SET, + 0 AS ID_GESTIUNE, + 0 AS ID_CTR, + NULL AS NUMAR_CONTRACT, + NUME_VAL + FROM (SELECT MIN(A.ID_VANZARE_DET) AS ID_VANZARE_DET, + B.DENUMIRE, + A.SERIE, + C.CURS, + C.MULTIPLICATOR, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END) AS DISCOUNT_UNITAR, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS DISCOUNT_UNITAR_VAL, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretv) + END) AS PRET, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END) AS PRET_VAL, + SUM(CASE + WHEN A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(lcSirIdFacturi, + V_SEPARATOR))) THEN + A.CANTITATE + ELSE + (-1) * A.CANTITATE + END) AS CANTITATE, + A.PROC_TVAV, + B.UM, + A.ID_VALUTA, + A.PRET_CU_TVA, + (CASE + WHEN A.ID_VALUTA <> + pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END) AS TIP_VALUTA, + B.CODMAT, + B.CODMATF, + A.ID_JTVA_COLOANA, + B.CODBARE, + D.NUME_VAL + FROM VANZARI_DETALII A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + LEFT JOIN VANZARI_CURSURI C + ON A.ID_VALUTA = C.ID_VALUTA + AND A.ID_VANZARE = C.ID_VANZARE + LEFT JOIN NOM_VALUTE D + ON A.ID_VALUTA = D.ID_VALUTA + WHERE A.STERS = 0 + AND A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(charn2collection(pack_facturare.clistaid || + V_SEPARATOR || + lcSirIdFacturi, + V_SEPARATOR))) + GROUP BY B.DENUMIRE, + A.SERIE, + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.DISCOUNT_UNITAR, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(C.CURS, 0) * + ROUND(NVL(A.PRET, 0), + pack_sesiune.nzecimale_pretvval) / + NVL(C.MULTIPLICATOR, 1), + pack_sesiune.nzecimale_pretv) + ELSE + ROUND(NVL(A.PRET, 0), pack_sesiune.nzecimale_pretv) + END), + (CASE + WHEN NVL(D.MONEDA_NATIONALA, 1) <> 1 THEN + ROUND(NVL(A.PRET, 0), + pack_sesiune.nzecimale_pretvval) + ELSE + 0 + END), + A.PROC_TVAV, + A.ID_JTVA_COLOANA, + B.UM, + B.CODMAT, + B.CODMATF, + B.CODBARE, + A.ID_VALUTA, + A.PRET_CU_TVA, + C.CURS, + C.MULTIPLICATOR, + (CASE + WHEN A.ID_VALUTA <> + pack_facturare.nid_moneda_nationala THEN + 1 + ELSE + 0 + END), + D.NUME_VAL) + WHERE CANTITATE < 0; + + END scrie_factura_avize_retur; + /* ------------------------------------------------------------------- + PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_factura_avize(V_DISCOUNT_FACTURA, + V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_DISCOUNT_EVIDENTIAT, + V_VERIFICARE_FACTURAT, + V_ID_VANZARE, + V_CURSOR_VERIFICARE); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_factura_avize(V_DISCOUNT_FACTURA IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_VERIFICARE_FACTURAT IN NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + articole_aviz tab_articole_aviz_type; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0; + + V_PRET ACT.SUMA%TYPE; + V_ID_VENCHELT ACT.ID_VENCHELT%TYPE; + V_ID_SECTIE ACT.ID_SECTIE%TYPE; + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCD ACT.SCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_CU_TVA NOTE_CONTABILE.CU_TVA%TYPE; + V_IN_VALUTA NOTE_CONTABILE.IN_VALUTA%TYPE; + V_CANTITATE VANZARI_DETALII.CANTITATE%TYPE; + V_CANTITATE_RAMASA VANZARI_DETALII.CANTITATE%TYPE; + V_PTVA NUMBER(4); + + V_LISTAID VARCHAR2(32000) := '<>'; + V_ID_CTR ACT.ID_CTR%TYPE; + + V_DISCOUNT_UNITAR VANZARI_DETALII.DISCOUNT_UNITAR%TYPE; + BEGIN + pack_contafin.sterge_temp_actrul(); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.initializeaza_setari_facturare(); + + V_SCD := '4111'; + V_SCC := '418'; + V_ID_VENCHELT := 0; + V_CU_TVA := 0; + V_IN_VALUTA := 0; + + V_EXPLICATIE := SUBSTR('FACTURARE AVIZE ' || pack_facturare.cdescriere, + 1, + 100); + + pack_facturare.nid_partc := pack_facturare.nid_part; + + SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-005)'); + END IF; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + + IF tab_detalii(i).proc_tvav > 1 THEN + V_CU_TVA := 1; + V_PTVA := (tab_detalii(i).proc_tvav - 1) * 100; + ELSE + V_CU_TVA := 0; + V_PTVA := 0; + END IF; + + IF pack_facturare.nproc_tva_max < V_PTVA THEN + pack_facturare.nproc_tva_max := V_PTVA; + pack_facturare.nid_jtva_coloana := tab_detalii(i).id_jtva_coloana; + pack_facturare.nTaxCode := tab_detalii(i).taxcode; + END IF; + + SELECT A.ID_VANZARE, + A.ID_VANZARE_DET, + A.CANTITATE, + A.CUSTODIE, + C.COD, + C.ID_FACT, + C.NRACT, + C.SERIE_ACT, + C.DATAACT, + MIN(C.ASCD) AS ASCD, + NVL(B.ID_SECTIE, E.ID_SECTIE) AS ID_SECTIE + BULK COLLECT + INTO articole_aviz + FROM VANZARI_DETALII A + LEFT JOIN VANZARI B + ON A.ID_VANZARE = B.ID_VANZARE + LEFT JOIN ACT C + ON B.COD = C.COD + AND C.SCD = DECODE(B.TIP, 42, '357', '418') + AND DECODE(B.TIP, 42, '4428', C.SCC) = '4428' + LEFT JOIN CRM_POLITICI_PRETURI D + ON A.ID_POL = D.ID_POL + LEFT JOIN CRM_NOTE_VANZARI E + ON D.ID_NOTA = E.ID_NOTA + WHERE A.ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') as num_tab))) + AND A.ID_ARTICOL = tab_detalii(i).id_articol + AND A.DISCOUNT_UNITAR = tab_detalii(i).discount_unitar + AND A.ID_POL = tab_detalii(i).id_pol + AND A.ID_VALUTA = tab_detalii(i).id_valuta + AND A.PRET = tab_detalii(i).pret + AND A.PRET_ACHIZITIE = tab_detalii(i).pret_achizitie + AND NVL(A.PRETD, 0) = NVL(tab_detalii(i).pretd, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTAD, -99) = + NVL(tab_detalii(i).id_valutad, NVL(A.ID_VALUTAD, -99)) + AND NVL(A.ID_GESTIUNE, -9999) = + NVL(tab_detalii(i).id_gestiune, -9999) + AND NVL(A.CONT, 'XXXX') = NVL(tab_detalii(i).cont, 'XXXX') + AND NVL(A.SERIE, '+_') = NVL(tab_detalii(i).serie, '+_') + GROUP BY A.ID_VANZARE, + A.ID_VANZARE_DET, + A.CANTITATE, + A.CUSTODIE, + C.COD, + C.ID_FACT, + C.NRACT, + C.SERIE_ACT, + C.DATAACT, + NVL(B.ID_SECTIE, E.ID_SECTIE) + ORDER BY 6; + + V_CANTITATE_RAMASA := tab_detalii(i).cantitate; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu au fost gasite articolele! (FACT-015)'); + END IF; + + FOR j IN articole_aviz.first .. articole_aviz.last LOOP + EXIT WHEN V_CANTITATE_RAMASA = 0; + + pack_facturare.nid_factc := articole_aviz(j).id_fact; + pack_facturare.nperechec := articole_aviz(j).nract; + + V_CANTITATE := articole_aviz(j).cantitate; + + IF V_CANTITATE_RAMASA >= V_CANTITATE THEN + V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE; + + ELSE + V_CANTITATE := V_CANTITATE_RAMASA; + V_CANTITATE_RAMASA := 0; + END IF; + + -- modificare 20.11 + IF instr(V_LISTAID, '<' || articole_aviz(j).id_vanzare || '>') = 0 THEN + V_LISTAID := V_LISTAID || '<' || articole_aviz(j).id_vanzare || '>,'; + END IF; + + IF articole_aviz(j).custodie = 1 THEN + pack_facturare.nfactavizcust := 1; + tab_detalii(i).cantitate := V_CANTITATE; + tab_detalii(i).id_rata := articole_aviz(j).cod; + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_articol(tab_detalii(i)); + + UPDATE VANZARI_DETALII_TEMP + SET CANTITATE = CANTITATE - V_CANTITATE + WHERE ID_TEMP = tab_detalii(i).id_temp; + + MERGE INTO VANZARI_DETALII_TEMP A + USING DUAL B + ON (A.ID_ARTICOL = tab_detalii(i).id_articol AND A.ID_POL = tab_detalii(i).id_pol AND A.PRET = tab_detalii(i).pret AND A.PRET_CU_TVA = tab_detalii(i).pret_cu_tva AND A.PROC_TVAV = tab_detalii(i).proc_tvav AND A.DISCOUNT_UNITAR = tab_detalii(i).discount_unitar AND A.ID_GESTIUNE = tab_detalii(i).id_gestiune AND NVL(A.CONT, 'XXXX') = NVL(tab_detalii(i).cont, 'XXX') AND NVL(A.ID_VALUTA, -1) = NVL(tab_detalii(i).id_valuta, -1) AND NVL(A.CURS, 1) = NVL(tab_detalii(i).curs, 1) AND A.ID_JTVA_COLOANA = tab_detalii(i).id_jtva_coloana AND A.IN_STOC = tab_detalii(i).in_stoc AND NVL(A.ID_GESTIUNE_DEST, -99) = NVL(tab_detalii(i).id_gestiune_dest, -99) AND NVL(A.ID_UTIL, 0) = NVL(tab_detalii(i).id_util, 0) AND A.PRET_ACHIZITIE = tab_detalii(i).pret_achizitie AND NVL(A.ID_VANZARE_SET, -99) = NVL(tab_detalii(i).id_vanzare_set, -99) AND A.CUSTODIE = articole_aviz(j).custodie) + WHEN MATCHED THEN + UPDATE SET CANTITATE = CANTITATE + V_CANTITATE + WHEN NOT MATCHED THEN + INSERT + (ID_ARTICOL, + ID_POL, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_GESTIUNE_DEST, + ID_COMANDA, + ID_UTIL, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_VANZARE_SET, + ID_LUCRARE_REZ, + ID_PART_REZ, + NUMAR_ACT, + CUSTODIE, + ID_TEMP) + VALUES + (tab_detalii(i).id_articol, + tab_detalii(i).id_pol, + tab_detalii(i).pret, + tab_detalii(i).pret_cu_tva, + tab_detalii(i).proc_tvav, + V_CANTITATE, + tab_detalii(i).discount_unitar, + tab_detalii(i).id_gestiune, + tab_detalii(i).cont, + tab_detalii(i).id_valuta, + tab_detalii(i).curs, + tab_detalii(i).multiplicator, + tab_detalii(i).id_jtva_coloana, + tab_detalii(i).in_stoc, + tab_detalii(i).id_gestiune_dest, + tab_detalii(i).id_comanda, + tab_detalii(i).id_util, + tab_detalii(i).pret_achizitie, + NVL(tab_detalii(i).pretd, 0), + tab_detalii(i).id_valutad, + tab_detalii(i).id_vanzare_set, + tab_detalii(i).id_lucrare_rez, + tab_detalii(i).id_part_rez, + pack_facturare.nnumar_act, + articole_aviz(j).custodie, + -1000); + + pack_facturare.nfactavizcust := 0; + ELSE + IF pack_facturare.ndiscount_evidentiat = 1 AND tab_detalii(i).discount_unitar <> 0 THEN + V_PRET := tab_detalii(i).pret; + V_DISCOUNT_UNITAR := tab_detalii(i).discount_unitar; + + V_DISCOUNT_TOTAL_CU_TVA := V_DISCOUNT_TOTAL_CU_TVA + + pack_facturare.scrie_discount(V_CANTITATE, + tab_detalii (i).discount_unitar, + tab_detalii (i).id_valuta, + V_IN_VALUTA, + articole_aviz(j).ascd, -- ASCD + articole_aviz(j).id_sectie, + tab_detalii (i).id_ctr, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + tab_detalii (i).proc_tvav, + tab_detalii (i).pret_cu_tva, + V_CU_TVA, + tab_detalii (i).id_jtva_coloana); + ELSE + V_PRET := tab_detalii(i).pret - tab_detalii(i).discount_unitar; + V_DISCOUNT_UNITAR := 0; + END IF; + + -- scriere nota in act + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(V_CANTITATE, + V_PRET, + V_DISCOUNT_UNITAR, + tab_detalii (i).pret_cu_tva, + tab_detalii (i).id_valuta, + V_IN_VALUTA, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + V_ID_VENCHELT, + articole_aviz (j).id_sectie, + tab_detalii (i).id_ctr, + V_EXPLICATIE, + V_SCD, + articole_aviz (j).ascd, -- ascd + V_SCC, + articole_aviz (j).ascd, -- ascc + 0, -- V_ID_GESTIN + 0, -- V_ID_GESTOUT + pack_facturare.nid_set, -- V_ID_SET + V_CU_TVA, + tab_detalii (i).proc_tvav * 100 - 100, + tab_detalii (i).id_jtva_coloana, + tab_detalii (i).taxcode, + null); + END IF; + END LOOP; + + END LOOP; + + BEGIN + SELECT ID_CTR + INTO V_ID_CTR + FROM (SELECT SUM(SUMA), ID_CTR + FROM ACT_TEMP + WHERE SCD IN ('4111', '418') + GROUP BY ID_CTR + ORDER BY 1) + WHERE ROWNUM < 2; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_CTR := NULL; + END; + + IF V_DISCOUNT_FACTURA <> 0 THEN + SELECT DISTINCT ASCD, ID_SECTIE + INTO V_ASCD, V_ID_SECTIE + FROM ACT_TEMP + WHERE SCD = '4111' + AND ROWNUM < 2; + + V_DISCOUNT_TOTAL_CU_TVA := V_DISCOUNT_TOTAL_CU_TVA + + pack_facturare.scrie_discount(1, + V_DISCOUNT_FACTURA, + pack_facturare.nid_valuta, + pack_facturare.nin_valuta, + V_ASCD, + V_ID_SECTIE, + V_ID_CTR, + 1, + (100 + + pack_facturare.nproc_tva_max) / 100, + 1, + 1, -- V_CU_TVA + pack_facturare.nid_jtva_coloana, + pack_facturare.nTaxCode); + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL - V_DISCOUNT_TOTAL_CU_TVA; + + /* IF V_AVANS <> 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - ABS(v_avans); + pack_facturare.scrie_avans((-1) * ABS(v_avans)); + END IF;*/ + + IF V_LISTA_INCASARE IS NOT NULL THEN + pack_facturare.scrie_incasari(V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_LISTA_INCASARE, + V_ID_CTR); + END IF; + + -- modificare 22.08.2008 + DELETE FROM VANZARI_DETALII_TEMP WHERE CANTITATE = 0; + + -- cumulare note + pack_facturare.cumuleaza_note_act(); + + pack_facturare.clistaid_avize := REPLACE(REPLACE(V_LISTAID, '<'), '>'); + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + V_ID_VANZARE := NULL; + else + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_VERIFICARE_FACTURAT); + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + V_ID_VANZARE := pack_facturare.nid_vanzare; + end if; + + END scrie_factura_avize; + ------------------------------------------------------------------- + /* PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_aviz_retur(V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_DISCOUNT_EVIDENTIAT, + V_SCRIS, + V_ID_VANZARE, + V_CURSOR_VERIFICARE); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_aviz_retur(V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_SCRIS OUT NUMBER, + V_ID_VANZARE OUT NUMBER, + V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + + TYPE tab_detalii_type IS TABLE OF vanzari_detalii_temp%ROWTYPE; + tab_detalii tab_detalii_type; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + BEGIN + pack_contafin.sterge_temp_actrul(); + pack_facturare.ndiscount_evidentiat := V_DISCOUNT_EVIDENTIAT; + pack_facturare.initializeaza_setari_facturare(); + + SELECT * BULK COLLECT INTO tab_detalii FROM VANZARI_DETALII_TEMP; + + IF SQL%ROWCOUNT = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articole in lista de vanzare! (FACT-006)'); + END IF; + + FOR i IN tab_detalii.first .. tab_detalii.last LOOP + pack_facturare.nfactavizcust := tab_detalii(i).custodie; + IF pack_facturare.nfactavizcust = 1 THEN + pack_facturare.descarca_gestiune(tab_detalii (i).id_articol, + tab_detalii (i).serie, + tab_detalii (i).pret_achizitie, + tab_detalii (i).pretd, + tab_detalii (i).id_valutad, + tab_detalii (i).pretv_orig, + tab_detalii (i).pret, + tab_detalii (i).diferenta, + tab_detalii (i).proc_tvav, + tab_detalii (i).pret_cu_tva, + tab_detalii (i).cantitate, + tab_detalii (i).discount_unitar, + tab_detalii (i).id_gestiune, + pack_facturare.nid_sectie_stoc, -- V_ID_SECTIE + tab_detalii (i).cont, + pack_facturare.nid_venchelt, -- ID_VENCHELT, + tab_detalii (i).id_valuta, + tab_detalii (i).curs / tab_detalii(i).multiplicator, + NULL, -- V_ID_PART_REZ + NULL, + tab_detalii (i).id_jtva_coloana, + tab_detalii (i).taxcode); + ELSE + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.contabilizeaza_articol(tab_detalii(i)); + END IF; + pack_facturare.nfactavizcust := 0; + END LOOP; + + -- cumulare note + pack_facturare.scrie_note_banca_compensari(); + pack_facturare.cumuleaza_note_act(); + + if pack_contafin.verifica_note_contabile(1) > 0 then + pack_facturare.cursor_verificare(V_CURSOR_VERIFICARE); + V_SCRIS := 0; + V_ID_VANZARE := NULL; + else + pack_facturare.finalizeaza_factura(0, -- V_DISCOUNT_FACTURA + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + 0); -- V_VERIFICAT_FACTURAT + + OPEN V_CURSOR_VERIFICARE FOR + SELECT * FROM ACT_TEMP WHERE 1 = 2; + + V_SCRIS := 1; + V_ID_VANZARE := pack_facturare.nid_vanzare; + end if; + + END scrie_aviz_retur; + ------------------------------------------------------------------- + FUNCTION contabilizeaza_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER IS + V_COMPUS NUMBER(1); + V_ID_POL_ART CRM_POLITICI_PRET_ART.Id_Pol_Art%TYPE; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_ASCC ACT.ASCC%TYPE; + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_IN_VALUTA NUMBER(1) := 0; + + /* CURSOR cursor_elemente_pachet IS + SELECT A.ID_POL_ART, + B.ID_POL, + B.ID_ARTICOL, + B.PRET, + B.PROC_TVAV, + B.ID_VALUTA, + C.ID_NOTA, + C.PRETURI_CU_TVA, + NVL(B.ID_VENCHELT, D.ID_VENCHELT) AS ID_VENCHELT, + DECODE(B.ID_POL, + NVL(pack_facturare.nid_politica_stoc, -99), + pack_facturare.nid_sectie_stoc, + D.ID_SECTIE) as ID_SECTIE, + D.ID_SET, + E.EXPLICATIE, + E.SCD, + E.ASCD, + E.SCC, + E.ASCC, + E.CU_TVA, + E.IN_VALUTA + FROM CRM_PACHETE_ARTICOLE A + LEFT JOIN CRM_POLITICI_PRET_ART B ON A.ID_POL_ART = B.ID_POL_ART + LEFT JOIN CRM_POLITICI_PRETURI C ON B.ID_POL = C.ID_POL + LEFT JOIN CRM_NOTE_VANZARI D ON C.ID_NOTA = D.ID_NOTA + LEFT JOIN NOTE_CONTABILE E ON D.ID_SET = E.ID_SET + WHERE A.STERS = 0 + AND A.ID_PACHET = V_ID_POL_ART; + crs_rand_elemente_pachet cursor_elemente_pachet%rowtype;*/ + + CURSOR cursor_articol IS + SELECT A.ID_POL_ART, + A.ID_POL, + A.ID_ARTICOL, + A.PRET, + (CASE + WHEN A.ID_POL = pack_facturare.nid_politica_stoc AND + pack_facturare.nin_valuta = 1 THEN + pack_facturare.nid_valuta + ELSE + A.ID_VALUTA + END) AS ID_VALUTA, + B.ID_NOTA, + B.PRETURI_CU_TVA, + /* (CASE + WHEN (A.ID_POL = pack_facturare.nid_politica_stoc AND + pack_facturare.nid_venchelt IS NOT NULL) OR + (A.ID_VENCHELT IS NULL AND C.ID_VENCHELT IS NULL) THEN + pack_facturare.nid_venchelt + ELSE + NVL(A.ID_VENCHELT, C.ID_VENCHELT) + END) AS ID_VENCHELT, + DECODE(A.ID_POL, + NVL(pack_facturare.nid_politica_stoc, -99), + pack_facturare.nid_sectie_stoc, + C.ID_SECTIE) as ID_SECTIE,*/ + NVL(pack_facturare.nid_venchelt, + NVL(A.ID_VENCHELT, C.ID_VENCHELT)) AS ID_VENCHELT, + NVL(pack_facturare.nid_sectie_stoc, C.ID_SECTIE) as ID_SECTIE, + C.ID_SET, + D.EXPLICATIE, + D.SCD, + D.ASCD, + D.SCC, + D.ASCC, + D.CU_TVA, + (CASE + WHEN A.ID_POL = pack_facturare.nid_politica_stoc AND + pack_facturare.nin_valuta = 1 THEN + 1 + ELSE + D.IN_VALUTA + END) AS IN_VALUTA + FROM CRM_POLITICI_PRET_ART A + LEFT JOIN CRM_POLITICI_PRETURI B + ON A.ID_POL = B.ID_POL + LEFT JOIN CRM_NOTE_VANZARI C + ON B.ID_NOTA = C.ID_NOTA + LEFT JOIN NOTE_CONTABILE D + ON C.ID_SET = D.ID_SET + WHERE + -- A.STERS = 0 AND + A.ID_POL = detalii_articol.id_pol + AND A.ID_ARTICOL = detalii_articol.id_articol; + crs_rand_articol cursor_articol%rowtype; + lcArticol nom_articole.denumire%type; + lcPolitica crm_politici_preturi.nume_lista_preturi%type; + BEGIN + + -- 05.07.2011 + BEGIN + SELECT COMPUS, ID_POL_ART + INTO V_COMPUS, V_ID_POL_ART + FROM VCRM_POLITICI_PRET_ART + WHERE ID_ARTICOL = detalii_articol.id_articol + AND ID_POL = detalii_articol.id_pol; + EXCEPTION + WHEN NO_DATA_FOUND THEN + SELECT DENUMIRE + INTO lcArticol + FROM NOM_ARTICOLE + where id_articol = detalii_articol.id_articol; + + SELECT NUME_LISTA_PRETURI + INTO lcPolitica + FROM CRM_POLITICI_PRETURI + where id_pol = detalii_articol.id_pol; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || detalii_articol.id_articol || '|' || + lcArticol || + ' nu este definit in politica de preturi ' || + detalii_articol.id_pol || '|' || lcPolitica || + '! (FACT-024)'); + END; + -- 05.07.2011 ^ + + IF V_COMPUS = 1 THEN + -- articol compus + RAISE_APPLICATION_ERROR(-20000, + 'Nu sunt facute configurarile pentru articolele compuse! (FACT-016 : ' || + detalii_articol.id_articol || '.' || + detalii_articol.id_pol || ' )'); + -- in_valuta = ? + + /* OPEN cursor_elemente_pachet; + FETCH cursor_elemente_pachet + INTO crs_rand_elemente_pachet; + WHILE cursor_elemente_pachet%FOUND LOOP + + CASE + WHEN pack_facturare.v_tip <= 20 THEN + -- factura + V_SCD := crs_rand_elemente_pachet.scd; + V_ASCD := crs_rand_elemente_pachet.ascd; + V_SCC := crs_rand_elemente_pachet.scc; + V_ASCC := crs_rand_elemente_pachet.ascc; + ELSE + -- aviz + V_SCD := '418'; + V_ASCD := crs_rand_elemente_pachet.ascd; + V_SCC := crs_rand_elemente_pachet.scc; + V_ASCC := crs_rand_elemente_pachet.ascc; + END CASE; + + IF pack_facturare.v_discount_evidentiat = 0 THEN + V_PRET := crs_rand_elemente_pachet.pret - + detalii_articol.discount_unitar * + ROUND(crs_rand_elemente_pachet.pret / + detalii_articol.pret, + pack_facturare.v_zecimale_procent); + ELSE + V_PRET := crs_rand_elemente_pachet.pret; + END IF; + + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(detalii_articol.cantitate, + V_PRET, + detalii_articol.pret_cu_tva, + detalii_articol.id_valuta, + crs_rand_elemente_pachet.in_valuta, + detalii_articol.curs, + crs_rand_elemente_pachet.id_venchelt, + crs_rand_elemente_pachet.id_sectie, + crs_rand_elemente_pachet.explicatie, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + 0, + 0, + V_ID_CONTRACT, + pack_facturare.v_id_set, + crs_rand_elemente_pachet.cu_tva, + detalii_articol.proc_tvav * 100 - 100, + detalii_articol.id_jtva_coloana); + + IF pack_facturare.v_scadere_stoc = 1 AND + detalii_articol.id_gestiune <> -1000 AND + detalii_articol.in_stoc = 1 THEN + pack_facturare.descarca_gestiune(crs_rand_elemente_pachet.id_articol, + detalii_articol.serie, + crs_rand_elemente_pachet.pret, + crs_rand_elemente_pachet.proc_tvav, + detalii_articol.pret_cu_tva, + detalii_articol.cantitate, + detalii_articol.discount_unitar * + ROUND(crs_rand_elemente_pachet.pret / + detalii_articol.pret, + pack_facturare.v_zecimale_procent), + detalii_articol.id_gestiune, + detalii_articol.cont, + detalii_articol.id_valuta, + detalii_articol.curs); + END IF; + + FETCH cursor_elemente_pachet + INTO crs_rand_elemente_pachet; + END LOOP; + CLOSE cursor_elemente_pachet; + + -- discount ? */ + + ELSE + -- articol simplu + OPEN cursor_articol; + FETCH cursor_articol + INTO crs_rand_articol; + WHILE cursor_articol%FOUND LOOP + + CASE + -- 30.10.2009 + WHEN pack_facturare.ntip <= 20 or + pack_facturare.ntip IN (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48, + 49,51,52) THEN + -- 30.10.2009 ^ + -- factura,factura roahotel + V_SCD := crs_rand_articol.scd; + V_ASCD := NVL(crs_rand_articol.ascd, + PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCD)); + WHEN pack_facturare.ntip in (28, 29) THEN + -- aviz catre clienti debitori + V_SCD := '461'; + V_ASCD := PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCD); + ELSE + -- aviz + V_SCD := '418'; + V_ASCD := PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCD); + END CASE; + + V_SCC := crs_rand_articol.scc; + V_ASCC := NVL(crs_rand_articol.ascc, + PACK_FACTURARE.GetAnaliticByGrupUtilizatori(pack_facturare.nid_util, + V_SCC)); + + CASE + WHEN pack_facturare.ntip = 7 THEN + V_EXPLICATIE := SUBSTR(TRIM(crs_rand_articol.explicatie) || + ' INVOICE:' || pack_facturare.cdescriere, 1, 100); + WHEN pack_facturare.ntip IN (8, 9) THEN + V_EXPLICATIE := SUBSTR(TRIM(crs_rand_articol.explicatie) || + ' RETUR FACTURA:' || pack_facturare.cdescriere, 1,100); + ELSE + V_EXPLICATIE := crs_rand_articol.explicatie; + END CASE; + + IF pack_facturare.nTip <> pack_facturare.nTipNotaPlata THEN + + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(detalii_articol.cantitate, + detalii_articol.pret, + detalii_articol.discount_unitar, + detalii_articol.pret_cu_tva, + detalii_articol.id_valuta, + crs_rand_articol.in_valuta, + detalii_articol.curs / + detalii_articol.multiplicator, + crs_rand_articol.id_venchelt, + crs_rand_articol.id_sectie, + detalii_articol.id_ctr, + V_EXPLICATIE, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + 0, + 0, + pack_facturare.nid_set, + crs_rand_articol.cu_tva, + detalii_articol.proc_tvav * 100 - 100, + detalii_articol.id_jtva_coloana, + detalii_articol.taxcode, + null); + END IF; + + V_IN_VALUTA := crs_rand_articol.in_valuta; + + IF pack_facturare.ntip <> 4 THEN + IF pack_facturare.nscadere_stoc = 1 AND + detalii_articol.id_gestiune <> -1000 AND + detalii_articol.in_stoc = 1 THEN + pack_facturare.descarca_gestiune(detalii_articol.id_articol, + detalii_articol.serie, + detalii_articol.pret_achizitie, + detalii_articol.pretd, + detalii_articol.id_valutad, + detalii_articol.pretv_orig, + detalii_articol.pret, + detalii_articol.diferenta, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + detalii_articol.cantitate, + detalii_articol.discount_unitar, + detalii_articol.id_gestiune, + crs_rand_articol.id_sectie, + detalii_articol.cont, + crs_rand_articol.id_venchelt, + detalii_articol.id_valuta, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.id_part_rez, + detalii_articol.id_lucrare_rez, + detalii_articol.id_jtva_coloana, + detalii_articol.taxcode); + END IF; + + IF detalii_articol.discount_unitar <> 0 AND + pack_facturare.ndiscount_evidentiat = 1 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - + pack_facturare.scrie_discount(detalii_articol.cantitate, + detalii_articol.discount_unitar, + detalii_articol.id_valuta, + V_IN_VALUTA, + V_ASCD, + crs_rand_articol.id_sectie, + detalii_articol.id_ctr, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + crs_rand_articol.cu_tva, + detalii_articol.id_jtva_coloana, + detalii_articol.taxcode); + END IF; + + ELSE + pack_facturare.scrie_fact_aviz_custodie(detalii_articol.id_rata, -- V_COD + crs_rand_articol.id_sectie, + detalii_articol.id_articol, + detalii_articol.id_gestiune, + detalii_articol.cont, + detalii_articol.cantitate, + detalii_articol.pret_cu_tva, + detalii_articol.pret_achizitie, + detalii_articol.pretd, + detalii_articol.id_valutad, + detalii_articol.pret, + detalii_articol.discount_unitar, + detalii_articol.id_valuta, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.proc_tvav); + END IF; + + FETCH cursor_articol + INTO crs_rand_articol; + END LOOP; + CLOSE cursor_articol; + + END IF; + + RETURN V_INCASAT_CALCUL; + END contabilizeaza_articol; + ------------------------------------------------------------------- + FUNCTION contabilizeaza_rata(detalii_rata VANZARI_DETALII_TEMP%ROWTYPE) + RETURN NUMBER IS + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + + V_ID_VENCHELT ACT.ID_VENCHELT%TYPE; + V_ID_SECTIE ACT.ID_SECTIE%TYPE; + V_ID_SET ACT.ID_SET%TYPE; + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_ASCC ACT.ASCC%TYPE; + V_CU_TVA NOTE_CONTABILE.CU_TVA%TYPE; + V_IN_VALUTA NOTE_CONTABILE.IN_VALUTA%TYPE; + BEGIN + BEGIN + SELECT NVL(B.ID_VENCHELT, pack_facturare.nid_venchelt), + NVL(pack_facturare.nid_sectie_stoc, B.ID_SECTIE) AS ID_SECTIE, + B.ID_SET, + C.EXPLICATIE, + C.SCD, + C.ASCD, + C.SCC, + C.ASCC, + C.CU_TVA, + C.IN_VALUTA + INTO V_ID_VENCHELT, + V_ID_SECTIE, + V_ID_SET, + V_EXPLICATIE, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + V_CU_TVA, + V_IN_VALUTA + FROM CONTRACTE A + LEFT JOIN CRM_NOTE_VANZARI B + ON A.ID_NOTA = B.ID_NOTA + LEFT JOIN NOTE_CONTABILE C + ON B.ID_SET = C.ID_SET + WHERE A.STERS = 0 + AND A.ID_CTR = detalii_rata.id_ctr + AND B.STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu sunt configurate notele de vanzare pentru acest contract!'); + END; + + IF pack_facturare.ndiscount_evidentiat = 1 AND + detalii_rata.discount_unitar > 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL - + pack_facturare.scrie_discount(detalii_rata.cantitate, + detalii_rata.discount_unitar, + detalii_rata.id_valuta, + V_IN_VALUTA, + V_ASCD, + V_ID_SECTIE, + detalii_rata.id_ctr, + detalii_rata.curs / + detalii_rata.multiplicator, + detalii_rata.proc_tvav, + detalii_rata.pret_cu_tva, + V_CU_TVA, + detalii_rata.id_jtva_coloana, + detalii_rata.taxcode); + END IF; + + -- scriere nota in act + V_INCASAT_CALCUL := V_INCASAT_CALCUL + + pack_facturare.scrie_nota(detalii_rata.cantitate, + detalii_rata.pret, + detalii_rata.discount_unitar, + detalii_rata.pret_cu_tva, + detalii_rata.id_valuta, + V_IN_VALUTA, + detalii_rata.curs / + detalii_rata.Multiplicator, + V_ID_VENCHELT, + V_ID_SECTIE, + detalii_rata.id_ctr, + detalii_rata.explicatia, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + 0, -- V_ID_GESTIN + 0, -- V_ID_GESTOUT + pack_facturare.nid_set, -- V_ID_SET + V_CU_TVA, + detalii_rata.proc_tvav * 100 - 100, + detalii_rata.id_jtva_coloana, + detalii_Rata.Taxcode, + null); --(tab_detalii(i).proc_tvav - 1) * 100 + + RETURN V_INCASAT_CALCUL; + END; + ------------------------------------------------------------------- + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER) IS + begin + + PACK_FACTURARE.descarca_gestiune(V_ID_ARTICOL => V_ID_ARTICOL, + V_SERIE => V_SERIE, + V_PRET_ACHIZITIE => V_PRET_ACHIZITIE, + V_PRETD => V_PRETD, + V_ID_VALUTAD => V_ID_VALUTAD, + V_PRETV_ALES => V_PRETV_ALES, + V_PRET_UNITAR => V_PRET_UNITAR, + V_AJUSTARE => V_AJUSTARE, + V_PROC_TVAV => V_PROC_TVAV, + V_PRET_ARE_TVA => V_PRET_ARE_TVA, + V_CANTE => V_CANTE, + V_DISCOUNT => V_DISCOUNT, + V_ID_GESTIUNE => V_ID_GESTIUNE, + V_ID_SECTIE => V_ID_SECTIE, + V_CONT => V_CONT, + V_ID_VENCHELT => V_ID_VENCHELT, + V_ID_VALUTA => V_ID_VALUTA, + V_CURS => V_CURS, + V_ID_PART_REZ => V_ID_PART_REZ, + V_ID_LUCRARE_REZ => V_ID_LUCRARE_REZ, + V_ID_JTVA_COLOANA => NULL, + V_TAXCODE => NULL); + end; + + PROCEDURE descarca_gestiune(V_ID_ARTICOL IN NUMBER, + V_SERIE IN VARCHAR2, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV_ALES IN NUMBER, + V_PRET_UNITAR IN NUMBER, + V_AJUSTARE IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_CANTE IN NUMBER, + V_DISCOUNT IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_CONT IN VARCHAR2, + V_ID_VENCHELT IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_PART_REZ IN NUMBER, + V_ID_LUCRARE_REZ IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER) IS + V_PRET STOC.PRET%TYPE; + V_TVA STOC.TVA%TYPE; + V_PRETV_ORIG STOC.PRETV%TYPE; + V_ACONT STOC.ACONT%TYPE; + V_ACONT_REST STOC.ACONT%TYPE; + + V_ACONT_GEST NOM_GESTIUNI.ACONT%TYPE; + + V_ADAOS RUL.ADAOS%TYPE; + V_ADAOS_ORIG RUL.ADAOS%TYPE; + V_PRETV RUL.PRETV%TYPE; + V_TVAV RUL.PRETV%TYPE; + V_PRETVTVA RUL.PRETVTVA%TYPE; + V_TVAV_ORIG RUL.PRETV%TYPE; + V_PROC_TVAV_ORIG RUL.PROC_TVAV%TYPE; + V_DISCOUNT_UNITAR RUL.DISCUNITAR%TYPE; + V_DISCOUNT_TVA RUL.DISCOUNT_TVA%TYPE; + V_DISCOUNT_CU_TVA RUL.DISCUNITAR%TYPE; + V_PROC_DISCOUNT RUL.PROC_DISC%TYPE; + V_PROCENT RUL.PROCENT%TYPE; + V_PROCENT_ORIG RUL.PROCENT%TYPE; + + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_SUMA ACT.SUMA%TYPE; + V_INCASAT_CALCUL ACT.SUMA%TYPE; + V_CONT2 ACT.SCD%TYPE; + V_CONT3 ACT.SCD%TYPE; + V_ACONT2 ACT.ASCD%TYPE; + V_ANALITICCUST ACT.ASCD%TYPE; + + V_TIP_GESTIUNE NOM_GESTIUNI.NR_PAG%TYPE; + tab_stoc tab_stoc_type; + + V_CANTITATE STOC.CANTS%TYPE; + V_CANTITATE_RAMASA STOC.CANTS%TYPE; + V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE; + + V_ID_TIP_RULAJ NOM_TIP_RULAJ.ID_TIP_RULAJ%TYPE := 3; + --V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.nzecimale_pretv; + V_VALOARE_PRET ACT.SUMA%TYPE; + V_VALOARE_PRETV ACT.SUMA%TYPE; + V_VALOARE_PRETV_ORIG ACT.SUMA%TYPE; + V_VALOARE_TVA ACT.SUMA%TYPE; + V_VALOARE_TVAV ACT.SUMA%TYPE; + V_VALOARE_TVAV_ORIG ACT.SUMA%TYPE; + V_VALOARE_ADAOS ACT.SUMA%TYPE; + V_VALOARE_ADAOS_ORIG ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_PRETV ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_TVAV ACT.SUMA%TYPE; + V_VALOARE_PRETVTVA ACT.SUMA%TYPE; + V_PROC_TVA ACT.PROC_TVA%TYPE; + V_TIP_INREG RUL.AN%TYPE; + V_DATAIN RUL.DATAIN%TYPE; + -- diferenta dintre pretul de lista si pretul de vanzare din stoc + + V_DISCOUNT_EVIDENTIAT_AVIZ VANZARI.DISCOUNT_EVIDENTIAT%TYPE; + + lcAcont607 ACT.ASCD%TYPE; + lcAcont608 ACT.ASCD%TYPE; + lcAcont378 ACT.ASCD%TYPE; + lcAcont388 ACT.ASCD%TYPE; + V_ACONT3 ACT.ASCD%TYPE; + lnFacturareFaraStoc NUMBER(1) := 0; + lnDescarcare345FaraAdaos NUMBER(1) := 0; + lnInStoc number(10) := 1; + + BEGIN + lnFacturareFaraStoc := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_FACTURARE_FARA_STOC'), + '0')); + + lnDescarcare345FaraAdaos := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('RF_DESCARCARE_345_FARA_ADAOS'), + '0')); + + -- NU SE DESCARCA GESTIUNEA PENTRU ARTICOLELE NEGESTIONABILE + -- ASTFEL INCAT SA SE POATA FACE OPERATII GEN AVIZ DIN CUSTODIE INCLUSIV CU ARTICOLE NEGESTIONABILE + SELECT MAX(IN_STOC) + INTO lnInStoc + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL; + if lnInStoc = 0 then + GOTO SFARSIT; + end if; + -- V_PRETV_ORIG si V_PRETV_ALES + V_EXPLICATIE := NULL; + + pack_facturare.calculeaza_pret(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_ARE_TVA, + 2, + V_PRETV, + V_TVAV, + V_PRETVTVA); + + pack_facturare.calculeaza_pret(V_DISCOUNT, + V_CURS, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_ARE_TVA, + 2, + V_DISCOUNT_UNITAR, + V_DISCOUNT_TVA, + V_DISCOUNT_CU_TVA); + + IF V_PRETVTVA <> 0 THEN + V_PROC_DISCOUNT := ROUND(V_DISCOUNT_CU_TVA / V_PRETVTVA, + pack_facturare.nzecimale_procent) * 100; + ELSE + V_PROC_DISCOUNT := 0; + END IF; + + -- modificare pentru discount evidentiat + IF pack_facturare.ndiscount_evidentiat = 0 THEN + V_PRETV := V_PRETV - V_DISCOUNT_UNITAR; + V_TVAV := V_TVAV - V_DISCOUNT_TVA; + V_PRETVTVA := V_PRETVTVA - V_DISCOUNT_CU_TVA; + V_DISCOUNT_UNITAR := 0; + V_DISCOUNT_TVA := 0; + V_DISCOUNT_CU_TVA := 0; + END IF; + + -- modificare pentru facturile in valuta + IF V_AJUSTARE <> 0 THEN + V_PRETV := V_PRETV + V_AJUSTARE; + V_TVAV := V_TVAV + ROUND(V_AJUSTARE * V_PROC_TVAV, + pack_sesiune.nzecimale_pretv); + V_PRETVTVA := V_PRETV + V_TVAV; + END IF; + -- + + BEGIN + SELECT NR_PAG, NVL(ACONT, 'XXXX') + INTO V_TIP_GESTIUNE, V_ACONT_GEST + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = V_ID_GESTIUNE + AND STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Eroare la selectarea gestiunii! (FACT-007 : ' || + V_ID_GESTIUNE || '.' || V_ID_ARTICOL || ')'); + END; + + CASE + WHEN pack_facturare.ntip IN (8, 9) THEN + -- factura de retur + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + 0 as cants, + a.cante as cant, + 0 as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + b.PRETACHCTVA + BULK COLLECT + INTO tab_stoc + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.STERS = 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.PRETV = V_PRETV_ALES + AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET) + AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTA, 0) = + NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD), + NVL(A.ID_VALUTA, 0)) + AND A.CANTE <> 0 + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND A.ID_TIP_RULAJ = 0 + AND A.COD IN + (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') as num_tab)))); + WHEN pack_Facturare.ntip = 24 THEN + BEGIN + SELECT DISTINCT DISCOUNT_EVIDENTIAT + INTO V_DISCOUNT_EVIDENTIAT_AVIZ + FROM VANZARI + WHERE COD IN + (SELECT X AS COD + FROM table(cast(CHARN2COLLECTION(pack_facturare.ccod_retur, + ',') as num_tab))); + EXCEPTION + WHEN TOO_MANY_ROWS THEN + RAISE_APPLICATION_ERROR(-20000, + 'O parte dintre avize sunt cu discount evidentiat,iar altele sunt fara! (FACT-022)'); + END; + -- aviz de retur + SELECT 1 as tip, + A.pret, + A.pretv, + A.acont, + 0 as cants, + A.cante as cant, + 0 as cante, + A.tvav, + A.proc_tvav, + A.tva, + A.datain, + A.id_rul_aux, + A.pretd, + A.id_valuta, + A.lot, + A.adata_expirare, + A.serie, + A.id_lucrare_rez, + A.id_part_rez, + B.PRETACHCTVA + BULK COLLECT + INTO tab_stoc + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.STERS = 0 + AND A.ID_TIP_RULAJ = 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.PRETV = DECODE(V_DISCOUNT_EVIDENTIAT_AVIZ, + 1, + V_PRETV, + V_PRETV - V_DISCOUNT_UNITAR) + AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET) + AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTA, 0) = + NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD), + NVL(A.ID_VALUTA, 0)) + AND A.CANTE <> 0 + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND A.COD IN + (SELECT X AS COD + FROM table(cast(CHARN2COLLECTION(pack_facturare.ccod_retur, + ',') as num_tab))); + + WHEN pack_Facturare.ntip = pack_facturare.nTipFacturaHotel THEN + -- 09.02.2010 + -- la vanzarea din stoc din ROARETAIL - aflu preturile de achizitie/vanzare, seria, gestiunea si trebuie sa intru pe ramura default + -- DESCARCAREA DE GESTIUNE OFFLINE TREBUIE RESCRISA SA FOLOSEASCA PROCEDURA PACK_RETAIL_STOC.SALVEAZABON + -- pack_Facturare.ntip = pack_gestiuni_retail.nTipVanzareRetail + -- BONURI FISCALE DIN ROARETAIL (NU AM PRETUL DE ACHIZITIE, CONTUL) PACK_GESTIUNI_RETAIL.DESCARCARE_RETAIL + -- 09.02.2010 ^ + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant, + a.cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + b.PRETACHCTVA + BULK COLLECT + INTO tab_stoc + FROM STOC A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT > a.cante + ORDER BY A.PRET; + + WHEN pack_Facturare.ntip in + (pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata) THEN + V_ACONT_REST := NULL; + + SELECT * + BULK COLLECT + INTO tab_stoc + FROM (SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + nvl(b.cant, 0) > + a.cante + nvl(b.cante, 0) + UNION ALL + SELECT 2 AS TIP, + NVL(V_PRET_ACHIZITIE, 0) as pret, + NVL(V_PRETV_ALES, 0) as pretv, + V_ACONT_REST as acont, + V_CANTE as cants, + 0 as cant, + 0 as cante, + pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES, + 1, + pack_Facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 2) as tvav, + V_PROC_TVAV as proc_tvav, + pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE, + 1, + pack_facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 1) as tva, + NULL as datain, + NULL as id_rul_aux, + V_PRETD as pretd, + V_ID_VALUTAD as id_valuta, + NULL as lot, + NULL as adata_expirare, + V_SERIE as serie, + V_ID_LUCRARE_REZ as id_lucrare_rez, + V_ID_PART_REZ as id_part_rez, + pretachctva + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL) + ORDER BY TIP, PRET; + + WHEN V_CANTE < 0 and pack_facturare.clistaid is not null and + instr(pack_facturare.clistaid, ':') > 0 THEN + -- tip = 1 facturare cu articole retur din rulaj, nu din stoc + -- am facut ramura separata pt ca la conpress group bon fiscal de la chiosc + -- statea foarte mult sa parcurga rulajul, + -- desi nu aveam nici V_CANTE < 0 nici pack_facturare.clista_id + -- este la fel ca ramura else, dar cu tip = 1 in plus + -- tip = 2 facturare articole din stoc (cantitate pozitiva sau negativa) + -- tip = 3 facturare articole fara stoc, din nomenclatorul de articole, RF_FACTURARE_FARA_STOC = 1 + SELECT * + BULK COLLECT + INTO tab_stoc + FROM (SELECT 1 as tip, -- ARTICOLE RETUR, DIN RUL + a.pret, + a.pretv, + a.acont, + 0 as cants, + a.cante as cant, + 0 as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + b.PRETACHCTVA + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE V_CANTE < 0 + AND A.STERS = 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.PRETV = V_PRETV_ALES + AND A.PRET = NVL(V_PRET_ACHIZITIE, A.PRET) + AND NVL(A.PRETD, 0) = NVL(V_PRETD, NVL(A.PRETD, 0)) + AND NVL(A.ID_VALUTA, 0) = + NVL(DECODE(V_ID_VALUTAD, -99, 0, V_ID_VALUTAD), + NVL(A.ID_VALUTA, 0)) + AND A.CANTE <> 0 + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND A.ID_TIP_RULAJ = 0 + AND A.COD IN + (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN + (select id_vanzare + from (select cast(getwordnum(id_articol_id_vanzare, + 1, + ':') as + number(20, 0)) as id_articol, + cast(getwordnum(id_articol_id_vanzare, + 2, + ':') as + number(20, 0)) as id_vanzare + from (select x as id_articol_id_vanzare + FROM table(cast(CHARC2COLLECTION(pack_facturare.clistaid, + ',') as + char_tab)))) + where id_articol = V_ID_ARTICOL)) -- ID_ARTICOL:ID_VANZARE,ID_ARTICOL:ID_VANZARE + UNION ALL + SELECT 2 as tip, -- FARA ARTICOLE RETUR, DIN STOC. ulterior am inclus si articolele vandute normal (nu din rulaj) dar cu cantitate negativa, care exista in stoc + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE V_CANTE <> 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND A.PRET = V_PRET_ACHIZITIE + AND A.PRETD = V_PRETD + AND NVL(A.ID_VALUTA, 0) = + DECODE(V_ID_VALUTAD, -99, 0, NVL(V_ID_VALUTAD, 0)) + AND A.PRETV = V_PRETV_ALES -- modificare v 2.0.19 + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + nvl(b.cant, 0) > + a.cante + nvl(b.cante, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + UNION ALL + SELECT 3 AS TIP, -- ARTICOLE FARA STOC, DIN NOMENCLATORUL DE ARTICOLE, RF_FACTURARE_FARA_STOC = 1 + NVL(V_PRET_ACHIZITIE, 0) as pret, + NVL(V_PRETV_ALES, 0) as pretv, + pack_facturare.getanaliticbyarticol(V_CONT, + V_ID_GESTIUNE, + V_ID_ARTICOL) as acont, + V_CANTE as cants, + 0 as cant, + 0 as cante, + pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES, + 1, + pack_Facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 2) as tvav, + V_PROC_TVAV as proc_tvav, + pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE, + 1, + pack_facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 1) as tva, + NULL as datain, + NULL as id_rul_aux, + V_PRETD as pretd, + V_ID_VALUTAD as id_valuta, + NULL as lot, + NULL as adata_expirare, + V_SERIE as serie, + V_ID_LUCRARE_REZ as id_lucrare_rez, + V_ID_PART_REZ as id_part_rez, + pretachctva + FROM NOM_ARTICOLE + WHERE lnFacturareFaraStoc = 1 + and ID_ARTICOL = V_ID_ARTICOL) + ORDER BY TIP, PRET; + + ELSE + SELECT * + BULK COLLECT + INTO tab_stoc + FROM (SELECT 2 as tip, -- FARA ARTICOLE RETUR, DIN STOC. ulterior am inclus si articolele vandute normal (nu din rulaj) dar cu cantitate negativa, care exista in stoc + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE V_CANTE <> 0 + AND NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = V_CONT + AND A.PRET = V_PRET_ACHIZITIE + AND A.PRETD = V_PRETD + AND NVL(A.ID_VALUTA, 0) = + DECODE(V_ID_VALUTAD, -99, 0, NVL(V_ID_VALUTAD, 0)) + AND A.PRETV = V_PRETV_ALES -- modificare v 2.0.19 + AND NVL(A.SERIE, '+_') = NVL(V_SERIE, '+_') + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + nvl(b.cant, 0) > + a.cante + nvl(b.cante, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(V_ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(V_ID_LUCRARE_REZ, 0) + UNION ALL + SELECT 3 AS TIP, -- ARTICOLE FARA STOC, DIN NOMENCLATORUL DE ARTICOLE, RF_FACTURARE_FARA_STOC = 1 + NVL(V_PRET_ACHIZITIE, 0) as pret, + NVL(V_PRETV_ALES, 0) as pretv, + pack_facturare.getanaliticbyarticol(V_CONT, + V_ID_GESTIUNE, + V_ID_ARTICOL) as acont, + V_CANTE as cants, + 0 as cant, + 0 as cante, + pack_sesiune.calculeaza_pret_tva(V_PRETV_ALES, + 1, + pack_Facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 2) as tvav, + V_PROC_TVAV as proc_tvav, + pack_sesiune.calculeaza_pret_tva(V_PRET_ACHIZITIE, + 1, + pack_facturare.nid_moneda_nationala, + V_PROC_TVAV, + 0, + 1) as tva, + NULL as datain, + NULL as id_rul_aux, + V_PRETD as pretd, + V_ID_VALUTAD as id_valuta, + NULL as lot, + NULL as adata_expirare, + V_SERIE as serie, + V_ID_LUCRARE_REZ as id_lucrare_rez, + V_ID_PART_REZ as id_part_rez, + pretachctva + FROM NOM_ARTICOLE + WHERE lnFacturareFaraStoc = 1 + and ID_ARTICOL = V_ID_ARTICOL) + ORDER BY TIP, PRET; + -- AND NVL(A.ID_RUL_AUX, 0) = 0 + END CASE; + + IF SQL%ROWCOUNT = 0 THEN + BEGIN + SELECT DENUMIRE + INTO V_DENUMIRE + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = V_ID_ARTICOL; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || V_DENUMIRE || + ' nu mai e in stoc! (FACT-008)'); + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Unul dintre articole nu mai exista in stoc! (FACT-009)'); + END; + END IF; + + V_CANTITATE_RAMASA := V_CANTE; + + FOR i IN tab_stoc.first .. tab_stoc.last LOOP + + EXIT WHEN V_CANTITATE_RAMASA = 0; + + V_TIP_INREG := 1; + V_PRET := tab_stoc(i).PRET; + V_TVA := tab_stoc(i).TVA; + V_PRETV_ORIG := tab_stoc(i).PRETV; + V_ACONT := tab_stoc(i).ACONT; + V_DATAIN := tab_stoc(i).DATAIN; + + -- 29.03.2010 + lcAcont607 := GetAnaliticByArticol('607', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont607 := CASE + WHEN lcAcont607 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont607 + END; + + lcAcont608 := GetAnaliticByArticol('608', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont608 := CASE + WHEN lcAcont608 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont608 + END; + + lcAcont378 := GetAnaliticByArticol('378', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont378 := CASE + WHEN lcAcont378 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont378 + END; + + lcAcont388 := GetAnaliticByArticol('388', V_ID_GESTIUNE, V_ID_ARTICOL); + lcAcont388 := CASE + WHEN lcAcont388 IS NULL THEN + REPLACE(V_ACONT, 'X') + ELSE + lcAcont388 + END; + -- 29.03.2010 + + V_CANTITATE := tab_stoc(i).CANTS + tab_stoc(i).CANT - tab_stoc(i).CANTE; + + IF V_CANTITATE_RAMASA >= V_CANTITATE THEN + V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE; + ELSE + V_CANTITATE := V_CANTITATE_RAMASA; + V_CANTITATE_RAMASA := 0; + END IF; + + V_ADAOS := V_PRETV - V_PRET; + V_ADAOS_ORIG := V_PRETV_ORIG - V_PRET; + + IF V_PRET <> 0 THEN + V_PROCENT := ROUND(V_ADAOS * 100 / V_PRET, + pack_facturare.nzecimale_procent); + V_PROCENT_ORIG := ROUND(V_ADAOS_ORIG * 100 / V_PRET, + pack_facturare.nzecimale_procent); + ELSE + V_PROCENT := 0; + V_PROCENT_ORIG := 0; + END IF; + + V_TVAV_ORIG := tab_stoc(i).TVAV; + + -- gestiune marfa la pret de vanzare sau marfa pret de achizitie* (defalcata in stoc si dupa pretul de vanzare) + IF V_TIP_GESTIUNE in (6, 7) OR tab_stoc(i).TVAV <> 0 THEN + V_PROC_TVAV_ORIG := tab_stoc(i).PROC_TVAV; + ELSE + V_PROC_TVAV_ORIG := pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG, + V_PRETV_ORIG, + pack_facturare.nan, + pack_facturare.nluna); + END IF; + + V_SUMA := 0; + V_INCASAT_CALCUL := 0; + + /* V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV_ORIG, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_TVAV := V_VALOARE_TVAV - V_VALOARE_TVAV_ORIG; + + /* V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV_ORIG, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_PRETV := V_VALOARE_PRETV - V_VALOARE_PRETV_ORIG; + + V_PROC_TVA := pack_sesiune.TVA2PROCTVA(V_TVA, + V_PRET, + pack_facturare.nan, + pack_facturare.nluna); + + V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE + WHEN tab_stoc(i).pretachctva = 1 THEN + V_PRET + V_TVA + ELSE + V_PRET + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => tab_stoc(i).pretachctva, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + V_VALOARE_TVA := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE + WHEN tab_stoc(i).pretachctva = 1 THEN + V_PRET + V_TVA + ELSE + V_TVA + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => tab_stoc(i).pretachctva, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET; + V_VALOARE_ADAOS_ORIG := V_VALOARE_PRETV_ORIG - V_VALOARE_PRET; + V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + CASE + WHEN V_CONT = '371' AND pack_facturare.ntip = 47 THEN + V_ANALITICCUST := pack_facturare.getAnaliticK(V_PROC_TVAV); + + -- 357-371.C + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + (CASE + WHEN V_TIP_GESTIUNE = 6 THEN + V_VALOARE_PRETVTVA + ELSE + V_VALOARE_PRET + END), + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + V_EXPLICATIE, + '357', + NULL, + '371', + V_ANALITICCUST, + 0, + 0, + 1, + 0, + 0, + NULL); + + -- 371.C-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + V_ANALITICCUST, + '371', + REPLACE(V_ACONT, 'X'), + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE = 6 THEN + --371.C-378.C + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + V_ANALITICCUST, + '378', + V_ANALITICCUST, + 0, -- id_gestin + 0, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --371.C-4428.C + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + V_ANALITICCUST, + '4428', + V_ANALITICCUST, + 0, -- id_gestin + 0, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '378', + REPLACE(V_ACONT, + 'X'), + '371', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '4428', + NULL, + '371', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + END IF; + + IF V_TIP_GESTIUNE IN (6, 7) AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + IF V_TIP_GESTIUNE = 6 THEN + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '378', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + END IF; + + WHEN V_CONT = '371' AND pack_facturare.nfactavizcust = 1 + /* (pack_facturare.ntip = 42 or (pack_facturare.ntip = 24 and pack_facturare.nfactavizcust = 1))*/ + THEN + -- 357-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + (CASE + WHEN V_TIP_GESTIUNE = 6 THEN + V_VALOARE_PRETVTVA + ELSE + V_VALOARE_PRET + END), + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + V_EXPLICATIE, + '357', + NULL, + '371', + REPLACE(V_ACONT, 'X', ''), + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE IN (6, 7) AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + IF V_TIP_GESTIUNE = 6 THEN + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '378', + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, + 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 2, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + END IF; + + WHEN V_CONT IN ('371', '357') AND V_TIP_GESTIUNE <> 6 AND + pack_facturare.nfactavizcust = 0 THEN + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET ARE TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '607', + lcAcont607, -- REPLACE(V_ACONT, 'X') + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + 0, + NULL); + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET ARE TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- V_ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR, + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, 'X'), + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X') + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET ARE TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X') + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF V_CONT = '357' THEN + -- 371 - 357 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + V_CONT, + NULL, + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 3, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + END IF; + + IF V_TIP_GESTIUNE = 7 AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + WHEN V_CONT IN ('371', '357') AND V_TIP_GESTIUNE = 6 THEN + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '607', + lcAcont607, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, + V_ID_GESTIUNE, + 4, + 0, + 0, + NULL); + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS_ORIG, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 4, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV_ORIG, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '4428', + NULL, + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 4, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF V_CONT = '357' THEN + -- 371 - 357 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET + + V_VALOARE_ADAOS_ORIG + + V_VALOARE_TVAV_ORIG, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + V_CONT, + NULL, + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 4, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) THEN + + INSERT INTO RUL_TEMP + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANTE, + CANT, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + ID_RUL_AUX, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + V_CONT, + V_ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET, + V_TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).id_rul_aux, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + V_ID_TIP_RULAJ, + tab_stoc(i).LOT, + tab_stoc(i).ADATA_EXPIRARE, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM DUAL + CONNECT BY level <= 2; + V_DATAIN := pack_facturare.ddata_act; + V_TIP_INREG := V_TIP_INREG - 1; + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + lcAcont378, --REPLACE(V_ACONT,'X'), + V_CONT, + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + -- 30.10.2009 + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR, + V_EXPLICATIE, + '4428', + NULL, + V_CONT, + REPLACE(V_ACONT, + 'X'), + V_ID_GESTIUNE, -- id_gestin + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + -- 30.10.2009 ^ + + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, + 'X'), + '378', + lcAcont378, --REPLACE(V_ACONT,'X'), + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + -- 30.10.2009 + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + V_ID_GESTIUNE, -- V_ID_GESTIN + V_ID_GESTIUNE, + 5, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + -- 30.10.2009 ^ + + END IF; + WHEN V_CONT IN ('341', '345', '346', '381') AND + pack_facturare.nfactavizcust = 0 THEN + -- 711 - 34X / 608 - 381 + IF V_CONT = '381' THEN + V_CONT2 := '608'; + V_CONT3 := '388'; + V_SUMA := V_VALOARE_PRET; + V_ACONT2 := lcAcont608; + V_ACONT3 := lcAcont388; + ELSE + V_CONT2 := '711'; + V_CONT3 := '348'; + V_SUMA := V_VALOARE_PRET; + V_ACONT2 := REPLACE(V_ACONT, 'X'); + V_ACONT3 := REPLACE(V_ACONT, 'X'); + END IF; + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_SUMA, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT2, + V_ACONT2, -- REPLACE(V_ACONT, 'X'), + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 6, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF V_VALOARE_ADAOS <> 0 AND lnDescarcare345FaraAdaos = 0 THEN + -- 34X -348 / 381 - 388 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT, + REPLACE(V_ACONT, + 'X'), + V_CONT3, + V_ACONT3, -- REPLACE(V_ACONT,'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 7, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + -- 348 - 34x / 388 - 381 +/* IF V_CONT = '381' THEN + V_CONT2 := V_CONT; + V_ACONT2 := REPLACE(V_ACONT, 'X'); + ELSE + V_ACONT2 := NULL; + END IF;*/ + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT3, + V_ACONT3, -- REPLACE(V_ACONT,'X'), + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 7, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + END IF; + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND + V_TIP_GESTIUNE IN (6, 7) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + WHEN V_CONT <> '371' AND pack_facturare.nfactavizcust = 0 THEN + --371-x + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, 'X'), + V_CONT, + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '607', + lcAcont607, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + 0, + NULL); + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, 'X'), + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + lcAcont378, -- REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + 0, -- V_ID_GESTIN + V_ID_GESTIUNE, + 8, + 0, + (V_PROC_TVAV - 1) * 100, + NULL); + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND + V_TIP_GESTIUNE IN (6, 7) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + NVL(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + decode(rownum, 2, V_CANTITATE, 0) as CANT, + decode(rownum, 1, V_CANTITATE, 0) as CANTE, + V_CONT as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, 1, tab_stoc(i).proc_Tvav, V_PROC_TVAV) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Combinatie invalida! (FACT-010 : ' || + V_ID_ARTICOL || '.' || V_ID_GESTIUNE || '.' || + V_CONT || ')'); + END CASE; + + INSERT INTO RUL_TEMP + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + DISCUNITAR, + DISCOUNT_TVA, + PROC_DISC, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_RUL_AUX, + ID_SET, + LOT, + ADATA_EXPIRARE, + ID_LUCRARE_REZ, + ID_PART_REZ, + ID_JTVA_COLOANA, + TAXCODE) + VALUES + (V_TIP_INREG, + V_ID_ARTICOL, + tab_stoc(i).serie, + V_ID_GESTIUNE, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + V_CANTITATE, + V_CONT, + V_ACONT, + V_PRETV, + V_TVAV, + V_PRETVTVA, + V_PROC_TVAV, + V_PROC_TVAV, + V_PRET, + V_TVA, + V_DISCOUNT_UNITAR, + V_DISCOUNT_TVA, + V_PROC_DISCOUNT, + V_ADAOS, + V_PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + V_DATAIN, + pack_facturare.ddata_act, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + tab_stoc(i).id_rul_aux, + pack_facturare.nid_set, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ, + V_ID_JTVA_COLOANA, + V_TAXCODE); + + END LOOP; + + <> + NULL; + END descarca_gestiune; + ------------------------------------------------------------------- + PROCEDURE scrie_fact_aviz_custodie(V_COD IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_ID_GESTIUNE IN NUMBER, + V_CONT IN VARCHAR2, + V_CANTITATE IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_PRET_ACHIZITIE IN NUMBER, + V_PRETD IN NUMBER, + V_ID_VALUTAD IN NUMBER, + V_PRETV IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER) IS + V_VALOARE_TVAV ACT.SUMA%TYPE; + V_VALOARE_PRETV ACT.SUMA%TYPE; + V_VALOARE_PRET ACT.SUMA%TYPE; + V_VALOARE_ADAOS ACT.SUMA%TYPE; + V_VALOARE_PRETVTVA ACT.SUMA%TYPE; + V_PRETACHCTVA NOM_ARTICOLE.PRETACHCTVA%TYPE; + + V_INCASAT_CALCUL ACT.SUMA%TYPE := 0; + + V_PROC_TVA RUL.PROC_TVA%TYPE; + V_ACONT RUL.ACONT%TYPE; + V_TVA RUL.TVA%TYPE; + V_PRETV_RON RUL.PRETV%TYPE; + + V_DISCOUNT_EVIDENTIAT_AVIZ NUMBER(1); + BEGIN + SELECT DISCOUNT_EVIDENTIAT + INTO V_DISCOUNT_EVIDENTIAT_AVIZ + FROM VANZARI + WHERE COD = V_COD; + + IF V_PRET_ARE_TVA = 1 THEN + IF V_DISCOUNT_EVIDENTIAT_AVIZ = 1 THEN + V_PRETV_RON := pack_sesiune.calculeaza_pret_cu_tva(V_PRETV, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + ELSE + V_PRETV_RON := pack_sesiune.calculeaza_pret_cu_tva(V_PRETV - + V_DISCOUNT_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + END IF; + ELSE + IF V_DISCOUNT_EVIDENTIAT_AVIZ = 1 THEN + V_PRETV_RON := pack_sesiune.calculeaza_pret_fara_tva(V_PRETV, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + ELSE + V_PRETV_RON := pack_sesiune.calculeaza_pret_fara_tva(V_PRETV - + V_DISCOUNT_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, + 2); + END IF; + END IF; + + SELECT A.PROC_TVA, A.TVA, A.ACONT, B.PRETACHCTVA + INTO V_PROC_TVA, V_TVA, V_ACONT, V_PRETACHCTVA + FROM RUL A + LEFT JOIN NOM_ARTICOLE B + ON A.ID_ARTICOL = B.ID_ARTICOL + WHERE A.COD = V_COD + AND A.STERS = 0 + AND A.ID_ARTICOL = V_ID_ARTICOL + AND A.PRET = V_PRET_ACHIZITIE + AND A.PRETD = V_PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(V_ID_VALUTAD, 0) + AND DECODE(V_PRET_ARE_TVA, 1, A.PRETV + A.TVAV, A.PRETV) = + V_PRETV_RON + AND A.ID_GESTIUNE = V_ID_GESTIUNE + AND A.ID_TIP_RULAJ = 0 + AND ROWNUM = 1; + + V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => V_PRETV, + V_AJUSTARE => 0, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRETV, + V_AJUSTARE => 0, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRET_ACHIZITIE + + (CASE + WHEN V_PRETACHCTVA = 1 THEN + V_TVA + ELSE + 0 + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => 0, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRETACHCTVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET; + + V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => V_PRETV, + V_AJUSTARE => 0, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + IF V_CONT = '371' THEN + -- 371 - 357 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRETVTVA, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + 0, -- V_ID_CTR + NULL, + '371', + REPLACE(V_ACONT, 'X'), + '357', + NULL, + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + --607-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + NULL, + '607', + REPLACE(V_ACONT, 'X', ''), + '371', + REPLACE(V_ACONT, 'X', ''), + 0, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + NULL, + '378', + REPLACE(V_ACONT, 'X'), + '371', + REPLACE(V_ACONT, 'X'), + V_ID_GESTIUNE, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + NVL(V_ID_SECTIE, 0), + NULL, -- V_ID_CTR + NULL, + '4428', + NULL, + '371', + REPLACE(V_ACONT, 'X'), + V_ID_GESTIUNE, + V_ID_GESTIUNE, + 1, + 0, + 0, + NULL); + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista configurari pentru contul ' || + V_CONT || ' ! (FACT-011)'); + END IF; + END scrie_fact_aviz_custodie; + ------------------------------------------------------------------- + PROCEDURE transfera_articol(detalii_articol VANZARI_DETALII_TEMP%ROWTYPE) IS + V_PRET STOC.PRET%TYPE; + V_PRETV_ORIG STOC.PRETV%TYPE; + V_ACONT STOC.ACONT%TYPE; + + V_ACONT_GEST NOM_GESTIUNI.ACONT%TYPE; + + V_ID_SECTIE RUL.ID_SECTIE%TYPE; + V_ADAOS RUL.ADAOS%TYPE; + V_ADAOS_ORIG RUL.ADAOS%TYPE; + V_PRETV RUL.PRETV%TYPE; + V_TVAV RUL.PRETV%TYPE; + V_PRETVTVA RUL.PRETVTVA%TYPE; + V_TVAV_ORIG RUL.PRETV%TYPE; + V_DISCOUNT_CU_TVA RUL.DISCUNITAR%TYPE; + V_DISCOUNT_UNITAR RUL.DISCUNITAR%TYPE; + V_DISCOUNT_TVA RUL.DISCOUNT_TVA%TYPE; + -- V_PROC_DISCOUNT RUL.PROC_DISC%TYPE; + V_PROCENT RUL.PROCENT%TYPE; + V_PROCENT_ORIG RUL.PROCENT%TYPE; + V_DATAIN RUL.DATAIN%TYPE; + + V_CONT2 ACT.SCD%TYPE; + V_CONT3 ACT.SCD%TYPE; + V_ACONT2 ACT.ASCC%TYPE; + + V_EXPLICATIE ACT.EXPLICATIA%TYPE; + V_SUMA ACT.SUMA%TYPE; + V_INCASAT_CALCUL ACT.SUMA%TYPE; + + V_TIP_GESTIUNE NOM_GESTIUNI.NR_PAG%TYPE; + tab_stoc tab_stoc_type; + + V_CANTITATE STOC.CANTS%TYPE; + V_CANTITATE_RAMASA STOC.CANTS%TYPE; + V_DENUMIRE NOM_ARTICOLE.DENUMIRE%TYPE; + + V_VALOARE_PRET ACT.SUMA%TYPE; + V_VALOARE_PRETV ACT.SUMA%TYPE; + V_VALOARE_PRETV_ORIG ACT.SUMA%TYPE; + V_VALOARE_PRETVTVA ACT.SUMA%TYPE; + V_VALOARE_TVAV ACT.SUMA%TYPE; + V_VALOARE_TVAV_ORIG ACT.SUMA%TYPE; + V_VALOARE_ADAOS ACT.SUMA%TYPE; + V_VALOARE_ADAOS_ORIG ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_PRETV ACT.SUMA%TYPE; + V_VALOARE_DIFERENTA_TVAV ACT.SUMA%TYPE; + + V_PRET_ARE_TVA NUMBER(1) := 0; + V_PROC_TVAV RUL.PROC_TVAV%TYPE; + V_PROC_TVA ACT.PROC_TVA%TYPE; + V_TVA ACT.SUMA%TYPE; + -- V_ZECIMALE_PRET NUMBER(1) := pack_facturare.nzecimale_calcul_ach; + + V_TIP_INREG RUL.AN%TYPE; + BEGIN + IF pack_facturare.nid_sectie_stoc IS NULL THEN + BEGIN + SELECT B.ID_SECTIE + INTO V_ID_SECTIE + FROM CRM_POLITICI_PRETURI A + LEFT JOIN CRM_NOTE_VANZARI B + ON A.ID_NOTA = B.ID_NOTA + WHERE A.ID_POL = detalii_articol.id_pol; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_SECTIE := 0; + END; + ELSE + V_ID_SECTIE := pack_facturare.nid_sectie_stoc; + END IF; + + V_EXPLICATIE := NULL; + + pack_facturare.calculeaza_pret(detalii_articol.pret, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.id_valuta, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + 2, + V_PRETV, + V_TVAV, + V_PRETVTVA); + + pack_facturare.calculeaza_pret(detalii_articol.discount_unitar, + detalii_articol.curs / + detalii_articol.multiplicator, + detalii_articol.id_valuta, + detalii_articol.proc_tvav, + detalii_articol.pret_cu_tva, + 2, + V_DISCOUNT_UNITAR, + V_DISCOUNT_TVA, + V_DISCOUNT_CU_TVA); + + -- modificare pentru discount evidentiat + IF pack_facturare.ndiscount_evidentiat = 0 THEN + V_PRETV := V_PRETV - V_DISCOUNT_UNITAR; + V_TVAV := V_TVAV - V_DISCOUNT_TVA; + V_PRETVTVA := V_PRETVTVA - V_DISCOUNT_CU_TVA; + V_DISCOUNT_UNITAR := 0; + V_DISCOUNT_TVA := 0; + V_DISCOUNT_CU_TVA := 0; + END IF; + + /* IF V_PRETVTVA <> 0 THEN + V_PROC_DISCOUNT := ROUND(V_DISCOUNT_CU_TVA / V_PRETVTVA, + pack_facturare.nzecimale_procent) * 100; + ELSE + V_PROC_DISCOUNT := 0; + END IF;*/ + + BEGIN + SELECT NR_PAG, NVL(ACONT, 'XXXX') + INTO V_TIP_GESTIUNE, V_ACONT_GEST + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = detalii_articol.id_gestiune + AND STERS = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Eroare la selectarea gestiunii! (FACT-019 : ' || + detalii_articol.id_gestiune || ')'); + END; + + CASE + WHEN pack_facturare.ntip = 27 THEN + -- (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + BULK COLLECT + INTO tab_stoc + FROM STOC a + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND NVL(A.PRETD, 0) = NVL(B.PRETD, 0) + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = detalii_articol.id_articol + AND A.ID_GESTIUNE = detalii_articol.id_gestiune + AND NVL(A.CONT, 'XXXX') = detalii_articol.cont + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + NVL(B.CANT, 0) > + A.CANTE + NVL(B.CANTE, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = + NVL(detalii_articol.id_lucrare_rez, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0) + ORDER BY A.PRET; + WHEN pack_facturare.ntip = 30 THEN + -- (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune ) + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + BULK COLLECT + INTO tab_stoc + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = detalii_articol.id_articol + AND NVL(A.SERIE, '+_') = NVL(detalii_articol.serie, '+_') + AND A.ID_GESTIUNE = detalii_articol.id_gestiune + AND A.PRETV = V_PRETV + AND A.PRETD = detalii_articol.pretd + AND NVL(A.ID_VALUTA, 0) = + decode(detalii_articol.id_valutad, + -99, + 0, + NVL(detalii_articol.id_valutad, 0)) + AND A.PRET = detalii_articol.pret_achizitie + AND NVL(A.CONT, 'XXXX') = detalii_articol.cont + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + NVL(B.CANT, 0) > + A.CANTE + NVL(B.CANTE, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = + NVL(detalii_articol.id_lucrare_rez, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0) + /* AND NVL(ID_RUL_AUX, 0) = 0*/ + ORDER BY A.PRET; + ELSE + SELECT 1 as tip, + a.pret, + a.pretv, + a.acont, + a.cants, + a.cant + nvl(b.cant, 0) as cant, + a.cante + nvl(b.cante, 0) as cante, + a.tvav, + a.proc_tvav, + a.tva, + a.datain, + a.id_rul_aux, + a.pretd, + a.id_valuta, + a.lot, + a.adata_expirare, + a.serie, + a.id_lucrare_rez, + a.id_part_rez, + c.pretachctva + BULK COLLECT + INTO tab_stoc + FROM STOC A + LEFT JOIN (select sum(cant) as cant, + sum(cante) as cante, + id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare + from rul_temp + where an = 1 + group by id_articol, + id_gestiune, + cont, + acont, + serie, + pret, + pretv, + id_lucrare_rez, + id_part_rez, + proc_tvav, + id_rul_aux, + pretd, + id_valuta, + lot, + adata_expirare) B + ON A.ID_ARTICOL = B.ID_ARTICOL + AND A.ID_GESTIUNE = B.ID_GESTIUNE + AND NVL(A.CONT, 'XXXX') = NVL(B.CONT, 'XXXX') + AND NVL(A.ACONT, 'XXXX') = NVL(B.ACONT, 'XXXX') + AND A.PRET = B.PRET + AND A.PRETV = B.PRETV + AND NVL(A.SERIE, '+_') = NVL(B.SERIE, '+_') + AND NVL(A.ID_PART_REZ, 0) = NVL(B.ID_PART_REZ, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = NVL(B.ID_LUCRARE_REZ, 0) + AND A.PROC_TVAV = B.PROC_TVAV + AND NVL(A.ID_RUL_AUX, 0) = NVL(B.ID_RUL_AUX, 0) + AND A.PRETD = B.PRETD + AND NVL(A.ID_VALUTA, 0) = NVL(B.ID_VALUTA, 0) + AND NVL(A.LOT, '_') = NVL(B.LOT, '_') + AND NVL(A.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) = + NVL(B.ADATA_EXPIRARE, to_date('01011500', 'DDMMYYYY')) + LEFT JOIN NOM_ARTICOLE C + ON A.ID_ARTICOL = C.ID_ARTICOL + WHERE NVL(A.ID_SUCURSALA, -99) = + NVL(pack_facturare.nid_sucursala, -99) + AND A.ID_ARTICOL = detalii_articol.id_articol + AND NVL(A.SERIE, '+_') = NVL(detalii_articol.serie, '+_') + AND A.ID_GESTIUNE = detalii_articol.id_gestiune + AND A.PRET = detalii_articol.pret_achizitie + AND A.PRETV = detalii_articol.pretv_orig -- modificare v 2.0.19 + AND NVL(A.CONT, 'XXXX') = detalii_articol.cont + AND A.LUNA = pack_facturare.nluna + AND A.AN = pack_facturare.nan + AND A.CANTS + A.CANT + NVL(B.CANT, 0) > + A.CANTE + NVL(B.CANTE, 0) + AND NVL(A.ID_LUCRARE_REZ, 0) = + NVL(detalii_articol.id_lucrare_rez, 0) + AND NVL(A.ID_PART_REZ, 0) = NVL(detalii_articol.id_part_rez, 0) + /* AND NVL(ID_RUL_AUX, 0) = 0*/ + ORDER BY PRET; + END CASE; + + IF SQL%ROWCOUNT = 0 THEN + BEGIN + SELECT DENUMIRE + INTO V_DENUMIRE + FROM NOM_ARTICOLE + WHERE ID_ARTICOL = detalii_articol.id_articol; + + RAISE_APPLICATION_ERROR(-20000, + 'Articolul ' || V_DENUMIRE || + ' nu mai e in stoc! (FACT-020)'); + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Unul dintre articole nu mai exista in stoc! (FACT-021 : ' || + detalii_articol.id_articol || ')'); + END; + END IF; + + V_CANTITATE_RAMASA := detalii_articol.cantitate; + + IF pack_facturare.ntip = 27 THEN + -- (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + DELETE FROM VANZARI_DETALII_TEMP + WHERE ID_TEMP = detalii_articol.id_temp; + END IF; + + FOR i IN tab_stoc.first .. tab_stoc.last LOOP + + EXIT WHEN V_CANTITATE_RAMASA = 0; + + V_TIP_INREG := 1; + V_TVA := tab_stoc(i).TVA; + V_PRET := tab_stoc(i).PRET; + V_PRETV_ORIG := tab_stoc(i).PRETV; + V_ACONT := tab_stoc(i).ACONT; + V_DATAIN := tab_stoc(i).DATAIN; + + V_CANTITATE := tab_stoc(i).CANTS + tab_stoc(i).CANT - tab_stoc(i).CANTE; + + IF V_CANTITATE_RAMASA >= V_CANTITATE THEN + V_CANTITATE_RAMASA := V_CANTITATE_RAMASA - V_CANTITATE; + ELSE + V_CANTITATE := V_CANTITATE_RAMASA; + V_CANTITATE_RAMASA := 0; + END IF; + + V_ADAOS := V_PRETV - V_PRET; + V_ADAOS_ORIG := V_PRETV_ORIG - V_PRET; + IF V_PRET <> 0 THEN + V_PROCENT := ROUND(V_ADAOS * 100 / V_PRET, + pack_facturare.nzecimale_procent); + V_PROCENT_ORIG := ROUND(V_ADAOS_ORIG * 100 / V_PRET, + pack_facturare.nzecimale_procent); + ELSE + V_PROCENT := 0; + V_PROCENT_ORIG := 0; + END IF; + + V_TVAV_ORIG := tab_stoc(i).TVAV; + + V_SUMA := 0; + V_INCASAT_CALCUL := 0; + + V_PRET_ARE_TVA := detalii_articol.pret_cu_tva; + V_PROC_TVAV := detalii_articol.proc_tvav; + V_VALOARE_TVAV := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + /* V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_TVAV_ORIG := pack_facturare.calculeaza_total_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG, + V_PRETV_ORIG, + pack_facturare.nan, + pack_facturare.nluna), + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_TVAV := V_VALOARE_TVAV - V_VALOARE_TVAV_ORIG; + V_VALOARE_PRETV := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + /* V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE V_PRET_ARE_TVA WHEN 0 THEN V_PRETV_ORIG ELSE V_PRETV_ORIG + V_TVAV_ORIG END, V_AJUSTARE => 0, V_CURS => 1, V_DISCOUNT_UNITAR => 0, V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, V_CANTITATE => V_CANTITATE, V_PRET_CU_TVA => V_PRET_ARE_TVA, V_PROC_TVAV => V_PROC_TVAV, V_ZECIMALE_PRET => V_ZECIMALE_PRET);*/ + V_VALOARE_PRETV_ORIG := pack_facturare.calculeaza_total_fara_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV_ORIG + ELSE + V_PRETV_ORIG + + V_TVAV_ORIG + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => pack_sesiune.TVA2PROCTVA(V_TVAV_ORIG, + V_PRETV_ORIG, + pack_facturare.nan, + pack_facturare.nluna), + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + V_VALOARE_DIFERENTA_PRETV := V_VALOARE_PRETV - V_VALOARE_PRETV_ORIG; + V_VALOARE_PRETVTVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_PRETV + ELSE + V_PRETV + + V_TVAV + END, + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => CASE + V_PRET_ARE_TVA + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + V_DISCOUNT_CU_TVA + END, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_pretv, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumav); + + V_PROC_TVA := pack_sesiune.TVA2PROCTVA(V_TVA, + V_PRET, + pack_facturare.nan, + pack_facturare.nluna); + V_VALOARE_PRET := pack_facturare.calculeaza_total_fara_tva(V_PRET => (CASE + WHEN tab_stoc(i).pretachctva = 1 THEN + V_PRET + V_TVA + ELSE + V_PRET + END), + V_AJUSTARE => 0, + V_CURS => 1, + V_DISCOUNT_UNITAR => 0, + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => tab_stoc(i).pretachctva, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => pack_sesiune.nzecimale_preta, + V_ZECIMALE_SUMA => pack_sesiune.nzecimale_sumaa); + + V_VALOARE_ADAOS := V_VALOARE_PRETV - V_VALOARE_PRET; + V_VALOARE_ADAOS_ORIG := V_VALOARE_PRETV_ORIG - V_VALOARE_PRET; + + -- 08.11.2010 + -- (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + -- la retur transfer, trebuie schimbat semnul diferentei de pret + if pack_facturare.ntip = 41 then + V_VALOARE_DIFERENTA_TVAV := -V_VALOARE_DIFERENTA_TVAV; + V_VALOARE_DIFERENTA_PRETV := -V_VALOARE_DIFERENTA_PRETV; + end if; + -- 08.11.2010 ^ + + CASE + WHEN detalii_articol.cont IN ('341', '345', '346', '381') THEN + -- x - 345 / 341 / 346 / 381 + IF detalii_articol.cont = '381' THEN + V_CONT2 := '388'; + V_CONT3 := detalii_articol.cont; + ELSE + V_CONT2 := '348'; + V_CONT3 := '711'; + END IF; + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + pack_facturare.v_date_gestiune.cont + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X', '') + else + REPLACE(pack_facturare.v_date_gestiune.acont, + 'X', + '') + end), -- ascd + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, + 'X', + '') + else + REPLACE(V_ACONT, 'X', '') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- gestout + 1, + 0, + 0, + NULL); + + IF V_VALOARE_ADAOS <> 0 THEN + -- 341 / 345 / 346 - 348 / 381 - 388 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + detalii_articol.cont, + REPLACE(V_ACONT, + 'X', + ''), + V_CONT2, + NULL, + pack_facturare.v_date_gestiune.id_gestiune, -- V_ID_GESTIN + detalii_articol.id_gestiune, + 2, + 0, + 0, + NULL); + + -- 348 - 711 / 388 - 381 + IF V_CONT3 = '711' THEN + V_ACONT2 := NULL; + ELSE + V_ACONT2 := REPLACE(V_ACONT, 'X'); + END IF; + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + V_CONT2, + NULL, + V_CONT3, + V_ACONT2, + 0, -- V_ID_GESTIN + detalii_articol.id_gestiune, + 2, + 0, + 0, + NULL); + + END IF; + + WHEN V_TIP_GESTIUNE <> 6 AND + pack_facturare.v_date_gestiune.id_tip_gest <> 6 THEN + + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + pack_facturare.v_date_gestiune.cont + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), -- ascd + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 3, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE = 7 AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + detalii_articol.id_gestiune, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + + END IF; + + WHEN V_TIP_GESTIUNE = pack_facturare.v_date_gestiune.id_tip_gest AND + pack_facturare.v_date_gestiune.id_tip_gest = 6 THEN + -- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRETVTVA, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + pack_facturare.v_date_gestiune.cont + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), -- ascd + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 4, + 0, + 0, + NULL); + + IF V_TIP_GESTIUNE = 6 AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + -- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont, + 'X'), + '378', + NULL, -- pack_facturare.v_date_gestiune.acont, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, -- pack_facturare.v_date_gestiune.id_gestiune, + 5, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont, + 'X'), + '4428', + NULL, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, -- pack_facturare.v_date_gestiune.id_gestiune, + 5, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + IF V_DISCOUNT_UNITAR = 0 THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_GESTIUNEC, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + detalii_articol.id_gestiune, + pack_facturare.v_date_gestiune.id_gestiune, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + END IF; + + -- daca are analitice la adaos : trebuie sa transfer adaosul dintr-un analitic in altul + IF pack_facturare.nanalitice_378 = 1 THEN + -- 378 - 378 + V_INCASAT_CALCUL := scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', -- scd + Null, -- ascd + '378', -- scc + Null, -- ascc + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestout + 4, + 0, + 0, + NULL); + + IF NVL(V_ACONT, '') <> + NVL(pack_facturare.v_date_gestiune.acont, '') THEN + -- 4428 - 4428 + V_INCASAT_CALCUL := scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '4428', -- scd + Null, -- ascd + '4428', -- scc + Null, -- ascc + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestout + 4, + 0, + 0, + NULL); + END IF; + + END IF; + + WHEN (V_TIP_GESTIUNE IN (4, 5, 7) AND + pack_facturare.v_date_gestiune.id_tip_gest = 6 and + pack_facturare.ntip <> 41) OR + (pack_facturare.ntip = 41 AND V_TIP_GESTIUNE = 6 AND + pack_facturare.v_date_gestiune.id_tip_gest IN (4, 5, 7)) THEN + -- achizitie > vanzare + -- 371- x + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- V_ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + detalii_articol.cont + else + '371' + end), -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), --ascd + (case + when pack_facturare.ntip = 41 then + '371' + else + detalii_articol.cont + end), -- scc + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascc + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 6, + 0, + 0, + NULL); + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- V_ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', -- scd + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), -- ascd + '378', + NULL, -- ascc + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 6, + 0, + 0, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', -- scd + (case + when pack_facturare.ntip <> 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), -- ascd + '4428', + NULL, -- ascc + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestin + (case + when pack_facturare.ntip <> 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- id_gestout + 6, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + IF ((V_TIP_GESTIUNE = 7 AND pack_facturare.ntip <> 41) or + (pack_facturare.v_date_gestiune.id_tip_gest = 7 AND + pack_facturare.ntip = 41)) AND + (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) THEN + + IF pack_facturare.v_date_gestiune.id_tip_gest = 7 and + V_TIP_GESTIUNE = 6 and pack_facturare.ntip = 41 THEN + -- 371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '378', + NULL, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, + 7, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, + 'X'), + '4428', + NULL, + detalii_articol.id_gestiune, + detalii_articol.id_gestiune, + 7, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + END IF; + + IF V_DISCOUNT_UNITAR = 0 THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + detalii_articol.id_gestiune, + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + END IF; + + WHEN (V_TIP_GESTIUNE = 6 AND + pack_facturare.v_date_gestiune.id_tip_gest IN (4, 5, 7) and + pack_facturare.ntip <> 41) OR + (pack_facturare.ntip = 41 AND V_TIP_GESTIUNE IN (4, 5, 7) AND + pack_facturare.v_date_gestiune.id_tip_gest = 6) THEN + -- vanzare > achizitie + -- retur achizitie > vanzare + -- pack_facturare.ntip = 41 = retur transfer + + --x-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_PRET, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + (case + when pack_facturare.ntip = 41 then + '371' + else + pack_facturare.v_date_gestiune.cont + end), + (case + when pack_facturare.ntip = 41 then + REPLACE(V_ACONT, 'X') + else + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.cont + else + '371' + end), + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), + (case + when pack_facturare.ntip = 41 then + detalii_articol.id_gestiune + else + pack_facturare.v_date_gestiune.id_gestiune + end), -- V_ID_GESTIN + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 8, + 0, + 0, + NULL); + --378-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_ADAOS, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '378', + NULL, + '371', + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- V_ID_GESTIN + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 8, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + --4428-371 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_TVAV, + 0, -- DISCOUNT_UNITAR + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '4428', + NULL, + '371', + (case + when pack_facturare.ntip = 41 then + REPLACE(pack_facturare.v_date_gestiune.acont, 'X') + else + REPLACE(V_ACONT, 'X') + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), -- V_ID_GESTIN + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 8, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + IF (V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV OR + V_DISCOUNT_UNITAR <> 0) and pack_facturare.ntip <> 41 THEN + -- SCHIMB PRETUL DE VANZARE IN GESTIUNEA SURSA SI APOI IL TRANSFER LA NOUL PRET DE VANZARE + --371-378 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_PRETV, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, 'X'), + '378', + NULL, + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 9, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + + --371-4428 + V_INCASAT_CALCUL := pack_facturare.scrie_nota(1, + V_VALOARE_DIFERENTA_TVAV, + 0, -- DISCOUNT_UNITAR + + 0, -- PRET CU TVA + pack_facturare.nid_moneda_nationala, -- V_ID_VALUTA + 0, -- V_IN_VALUTA + 0, -- V_CURS, + 0, -- ID_VENCHELT + V_ID_SECTIE, + NULL, -- V_ID_CTR + V_EXPLICATIE, + '371', + REPLACE(V_ACONT, -- pack_facturare.v_date_gestiune.acont, + 'X'), + '4428', + NULL, + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + 9, + 0, + (detalii_articol.proc_tvav - 1) * 100, + NULL); + END IF; + + IF ((V_PRETV_ORIG <> V_PRETV OR V_TVAV_ORIG <> V_TVAV) AND + V_DISCOUNT_UNITAR = 0 AND + (pack_facturare.ntip <> 41 OR + (pack_facturare.ntip = 41 AND V_TIP_GESTIUNE = 7))) THEN + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol, + tab_stoc(i).serie, + (case + when pack_facturare.ntip = 41 then + pack_facturare.v_date_gestiune.id_gestiune + else + detalii_articol.id_gestiune + end), + nvl(pack_facturare.nid_lucrare, 0), + pack_facturare.nid_responsabil, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + detalii_articol.cont as CONT, + REPLACE(V_ACONT, 'X', '') as ACONT, + decode(rownum, 1, V_PRETV_ORIG, V_PRETV) as PRETV, + decode(rownum, 1, tab_stoc(i).tvav, V_TVAV) as TVAV, + decode(rownum, + 1, + tab_stoc(i).pretv + tab_stoc(i).tvav, + V_PRETVTVA) as PRETVTVA, + decode(rownum, + 1, + tab_stoc(i).proc_Tvav, + detalii_articol.proc_tvav) as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + decode(rownum, 1, V_ADAOS_ORIG, V_ADAOS) as ADAOS, + decode(rownum, 1, V_PROCENT_ORIG, V_PROCENT) as PROCENT, + pack_facturare.ddata_act, + pack_facturare.nnumar_bon, + decode(rownum, + 1, + tab_stoc(i).datain, + pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, null) as dataout, + tab_stoc(i).pretd, + tab_stoc(i).id_valuta, + pack_facturare.nid_set, + 3 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + tab_stoc(i).ID_PART_REZ + FROM dual + CONNECT BY level <= 2; + V_TIP_INREG := V_TIP_INREG - 1; + V_DATAIN := pack_facturare.ddata_act; + END IF; + + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Combinatie invalida de gestiuni! (FACT-014 : ' || + detalii_articol.cont || '.' || + detalii_articol.id_gestiune || '.' || + pack_facturare.v_date_gestiune.id_gestiune || ')'); + END CASE; + + -- pe randul 1 e iesirea + -- pe randul 2 e intrarea + INSERT INTO rul_temp + (AN, + ID_ARTICOL, + SERIE, + ID_GESTIUNE, + ID_GESTIUNEC, + ID_LUCRARE, + ID_RESPONSABIL, + NRACT, + SERIE_ACT, + CANT, + CANTE, + CONT, + ACONT, + PRETV, + TVAV, + PRETVTVA, + PROC_TVAV, + PROC_TVA, + PRET, + TVA, + ADAOS, + PROCENT, + DATAACT, + NNIR, + DATAIN, + DATAOUT, + PRETD, + ID_VALUTA, + ID_SET, + ID_TIP_RULAJ, + LOT, + ADATA_EXPIRARE, + ID_RUL_AUX, + ID_LUCRARE_REZ, + ID_PART_REZ) + SELECT decode(rownum, 1, V_TIP_INREG, 0), + detalii_articol.id_articol as ID_ARTICOL, + tab_stoc(i).serie as SERIE, + decode(rownum, + 1, + detalii_articol.id_gestiune, + pack_facturare.v_date_gestiune.id_gestiune) as ID_GESTIUNE, + decode(rownum, + 2, + detalii_articol.id_gestiune, + pack_facturare.v_date_gestiune.id_gestiune) as ID_GESTIUNEC, + nvl(pack_facturare.nid_lucrare, 0) as ID_LUCRARE, + pack_facturare.nid_responsabil as ID_RESPONSABIL, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + -- decode(rownum, 2, V_CANTITATE, 0) as CANT, + (case + when (rownum = 1 and pack_facturare.ntip = 41) or + (rownum = 2 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANT, + -- decode(rownum, 1, V_CANTITATE, 0) as CANTE, + (case + when (rownum = 2 and pack_facturare.ntip = 41) or + (rownum = 1 and pack_facturare.ntip <> 41) then + V_CANTITATE + else + 0 + end) as CANTE, + decode(rownum, + 1, + detalii_articol.cont, + pack_facturare.v_date_gestiune.cont) as CONT, + decode(rownum, + 1, + REPLACE(V_ACONT, 'X'), + REPLACE(pack_facturare.v_date_gestiune.acont, 'X')) as ACONT, + (case + when rownum = 1 and V_TIP_GESTIUNE IN (6, 7) then + V_PRETV + when rownum = 2 and + pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then + V_PRETV - V_DISCOUNT_UNITAR + else + 0 + end) as PRETV, + (case + when rownum = 1 and V_TIP_GESTIUNE IN (6, 7) then + V_TVAV + when rownum = 2 and + pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then + V_TVAV - V_DISCOUNT_TVA + else + 0 + end) as TVAV, + (case + when rownum = 1 and V_TIP_GESTIUNE in (6, 7) then + V_PRETVTVA + when rownum = 2 and + pack_facturare.v_date_gestiune.id_tip_gest in (6, 7) then + V_PRETVTVA - V_DISCOUNT_CU_TVA + else + 0 + end) as PRETVTVA, + detalii_articol.proc_tvav as PROC_TVAV, + V_PROC_TVA as PROC_TVA, + V_PRET as PRET, + V_TVA AS TVA, + V_ADAOS as ADAOS, + V_PROCENT as PROCENT, + pack_facturare.ddata_act as DATAACT, + pack_facturare.nnumar_bon as NNIR, + decode(rownum, 1, V_DATAIN, pack_facturare.ddata_act) as datain, + decode(rownum, 1, pack_facturare.ddata_act, NULL) as dataout, + tab_stoc(i).pretd as PRETD, + tab_stoc(i).id_valuta as ID_VALUTA, + pack_facturare.nid_set as ID_SET, + 1 as ID_TIP_RULAJ, + tab_stoc(i).lot, + tab_stoc(i).adata_expirare, + tab_stoc(i).id_rul_aux, + tab_stoc(i).ID_LUCRARE_REZ, + (case + when rownum = 2 and pack_facturare.ntip in (23, 25) and + pack_facturare.v_date_gestiune.cont = '357' then + pack_facturare.nid_part_rez + else + tab_stoc(i).ID_PART_REZ + end) + FROM dual + CONNECT BY level <= 2; + + IF pack_facturare.ntip = 27 THEN + MERGE INTO VANZARI_DETALII_TEMP A + USING DUAL B + ON (A.ID_ARTICOL = detalii_articol.id_articol AND A.ID_POL = detalii_articol.id_pol AND A.PRET = detalii_articol.pret AND A.PRET_CU_TVA = detalii_articol.pret_cu_tva AND A.PROC_TVAV = detalii_articol.proc_tvav AND A.DISCOUNT_UNITAR = detalii_articol.discount_unitar AND A.ID_GESTIUNE = detalii_articol.id_gestiune AND NVL(A.CONT, 'XXXX') = NVL(detalii_articol.cont, 'XXX') AND NVL(A.ID_VALUTA, -1) = NVL(detalii_articol.id_valuta, -1) AND NVL(A.MULTIPLICATOR, 1) = NVL(detalii_articol.multiplicator, 1) AND NVL(A.CURS, 1) = NVL(detalii_articol.curs, 1) AND A.ID_JTVA_COLOANA = detalii_articol.id_jtva_coloana AND A.IN_STOC = detalii_articol.in_stoc AND NVL(A.ID_GESTIUNE_DEST, -99) = NVL(detalii_articol.id_gestiune_dest, -99) AND NVL(A.ID_UTIL, 0) = NVL(detalii_articol.id_util, 0) AND A.PRET_ACHIZITIE = V_PRET AND NVL(A.ID_VANZARE_SET, -99) = NVL(detalii_articol.id_vanzare_set, -99) AND NVL(A.PRETD, 0) = NVL(tab_stoc(i).pretd, 0) AND NVL(A.ID_VALUTAD, -99) = NVL(tab_stoc(i).id_valuta, -99)) + WHEN MATCHED THEN + UPDATE SET CANTITATE = CANTITATE + V_CANTITATE + WHEN NOT MATCHED THEN + INSERT + (ID_ARTICOL, + ID_POL, + PRET, + PRET_CU_TVA, + PROC_TVAV, + CANTITATE, + DISCOUNT_UNITAR, + ID_GESTIUNE, + CONT, + ID_VALUTA, + CURS, + MULTIPLICATOR, + ID_JTVA_COLOANA, + IN_STOC, + ID_GESTIUNE_DEST, + ID_COMANDA, + ID_UTIL, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + ID_VANZARE_SET, + ID_LUCRARE_REZ, + ID_PART_REZ, + NUMAR_ACT, + ID_TEMP) + VALUES + (detalii_articol.id_articol, + detalii_articol.id_pol, + detalii_articol.pret, + detalii_articol.pret_cu_tva, + detalii_articol.proc_tvav, + V_CANTITATE, + detalii_articol.discount_unitar, + detalii_articol.id_gestiune, + detalii_articol.cont, + detalii_articol.id_valuta, + detalii_articol.curs, + detalii_articol.multiplicator, + detalii_articol.id_jtva_coloana, + detalii_articol.in_stoc, + detalii_articol.id_gestiune_dest, + detalii_articol.id_comanda, + detalii_articol.id_util, + V_PRET, + tab_stoc (i).pretd, + tab_stoc (i).id_valuta, + detalii_articol.id_vanzare_set, + detalii_articol.id_lucrare_rez, + detalii_articol.id_part_rez, + pack_facturare.nnumar_act, + detalii_articol.id_temp); + + END IF; + END LOOP; + END transfera_articol; + ------------------------------------------------------------------- + FUNCTION scrie_nota(V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_SCD IN VARCHAR2, + V_ASCD IN VARCHAR2, + V_SCC IN VARCHAR2, + V_ASCC IN VARCHAR2, + V_ID_GESTIN IN NUMBER, + V_ID_GESTOUT IN NUMBER, + V_ID_SET IN NUMBER, + V_CU_TVA IN NUMBER, -- 0 DACA SE SCRIE SI NOTA DE TVA + V_PTVA IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL, + V_PAYMENTCODE IN NUMBER DEFAULT NULL) RETURN NUMBER IS + V_INCASAT_CALCUL ACT_TEMP.SUMA%TYPE := 0; + V_SUMA ACT_TEMP.SUMA%TYPE; + V_SUMA_FARA_TVA ACT_TEMP.SUMA%TYPE; + V_SUMA_TVA ACT_TEMP.SUMA%TYPE; + V_SUMA_CU_TVA ACT_TEMP.SUMA%TYPE := 0; + V_SUMA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_SUMA_FARA_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_SUMA_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_SUMA_CU_TVA_VAL ACT_TEMP.SUMA_VAL%TYPE := 0; + V_PROCENT_TVA ACT_TEMP.PROC_TVA%TYPE; + V_ID_FACT ACT_TEMP.ID_FACT%TYPE := -1; + V_ZECIMALE_PRET NUMBER(2); + V_ZECIMALE_SUMA NUMBER(2); + V_SEMN NUMBER(1) := 1; -- V_SEMN = -1 DACA AM 667 = 4111 (INTRU CU SUMA NEGATIVA SI O PUN POZITIVA, O LAS NEGATIVA LA SCRIE_TVA) + + BEGIN + V_PROCENT_TVA := (V_PTVA + 100) / 100; + + IF NVL(V_ID_GESTIN, 0) <> 0 OR NVL(V_ID_GESTOUT, 0) <> 0 THEN + V_ZECIMALE_PRET := pack_sesiune.nzecimale_preta; + V_ZECIMALE_SUMA := pack_sesiune.nzecimale_sumaa; + ELSE + V_ZECIMALE_PRET := pack_sesiune.nzecimale_pretv; + V_ZECIMALE_SUMA := pack_sesiune.nzecimale_sumav; + END IF; + + pack_facturare.calculeaza_sume(V_PRET, + V_DISCOUNT_UNITAR, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA, + V_CANTITATE, + V_CURS, + V_ID_VALUTA, + V_PROCENT_TVA, + V_PRET_ARE_TVA, + V_SUMA_FARA_TVA, + V_SUMA_TVA, + V_SUMA_CU_TVA); + + IF V_IN_VALUTA = 1 THEN + pack_facturare.calculeaza_sume(V_PRET, + V_DISCOUNT_UNITAR, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval, + V_CANTITATE, + 1, + V_ID_VALUTA, + V_PROCENT_TVA, + V_PRET_ARE_TVA, + V_SUMA_FARA_TVA_VAL, + V_SUMA_TVA_VAL, + V_SUMA_CU_TVA_VAL); + END IF; + + IF V_SCD in ('667', '267', '2678', '709') AND + ((pack_facturare.ntip <= 20 AND pack_facturare.ntip <> 7) or + pack_facturare.ntip in + (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata)) THEN + -- FACTURA DISCOUNT ( in afara de credit note ) + V_SEMN := -1; + END IF; + + IF V_SCD NOT IN ('5311', '5314', '5125', '5121', '5124', '5126') THEN + IF V_CU_TVA = 0 THEN + V_INCASAT_CALCUL := V_INCASAT_CALCUL + V_SUMA_FARA_TVA; + ELSE + V_INCASAT_CALCUL := V_INCASAT_CALCUL + V_SUMA_CU_TVA; + END IF; + END IF; + + IF pack_facturare.ntip = 4 AND pack_facturare.nfactavizcust = 0 THEN + V_SUMA := V_SUMA_CU_TVA; + V_SUMA_VAL := V_SUMA_CU_TVA_VAL; + ELSE + V_SUMA := V_SUMA_FARA_TVA; + V_SUMA_VAL := V_SUMA_FARA_TVA_VAL; + END IF; + + /* IF V_SUMA IS NULL THEN + RAISE_APPLICATION_ERROR(-20000, + V_CANTITATE || ' ; ' || V_PRET || ' ; ' || + V_DISCOUNT_UNITAR || ' ; ' || V_PRET_ARE_TVA || + ' ; ' || V_ID_VALUTA || ' ; ' || V_IN_VALUTA || + ' ; ' || V_CURS || ' ; ' || V_ID_VENCHELT || + ' ; ' || V_ID_SECTIE || ' ; ' || V_EXPLICATIE || + ' ; ' || V_SCD || ' ; ' || V_ASCD || ' ; ' || + V_SCC || ' ; ' || V_ASCC || ' ; ' || + V_ID_GESTIN || ' ; ' || V_ID_GESTOUT || ' ; ' || + V_ID_SET || ' ; ' || V_CU_TVA || ' ; ' || + V_PTVA || ' ; ' || V_ID_JTVA_COLOANA); + END IF;*/ + + -- cursul il completez in cumuleaza_note_act + pack_facturare.nid_act := pack_facturare.nid_act + 1; + + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + DATASCAD, + ID_VALUTA, + ID_VENCHELT, + ID_LUCRARE, + ID_SECTIE, + ID_SET, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + PROC_TVA, + ID_FDOC, + ID_PARTD, + ID_GESTIN, + ID_GESTOUT, + NNIR, + ID_CTR, + ID_FACT, + PERECHEC, + ID_FACTC, + ID_PARTC, + ID_JTVA_COLOANA, + EXPLICATIA4, + ID_RESPONSABIL, + TAXCODE, + PAYMENTCODE) + VALUES + (pack_facturare.nid_act, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + pack_facturare.ddata_ireg, + pack_facturare.ddata_act, + pack_facturare.ddata_scadenta, + DECODE(V_IN_VALUTA, + 1, + V_ID_VALUTA, + pack_facturare.nid_moneda_nationala), + V_ID_VENCHELT, + NVL(pack_Facturare.nid_lucrare, 0), + NVL(V_ID_SECTIE, 0), + V_ID_SET, + V_EXPLICATIE, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + V_SEMN * V_SUMA, + DECODE(V_IN_VALUTA, 1, V_SEMN * V_SUMA_VAL, 0), + DECODE(V_IN_VALUTA, 1, V_CURS, 0), + V_PROCENT_TVA, + pack_facturare.nid_fdoc, + (CASE WHEN + V_SCD LIKE '41%' OR V_SCD LIKE '46%' OR V_SCD LIKE '45%' OR + (V_SCD = '357' AND pack_facturare.ntip in (42, 47)) OR + (pack_facturare.ntip = 24 and pack_facturare.nfactavizcust = 1) THEN + pack_facturare.nid_part WHEN V_SCD = '357' THEN + pack_facturare.nid_part_rez ELSE 0 END), + V_ID_GESTIN, + V_ID_GESTOUT, + pack_facturare.nnumar_bon, + V_ID_CTR, + V_ID_FACT, + pack_facturare.nperechec, + pack_facturare.nid_factc, + DECODE(V_SCC, + '419', + pack_facturare.nid_part, + '4111', + pack_facturare.nid_part, + '357', + pack_facturare.nid_part, + pack_facturare.nid_partc), + V_ID_JTVA_COLOANA, + pack_facturare.cexplicatia4, + NVL(pack_facturare.nid_responsabil, 0), + V_TAXCODE, + V_PAYMENTCODE); + + IF V_CU_TVA = 1 THEN + IF pack_facturare.nproc_tva_max < V_PTVA THEN + pack_facturare.nproc_tva_max := V_PTVA; + pack_facturare.nid_jtva_coloana := V_ID_JTVA_COLOANA; + pack_facturare.nTaxCode := V_TAXCODE; + END IF; + + pack_facturare.scrie_tva(V_SUMA_TVA, + V_SUMA_TVA_VAL, + V_ID_VALUTA, + V_IN_VALUTA, + V_SCD, + V_ASCD, + V_CURS, + V_ID_VENCHELT, + V_ID_SECTIE, + V_ID_CTR, + V_EXPLICATIE, + V_PROCENT_TVA, + V_ID_FACT, + V_ID_JTVA_COLOANA); + END IF; + + RETURN V_INCASAT_CALCUL; + END scrie_nota; + ------------------------------------------------------------------- + PROCEDURE scrie_tva(V_SUMA IN NUMBER, + V_SUMA_VAL IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_CONT IN VARCHAR2, + V_ACONT IN VARCHAR2, + V_CURS IN NUMBER, + V_ID_VENCHELT IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_PTVA IN NUMBER, + V_ID_FACT IN NUMBER, + V_ID_JTVA_COLOANA IN NUMBER) IS + V_EXPLICATIA ACT_TEMP.EXPLICATIA%TYPE; + V_SCD ACT_TEMP.SCD%TYPE; + V_ASCD ACT_TEMP.ASCD%TYPE; + V_SCC ACT_TEMP.SCC%TYPE; + V_ID_PARTD ACT_TEMP.ID_PARTD%TYPE; + V_ID_TVA ACT_TEMP.ID_JTVA_COLOANA%TYPE; + lnAn ACT_TEMP.AN%TYPE; + lnLuna ACT_TEMP.LUNA%TYPE; + lnTaxCode ACT_TEMP.TAXCODE%TYPE; + BEGIN + CASE + -- 30.10.2009 + -- 26.08.2009 + -- WHEN V_CONT = '667' AND pack_facturare.ntip <= 20 THEN + WHEN V_CONT in ('667', '267', '2678', '709') AND + (pack_facturare.ntip <= 20 or + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48, + 49,51,52)) THEN + -- 26.08.2009 ^ + -- 30.10.2009 ^ + -- FACTURA DISCOUNT + V_SCD := '4111'; + V_ASCD := NULL; + V_SCC := '4427'; + V_ID_PARTD := pack_facturare.nid_part; + WHEN pack_facturare.ntip = 4 AND pack_facturare.nfactavizcust = 0 THEN + -- factura din aviz + V_SCD := '4428'; + V_ASCD := NULL; + V_SCC := '4427'; + V_ID_PARTD := 0; + + -- 30.10.2009 + -- 26.08.2009 + -- WHEN pack_facturare.ntip <= 20 OR pack_facturare.ntip in (28, 29) THEN + WHEN pack_facturare.ntip <= 20 OR + pack_facturare.ntip in (28, + 29, + pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48, + 49,51,52) THEN + -- 26.08.2009 ^ + -- 30.10.2009 ^ + -- factura + V_SCD := V_CONT; + V_ASCD := V_ACONT; + V_SCC := '4427'; + V_ID_PARTD := pack_facturare.nid_part; + ELSE + -- aviz + V_SCD := '418'; + V_ASCD := V_ACONT; + V_SCC := '4428'; + V_ID_PARTD := pack_facturare.nid_part; + END CASE; + + BEGIN + SELECT ID_TVA + INTO V_ID_TVA + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA = V_ID_JTVA_COLOANA; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_TVA := NULL; + END; + lnAn := pack_sesiune.getan(); + lnLuna := pack_sesiune.getluna(); + lnTaxCode := PACK_SAFT.GetTaxCode(lnAn, + lnLuna, + pack_facturare.ddata_act, + V_ID_TVA); + + -- V_EXPLICATIA := 'TVA ' || V_EXPLICATIE; + pack_facturare.nid_act := pack_facturare.nid_act + 1; + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + DATASCAD, + ID_VALUTA, + ID_VENCHELT, + ID_LUCRARE, + ID_SECTIE, + ID_SET, + EXPLICATIA, + SCD, + ASCD, + SCC, + SUMA, + SUMA_VAL, + CURS, + PROC_TVA, + ID_CTR, + ID_FDOC, + ID_PARTD, + ID_FACT, + ID_JTVA_COLOANA, + EXPLICATIA4, + ID_RESPONSABIL, + TAXCODE) + VALUES + (pack_facturare.nid_act, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + pack_facturare.ddata_ireg, + pack_facturare.ddata_act, + pack_facturare.ddata_scadenta, + DECODE(V_IN_VALUTA, + 1, + V_ID_VALUTA, + pack_facturare.nid_moneda_nationala), + V_ID_VENCHELT, + nvl(pack_facturare.nid_lucrare, 0), + V_ID_SECTIE, + pack_facturare.nid_set, + V_EXPLICATIA, + V_SCD, + V_ASCD, + V_SCC, + V_SUMA, + DECODE(V_IN_VALUTA, 1, V_SUMA_VAL, 0), + DECODE(V_IN_VALUTA, 1, V_CURS, 0), + V_PTVA, + V_ID_CTR, + pack_facturare.nid_fdoc, + V_ID_PARTD, + V_ID_FACT, + V_ID_TVA, + pack_facturare.cexplicatia4, + NVL(pack_facturare.nid_responsabil, 0), + lnTaxCode); + END; + ------------------------------------------------------------------- + PROCEDURE scrie_descarcare_k(V_COEFICIENT_K IN NUMBER) IS + V_ANALITICCUST ACT.ASCC%TYPE; + V_INCASAT ACT.SUMA%TYPE; + BEGIN + for grup in (SELECT SUM(pack_facturare.calculeaza_total_fara_tva(pret, + diferenta, + curs, + 0, + 0, + cantitate, + pret_cu_tva, + proc_tvav)) as totalfaratvafaradisc, + SUM(pack_facturare.calculeaza_total_fara_tva(pret, + diferenta, + curs, + discount_unitar, + pack_facturare.ndiscount_evidentiat, + cantitate, + pret_cu_tva, + proc_tvav)) as totalfaratva, + SUM(pack_facturare.calculeaza_total_tva(pret, + diferenta, + curs, + discount_unitar, + pack_facturare.ndiscount_evidentiat, + cantitate, + pret_cu_tva, + proc_tvav)) as totaltva, + proc_tvav + FROM VANZARI_DETALII_TEMP + GROUP BY PROC_TVAV) loop + + V_ANALITICCUST := pack_facturare.getAnaliticK(grup.proc_tvav); + + -- 371-357 + V_INCASAT := pack_facturare.scrie_nota(1, + grup.totalfaratva + + grup.totaltva, + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + 0, + 0, + NULL, + 'DESCARCARE CU K', + '371', + V_ANALITICCUST, + '357', + NULL, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + + IF pack_facturare.ntip = 48 THEN + pack_facturare.ncoeficient_k := V_COEFICIENT_K; + + -- 607-371 + V_INCASAT := pack_facturare.scrie_nota(1, + ROUND(grup.totalfaratvafaradisc * + pack_facturare.ncoeficient_k / 100, + pack_sesiune.nzecimale_sumav), + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + pack_facturare.nid_venchelt, + 0, + NULL, + 'DESCARCARE CU K', + '607', + NULL, + '371', + V_ANALITICCUST, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + -- 378-371 + V_INCASAT := pack_facturare.scrie_nota(1, + grup.totalfaratva - + ROUND(grup.totalfaratvafaradisc * + pack_facturare.ncoeficient_k / 100, + pack_sesiune.nzecimale_sumav), + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + 0, + 0, + NULL, + 'DESCARCARE CU K', + '378', + V_ANALITICCUST, + '371', + V_ANALITICCUST, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + + -- 4428-371 + V_INCASAT := pack_facturare.scrie_nota(1, + grup.totaltva, + 0, + 0, + pack_def.getidmonedanationala(), + 0, + 1, + 0, + 0, + NULL, + 'DESCARCARE CU K', + '4428', + V_ANALITICCUST, + '371', + V_ANALITICCUST, + 0, + 0, + pack_facturare.nid_set, + 0, + 0, + NULL); + END IF; + end loop; + END scrie_descarcare_k; + ------------------------------------------------------------------- + FUNCTION scrie_discount(V_CANTITATE IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_IN_VALUTA IN NUMBER, + V_ASCC IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_CTR IN NUMBER, + V_CURS IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_CU_TVA IN NUMBER, -- daca se scrie si nota pentru TVA + V_ID_JTVA_COLOANA IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) + RETURN NUMBER IS + V_EXPLICATIA ACT.EXPLICATIA%TYPE; + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + V_SCC ACT.SCC%TYPE; + V_ID_PARTD ACT.ID_PARTD%TYPE := 0; + V_ID_FACT ACT.ID_FACT%TYPE := -1; + V_DATA_SCADENTA ACT.DATASCAD%TYPE; + V_ID_SET ACT.ID_SET%TYPE; + V_SUMA_DISCOUNT ACT.SUMA%TYPE; + V_SUMA_TVA_DISCOUNT ACT.SUMA%TYPE; + + V_DISCOUNT_TOTAL_FARA_TVA ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_TVA ACT.SUMA%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA ACT.SUMA%TYPE := 0; + + V_SUMA_DISCOUNT_VAL ACT.SUMA_VAL%TYPE; + V_SUMA_TVA_DISCOUNT_VAL ACT.SUMA_VAL%TYPE; + V_DISCOUNT_TOTAL_FARA_TVA_VAL ACT.SUMA_VAL%TYPE := 0; + V_DISCOUNT_TOTAL_TVA_VAL ACT.SUMA_VAL%TYPE := 0; + V_DISCOUNT_TOTAL_CU_TVA_VAL ACT.SUMA_VAL%TYPE := 0; + + BEGIN + V_EXPLICATIA := 'DISCOUNT'; + + V_ID_SET := pack_facturare.nid_set; + V_DATA_SCADENTA := pack_facturare.ddata_scadenta; + + pack_facturare.ddata_scadenta := NULL; + pack_facturare.nid_set := pack_facturare.nid_set + 5; + + pack_facturare.calculeaza_sume(V_DISCOUNT_UNITAR, + 0, + pack_sesiune.nzecimale_pretv, + pack_sesiune.nzecimale_sumav, + V_CANTITATE, + V_CURS, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_CU_TVA, + V_DISCOUNT_TOTAL_FARA_TVA, + V_DISCOUNT_TOTAL_TVA, + V_DISCOUNT_TOTAL_CU_TVA); + + IF V_IN_VALUTA = 1 THEN + pack_facturare.calculeaza_sume(V_DISCOUNT_UNITAR, + 0, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval, + V_CANTITATE, + 1, + V_ID_VALUTA, + V_PROC_TVAV, + V_PRET_CU_TVA, + V_DISCOUNT_TOTAL_FARA_TVA_VAL, + V_DISCOUNT_TOTAL_TVA_VAL, + V_DISCOUNT_TOTAL_CU_TVA_VAL); + END IF; + + CASE + WHEN pack_facturare.ntip = 4 THEN + -- facturare din aviz + V_SCD := '4111'; + V_ASCD := V_ASCC; + V_SCC := '418'; + V_SUMA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_CU_TVA; + V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA; + + V_SUMA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_CU_TVA_VAL; + V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL; + V_ID_PARTD := pack_facturare.nid_part; + WHEN pack_facturare.ntip <= 20 OR + pack_facturare.nTip in + (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + pack_facturare.nTipNotaPlata, + pack_facturare.nTipVanzareRetail, + 48,49,51,52) THEN + -- factura + V_SCD := '667'; + V_ASCD := NULL; + V_SCC := '4111'; + V_SUMA_DISCOUNT := V_DISCOUNT_TOTAL_FARA_TVA; + V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA; + + V_SUMA_DISCOUNT_VAL := V_DISCOUNT_TOTAL_FARA_TVA_VAL; + V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL; + ELSE + -- aviz + V_SCD := '667'; + V_ASCD := NULL; + V_SCC := '418'; + V_SUMA_DISCOUNT := V_DISCOUNT_TOTAL_FARA_TVA; + V_SUMA_TVA_DISCOUNT := (-1) * V_DISCOUNT_TOTAL_TVA; + + V_SUMA_DISCOUNT_VAL := V_DISCOUNT_TOTAL_FARA_TVA_VAL; + V_SUMA_TVA_DISCOUNT_VAL := (-1) * V_DISCOUNT_TOTAL_TVA_VAL; + END CASE; + + pack_facturare.nid_act := pack_facturare.nid_act + 1; + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + DATASCAD, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + ID_SECTIE, + ID_LUCRARE, + ID_CTR, + ID_SET, + ID_FDOC, + ID_PARTD, + ID_PARTC, + ID_FACT, + ID_VALUTA, + PROC_TVA, + PERECHEC, + ID_FACTC, + ID_JTVA_COLOANA, + EXPLICATIA4, + ID_RESPONSABIL, + TAXCODE) + VALUES + (pack_facturare.nid_act, + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + pack_facturare.ddata_ireg, + pack_facturare.ddata_act, + pack_facturare.ddata_scadenta, + V_EXPLICATIA, + V_SCD, + V_ASCD, + V_SCC, + V_ASCC, + V_SUMA_DISCOUNT, + DECODE(V_IN_VALUTA, 1, V_SUMA_DISCOUNT_VAL, 0), + DECODE(V_IN_VALUTA, 1, V_CURS, 0), + NVL(V_ID_SECTIE, 0), + NVL(pack_facturare.nid_lucrare, 0), + V_ID_CTR, + pack_facturare.nid_set, + pack_facturare.nid_fdoc, + V_ID_PARTD, + pack_facturare.nid_part, + V_ID_FACT, + DECODE(V_IN_VALUTA, + 1, + V_ID_VALUTA, + pack_facturare.nid_moneda_nationala), + V_PROC_TVAV, + pack_facturare.nperechec, + pack_facturare.nid_factc, + V_ID_JTVA_COLOANA, + pack_facturare.cexplicatia4, + NVL(pack_facturare.nid_responsabil, 0), + V_TAXCODE); + + IF V_CU_TVA = 1 THEN + pack_facturare.scrie_tva(V_SUMA_TVA_DISCOUNT, + V_SUMA_TVA_DISCOUNT_VAL, + V_ID_VALUTA, + V_IN_VALUTA, + V_SCC, + V_ASCC, + V_CURS, -- V_CURS, + 0, -- V_ID_VENCHELT, + V_ID_SECTIE, + V_ID_CTR, + V_EXPLICATIA, + V_PROC_TVAV, + V_ID_FACT, + V_ID_JTVA_COLOANA); + END IF; + pack_facturare.nid_set := V_ID_SET; + pack_facturare.ddata_scadenta := V_DATA_SCADENTA; + RETURN V_DISCOUNT_TOTAL_CU_TVA; + END; + ------------------------------------------------------------------- + PROCEDURE scrie_avans(V_SUMA IN NUMBER) IS + /* V_EXPLICATIA ACT.EXPLICATIA%TYPE; + V_SCD ACT.SCD%TYPE := '4111'; + V_SCC ACT.SCC%TYPE := '419'; + V_SUMA_AVANS ACT.SUMA%TYPE := 0;*/ + BEGIN + DBMS_OUTPUT.PUT_LINE('Explicatie TVA pentru stornare avans!'); + /* V_EXPLICATIA := 'STORNARE AVANS'; + IF V_SUMA <> 0 THEN + V_SUMA_AVANS := pack_facturare.scrie_nota(1, + V_SUMA, + 1, -- PRET CU TVA + pack_facturare.v_id_moneda_nationala, -- ID_VALUTA, + 0, -- CURS, + 0, -- ID_VENCHELT + NULL, -- ID_SECTIE + V_EXPLICATIA, + V_SCD, + '', + V_SCC, + '', + 0, + 0, + V_ID_CONTRACT, + pack_facturare.v_id_set, + 1, + pack_facturare.v_proc_tva_max, + V_ID_JTVA_COLOANA); + END IF;*/ + END; + ------------------------------------------------------------------- + Procedure scrie_incasari(V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_LISTA_INCASARE IN VARCHAR2, + V_ID_CTR IN NUMBER) is + V_INCASAT ACT.SUMA%TYPE := 0; + V_TIP NUMBER(10); + V_ID_BANCASA ACT.ID_PARTD%TYPE; + V_ASCC ACT.ASCC%TYPE; + V_SCD ACT.SCD%TYPE; + V_ASCD ACT.ASCD%TYPE; + begin + pack_facturare.cserie_act_incasare := V_SERIE_ACT_INCASARE; + pack_facturare.nnumar_act_incasare := V_NUMAR_ACT_INCASARE; + pack_facturare.ntip_doc_incasare := pack_facturare.nTipIncasareChitanta; + pack_facturare.nsuma_incasare := 0; + -- daca se incaseaza factura in valuta : trebuie sa trimit si cursul, suma in valuta, id_valuta + -- V_LISTA_INCASARE : tip|valoare|id_bancasa|ascc|scd|ascd + -- daca ascc, scd, ascd sunt nule primesc 'xxxx' pentru ca getwordnume nu considera cuvant valoarea NULL si sare peste ea, decaland restul valorilor + + FOR R_INCASARE IN (SELECT X as LINIE_INCASARE + FROM table(charc2collection(V_LISTA_INCASARE, ';'))) LOOP + V_TIP := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE, + 1, + '|')); + V_INCASAT := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE, + 2, + '|')); + V_ID_BANCASA := TO_NUMBER(getwordnum(R_INCASARE.LINIE_INCASARE, + 3, + '|')); + + V_ASCC := getwordnum(R_INCASARE.LINIE_INCASARE, 4, '|'); + -- 11.08.2010 + V_SCD := getwordnum(R_INCASARE.LINIE_INCASARE, 5, '|'); + V_ASCD := getwordnum(R_INCASARE.LINIE_INCASARE, 6, '|'); + IF lower(V_ASCC) = 'xxxx' THEN + V_ASCC := NULL; + END IF; + IF lower(V_SCD) = 'xxxx' THEN + V_SCD := NULL; + END IF; + IF lower(V_ASCD) = 'xxxx' THEN + V_ASCD := NULL; + END IF; + + pack_facturare.nsuma_incasare := pack_facturare.nsuma_incasare + + V_INCASAT; + + IF V_INCASAT <> 0 THEN + pack_facturare.ntip_doc_incasare := V_TIP; + if V_TIP not in (pack_facturare.nTipIncasareChitanta, + pack_facturare.nTipIncasareCardBancar, + pack_facturare.nTipIncasareBonFiscal) then + pack_facturare.ntip_doc_incasare := pack_facturare.nTipIncasareBonFiscal; + end if; + + pack_facturare.scrie_incasare2(V_TIP, + V_SERIE_ACT_INCASARE, + V_NUMAR_ACT_INCASARE, + V_ID_CTR, + V_ID_BANCASA, + V_INCASAT, + V_ASCC, + V_SCD, + V_ASCD); + END IF; + -- 11.08.2010 ^ + END LOOP; + + end scrie_incasari; + ------------------------------------------------------------------- + PROCEDURE scrie_incasare2(V_TIP IN NUMBER, + V_SERIE_ACT_INCASARE IN VARCHAR2, + V_NUMAR_ACT_INCASARE IN NUMBER, + V_ID_CTR IN NUMBER, + V_ID_BANCASA IN NUMBER, + V_SUMA IN NUMBER, + V_ASCC IN ACT.ASCC%TYPE DEFAULT NULL, + V_PSCD IN ACT.SCD%TYPE DEFAULT NULL, + V_ASCD IN ACT.ASCD%TYPE DEFAULT NULL) IS + V_EXPLICATIA VARCHAR2(100); + V_SCD VARCHAR2(4); + V_FDOC VARCHAR2(20); + V_PAYMENTCODE ACT_TEMP.PAYMENTCODE%TYPE; + lcMesaj varchar2(1000); + lnD406 number; + BEGIN + lnD406 := TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('D406'), '0')); + -- 11.08.2010 + V_PAYMENTCODE := case lnD406 + when 1 then + nSaftPaymentCodeNumerar + else + NULL + end; + V_SCD := V_PSCD; + CASE + WHEN V_TIP = nTipIncasareBonFiscal THEN + V_EXPLICATIA := 'INCASARE NUMERAR'; + V_FDOC := 'ID_FDOC_BONFISCAL'; + + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_BONFISCAL'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5311'; + END IF; + + WHEN V_TIP = nTipIncasareCardBancar THEN + V_EXPLICATIA := 'INCASARE CARD BANCAR'; + V_FDOC := 'ID_FDOC_CARD'; + + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_CARDBANCAR'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5125'; + END IF; + V_PAYMENTCODE := case lnD406 + when 1 then + nSaftPaymentCodeCard + else + NULL + end; + + WHEN V_TIP = nTipIncasareTichete THEN + V_EXPLICATIA := 'INCASARE TICHETE'; + V_FDOC := 'ID_FDOC_BONFISCAL'; + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_TICHETE'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5323'; + END IF; + + WHEN V_TIP = nTipIncasareChitanta THEN + V_EXPLICATIA := 'INCASARE NUMERAR'; + V_FDOC := 'ID_FDOC_CHITANTA'; + IF V_SCD IS NULL THEN + V_SCD := PACK_SESIUNE.getoptiunefirma('RF_CONT_INCASARE_CHITANTA'); + END IF; + IF V_SCD IS NULL THEN + V_SCD := '5311'; + END IF; + END CASE; + -- 11.08.2010 ^ + + -- select pack_sesiune.getoptiunefirma(user, 'ID_FDOC_BONFISCAL') into lcMesaj from dual; + /* pinfo('V_FDOC: ' || V_FDOC || ' VALOARE: ' || V_SUMA,'SCRIE_INCASARE2');*/ + + pack_facturare.nid_act := pack_facturare.nid_act + 1; + INSERT INTO ACT_TEMP + (ID_ACT, + SERIE_ACT, + NRACT, + DATAIREG, + DATAACT, + EXPLICATIA, + PERECHEC, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + ID_CTR, + ID_LUCRARE, + ID_FDOC, + ID_PARTC, + ID_PARTD, + ID_SECTIE, + ID_VENCHELT, + ID_RESPONSABIL, + PAYMENTCODE) + SELECT pack_facturare.nid_act as ID_ACT, + V_SERIE_ACT_INCASARE as serie_act, + V_NUMAR_ACT_INCASARE as nract, + pack_facturare.ddata_ireg as dataireg, + pack_facturare.ddata_act as dataact, + V_EXPLICATIA as explicatia, + pack_facturare.nnumar_act as perechec, + V_SCD as scd, + V_ASCD as ascd, -- 11.08.2010 + SCD as scc, + CASE + WHEN V_ASCC IS NULL THEN + max(ASCD) + ELSE + V_ASCC + END as ascc, -- 03.09.2009 -- 18.05.2010 + V_SUMA as suma, + V_ID_CTR, + NVL(pack_facturare.nid_lucrare, 0) as id_lucrare, + TO_NUMBER(pack_sesiune.getoptiunefirma(user, V_FDOC)) as id_fdoc, + pack_facturare.nid_part as id_partc, + V_ID_BANCASA as id_partd, + MAX(ID_SECTIE) as id_sectie, + MAX(ID_VENCHELT) as id_venchelt, + NVL(pack_facturare.nid_responsabil, 0), + V_PAYMENTCODE + FROM ACT_TEMP + WHERE SCD = '4111' + GROUP BY SCD; + + /* IF pack_facturare.ntva_incasare = 1 THEN + INSERT INTO ACT_TEMP(ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + ID_VALUTA, + ID_VENCHELT, + ID_LUCRARE, + ID_SECTIE, + ID_SET, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + PROC_TVA, + ID_FDOC, + NNIR, + ID_CTR, + PERECHEC, + ID_FACT, + ID_JTVA_COLOANA, + EXPLICATIA4) + SELECT pack_facturare.nid_act as ID_ACT, + V_NUMAR_ACT_INCASARE as nract, + V_SERIE_ACT_INCASARE as serie_act, + pack_facturare.ddata_ireg as dataireg, + pack_facturare.ddata_act as dataact, + ID_VALUTA, -- ?? + ID_VENCHELT, -- ?? + NVL(pack_facturare.nid_lucrare, 0) as ID_LUCRARE, + ID_SECTIE, -- ?? + ID_SET, -- ?? + V_EXPLICATIA as explicatia, + SCD, -- ?? + ASCD, -- ?? + SCC, -- ?? + ASCC, -- ?? + SUMA, -- ?? + SUMA_VAL, -- ?? + CURS, -- ?? + PROC_TVA, -- ?? + TO_NUMBER(pack_sesiune.getoptiunefirma(user, V_FDOC)) as ID_FDOC, + NNIR, -- ?? + V_ID_CTR as ID_CTR, + pack_facturare.nnumar_act as perechec, + -5 AS ID_FACT, + ID_JTVA_COLOANA, + EXPLICATIA4 + END IF;*/ + END scrie_incasare2; + ------------------------------------------------------------------- + PROCEDURE scrie_note_banca_compensari IS + V_ID_BANCA NOM_PARTENERI.ID_PART%TYPE := 0; + V_NUME_BANCA NOM_PARTENERI.DENUMIRE%TYPE := NULL; + V_ID_FDOC_COMP NOM_FDOC.ID_FDOC%TYPE := 0; + V_NUME_FDOC NOM_FDOC.FEL_DOCUMENT%TYPE := NULL; + BEGIN + pack_facturare.citeste_setari_document(0, V_ID_FDOC_COMP, V_NUME_FDOC); + pack_facturare.citeste_setari_partener(0, V_ID_BANCA, V_NUME_BANCA); + + -- compensare aviz retur + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + ID_VALUTA, + ID_SET, + EXPLICATIA, + SCD, + SCC, + SUMA, + PROC_TVA, + ID_JTVA_COLOANA, + ID_FDOC, + ID_PARTD, + PERECHEC, + ID_PARTC) + SELECT 9998 as ID_ACT, + pack_facturare.nnumar_act AS NRACT, + pack_facturare.cserie_act, + DATAIREG, + DATAACT, + ID_VALUTA, + MIN(ID_SET) AS ID_SET, + 'COMPENSARE AVIZ ' || pack_facturare.nnumar_act AS EXPLICATIA, + '5121' AS SCD, + '418' AS SCC, + SUM(CASE + WHEN SCD in ('667', '267', '2678', '709') THEN + (-1) * SUMA + ELSE + SUMA + END) AS SUMA, + PROC_TVA, + MAX(CASE + WHEN SCC = '4428' THEN + 0 + ELSE + ID_JTVA_COLOANA + END) AS ID_JTVA_COLOANA, + V_ID_FDOC_COMP AS ID_FDOC, + V_ID_BANCA AS ID_PARTD, + pack_facturare.nnumar_act AS PERECHEC, + pack_facturare.nid_part ID_PARTC + FROM ACT_TEMP + WHERE SCD = '418' + OR (SCD in ('667', '267', '2678', '709') AND SCC = '418') + GROUP BY DATAIREG, DATAACT, ID_VALUTA, PROC_TVA; + + -- compensari avize - aici + INSERT INTO ACT_TEMP + (ID_ACT, + NRACT, + SERIE_ACT, + DATAIREG, + DATAACT, + ID_VALUTA, + ID_VENCHELT, + ID_SET, + EXPLICATIA, + SCD, + SCC, + SUMA, + PROC_TVA, + ID_JTVA_COLOANA, + ID_FDOC, + ID_PARTD, + PERECHEC, + ID_FACTC, + ID_PARTC) + SELECT 9999 as ID_ACT, + pack_facturare.nnumar_act AS NRACT, + pack_facturare.cserie_act, + to_date(to_char(pack_facturare.ddata_ireg, 'YYYYMMDD'), + 'YYYYMMDD') AS DATAIREG, + to_date(to_char(pack_facturare.ddata_act, 'YYYYMMDD'), + 'YYYYMMDD') AS DATAACT, + ID_VALUTA, + ID_VENCHELT, + pack_Facturare.nid_set AS ID_SET, + 'COMPENSARE AVIZ ' || NRACT AS EXPLICATIA, + '5121' AS SCD, + '418' AS SCC, + debit + precdeb - credit - preccred AS SUMA, + PROC_TVA, + ID_JTVA_COLOANA, + V_ID_FDOC_COMP AS ID_FDOC, + V_ID_BANCA AS ID_PARTD, + NRACT AS PERECHEC, + ID_FACT AS ID_FACTC, + ID_PART AS ID_PARTC + FROM IREG_PARTENERI + WHERE CONT = '418' + AND COD IN + (SELECT COD + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X AS ID_VANZARE + FROM table(cast(CHARN2COLLECTION(pack_facturare.clistaid, + ',') AS num_tab)))) + AND AN = pack_facturare.nan + AND LUNA = pack_facturare.nluna + AND debit + precdeb - credit - preccred > 0; + + END scrie_note_banca_compensari; + + ------------------------------------------------------------------- + /* PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_ID_VANZARE); + end;*/ + ------------------------------------------------------------------- + PROCEDURE scrie_in_vanzari(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_ID_VANZARE OUT NUMBER) IS + + V_DATAORA DATE := SYSDATE; + V_FACTURAT VANZARI.FACTURAT%TYPE := 0; + lnDiscountTVA VANZARI.DISCOUNT_TVA%TYPE; + lnValoareAchizitie VANZARI.VALOARE_ACHIZITIE%TYPE; + lnSerieIncasat ACT.SERIE_ACT%TYPE; + lnNrIncasat ACT.NRACT%TYPE; + lnSumaIncasat ACT.SUMA%TYPE; + lnTipIncasat NUMBER(2); + lnTotalFaraTVA VANZARI.TOTAL_FARA_TVA%TYPE; + lnTotalTVA VANZARI.TOTAL_TVA%TYPE; + lnTotalCuTVA VANZARI.TOTAL_CU_TVA%TYPE; + lnIdGestiune VANZARI.ID_GESTIUNE%TYPE; + lnIdValuta VANZARI.Id_Valuta%TYPE; + lnCurs VANZARI.CURS%TYPE; + lnMultiplicator VANZARI.MULTIPLICATOR%TYPE; + lnIdCtr VANZARI.ID_CTR%TYPE; + lnValVal VANZARI.VALVAL%TYPE; + lnTVAVal VANZARI.TVAVAL%TYPE; + lnTotVal VANZARI.TOTVAL%TYPE; + lnPrecizieCalcul NUMBER(2) := pack_sesiune.getOptiuneFirma('PC'); + lnPreciziePretV NUMBER(2) := pack_sesiune.getOptiuneFirma('PPRETV'); + + BEGIN + -- 1 - 20 facturi, 51 factura ACN + -- 21 - 42, 47 avize + -- -6 retur transfer din gestiune valorica (ROAGEST) + -- -7 retur aviz ( valoric ) ( ROAGEST ) + -- -8 retur factura ( valorica ) ( ROAGEST ) + -- -13 retur marfa din custodie ( valoric ) ( ROAFACTURARE ) + IF pack_facturare.ntip between 1 and 20 OR + pack_facturare.ntip in (-8, + pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + -12, + 48, + 49, + 51, + 52) THEN + V_FACTURAT := 1; + ELSE + V_FACTURAT := 0; + END IF; + + IF pack_facturare.ntip in (2,6,52) THEN + SELECT NVL(MAX(AFISARE_SCADENTA), 1) + INTO pack_facturare.nafisare_scadenta + FROM VCONTRACTE + WHERE ID_CTR IN (SELECT DISTINCT ID_CTR FROM VANZARI_DETALII_TEMP); + ELSE + pack_facturare.nafisare_scadenta := 1; + END IF; + + -- 23,25,27,30 ROAFACTURARE aviz transfer catre subunitati + -- 41 = ROAFACTURARE retur transfer catre subunitati; + -- 6 = ROAGEST retur de la gestiune valorica + if pack_facturare.ntip in (23, 25, 27, 30, 41) then + lnIdGestiune := pack_facturare.v_date_gestiune.id_gestiune; + elsif pack_facturare.ntip = -6 then + lnIdGestiune := pack_facturare.nid_gestiune_sursa; + end if; + + if (lnIdGestiune is null and pack_facturare.ntip in (41, -6)) then + select min(id_gestiune) into lnIdGestiune from vanzari_detalii_temp; + end if; + + -- completez vanzari.id_ctr, ca sa nu mai caut in vanzari_detalii + SELECT MAX(ID_CTR) INTO lnIdCtr FROM VANZARI_DETALII_TEMP; + + -- nu stiu de ce nu se completa id_valuta, curs, multiplicator mai jos + -- il selectez direct din vanzari_detalii_temp, in loc de vanzari_cursuri + SELECT max(ID_VALUTA), max(CURS), max(MULTIPLICATOR) + INTO lnIdValuta, lnCurs, lnMultiplicator + FROM (SELECT DISTINCT ID_VALUTA, CURS, MULTIPLICATOR + FROM VANZARI_DETALII_TEMP + WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala) + WHERE ROWNUM = 1; + + INSERT INTO VANZARI + (id_util, + dataora, + id_part, + numar_act, + serie_act, + facturat, + data_facturat, + id_utilfact, + id_lucrare, + id_comanda, + tip, + id_gestiune, + cod, + id_delegat, + id_masina, + id_facturare, + listare_detaliata, + dataora_exp, + data_act, + discount, + discount_evidentiat, + id_agent, + text_aditional, + in_valuta, + id_sucursala, + id_sectie, + diftotftva, + diftottva, + afisare_scadenta, + coeficient_k, + id_ordl, + tva_incasare, + data_scad, + id_ctr, + tip_factura, + id_beneficiar, + tip_saft) + VALUES + (pack_facturare.nid_util, + V_DATAORA, + DECODE(pack_facturare.ntip, + 23, + NULL, + 25, + NULL, + 41, + NULL, + -6, + NULL, + pack_facturare.nid_part), + pack_facturare.nnumar_act, + pack_facturare.cserie_act, + V_FACTURAT, + (CASE WHEN + pack_facturare.ntip < 20 OR + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + -12, + 48, + 49,51,52) THEN V_DATAORA ELSE NULL END), + (CASE WHEN + pack_facturare.ntip < 20 OR + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + -12, + 48, + 49,51,52) THEN pack_facturare.nid_util ELSE NULL END), + pack_facturare.nid_lucrare, + pack_facturare.nid_comanda, + pack_facturare.ntip, + lnIdGestiune, + pack_contafin.get_cod(), + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + pack_facturare.ddata_act, + V_DISCOUNT_FACTURA, + pack_facturare.ndiscount_evidentiat, + V_ID_AGENT, + REPLACE(V_TEXT_ADITIONAL, CHR(170), CHR(13) || CHR(10)), + pack_facturare.nin_valuta, + pack_facturare.nid_sucursala, + pack_facturare.nid_sectie_stoc, + pack_facturare.ndifftva, + pack_facturare.ndiftva, + pack_facturare.nafisare_scadenta, + pack_facturare.ncoeficient_k, + pack_facturare.nid_ordl, + pack_facturare.ntva_incasare, + pack_facturare.ddata_scadenta, + lnIdCtr, + pack_facturare.ntip_factura, + pack_facturare.nid_beneficiar, + pack_facturare.ntip_saft) + RETURNING ID_VANZARE INTO V_ID_VANZARE; + + pack_facturare.scrie_cursuri(V_ID_VANZARE); + + pack_facturare.scrie_seturi; + + INSERT /*+ APPEND */ + INTO VANZARI_DETALII + (ID_VANZARE, + ID_ARTICOL, + LOT, + SERIE, + ID_RATA, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + ID_JTVA_COLOANA_EX, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + EXPLICATIE, + PRET_CU_TVA, + DIFERENTA, + CUSTODIE, + ID_VANZARE_SET, + ID_CTR, + TAXCODE) + SELECT V_ID_VANZARE as ID_VANZARE, + ID_ARTICOL, + LOT, + SERIE, + ID_RATA, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + ID_JTVA_COLOANA, + ID_JTVA_COLOANA_EX, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + EXPLICATIA, + PRET_CU_TVA, + DIFERENTA, + CUSTODIE, + DECODE(ID_VANZARE_SET, 0, NULL, ID_VANZARE_SET), + ID_CTR, + TAXCODE + FROM VANZARI_DETALII_TEMP; + + -- Completare totaluri in vanzari din vanzari_detalii pentru a usura selectiile din fact_vfacturi + begin + select DISC_TVA_VAL AS DISCOUNT_TVA, + VALOARE_ACHIZITIE, + a.suma_fara_tva_ron - a.disc_fara_tva_ron as TOTAL_FARA_TVA, + a.suma_tva_ron - a.disc_tva_ron as TOTAL_TVA, + a.suma_fara_tva_ron - a.disc_fara_tva_ron + a.suma_tva_ron - + a.disc_tva_ron as TOTAL_CU_TVA, + a.suma_fara_tva_val - a.disc_fara_tva_val as VALVAL, + a.suma_tva_val - a.disc_tva_val as TVAVAL, + a.suma_fara_tva_val - a.disc_fara_tva_val + a.suma_tva_val - + a.disc_tva_val as TOTVAL, + id_valuta, + curs, + multiplicator, + pack_facturare.cserie_act_incasare as SERIE_INCASAT, + pack_facturare.nnumar_act_incasare as NR_INCASAT, + pack_facturare.nsuma_incasare AS SUMA_INCASAT, + pack_facturare.ntip_doc_incasare as TIP_INCASAT + INTO lnDiscountTVA, + lnValoareAchizitie, + lnTotalFaraTVA, + lnTotalTVA, + lnTotalCuTVA, + lnValVal, + lnTVAVal, + lnTotVal, + lnIdValuta, + lnCurs, + lnMultiplicator, + lnSerieIncasat, + lnNrIncasat, + lnSumaIncasat, + lnTipIncasat + FROM (select MAX(decode(pack_facturare.nin_valuta, + 1, + ROUND(a1.curs * NVL(V_DISCOUNT_FACTURA, 0) / + a1.multiplicator, + lnPreciziePretV), + NVL(V_DISCOUNT_FACTURA, 0))) as DISC_FARA_TVA_RON, + NVL(V_DISCOUNT_FACTURA, 0) as DISC_FARA_TVA_VAL, + pack_facturare.nin_valuta AS IN_VALUTA, + MAX(ROUND(decode(pack_facturare.nin_valuta, + 1, + ROUND(a1.curs * + NVL(V_DISCOUNT_FACTURA, 0) / + a1.multiplicator, + lnPreciziePretV), + NVL(V_DISCOUNT_FACTURA, 0)) * + (a1.proc_tvav - 1), + lnPreciziePretV)) as DISC_TVA_RON, + MAX(ROUND(NVL(V_DISCOUNT_FACTURA, 0) * + (a1.proc_tvav - 1), + lnPreciziePretV)) as DISC_TVA_VAL, + sum(pack_facturare.calculeaza_total_fara_tva_fact(a1.pret_ron, + 0, + 1, + NVL(a1.discount_unitar_ron, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) AS SUMA_FARA_TVA_RON, + sum(pack_facturare.calculeaza_total_tva_fact(a1.pret_ron, + 0, + 1, + NVL(a1.discount_unitar_ron, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) as SUMA_TVA_RON, + sum(pack_facturare.calculeaza_total_fara_tva_fact(a1.pret_val, + 0, + 1, + NVL(a1.discount_unitar_val, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) AS SUMA_FARA_TVA_VAL, + sum(pack_facturare.calculeaza_total_tva_fact(a1.pret_val, + 0, + 1, + NVL(a1.discount_unitar_val, + 0), + pack_facturare.ndiscount_evidentiat, + a1.cantitate, + a1.pret_cu_tva, + a1.proc_tvav)) as SUMA_TVA_VAL, + sum(round(a1.cantitate * a1.pret_achizitie, + lnPrecizieCalcul)) AS VALOARE_ACHIZITIE, + max(a1.id_valuta) as id_valuta, + max(a1.curs) as curs, + max(a1.multiplicator) as multiplicator + from (select vd.id_vanzare_set, + (case + when (pack_facturare.nin_valuta = 1 or + vd.id_valuta <> + pack_def.GetIdMonedaNationala()) then + ROUND(vc.curs * vd.pret / vc.multiplicator, + lnPreciziePretV) + else + vd.pret + end) as pret_ron, + vd.pret as pret_val, + vd.proc_tvav, + vd.cantitate, + vd.diferenta, + (case + when (pack_facturare.nin_valuta = 1 or + vd.id_valuta <> + pack_def.GetIdMonedaNationala()) then + ROUND(vc.curs * vd.discount_unitar / + vc.multiplicator, + lnPreciziePretV) + else + vd.discount_unitar + end) as discount_unitar_ron, + vd.discount_unitar as discount_unitar_val, + vd.id_valuta, + vd.pret_cu_tva, + vd.pret_achizitie, + vc.curs, + vc.multiplicator + from (select a.id_vanzare_set, + a.pret, + a.proc_tvav, + a.cantitate, + a.diferenta, + a.discount_unitar, + a.id_valuta, + a.pret_cu_tva, + a.pret_achizitie + from VANZARI_DETALII_TEMP a + where nvl(a.id_vanzare_set, 0) = 0 + union all + select b.id_vanzare_set, + b.pret, + max(c.proc_tvav) as proc_tvav, + b.cantitate, + 0 as diferenta, + b.discount_unitar, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta) as id_valuta, + b.pret_cu_tva, + sum(decode(b.cantitate, + 0, + 0, + c.pret_achizitie * c.cantitate / + b.cantitate)) as pret_achizitie + from vanzari_detalii_temp c + left join vanzari_seturi b + on b.id_vanzare_set = c.id_vanzare_set + where nvl(c.id_vanzare_set, 0) <> 0 + and nvl(pack_facturare.nin_valuta, -1) > -1 + group by b.id_vanzare_set, + b.pret, + b.cantitate, + b.discount_unitar, + b.pret_cu_tva, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta)) vd + left join vanzari_cursuri vc + on vc.id_vanzare = V_ID_VANZARE + and vd.id_valuta = vc.id_valuta) a1) a; + + update vanzari + set discount_tva = lnDiscountTVA, + valoare_achizitie = lnValoareAchizitie, + total_fara_tva = lnTotalFaraTVA, + total_tva = lnTotalTVA, + total_cu_tva = lnTotalCuTVA, + valval = lnValVal, + tvaval = lnTVAVal, + totval = lnTotVal, + id_valuta = lnIdValuta, + curs = lnCurs, + multiplicator = lnMultiplicator, + serie_incasat = lnSerieIncasat, + nr_incasat = lnNrIncasat, + suma_incasat = lnSumaIncasat, + tip_incasat = lnTipIncasat + where id_vanzare = V_ID_VANZARE; + + exception + when NO_DATA_FOUND then + null; + end; + + END scrie_in_vanzari; + ------------------------------------------------------------------- + PROCEDURE scrie_atasamente_factura(V_ID_VANZARE IN NUMBER, + V_NUME_FRX IN NUMBER, + V_WDOCUMENT IN BLOB, + V_ID_UTIL IN NUMBER) IS + V_TIP NUMBER(2) := 0; + V_FORMAT ATASAMENTE_VANZARI.FORMAT%TYPE; + begin + CASE + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'FACTURA_VAL' THEN + V_TIP := 2; + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'FACTURA%' THEN + V_TIP := 1; + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'INVOICE%' THEN + V_TIP := 3; + WHEN UPPER(TRIM(V_NUME_FRX)) = 'RECAPITULATIE' THEN + V_TIP := 4; + WHEN UPPER(TRIM(V_NUME_FRX)) LIKE 'AVIZ%' THEN + V_TIP := 5; + END CASE; + + IF UPPER(TRIM(V_NUME_FRX)) LIKE '%_A5' THEN + V_FORMAT := 'A5'; + ELSE + V_FORMAT := 'A4'; + END IF; + + IF V_WDOCUMENT IS NOT NULL THEN + INSERT INTO ATASAMENTE_VANZARI + (ID_VANZARE, TIP, FORMAT, DOCUMENT) + VALUES + (V_ID_VANZARE, V_TIP, V_FORMAT, V_WDOCUMENT); + END IF; + + end scrie_atasamente_factura; + ------------------------------------------------------------------- + PROCEDURE scrie_seturi is + cursor crs is + SELECT * FROM VANZARI_SETURI_TEMP; + linie_crs crs%ROWTYPE; + V_ID VANZARI_SETURI.ID_VANZARE_SET%TYPE; + begin + open crs; + loop + fetch crs + into linie_crs; + exit when crs%NOTFOUND; + INSERT INTO VANZARI_SETURI + (DENUMIRE, + EXPLICATIE, + CANTITATE, + UM, + SERIE, + PRET, + DISCOUNT_UNITAR, + PRET_CU_TVA) + VALUES + (linie_crs.denumire, + linie_crs.explicatie, + linie_crs.cantitate, + linie_crs.um, + linie_crs.serie, + linie_crs.pret, + linie_crs.discount_unitar, + linie_crs.pret_cu_tva) + RETURNING ID_VANZARE_SET INTO V_ID; + UPDATE VANZARI_DETALII_TEMP + SET ID_VANZARE_SET = V_ID + WHERE ID_VANZARE_SET = linie_crs.id_vanzare_set; + end loop; + close crs; + end scrie_seturi; + ------------------------------------------------------------------- + PROCEDURE scrie_seturi_proforma is + cursor crs is + SELECT * FROM VANZARI_SETURI_TEMP; + linie_crs crs%ROWTYPE; + V_ID NUMBER(10); + begin + open crs; + loop + fetch crs + into linie_crs; + exit when crs%NOTFOUND; + INSERT INTO PROFORME_SETURI + (DENUMIRE, + EXPLICATIE, + CANTITATE, + UM, + SERIE, + PRET, + DISCOUNT_UNITAR, + PRET_CU_TVA) + VALUES + (linie_crs.denumire, + linie_crs.explicatie, + linie_crs.cantitate, + linie_crs.um, + linie_crs.serie, + linie_crs.pret, + linie_crs.discount_unitar, + linie_crs.pret_cu_tva) + RETURNING ID_PROFORMA_SET INTO V_ID; + UPDATE VANZARI_DETALII_TEMP + SET ID_VANZARE_SET = V_ID + WHERE ID_VANZARE_SET = linie_crs.id_vanzare_set; + end loop; + close crs; + + end scrie_seturi_proforma; + ------------------------------------------------------------------- + PROCEDURE initializeaza_part_rez(V_ID_PART IN NUMBER) IS + BEGIN + pack_facturare.nid_part_rez := V_ID_PART; + END initializeaza_part_rez; + ------------------------------------------------------------------- + PROCEDURE cumuleaza_note_act IS + lnInregSumaNot0 NUMBER(10) := 0; + BEGIN + -- era apelata la sfarsitul procedurii + pack_contafin.completeaza_parteneri_gestiuni(); + --IF pack_facturare.ntip = 27 THEN + pack_contafin.completeaza_analitice(); + --END IF; + UPDATE ACT_TEMP + SET STERS = 1, TVA_INCASARE = pack_facturare.ntva_incasare; + + -- verific daca am vreo inregistrare cu suma <> 0 + -- sterg inregistrarile cu suma 0 doar daca am inregistrari cu suma <> 0 + -- altfel nu se inregistreaza nimic in Reg. Jurnal ACT, doar in RUL si VANZARI/VANZARI_DETALII + SELECT COUNT(*) INTO lnInregSumaNot0 from ACT_TEMP where SUMA <> 0; + if lnInregSumaNot0 > 0 then + DELETE FROM ACT_TEMP + WHERE SUMA = 0 + AND NOT ((SCD LIKE '4%' OR SCC LIKE '4%') AND SCC NOT LIKE '4427') + AND ID_SET <> 32003; + end if; + + pack_facturare.cumuleaza_note_act_temp(); + + if pack_facturare.ntip <> pack_facturare.nTipNotaPlata then + pack_facturare.verifica_total_document(); + end if; + pack_contafin.sterge_analitice_gresite(); + + if pack_facturare.ntip in + (pack_facturare.nTipFacturaRestaurant, pack_facturare.nTipNotaPlata) then + pack_contafin.completeaza_analitice_rul(); + pack_contafin.sterge_analitice_gresite_rul(); + end if; + + pack_facturare.adauga_note_tva_incasare(); + + END cumuleaza_note_act; + ----------------------------------------------------------- + PROCEDURE cumuleaza_note_act_temp IS + lcMesaj xmltype; + BEGIN + + /* SELECT DBMS_XMLGEN.GETXMLTYPE('SELECT * FROM ACT_TEMP') INTO lcMesaj FROM DUAL; + + PINFO(lcMesaj.getClobVal(), 'cumuleaza_note_act_temp');*/ + + UPDATE ACT_TEMP SET STERS = 1, ID_ACT = ROWNUM; + + INSERT INTO ACT_TEMP + (ID_ACT, + LUNA, + AN, + COD, + DATAIREG, + NRACT, + SERIE_ACT, + DATAACT, + EXPLICATIA, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + SUMA_VAL, + CURS, + PERECHED, + PERECHEC, + DATASCAD, + NEIMPOZAB, + NNIR, + ID_RESPONSABIL, + ID_VENCHELT, + ID_SECTIE, + ID_SET, + ID_FACT, + ID_PARTD, + ID_PARTC, + ID_SUCURSALA, + ID_FDOC, + EXPLICATIA4, + EXPLICATIA5, + ID_LUCRARE, + ID_GESTIN, + ID_GESTOUT, + ID_VALUTA, + PROC_TVA, + ID_FACTD, + ID_FACTC, + ID_CTR, + ID_JTVA_COLOANA, + TVA_INCASARE, + TAXCODE, + PAYMENTCODE) + SELECT ROW_NUMBER() OVER(ORDER BY A.ID_SET, A.ID_ACT) AS ID_ACT, + A.LUNA, + A.AN, + A.COD, + A.DATAIREG, + A.NRACT, + A.SERIE_ACT, + A.DATAACT, + A.EXPLICATIA, + A.SCD, + A.ASCD, + A.SCC, + A.ASCC, + (CASE + WHEN pack_facturare.nin_valuta = 1 AND + A.ID_VALUTA NOT IN + (0, pack_facturare.nid_moneda_nationala) THEN + ROUND(A.SUMA_VAL * A.CURS, pack_sesiune.nzecimale_sumav) + ELSE + A.SUMA + END) AS SUMA, + A.SUMA_VAL, + A.CURS, + A.PERECHED, + A.PERECHEC, + A.DATASCAD, + A.NEIMPOZAB, + A.NNIR, + A.ID_RESPONSABIL, + A.ID_VENCHELT, + A.ID_SECTIE, + pack_facturare.nid_set AS ID_SET, + A.ID_FACT, + A.ID_PARTD, + A.ID_PARTC, + A.ID_SUCURSALA, + A.ID_FDOC, + A.EXPLICATIA4, + A.EXPLICATIA5, + A.ID_LUCRARE, + A.ID_GESTIN, + A.ID_GESTOUT, + A.ID_VALUTA, + A.PROC_TVA, + A.ID_FACTD, + A.ID_FACTC, + A.ID_CTR, + A.ID_JTVA_COLOANA, + pack_facturare.ntva_incasare as TVA_INCASARE, + A.TAXCODE, + A.PAYMENTCODE + FROM (SELECT MIN(A11.ID_ACT) AS ID_ACT, + A11.ID_SET, + A11.LUNA, + A11.AN, + A11.COD, + A11.DATAIREG, + A11.NRACT, + A11.SERIE_ACT, + A11.DATAACT, + A11.EXPLICATIA, + A11.SCD, + A11.ASCD, + A11.SCC, + A11.ASCC, + SUM(A11.SUMA) AS SUMA, + SUM(A11.SUMA_VAL) AS SUMA_VAL, + A11.CURS, + A11.PERECHED, + A11.PERECHEC, + A11.DATASCAD, + A11.NEIMPOZAB, + A11.NNIR, + DECODE(pack_facturare.ntip, + 2, + NVL(A12.ID_RESPONSABIL, A11.ID_RESPONSABIL), + A11.ID_RESPONSABIL) AS ID_RESPONSABIL, + A11.ID_VENCHELT, + A11.ID_SECTIE, + A11.ID_FACT, + A11.ID_PARTD, + A11.ID_PARTC, + A11.ID_SUCURSALA, + A11.ID_FDOC, + A11.EXPLICATIA4, + A11.EXPLICATIA5, + A11.ID_LUCRARE, + A11.ID_GESTIN, + A11.ID_GESTOUT, + A11.ID_VALUTA, + (CASE + WHEN A11.ID_JTVA_COLOANA IS NOT NULL THEN + A11.PROC_TVA + ELSE + 0 + END) AS PROC_TVA, + A11.ID_FACTD, + A11.ID_FACTC, + A11.ID_CTR, + A11.ID_JTVA_COLOANA, + A11.TAXCODE, + A11.PAYMENTCODE + FROM ACT_TEMP A11 + LEFT JOIN CONTRACTE A12 + ON A11.ID_CTR = A12.ID_CTR + GROUP BY A11.LUNA, + A11.AN, + A11.COD, + A11.DATAIREG, + A11.SERIE_ACT, + A11.NRACT, + A11.DATAACT, + A11.EXPLICATIA, + A11.SCD, + A11.ASCD, + A11.SCC, + A11.ASCC, + A11.PERECHED, + A11.PERECHEC, + A11.DATASCAD, + A11.NEIMPOZAB, + A11.NNIR, + A11.ID_SET, + DECODE(pack_facturare.ntip, + 2, + NVL(A12.ID_RESPONSABIL, A11.ID_RESPONSABIL), + A11.ID_RESPONSABIL), + A11.ID_VENCHELT, + A11.ID_SECTIE, + A11.ID_SET, + A11.ID_FACT, + A11.ID_PARTD, + A11.ID_PARTC, + A11.ID_SUCURSALA, + A11.ID_FDOC, + A11.EXPLICATIA4, + A11.EXPLICATIA5, + A11.ID_LUCRARE, + A11.ID_GESTIN, + A11.ID_GESTOUT, + A11.ID_VALUTA, + A11.CURS, + A11.PROC_TVA, + A11.ID_FACTD, + A11.ID_FACTC, + A11.ID_CTR, + A11.ID_JTVA_COLOANA, + A11.TAXCODE, + A11.PAYMENTCODE) A; + + /* SELECT DBMS_XMLGEN.GETXMLTYPE('SELECT * FROM ACT_TEMP') INTO lcMesaj FROM DUAL; + PINFO(lcMesaj.getClobVal(), 'cumuleaza_note_act_temp'); + */ + + DELETE FROM ACT_TEMP WHERE STERS = 1; + END cumuleaza_note_act_temp; + ------------------------------------------------------------------- + PROCEDURE cursor_verificare(V_CURSOR_VERIFICARE OUT pack_facturare.cursor_facturare) IS + BEGIN + OPEN V_CURSOR_VERIFICARE FOR + SELECT A.ID_ACT, + A.LUNA, + A.AN, + A.DATAIREG as datairegt, + A.NRACT, + A.SERIE_ACT, + A.DATAACT as dataactt, + A.suma, + A.EXPLICATIA, + A.SCD, + A.ASCD, + A.ASCD as ascd1, + A.SCC, + A.ASCC, + A.ASCC as ascc1, + A.PERECHED, + A.PERECHEC, + A.SUMA_VAL, + A.EXPLICATIA4, + A.EXPLICATIA5, + A.CURS, + A.DATASCAD as datascadt, + A.NEIMPOZAB, + A.NNIR, + A.ID_UTIL, + UTIL2.UTILIZATOR AS UTIL, + A.DATAORA, + A.ID_UTILS, + UTIL1.UTILIZATOR AS UTILS, + A.DATAORAS, + A.ID_RESPONSABIL, + RESP.DENUMIRE AS NRESP, + A.ID_VENCHELT, + VENCHELT.EXPLICATIE AS DST_CHLT, + A.ID_LUCRARE, + LUCR.NRORD, + A.ID_CTR, + CTR.CONTRACT, + A.ID_SECTIE, + SECTII.SECTIE, + A.PROC_TVA, + A.ID_SET, + A.ID_FACT, + A.ID_FACTD, + A.ID_FACTC, + A.ID_PARTD, + A.ID_PARTD AS ID_PARTD1, + PART1.NUME AS PARTD, + A.ID_PARTC, + A.ID_PARTC AS ID_PARTC1, + PART.NUME AS PARTC, + A.ID_SUCURSALA, + S.FIRMA AS SUCURSALA, + A.ID_FDOC, + FDOC.FEL_DOCUMENT AS FDOC, + A.ID_GESTIN, + A.ID_JTVA_COLOANA, + jtva.denumire as explicatie_tva, + G1.NUME_GESTIUNE AS GESTIN, + A.ID_GESTOUT, + G2.NUME_GESTIUNE AS GESTOUT, + A.ID_VALUTA, + V.NUME_VAL, + 0000000000 as id_pol, + lpad(' ', 30, ' ') as nume_lista_preturi, + A.TVA_INCASARE, + a.taxcode, + st.descriere as saft_descriere, + st.procent_taxa as saft_procent, + st.taxname, + a.paymentcode, + sp.methodcode, + sp.name as paymentmechanism, + sp.methodname as paymentmethod, + sp.paymentname + FROM ACT_TEMP A + LEFT JOIN NOM_FDOC FDOC + ON A.ID_FDOC = FDOC.ID_FDOC + LEFT JOIN SYN_NOM_FIRME S + ON A.ID_SUCURSALA = S.ID_FIRMA + LEFT JOIN NOM_PARTENERI PART + ON A.ID_PARTC = PART.ID_PART + LEFT JOIN NOM_PARTENERI PART1 + ON A.ID_PARTD = PART1.ID_PART + LEFT JOIN VNOM_VENCHEL VENCHELT + ON A.ID_VENCHELT = VENCHELT.ID_VENCHELT + LEFT JOIN NOM_PARTENERI RESP + ON A.ID_RESPONSABIL = RESP.ID_PART + LEFT JOIN SYN_UTILIZATORI UTIL1 + ON A.ID_UTILS = UTIL1.ID_UTIL + LEFT JOIN SYN_UTILIZATORI UTIL2 + ON A.ID_UTIL = UTIL2.ID_UTIL + LEFT JOIN VNOM_LUCRARI LUCR + ON A.ID_LUCRARE = LUCR.ID_LUCRARE + LEFT JOIN VCONTRACTE CTR + ON A.ID_CTR = CTR.ID_CTR + LEFT JOIN NOM_GESTIUNI G1 + ON A.ID_GESTIN = G1.ID_GESTIUNE + LEFT JOIN NOM_GESTIUNI G2 + ON A.ID_GESTOUT = G2.ID_GESTIUNE + LEFT JOIN NOM_VALUTE V + ON A.ID_VALUTA = V.ID_VALUTA + LEFT JOIN NOM_SECTII SECTII + ON A.ID_SECTIE = SECTII.ID_SECTIE + LEFT JOIN jtva_coloane jtva + ON a.id_jtva_coloana = jtva.id_jtva_coloana + left join vsaft_taxtable st + on a.taxcode = st.taxcode + left join vsaft_mecanisme_plati sp + on a.paymentcode = sp.mechanismcode + WHERE A.STERS = 0; + END cursor_verificare; + ------------------------------------------------------------------- + -- MODIFICA NUMAR, DATA, DATA_SCAD si in restul tabelelor + ------------------------------------------------------------------- + PROCEDURE modifica_date_factura(V_ID_VANZARE IN NUMBER, + V_ID_RUTA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_AGENT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_FACTURARE IN VANZARI.ID_FACTURARE%TYPE, + V_LISTARE_DETALIATA IN VANZARI.LISTARE_DETALIATA%TYPE, + V_TEXT_ADITIONAL IN VANZARI.TEXT_ADITIONAL%TYPE, + V_TIP_SAFT IN VANZARI.TIP_SAFT%TYPE DEFAULT NULL, + V_EFACTURA IN VANZARI.EFACTURA%TYPE DEFAULT NULL, + V_DATA_ACT IN VANZARI.DATA_ACT%TYPE DEFAULT NULL, + V_DATA_SCAD IN VANZARI.DATA_SCAD%TYPE DEFAULT NULL, + V_NUMAR_ACT IN VANZARI.NUMAR_ACT%TYPE DEFAULT NULL, + V_SERIE_ACT IN VANZARI.SERIE_ACT%TYPE DEFAULT NULL) IS + lnIdFact VANZARI.ID_FACT%TYPE; + lnNrAct VANZARI.NUMAR_ACT%TYPE; + ldDataAct VANZARI.DATA_ACT%TYPE; + ldDataScad VANZARI.DATA_SCAD%TYPE; + lcSerieAct VANZARI.SERIE_ACT%TYPE; + BEGIN + UPDATE VANZARI + SET ID_RUTA = V_ID_RUTA, + ID_DELEGAT = V_ID_DELEGAT, + ID_AGENT = V_ID_AGENT, + ID_MASINA = V_ID_MASINA, + DATAORA_EXP = V_DATAORA_EXP, + ID_FACTURARE = V_ID_FACTURARE, + LISTARE_DETALIATA = NVL(V_LISTARE_DETALIATA, 0), + TEXT_ADITIONAL = V_TEXT_ADITIONAL, + TIP_SAFT = V_TIP_SAFT, + EFACTURA = V_EFACTURA + WHERE ID_VANZARE = V_ID_VANZARE; + + select id_fact, numar_act, data_act, data_scad, serie_act into lnIdFact, lnNrAct, ldDataAct, ldDataScad, lcSerieAct from vanzari where ID_VANZARE = V_ID_VANZARE; + + IF V_SERIE_ACT IS NOT NULL AND V_SERIE_ACT <> NVL(lcSerieAct, '') THEN + UPDATE VANZARI SET SERIE_ACT = V_SERIE_ACT WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE DOCUMENTE SET SERIE_ACT = V_SERIE_ACT WHERE ID_DOC = lnIdFact; + UPDATE ACT SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + UPDATE JV2007 SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + UPDATE RUL SET SERIE_ACT = V_SERIE_ACT WHERE ID_FACT = lnIdFact; + END IF; + + + IF V_NUMAR_ACT IS NOT NULL AND V_NUMAR_ACT <> NVL(lnNrAct, 0) THEN + UPDATE VANZARI SET NUMAR_ACT = V_NUMAR_ACT WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE DOCUMENTE SET NRACT = V_NUMAR_ACT WHERE ID_DOC = lnIdFact; + UPDATE ACT SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + UPDATE JV2007 SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + UPDATE RUL SET NRACT = V_NUMAR_ACT WHERE ID_FACT = lnIdFact; + END IF; + + IF V_DATA_ACT IS NOT NULL and V_DATA_ACT <> NVL(ldDataAct, SYSDATE) THEN + UPDATE VANZARI SET DATA_ACT = V_DATA_ACT WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE DOCUMENTE SET DATAACT = V_DATA_ACT WHERE ID_DOC = lnIdFact; + UPDATE ACT SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + UPDATE JV2007 SET DATAACT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + UPDATE RUL SET DATAACT = V_DATA_ACT, DATAOUT = V_DATA_ACT WHERE ID_FACT = lnIdFact; + END IF; + + IF V_DATA_SCAD IS NOT NULL and V_DATA_SCAD <> NVL(ldDataScad, sysdate) THEN + UPDATE VANZARI SET DATA_SCAD = V_DATA_SCAD WHERE ID_VANZARE = V_ID_VANZARE; + UPDATE ACT SET DATASCAD = V_DATA_SCAD WHERE ID_FACT = lnIdFact; + UPDATE IREG_PARTENERI SET DATASCAD = V_DATA_SCAD WHERE ID_FACT = lnIdFact; + END IF; + + END modifica_date_factura; + ------------------------------------------------------------------- + PROCEDURE modifica_explicatie_articol(V_ID_VANZARE_DET IN NUMBER, + V_EXPLICATIE IN VARCHAR2, + V_ID_UTIL IN NUMBER, + V_TAXCODE IN NUMBER DEFAULT NULL) is + BEGIN + UPDATE VANZARI_DETALII + SET EXPLICATIE = V_EXPLICATIE, TAXCODE = V_TAXCODE + WHERE ID_VANZARE_DET = V_ID_VANZARE_DET; + END modifica_explicatie_articol; + ------------------------------------------------------------------- + PROCEDURE initializeaza_moneda_nationala IS + BEGIN + pack_facturare.nid_moneda_nationala := pack_def.GetIdMonedaNationala(); + END initializeaza_moneda_nationala; + ------------------------------------------------------------------- + PROCEDURE scrie_cursuri_proforma(V_ID_PROFORMA IN NUMBER) IS + BEGIN + INSERT INTO PROFORME_CURSURI + (ID_PROFORMA, ID_VALUTA, CURS, MULTIPLICATOR) + SELECT DISTINCT V_ID_PROFORMA AS ID_PROFORMA, + ID_VALUTA, + CURS, + MULTIPLICATOR + FROM VANZARI_DETALII_TEMP + WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala; + END scrie_cursuri_proforma; + ------------------------------------------------------------------- + PROCEDURE scrie_cursuri(V_ID_VANZARE IN NUMBER) IS + BEGIN + INSERT INTO VANZARI_CURSURI + (ID_VANZARE, ID_VALUTA, CURS, MULTIPLICATOR) + SELECT DISTINCT V_ID_VANZARE AS ID_VANZARE, + ID_VALUTA, + CURS, + MULTIPLICATOR + FROM VANZARI_DETALII_TEMP + WHERE ID_VALUTA <> pack_facturare.nid_moneda_nationala; + END scrie_cursuri; + ------------------------------------------------------------------- + PROCEDURE scrie_rate_factura(V_DATAORA IN DATE) IS + BEGIN + INSERT INTO CTR_RATE_FACTURI + (ID_RATA, + ID_FACT, + VALVALUTA, + VALVALUTACTVA, + PROCTVA, + ID_VALUTA, + CURS, + ID_UTIL, + DATAORA) + SELECT A.ID_RATA, + B.ID_FACT, + pack_facturare.calculeaza_total_fara_tva(A.PRET, + A.DIFERENTA, + 1, + A.DISCOUNT_UNITAR, + pack_facturare.ndiscount_evidentiat, + A.CANTITATE, + A.PRET_CU_TVA, + A.PROC_TVAV, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval) as VALVALUTA, + pack_facturare.calculeaza_total_cu_tva(A.PRET, + A.DIFERENTA, + 1, + A.DISCOUNT_UNITAR, + pack_facturare.ndiscount_evidentiat, + A.CANTITATE, + A.PRET_CU_TVA, + A.PROC_TVAV, + pack_sesiune.nzecimale_pretvval, + pack_sesiune.nzecimale_sumaval) as VALVALUTACTVA, + (A.PROC_TVAV - 1) * 100 AS PROC_TVAV, + A.ID_VALUTA, + A.CURS / NVL(A.MULTIPLICATOR, 1) AS CURS, + pack_facturare.nid_util as ID_UTIL, + V_DATAORA as DATAORA + FROM VANZARI_DETALII_TEMP A + LEFT JOIN (SELECT DISTINCT ID_FACT, ID_CTR + FROM ACT_TEMP + WHERE STERS = 0 + AND SCD LIKE '4%') B + ON A.ID_CTR = B.ID_CTR + WHERE A.ID_RATA IS NOT NULL; + + END scrie_rate_factura; + ------------------------------------------------------------------- + FUNCTION calculeaza_k RETURN NUMBER IS + BEGIN + RETURN 0; + END calculeaza_k; + ------------------------------------------------------------------- + PROCEDURE calculeaza_pret(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER, + V_PRET_FARA_TVA OUT NUMBER, + V_PRET_TVA OUT NUMBER, + V_PRET_CU_TVA OUT NUMBER) IS + BEGIN + V_PRET_FARA_TVA := pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + V_PRET_TVA := pack_sesiune.calculeaza_pret_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + V_PRET_CU_TVA := pack_sesiune.calculeaza_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + END calculeaza_pret; + ------------------------------------------------------------------- + /* function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number IS + BEGIN + + return pack_sesiune.calculeaza_pret_fara_tva(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA, V_TIP); + END calculeaza_pret_fara_tva;*/ + + ------------------------------------------------------------------- + /* function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return NUMBER IS + V_PRET_TVA number := 0; + BEGIN + return pack_sesiune.calculeaza_pret_TVA(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA); + END calculeaza_pret_TVA;*/ + ------------------------------------------------------------------- + /* function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER) RETURN NUMBER IS + BEGIN + return pack_sesiune.calculeaza_pret_cu_tva(V_PRET_UNITAR, + V_CURS, + V_ID_VALUTA, + V_PROC_TVA, + V_PRET_ARE_TVA); + END calculeaza_pret_cu_tva;*/ + ------------------------------------------------------------------- + PROCEDURE calculeaza_sume(V_PRET_UNITAR IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER, + V_CANTITATE IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_SUMA_FARA_TVA OUT NUMBER, + V_SUMA_TVA OUT NUMBER, + V_SUMA_CU_TVA OUT NUMBER) IS + V_CURS_NOU NUMBER; + BEGIN + IF NVL(V_CURS, 0) = 0 THEN + V_CURS_NOU := 1; + ELSE + V_CURS_NOU := V_CURS; + END IF; + V_SUMA_FARA_TVA := pack_facturare.calculeaza_total_fara_tva(V_PRET => V_PRET_UNITAR, + V_AJUSTARE => 0, + V_CURS => V_CURS_NOU, + V_DISCOUNT_UNITAR => (CASE + pack_facturare.ndiscount_evidentiat + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + 0 + END), + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => V_ZECIMALE_PRET, + V_ZECIMALE_SUMA => V_ZECIMALE_SUMA); + V_SUMA_TVA := pack_facturare.calculeaza_total_tva(V_PRET => V_PRET_UNITAR, + V_AJUSTARE => 0, + V_CURS => V_CURS_NOU, + V_DISCOUNT_UNITAR => (CASE + pack_facturare.ndiscount_evidentiat + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + 0 + END), + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => V_ZECIMALE_PRET, + V_ZECIMALE_SUMA => V_ZECIMALE_SUMA); + V_SUMA_CU_TVA := pack_facturare.calculeaza_total_cu_tva(V_PRET => V_PRET_UNITAR, + V_AJUSTARE => 0, + V_CURS => V_CURS_NOU, + V_DISCOUNT_UNITAR => (CASE + pack_facturare.ndiscount_evidentiat + WHEN 0 THEN + V_DISCOUNT_UNITAR + ELSE + 0 + END), + V_DISCOUNT_EVIDENTIAT => pack_facturare.ndiscount_evidentiat, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_ARE_TVA, + V_PROC_TVAV => V_PROC_TVA, + V_ZECIMALE_PRET => V_ZECIMALE_PRET, + V_ZECIMALE_SUMA => V_ZECIMALE_SUMA); + + END calculeaza_sume; + ------------------------------------------------------------------- + /* PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER) IS + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_PARAMETRU_ADITIONAL); + end; + */ + ------------------------------------------------------------------- + PROCEDURE finalizeaza_factura(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_PARAMETRU_ADITIONAL IN NUMBER) IS + V_DATAORA DATE := SYSDATE; + lnIdFact vanzari.id_fact%type; + lnIdFact2 vanzari.id_fact%type; + BEGIN + pack_facturare.nid_vanzare := NULL; + + pack_facturare.initializeaza_scriere_actrul(V_DATAORA); + + pack_facturare.scrie_in_vanzari(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + pack_facturare.nid_vanzare); + + pack_facturare.finalizeaza_scriere_actrul(); + + -- completez id_fact dupa generarea id_fact la scrierea in contabilitate + -- daca este factura cu incasare, pack_contafin.id_fact este id_fact-ul documentului de incasare, nu id_fact-ul facturii + lnIdFact := pack_contafin.get_idFact(); + select min(id_fact) + into lnIdFact2 + from act + where cod in (select cod + from act + where id_fact = lnIdFact + and sters = 0) + and scd not like '5%'; + if lnIdFact <> lnIdFact2 then + lnIdFact := lnIdFact2; + end if; + + update vanzari + set id_fact = lnIdFact + where id_vanzare = pack_facturare.nid_vanzare; + + CASE + WHEN V_PARAMETRU_ADITIONAL = 1 AND + pack_facturare.ntip IN (3, 21, 25, 28, 42, 47) THEN + -- daca e comanda, atunci V_PARAMETRU_ADITIONAL este V_INCHIDERE_COMANDA + pack_facturare.inchide_comanda(); + WHEN pack_facturare.ntip = 4 THEN + -- daca e facturare din aviz, atunci V_PARAMETRU_ADITIONAL este V_VERIFICARE_FACTURAT + pack_facturare.scrie_cantitati_vanzari_avize; + pack_facturare.scrie_corespondente_vanzari(1); + pack_facturare.marcheaza_facturat(V_PARAMETRU_ADITIONAL); + WHEN pack_facturare.ntip = 24 THEN + -- daca e aviz de retur, atunci V_PARAMETRU_ADITIONAL este V_VERIFICARE_FACTURAT ( = 0 ) + pack_facturare.scrie_corespondente_vanzari(2); + pack_facturare.marcheaza_facturat(V_PARAMETRU_ADITIONAL); + WHEN pack_facturare.ntip in ( 2, 6, 52) THEN + pack_facturare.scrie_rate_factura(V_DATAORA); + WHEN pack_facturare.ntip in (8, 9) THEN + -- daca e factura de retur + pack_facturare.scrie_corespondente_vanzari(3); + ELSE + dbms_output.put_line('---'); + END CASE; + + IF pack_facturare.nid_set = + 25000 + pack_facturare.nTipFacturaRestaurant - 1 + + pack_facturare.nscadere_stoc * 10 AND + to_number(pack_sesiune.getoptiunefirma('DESCARCAREGESTZ')) = 1 THEN + pack_grestaurant.descarcare_automata_zi(pack_facturare.ddata_act, + pack_facturare.nid_vanzare, + NULL, + NULL, + pack_facturare.nid_sucursala, + pack_facturare.nid_util); + END IF; + END finalizeaza_factura; + ------------------------------------------------------------------- + PROCEDURE finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA IN NUMBER) IS + V_DATAORA DATE := SYSDATE; + V_ID_DELEGAT VANZARI.ID_DELEGAT%TYPE; + V_ID_MASINA VANZARI.ID_MASINA%TYPE; + V_ID_AGENT VANZARI.ID_AGENT%TYPE; + V_ID_RUTA VANZARI.ID_RUTA%TYPE; + V_COD VANZARI.COD%TYPE; + i NUMBER(10); + V_NUME_GESTIUNE NOM_GESTIUNI.NUME_GESTIUNE%TYPE; + + TYPE tab_vanzari_type IS TABLE OF vanzari_temp%ROWTYPE; + tab_vanz tab_vanzari_type; + + lnDiscountTVA VANZARI.DISCOUNT_TVA%TYPE; + lnValoareAchizitie VANZARI.VALOARE_ACHIZITIE%TYPE; + lnSerieIncasat ACT.SERIE_ACT%TYPE; + lnNrIncasat ACT.NRACT%TYPE; + lnSumaIncasat ACT.SUMA%TYPE; + lnTipIncasat NUMBER(2); + lnTotalFaraTVA VANZARI.TOTAL_FARA_TVA%TYPE; + lnTotalTVA VANZARI.TOTAL_TVA%TYPE; + lnTotalCuTVA VANZARI.TOTAL_CU_TVA%TYPE; + lnIdGestiune VANZARI.ID_GESTIUNE%TYPE; + lnIdValuta VANZARI.Id_Valuta%TYPE; + lnCurs VANZARI.CURS%TYPE; + lnMultiplicator VANZARI.MULTIPLICATOR%TYPE; + BEGIN + pack_facturare.nid_vanzare := NULL; + -- nu se mai genereaza codul la initializare, trebuie sa-l generez la fiecare document + -- pana acum aveam conditia sa-l genereze doar de la i > 1 + pack_facturare.initializeaza_scriere_actrul(V_DATAORA, 0); + + SELECT * BULK COLLECT INTO tab_vanz FROM VANZARI_TEMP; + + FOR I IN tab_vanz.first .. tab_vanz.last LOOP + + V_COD := pack_contafin.GENEREAZA_COD(user); + + BEGIN + SELECT ID_DELEGAT, ID_MASINA, ID_AGENT, ID_RUTA + INTO V_ID_DELEGAT, V_ID_MASINA, V_ID_AGENT, V_ID_RUTA + FROM FACT_NOM_RUTE + WHERE ID_RUTA IN (SELECT ID_RUTA + FROM FACT_NOM_RUTEGEST + WHERE ID_GESTIUNE = tab_vanz(i).id_gestiune_dest + AND STERS = 0) + AND STERS = 0; + EXCEPTION + WHEN TOO_MANY_ROWS THEN + SELECT NUME_GESTIUNE + INTO V_NUME_GESTIUNE + FROM NOM_GESTIUNI + WHERE ID_GESTIUNE = tab_vanz(i).id_gestiune_dest; + + RAISE_APPLICATION_ERROR(-20000, + 'Pentru gestiunea ' || V_NUME_GESTIUNE || + ' aveti configurate mai multe rute! (FACT-023)'); + + WHEN NO_DATA_FOUND THEN + V_ID_DELEGAT := NULL; + V_ID_MASINA := NULL; + V_ID_AGENT := NULL; + V_ID_RUTA := NULL; + END; + + INSERT INTO VANZARI + (id_util, + dataora, + numar_act, + serie_act, + id_lucrare, + id_comanda, + tip, + id_gestiune, + cod, + data_act, + discount, + discount_evidentiat, + id_delegat, + id_masina, + id_agent, + id_ruta, + id_sucursala, + id_sectie) + VALUES + (pack_facturare.nid_util, + V_DATAORA, + tab_vanz (i).numar_act, + pack_facturare.cserie_act, + tab_vanz (i).id_lucrare, + tab_vanz (i).id_comanda, + pack_facturare.ntip, + tab_vanz (i).id_gestiune_dest, + V_COD, + pack_facturare.ddata_act, + V_DISCOUNT_FACTURA, + pack_facturare.ndiscount_evidentiat, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_AGENT, + V_ID_RUTA, + pack_facturare.nid_sucursala, + pack_facturare.nid_sectie_stoc) + RETURNING ID_VANZARE INTO pack_facturare.nid_vanzare; + + pack_facturare.scrie_cursuri(pack_facturare.nid_vanzare); + + INSERT /*+ APPEND */ + INTO VANZARI_DETALII + (ID_VANZARE, + ID_ARTICOL, + SERIE, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + PRET_CU_TVA, + ID_JTVA_COLOANA) + SELECT pack_facturare.nid_vanzare as ID_VANZARE, + ID_ARTICOL, + SERIE, + ID_POL, + CANTITATE, + PRET_ACHIZITIE, + PRETD, + ID_VALUTAD, + PRET, + PROC_TVAV, + DISCOUNT_UNITAR, + ID_GESTIUNE, + ID_VALUTA, + CONT, + PRET_CU_TVA, + ID_JTVA_COLOANA + FROM VANZARI_DETALII_TEMP + WHERE ID_COMANDA = tab_vanz(i).id_comanda + AND NUMAR_ACT = tab_vanz(i).numar_act + ORDER BY ID_TEMP; + + UPDATE RUL_TEMP SET COD = V_COD WHERE nract = tab_vanz(i).numar_act; + UPDATE ACT_TEMP SET COD = V_COD WHERE nract = tab_vanz(i).numar_act; + + -- Completare totaluri in vanzari din vanzari_detalii pentru a usura selectiile din fact_vfacturi + begin + select DISC_TVA AS DISCOUNT_TVA, + VALOARE_ACHIZITIE, + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_fara_tva - a.disc_fara_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_fara_tva - a.disc_fara_tva) as TOTAL_FARA_TVA, + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_tva - a.disc_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_tva - a.disc_tva) as TOTAL_TVA, + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_fara_tva - a.disc_fara_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_fara_tva - a.disc_fara_tva) + + decode(a.in_valuta, + 1, + ROUND(a.curs * (a.suma_tva - a.disc_tva) / + a.multiplicator, + pack_sesiune.getOptiuneFirma('PC')), + a.suma_tva - a.disc_tva) as TOTAL_CU_TVA, + pack_facturare.cserie_act_incasare as SERIE_INCASAT, + pack_facturare.nnumar_act_incasare as NR_INCASAT, + pack_facturare.nsuma_incasare AS SUMA_INCASAT, + pack_facturare.ntip_doc_incasare as TIP_INCASAT, + a.id_valuta, + a.curs, + a.multiplicator + INTO lnDiscountTVA, + lnValoareAchizitie, + lnTotalFaraTVA, + lnTotalTVA, + lnTotalCuTVA, + lnSerieIncasat, + lnNrIncasat, + lnSumaIncasat, + lnTipIncasat, + lnIdValuta, + lnCurs, + lnMultiplicator + FROM (select NVL(V_DISCOUNT_FACTURA, 0) as DISC_FARA_TVA, + pack_facturare.nin_valuta AS IN_VALUTA, + ROUND(NVL(V_DISCOUNT_FACTURA, 0) * + max(vd.proc_tvav - 1), + pack_sesiune.getOptiuneFirma('PPRETV')) as DISC_TVA, + sum(pack_facturare.calculeaza_total_fara_tva_fact(vd.pret / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + decode(pack_facturare.nin_valuta, + 1, + 0, + vd.diferenta), + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.curs, + 1)), + NVL(vd.discount_unitar, + 0) / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + pack_facturare.ndiscount_evidentiat, + vd.cantitate, + vd.pret_cu_tva, + vd.proc_tvav)) AS SUMA_FARA_TVA, + sum(pack_facturare.calculeaza_total_tva_fact(vd.pret / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + decode(pack_facturare.nin_valuta, + 1, + 0, + vd.diferenta), + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.curs, + 1)), + NVL(vd.discount_unitar, + 0) / + decode(pack_facturare.nin_valuta, + 1, + 1, + NVL(vc.multiplicator, + 1)), + pack_facturare.ndiscount_evidentiat, + vd.cantitate, + vd.pret_cu_tva, + vd.proc_tvav)) as SUMA_TVA, + sum(round(vd.cantitate * vd.pret_achizitie, + pack_sesiune.getOptiuneFirma('PC'))) AS VALOARE_ACHIZITIE, + max(decode(pack_facturare.nin_valuta, + 1, + vc.id_valuta, + 0)) as id_valuta, + max(decode(pack_facturare.nin_valuta, 1, vc.curs, 1)) as curs, + max(decode(pack_facturare.nin_valuta, + 1, + vc.multiplicator, + 1)) as multiplicator + from (select a.id_vanzare_set, + a.pret, + a.proc_tvav, + a.cantitate, + a.diferenta, + a.discount_unitar, + a.id_valuta, + a.pret_cu_tva, + a.pret_achizitie + FROM VANZARI_DETALII_TEMP a + WHERE a.ID_COMANDA = tab_vanz(i).id_comanda + AND a.NUMAR_ACT = tab_vanz(i).numar_act + and nvl(a.id_vanzare_set, 0) = 0 + union all + select b.id_vanzare_set, + b.pret, + max(c.proc_tvav) as proc_tvav, + b.cantitate, + 0 as diferenta, + b.discount_unitar, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta) as id_valuta, + b.pret_cu_tva, + sum(decode(b.cantitate, + 0, + 0, + c.pret_achizitie * c.cantitate / + b.cantitate)) as pret_achizitie + from vanzari_detalii_temp c + left join vanzari_seturi b + on b.id_vanzare_set = c.id_vanzare_set + WHERE nvl(c.id_vanzare_set, 0) <> 0 + and c.ID_COMANDA = tab_vanz(i).id_comanda + AND c.NUMAR_ACT = tab_vanz(i).numar_act + and nvl(pack_facturare.nin_valuta, -1) > -1 + group by b.id_vanzare_set, + b.pret, + b.cantitate, + b.discount_unitar, + b.pret_cu_tva, + decode(pack_facturare.nin_valuta, + 0, + pack_def.GetIdMonedaNationala(), + c.id_valuta)) vd + left join vanzari_cursuri vc + on vc.id_vanzare = pack_facturare.nid_vanzare + and vd.id_valuta = vc.id_valuta) a; + + update vanzari + set discount_tva = lnDiscountTVA, + valoare_achizitie = lnValoareAchizitie, + total_fara_tva = lnTotalFaraTVA, + total_tva = lnTotalTVA, + total_cu_tva = lnTotalCuTVA, + serie_incasat = lnSerieIncasat, + nr_incasat = lnNrIncasat, + suma_incasat = lnSumaIncasat, + tip_incasat = lnTipIncasat, + id_valuta = lnIdValuta, + curs = lnCurs, + multiplicator = lnMultiplicator + where id_vanzare = pack_facturare.nid_vanzare; + + exception + when NO_DATA_FOUND then + null; + end; + --------------------------------------------- + END LOOP; + + pack_facturare.finalizeaza_scriere_actrul(); + + END finalizeaza_avize_lucrare; + + ------------------------------------------------------------------- + /* PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) is + lnIdFacturare NUMBER(10) := null; + lnListareDetaliata NUMBER(1) := 0; + begin + pack_facturare.finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + lnIdFacturare, + lnListareDetaliata, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE); + end;*/ + + ------------------------------------------------------------------- + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) IS + V_ID_FACTURARE NUMBER(20) := NULL; + V_LISTARE_DETALIATA NUMBER(20) := NULL; + BEGIN + finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_SIR_MODIFICARI_ACONT, + V_SIR_MODIFICARI_PART, + V_PARAMETRU_ADITIONAL, + V_ID_VANZARE); + END; + + PROCEDURE finalizeaza_scriere_verificare(V_DISCOUNT_FACTURA IN NUMBER, + V_ID_DELEGAT IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_FACTURARE IN NUMBER, + V_LISTARE_DETALIATA IN NUMBER, + V_DATAORA_EXP IN DATE, + V_ID_AGENT IN NUMBER, + V_TEXT_ADITIONAL IN VARCHAR2, + V_SIR_MODIFICARI_ACONT IN VARCHAR2, + V_SIR_MODIFICARI_PART IN VARCHAR, + V_PARAMETRU_ADITIONAL IN NUMBER, + V_ID_VANZARE OUT NUMBER) IS + V_SEPARATOR_LINIE VARCHAR2(5) := ';'; + V_SEPARATOR VARCHAR2(5) := '|'; + BEGIN + IF V_SIR_MODIFICARI_ACONT IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR) - 1) as ascd, + rtrim(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR) as ascc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_ACONT, + V_SEPARATOR_LINIE)) + + )) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ASCD = B.ASCD, ASCC = B.ASCC; + + END IF; + + IF V_SIR_MODIFICARI_PART IS NOT NULL THEN + MERGE INTO ACT_TEMP A + USING (select to_number(substr(lista || V_SEPARATOR, + 1, + instr(lista, V_SEPARATOR) - 1)) as id_act, + nvl(to_number(substr(lista || V_SEPARATOR || V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) + 1, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) - + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR) - 1)), + 0) as id_partd, + nvl(to_number(rtrim(substr(lista || V_SEPARATOR || + V_SEPARATOR, + instr(lista || V_SEPARATOR || + V_SEPARATOR, + V_SEPARATOR, + 1, + 2) + 1), + V_SEPARATOR)), + 0) as id_partc + from (SELECT X as LISTA + FROM table(charc2collection(V_SIR_MODIFICARI_PART, + V_SEPARATOR_LINIE)))) B + ON (A.ID_ACT = B.ID_ACT) + WHEN MATCHED THEN + UPDATE SET ID_PARTD = B.ID_PARTD, ID_PARTC = B.ID_PARTC; + + END IF; + + IF pack_facturare.ntip = 27 THEN + pack_facturare.finalizeaza_avize_lucrare(V_DISCOUNT_FACTURA); + V_ID_VANZARE := NULL; + ELSE + pack_facturare.finalizeaza_factura(V_DISCOUNT_FACTURA, + V_ID_DELEGAT, + V_ID_MASINA, + V_ID_FACTURARE, + V_LISTARE_DETALIATA, + V_DATAORA_EXP, + V_ID_AGENT, + V_TEXT_ADITIONAL, + V_PARAMETRU_ADITIONAL); + V_ID_VANZARE := pack_facturare.nid_vanzare; + END IF; + + END finalizeaza_scriere_verificare; + ------------------------------------------------------------------- + Procedure initializeaza_scriere_actrul(tdDataOra IN DATE, + tnSuprascriereCod IN NUMBER DEFAULT 1) IS + BEGIN + pack_contafin.initializeaza_scriere_act_rul(pack_facturare.nid_util, + tdDataOra, + pack_facturare.nan, + pack_facturare.nluna, + tnSuprascriereCod, + 1, -- tnSuprascriereAnLuna + 0, -- tnScrie_Sterge: 0 = scriere, 1 = refacere, 2 = stergere + pack_facturare.nid_sucursala); + END initializeaza_scriere_actrul; + ------------------------------------------------------------------- + PROCEDURE finalizeaza_scriere_actrul IS + BEGIN + pack_contafin.finalizeaza_scriere_act_rul(); + END finalizeaza_scriere_actrul; + ------------------------------------------------------------------- + PROCEDURE marcheaza_facturat(V_VERIFICARE IN NUMBER) IS + BEGIN + IF V_VERIFICARE = 0 THEN + UPDATE VANZARI + SET FACTURAT = 1, ID_UTILFACT = pack_facturare.nid_util + WHERE ID_VANZARE IN + (SELECT id_vanzare_aviz as id_vanzare + FROM vanzari_coresp + WHERE id_vanzare_Fact = pack_facturare.nid_vanzare + AND sters = 0 + AND tip <> 3) -- modificare v 2.0.56 : tip <> 3 + AND FACTURAT = 0; + ELSE + UPDATE VANZARI + SET FACTURAT = 1, ID_UTILFACT = pack_facturare.nid_util + WHERE ID_VANZARE IN + (select id_vanzare + from (select a.id_vanzare, + sum(a.cantitate - NVL(b.cantitate, 0)) as ramas + from vanzari_detalii a + left join (select sum(cantitate) as cantitate, + id_vanzare_det_aviz as id_vanzare_det + from vanzari_cantitati + where sters = 0 + group by id_vanzare_det_aviz) b + on a.id_vanzare_det = b.id_vanzare_det + where a.id_vanzare in + (select id_vanzare_aviz as id_vanzare + from vanzari_coresp + where id_vanzare_Fact = + pack_facturare.nid_vanzare + and sters = 0 + and tip <> 3) -- modificare v 2.0.56 : sters = 0 and tip <> 3 + group by a.id_vanzare) + where ramas = 0); + + END IF; + END marcheaza_facturat; + ------------------------------------------------------------------- + PROCEDURE scrie_cantitati_vanzari_avize IS + V_SEPARATOR VARCHAR2(10) := ','; + V_LISTA VARCHAR2(3000) := ''; + BEGIN + V_LISTA := pack_facturare.clistaid_avize || V_SEPARATOR || + pack_facturare.nid_vanzare || V_SEPARATOR; + + INSERT INTO VANZARI_CANTITATI + (ID_VANZARE_DET, ID_VANZARE_DET_AVIZ, CANTITATE) + SELECT A.MAX_IDT AS ID_VANZARE_DET, + A.ID_VANZARE_DET AS ID_VANZARE_DET_AVIZ, + (CASE + WHEN A.TOTAL >= 0 THEN + A.CANTITATE + ELSE + A.CANTITATE + A.TOTAL + END) AS CANTITATE + FROM (SELECT MAX(A.ID_VANZARE) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT) AS MAX_ID, + MAX(A.ID_VANZARE_DET) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT) AS MAX_IDT, + SUM(DECODE(A.ID_VANZARE, + pack_facturare.nid_vanzare, + A.CANTITATE, + (-1) * A.CANTITATE)) OVER(PARTITION BY A.ID_ARTICOL, A.SERIE, A.DISCOUNT_UNITAR, A.ID_POL, A.ID_VALUTA, A.PRET, A.ID_GESTIUNE, A.CONT ORDER BY DECODE(A.ID_VANZARE, pack_facturare.nid_vanzare, 0, A.ID_VANZARE_DET)) AS TOTAL, + A.ID_VANZARE, + DECODE(A.ID_VANZARE, + pack_facturare.nid_vanzare, + 0, + A.ID_VANZARE_DET) AS ID_VANZARE_DET, + DECODE(A.ID_VANZARE, + pack_facturare.nid_vanzare, + 0, + A.CANTITATE) AS CANTITATE, + A.ID_ARTICOL, + A.SERIE, + A.DISCOUNT_UNITAR, + A.ID_POL, + A.ID_VALUTA, + A.PRET, + A.ID_GESTIUNE, + A.CONT + FROM VANZARI_DETALII A + WHERE A.ID_VANZARE IN + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTA, V_SEPARATOR))) + AND A.STERS = 0 + ORDER BY A.ID_ARTICOL, + A.SERIE, + A.DISCOUNT_UNITAR, + A.ID_POL, + A.ID_VALUTA, + A.PRET, + A.ID_GESTIUNE, + A.CONT, + A.ID_VANZARE_DET DESC) A + WHERE A.MAX_ID = pack_facturare.nid_vanzare + AND A.ID_VANZARE_DET <> 0 + AND A.CANTITATE + A.TOTAL > 0 + ORDER BY A.MAX_IDT, A.ID_VANZARE_DET; + + END scrie_cantitati_vanzari_avize; + ------------------------------------------------------------------- + PROCEDURE scrie_corespondente_vanzari(V_TIP IN NUMBER) IS + V_LISTAID VARCHAR2(2000); + V_SEPARATOR VARCHAR2(1) := ','; + BEGIN + IF V_TIP = 1 THEN + -- facturare din aviz: + V_LISTAID := SUBSTR(pack_facturare.clistaid_avize, + 1, + LENGTH(pack_facturare.clistaid_avize) - 1); + ELSE + V_LISTAID := pack_facturare.clistaid; + END IF; + + INSERT INTO VANZARI_CORESP + (ID_VANZARE_FACT, ID_VANZARE_AVIZ, TIP) + SELECT pack_facturare.nid_vanzare as ID_VANZARE_FACT, + ID_VANZARE as ID_VANZARE_AVIZ, + V_TIP as TIP + FROM VANZARI + WHERE ID_VANZARE IN + (SELECT X as ID_VANZARE + FROM table(charn2collection(V_LISTAID, V_SEPARATOR)) + + ); + -- Completez VANZARI.AVIZE redundant, pentru a nu face mai rapid fact_vfacturi (selecta din fact_vdetalii_avize) + UPDATE VANZARI + SET AVIZE = + SUBSTR((select stringagg(nvl(a2.serie_act, '') || CHR(32) || + a2.numar_act) as nr_avize + from vanzari_coresp a1 + join vanzari a2 + on a1.id_vanzare_aviz = a2.id_vanzare + where a1.id_vanzare_fact = pack_facturare.nid_vanzare),1,1000); + + END scrie_corespondente_vanzari; + ------------------------------------------------------------------- + PROCEDURE cauta_date_ultima_factura(V_ID_PART IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2) IS + BEGIN + BEGIN + SELECT A.ID_DELEGAT, + B.DENUMIRE, + B.REG_COMERT, + B.COD_FISCAL, + A.ID_MASINA, + C.NRINMAT + INTO V_ID_DELEGAT, + V_NUME_DELEGAT, + V_SERIE_BI, + V_CNP, + V_ID_MASINA, + V_NRINMAT + FROM (SELECT ID_DELEGAT, + ID_MASINA, + ROW_NUMBER() OVER(ORDER BY DATA_ACT DESC) AS NRCRT + FROM VANZARI + WHERE STERS = 0 + AND ID_PART = V_ID_PART + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN NOM_PARTENERI B + ON A.ID_DELEGAT = B.ID_PART + AND B.STERS = 0 + AND B.INACTIV = 0 + LEFT JOIN NOM_MASINI C + ON A.ID_MASINA = C.ID_MASINA + AND C.STERS = 0 + AND C.INACTIV = 0 + WHERE A.NRCRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + BEGIN + -- daca nu am gasit datele de pe ultima factura, iar id_part corespunde unei persoane fizice, + -- atunci iau datele acesteia + SELECT ID_PART, DENUMIRE, REG_COMERT, COD_FISCAL + INTO V_ID_DELEGAT, V_NUME_DELEGAT, V_SERIE_BI, V_CNP + FROM NOM_PARTENERI + WHERE ID_PART = V_ID_PART + AND TIP_PERSOANA = 2; + + MERGE INTO CORESP_TIP_PART + USING DUAL + ON (ID_TIP_PART = pack_sesiune.getoptiunefirma(USER, 'IDTIPDELEGATI') AND ID_PART = V_ID_PART) + WHEN NOT MATCHED THEN + INSERT + (ID_TIP_PART, ID_PART) + VALUES + (pack_sesiune.getoptiunefirma(USER, 'IDTIPDELEGATI'), + V_ID_PART); + + MERGE INTO CORESP_DELEGATI_PART + USING DUAL + ON (ID_DELEGAT = V_ID_PART AND ID_PART = V_ID_PART) + WHEN NOT MATCHED THEN + INSERT (ID_DELEGAT, ID_PART) VALUES (V_ID_PART, V_ID_PART); + + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_DELEGAT := NULL; + V_NUME_DELEGAT := ''; + V_SERIE_BI := ''; + V_CNP := ''; + END; + V_ID_MASINA := NULL; + V_NRINMAT := ''; + END; + END cauta_date_ultima_factura; + -------------------------------------------------------------------------------------------------------------- + -- caut datele ultimei facturi dupa tip (pentru avize de transfer intre subunitati, nu am client) + PROCEDURE cauta_date_ultima_factura_tip(V_TIP IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_ID_DELEGAT OUT NUMBER, + V_NUME_DELEGAT OUT VARCHAR2, + V_SERIE_BI OUT VARCHAR2, + V_CNP OUT VARCHAR2, + V_ID_MASINA OUT NUMBER, + V_NRINMAT OUT VARCHAR2) IS + BEGIN + BEGIN + SELECT A.ID_DELEGAT, + B.DENUMIRE, + B.REG_COMERT, + B.COD_FISCAL, + A.ID_MASINA, + C.NRINMAT + INTO V_ID_DELEGAT, + V_NUME_DELEGAT, + V_SERIE_BI, + V_CNP, + V_ID_MASINA, + V_NRINMAT + FROM (SELECT ID_DELEGAT, + ID_MASINA, + ROW_NUMBER() OVER(ORDER BY ID_VANZARE DESC) AS NRCRT + FROM VANZARI + WHERE STERS = 0 + AND TIP = V_TIP + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99)) A + LEFT JOIN NOM_PARTENERI B + ON A.ID_DELEGAT = B.ID_PART + AND B.STERS = 0 + AND B.INACTIV = 0 + LEFT JOIN NOM_MASINI C + ON A.ID_MASINA = C.ID_MASINA + AND C.STERS = 0 + AND C.INACTIV = 0 + WHERE A.NRCRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_ID_DELEGAT := NULL; + V_NUME_DELEGAT := ''; + V_SERIE_BI := ''; + V_CNP := ''; + V_ID_MASINA := NULL; + V_NRINMAT := ''; + END; + + END cauta_date_ultima_factura_tip; + ---------------------------------------------------------------------------- + PROCEDURE cauta_date_comanda(V_ID_CLIENT IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2) is + BEGIN + BEGIN + SELECT TO_CHAR(ID_COMANDA), NR_COMANDA + INTO V_LISTAID, V_DESCRIERE + FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATA_LIVRARE) AS NR_CRT, + ID_COMANDA, + NR_COMANDA + FROM VCOMENZI + WHERE FACTURAT = 0 + AND INTERNA = 2 + AND ID_PART = V_ID_CLIENT + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99) + AND TRUNC(DATA_LIVRARE) = TRUNC(V_DATA_FACTURA)) + WHERE NR_CRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_LISTAID := NULL; + V_DESCRIERE := NULL; + END; + END cauta_date_comanda; + ---------------------------------------------------------------------------- + PROCEDURE cauta_date_comanda_gest(V_ID_GESTIUNE IN NUMBER, + V_ID_SUCURSALA IN NUMBER, + V_DATA_FACTURA IN DATE, + V_LISTAID OUT VARCHAR2, + V_DESCRIERE OUT VARCHAR2) is + BEGIN + BEGIN + SELECT TO_CHAR(ID_COMANDA), NR_COMANDA + INTO V_LISTAID, V_DESCRIERE + FROM (SELECT ROW_NUMBER() OVER(ORDER BY DATA_LIVRARE) AS NR_CRT, + ID_COMANDA, + NR_COMANDA + FROM VCOMENZI + WHERE FACTURAT = 0 + AND NVL(ID_SUCURSALA, -99) = NVL(V_ID_SUCURSALA, -99) + AND INTERNA = 3 + AND ID_GESTIUNE = V_ID_GESTIUNE + AND TRUNC(DATA_LIVRARE) = TRUNC(V_DATA_FACTURA)) + WHERE NR_CRT = 1; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_LISTAID := NULL; + V_DESCRIERE := NULL; + END; + END cauta_date_comanda_gest; + ---------------------------------------------------------------------------- + -- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact ) + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + BEGIN + -- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0 + RETURN pack_sesiune.calculeaza_total_cu_tva(V_PRET => V_PRET, + V_AJUSTARE => V_AJUSTARE, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_CU_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => NULL, + V_ZECIMALE_SUMA => NULL); + + END calculeaza_total_cu_tva; + ------------------------------------------------------------------- + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + BEGIN + RETURN pack_sesiune.calculeaza_total_cu_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA); + END calculeaza_total_cu_tva; + ------------------------------------------------------------------- + -- e folosita in view-ul fact_vrap_centralizator_fact + FUNCTION calculeaza_total_cu_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC'); + V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV'); + V_SUMA_CU_TVA ACT.SUMA%TYPE; + BEGIN + IF V_PRET_CU_TVA = 1 THEN + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALE_PRETV) - + ROUND(V_DIFERENTA * V_PROC_TVAV, + V_ZECIMALE_PRETV)) * V_CANTITATE, + V_ZECIMALE_SUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) * V_CANTITATE, + V_ZECIMALE_SUMA); + ELSE + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) - + ROUND(V_DIFERENTA * V_PROC_TVAV, + V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV)) * V_CANTITATE, + V_ZECIMALE_SUMA); + END IF; + ELSE + V_SUMA_CU_TVA := pack_facturare.calculeaza_total_fara_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV) + + pack_facturare.calculeaza_total_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV); + END IF; + RETURN V_SUMA_CU_TVA; + END calculeaza_total_cu_tva_fact; + ------------------------------------------------------------------- + -- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact ) + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + BEGIN + -- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0 + RETURN pack_sesiune.calculeaza_total_fara_tva(V_PRET => V_PRET, + V_AJUSTARE => V_AJUSTARE, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_CU_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => NULL, + V_ZECIMALE_SUMA => NULL); + + END calculeaza_total_fara_tva; + ------------------------------------------------------------------- + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + BEGIN + RETURN pack_sesiune.calculeaza_total_fara_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA); + END calculeaza_total_fara_tva; + ------------------------------------------------------------------- + -- e folosita in view-ul fact_vrap_centralizator_fact + FUNCTION calculeaza_total_fara_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC'); + V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV'); + V_SUMA_FARA_TVA ACT.SUMA%TYPE; + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_FARA_TVA := pack_facturare.calculeaza_total_cu_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV) - + pack_facturare.calculeaza_total_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV); + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) * V_CANTITATE, + V_ZECIMALE_SUMA); + ELSE + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA); + END IF; + END IF; + RETURN V_SUMA_FARA_TVA; + END calculeaza_total_fara_tva_fact; + ------------------------------------------------------------------- + -- e folosita in view-urile fact_vrap_centralizator_* ( in afara de _fact ) + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + BEGIN + -- APELEZ calculeaza_total_cu_tva cu V_ZECIMALE_PRET = 0 + Return pack_sesiune.calculeaza_total_tva(V_PRET => V_PRET, + V_AJUSTARE => V_AJUSTARE, + V_CURS => V_CURS, + V_DISCOUNT_UNITAR => V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT => V_DISCOUNT_EVIDENTIAT, + V_CANTITATE => V_CANTITATE, + V_PRET_CU_TVA => V_PRET_CU_TVA, + V_PROC_TVAV => V_PROC_TVAV, + V_ZECIMALE_PRET => NULL, + V_ZECIMALE_SUMA => NULL); + + END calculeaza_total_tva; + ------------------------------------------------------------------- + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + BEGIN + RETURN pack_sesiune.calculeaza_total_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALE_PRET, + V_ZECIMALE_SUMA); + END calculeaza_total_tva; + ---------------------------------------------------------------------------------------- + -- e folosita in view-ul fact_vrap_centralizator_fact + FUNCTION calculeaza_total_tva_fact(V_PRET IN NUMBER, + V_DIFERENTA IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER) + RETURN NUMBER IS + V_ZECIMALE_SUMA NUMBER(1) := pack_sesiune.getOptiuneFirma('PC'); + V_ZECIMALE_PRETV NUMBER(1) := pack_sesiune.getOptiuneFirma('PPRETV'); + V_SUMA_TVA ACT.SUMA%TYPE; + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_TVA := ROUND(pack_facturare.calculeaza_total_cu_tva_fact(V_PRET, + V_DIFERENTA, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV) * + (V_PROC_TVAV - 1) / V_PROC_TVAV, + V_ZECIMALE_SUMA); + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1), + V_ZECIMALE_SUMA) - + ROUND(ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV) * V_CANTITATE, + V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1), + V_ZECIMALE_SUMA); + ELSE + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALE_PRETV), + V_ZECIMALE_PRETV) - V_DIFERENTA) * + V_CANTITATE, + V_ZECIMALE_SUMA) * (V_PROC_TVAV - 1), + V_ZECIMALE_SUMA); + END IF; + END IF; + RETURN V_SUMA_TVA; + END calculeaza_total_tva_fact; + ------------------------------------------------------------------- + PROCEDURE actualizeaza_vanzari(V_COD_VECHI IN NUMBER, + V_COD_NOU IN NUMBER) is + BEGIN + -- de modificat in caz ca il las sa stearga manual inregistrari din VANZARI_DETALII + -- acum se marcheaza cu STERS = 1 doar cand se sterge toata factura + UPDATE VANZARI_DETALII + SET STERS = 0 + WHERE ID_VANZARE IN + (SELECT ID_VANZARE FROM VANZARI WHERE COD = V_COD_VECHI); + UPDATE VANZARI SET COD = V_COD_NOU, STERS = 0 WHERE COD = V_COD_VECHI; + END actualizeaza_vanzari; + ------------------------------------------------------------------- + PROCEDURE sterge_din_vanzari(V_COD IN NUMBER, + V_AN IN NUMBER, + V_LUNA IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_ID_VANZARE VANZARI.ID_VANZARE%TYPE; + BEGIN + BEGIN + SELECT ID_VANZARE INTO V_ID_VANZARE FROM VANZARI WHERE COD = V_COD; + pack_facturare.sterge_factura(V_ID_VANZARE, V_LUNA, V_AN, V_ID_UTIL); + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Aceasta factura nu a fost inregistrata in ROAFACTURARE! (FACT-017 : ' || + V_COD || ')'); + END; + END sterge_din_vanzari; + ------------------------------------------------------------------- + PROCEDURE verifica_cursuri_valute(V_DATA_CURS IN DATE, + V_ID_UTIL IN NUMBER) IS + V_NUME_VALUTE VARCHAR2(100); + BEGIN + -- verificare ca exista cursul pentru valutele din FACT_VPRETURI_UTILIZATOR + SELECT STRINGAGG(B.NUME_VAL) + INTO V_NUME_VALUTE + FROM (SELECT A.ID_VALUTA, B.CURS + FROM (SELECT DISTINCT ID_VALUTA + FROM FACT_VPRETURI_UTILIZATOR + WHERE ID_UTIL = V_ID_UTIL) A + LEFT JOIN CURS B + ON A.ID_VALUTA = B.ID_VALUTA + AND B.STERS = 0 + AND B.DATA <= V_DATA_CURS + AND B.DATA2 >= V_DATA_CURS) A + LEFT JOIN NOM_VALUTE B + ON A.ID_VALUTA = B.ID_VALUTA + WHERE A.CURS IS NULL + AND A.ID_VALUTA <> pack_facturare.nid_moneda_nationala; + + IF V_NUME_VALUTE IS NOT NULL THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu este setat cursul din data de ' || + to_char(V_DATA_CURS, 'DD/MM/YYYY') || + ' pentru ' || V_NUME_VALUTE || '!'); + END IF; + END verifica_cursuri_valute; + ------------------------------------------------------------------- + PROCEDURE verifica_total_document IS + V_TOTFTVA_VER ACT.SUMA%TYPE; + V_ID_TOTFTVA ACT.SUMA%TYPE; + V_TOTTVA_VER ACT.SUMA%TYPE; + V_ID_TOTTVA ACT.SUMA%TYPE; + BEGIN + IF pack_facturare.ntip < 20 or + pack_facturare.ntip in (pack_facturare.nTipFacturaHotel, + pack_facturare.nTipFacturaRestaurant, + 48, + 49,51,52) THEN + SELECT SUM(CASE + WHEN SCD in ('667', '267', '2678', '709') THEN + (-1) * SUMA + WHEN SCC <> '4427' THEN + SUMA + ELSE + 0 + END), + SUM(CASE + WHEN SCC = '4427' THEN + SUMA + ELSE + 0 + END), + MIN(CASE + WHEN SCC <> '4427' AND + SCD not in ('667', '267', '2678', '709') THEN + ID_ACT + ELSE + 9999999 + END), + MIN(CASE + WHEN SCC = '4427' THEN + ID_ACT + ELSE + 9999999 + END) + INTO V_TOTFTVA_VER, V_TOTTVA_VER, V_ID_TOTFTVA, V_ID_TOTTVA + FROM ACT_TEMP + WHERE (SCD = '4111' OR (SCC = '4111' AND SCD not in ('5311','5314','5121','5125','5126'))); + ELSE + SELECT SUM(CASE + WHEN SCD in ('667', '267', '2678', '709') THEN + (-1) * SUMA + WHEN SCC <> '4428' THEN + SUMA + ELSE + 0 + END), + SUM(CASE + WHEN SCC = '4428' THEN + SUMA + ELSE + 0 + END), + MIN(CASE + WHEN SCC <> '4428' AND + SCD not in ('667', '267', '2678', '709') THEN + ID_ACT + ELSE + 9999999 + END), + MIN(CASE + WHEN SCC = '4428' THEN + ID_ACT + ELSE + 9999999 + END) + INTO V_TOTFTVA_VER, V_TOTTVA_VER, V_ID_TOTFTVA, V_ID_TOTTVA + FROM ACT_TEMP + WHERE (SCD = '418' OR SCC = '418'); + END IF; + IF NVL(pack_facturare.ntotftva, 0) <> 0 and + NVL(pack_facturare.ntotftva, 0) <> V_TOTFTVA_VER THEN + + pack_facturare.ndifftva := pack_facturare.ntotftva - V_TOTFTVA_VER; + insert into act_temp + (id_act, + luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + tva_incasare, + validat, + id_utilv, + dataorav, + taxcode) + select b.id_act, + a.luna, + a.an, + a.cod, + a.dataireg, + a.nract, + a.dataact, + a.explicatia, + a.scd, + a.ascd, + a.scc, + a.ascc, + pack_facturare.ndifftva as suma, + a.pereched, + a.perechec, + 0 as suma_val, + a.curs, + a.datascad, + a.neimpozab, + a.nnir, + a.id_util, + a.dataora, + a.id_utils, + a.dataoras, + a.id_responsabil, + a.id_venchelt, + a.id_sectie, + a.id_set, + a.id_fact, + a.id_partd, + a.id_partc, + a.id_sucursala, + a.id_fdoc, + a.explicatia4, + a.explicatia5, + a.id_lucrare, + a.id_gestin, + a.id_gestout, + a.id_valuta, + a.proc_tva, + a.sters, + a.id_factd, + a.id_factc, + a.id_ctr, + a.id_jtva_coloana, + a.serie_act, + pack_facturare.ntva_incasare, + a.validat, + a.id_utilv, + a.dataorav, + a.taxcode + from act_temp a + left join (select max(id_act) + 1 as id_act, 0 as sters + from act_temp) b + on a.sters = b.sters + where a.id_act = V_ID_TOTFTVA; + END IF; + IF NVL(pack_facturare.ntottva, 0) <> 0 and + NVL(pack_facturare.ntottva, 0) <> V_TOTTVA_VER THEN + + pack_facturare.ndiftva := pack_facturare.ntottva - V_TOTTVA_VER; + + insert into act_temp + (id_act, + luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + tva_incasare, + validat, + id_utilv, + dataorav, + taxcode) + select b.id_act, + a.luna, + a.an, + a.cod, + a.dataireg, + a.nract, + a.dataact, + a.explicatia, + a.scd, + a.ascd, + a.scc, + a.ascc, + pack_facturare.ndiftva as suma, + a.pereched, + a.perechec, + 0 as suma_val, + a.curs, + a.datascad, + a.neimpozab, + a.nnir, + a.id_util, + a.dataora, + a.id_utils, + a.dataoras, + a.id_responsabil, + a.id_venchelt, + a.id_sectie, + a.id_set, + a.id_fact, + a.id_partd, + a.id_partc, + a.id_sucursala, + a.id_fdoc, + a.explicatia4, + a.explicatia5, + a.id_lucrare, + a.id_gestin, + a.id_gestout, + a.id_valuta, + a.proc_tva, + a.sters, + a.id_factd, + a.id_factc, + a.id_ctr, + a.id_jtva_coloana, + a.serie_act, + pack_facturare.ntva_incasare, + a.validat, + a.id_utilv, + a.dataorav, + a.taxcode + from act_temp a + left join (select max(id_act) + 1 as id_act, 0 as sters + from act_temp) b + on a.sters = b.sters + where a.id_act = V_ID_TOTTVA; + END IF; + + IF pack_facturare.ntip in (48, 49) AND + ((NVL(pack_facturare.ntottva, 0) <> 0 and + NVL(pack_facturare.ntottva, 0) <> V_TOTTVA_VER) OR + (NVL(pack_facturare.ntotftva, 0) <> 0 and + NVL(pack_facturare.ntotftva, 0) <> V_TOTFTVA_VER)) THEN + insert into act_temp + (id_act, + luna, + an, + cod, + dataireg, + nract, + dataact, + explicatia, + scd, + ascd, + scc, + ascc, + suma, + pereched, + perechec, + suma_val, + curs, + datascad, + neimpozab, + nnir, + id_util, + dataora, + id_utils, + dataoras, + id_responsabil, + id_venchelt, + id_sectie, + id_set, + id_fact, + id_partd, + id_partc, + id_sucursala, + id_fdoc, + explicatia4, + explicatia5, + id_lucrare, + id_gestin, + id_gestout, + id_valuta, + proc_tva, + sters, + id_factd, + id_factc, + id_ctr, + id_jtva_coloana, + serie_act, + tva_incasare, + validat, + id_utilv, + dataorav) + select b.id_act, + a.luna, + a.an, + a.cod, + a.dataireg, + a.nract, + a.dataact, + a.explicatia, + a.scd, + a.ascd, + a.scc, + a.ascc, + pack_facturare.ndifftva + pack_facturare.ndiftva as suma, + a.pereched, + a.perechec, + 0 as suma_val, + a.curs, + a.datascad, + a.neimpozab, + a.nnir, + a.id_util, + a.dataora, + a.id_utils, + a.dataoras, + a.id_responsabil, + a.id_venchelt, + a.id_sectie, + a.id_set, + a.id_fact, + a.id_partd, + a.id_partc, + a.id_sucursala, + a.id_fdoc, + a.explicatia4, + a.explicatia5, + a.id_lucrare, + a.id_gestin, + a.id_gestout, + a.id_valuta, + a.proc_tva, + a.sters, + a.id_factd, + a.id_factc, + a.id_ctr, + a.id_jtva_coloana, + a.serie_act, + pack_facturare.ntva_incasare, + a.validat, + a.id_utilv, + a.dataorav + from act_temp a + left join (select max(id_act) + 1 as id_act, 0 as sters + from act_temp) b + on a.sters = b.sters + where a.scc = '357'; + END IF; + + END verifica_total_document; + ------------------------------------------------------------------- + PROCEDURE verifica_analitice378 is + BEGIN + SELECT DECODE(X, 0, 0, 1) + INTO PACK_FACTURARE.NANALITICE_378 + FROM (SELECT COUNT(*) AS X + FROM plcont + WHERE CONT = '378' + AND AN = PACK_FACTURARE.nan + AND TIP_CONT = 1 + AND INACTIV = 0); + END verifica_analitice378; + ------------------------------------------------------------------- + function GetAnaliticByGrupUtilizatori(tnIdUtilizator ACT.ID_UTIL%TYPE, + tcCont ACT.SCD%TYPE) + return ACT.ASCD%TYPE IS + lcAcont ACT.ASCD%TYPE; + BEGIN + BEGIN + select ga.acont + into lcAcont + from config_gruputil_analitice ga + join utilizatori_rol_intern u + on ga.id_grup = u.id_grup + where u.id_util = tnIdUtilizator + and ga.cont = tcCont + and u.sters = 0; + EXCEPTION + WHEN NO_DATA_FOUND THEN + NULL; + END; + return lcAcont; + end GetAnaliticByGrupUtilizatori; + ------------------------------------------------------------------- + -- intoarce analiticul unui cont (371,607,378 etc.) + -- pe baza configurarilor din config_analitice si a GESTIUNII/ARTICOLULUI + FUNCTION GetAnaliticByArticol(tcCont RUL.CONT%TYPE, + tnIdGestiune RUL.ID_GESTIUNE%TYPE DEFAULT NULL, + tnIdArticol RUL.ID_ARTICOL%TYPE DEFAULT NULL) + return RUL.ACONT%TYPE IS + + crs_linie config_analitice%rowtype; + lcSelect VARCHAR2(10000); + lcAnalitic VARCHAR2(1000); + lcColoanaP VARCHAR2(100); + lcColoanaS VARCHAR2(100); + lcNumeColoanaP VARCHAR2(1000); + lcNumeColoanaS VARCHAR2(1000); + lcAcont RUL.ACONT%TYPE; + lcParametruP VARCHAR2(100); + lcParametruS VARCHAR2(100); + BEGIN + + begin + select * + into crs_linie + from config_analitice a + where a.cont = tcCont; + exception + when NO_DATA_FOUND then + return lcAcont; + end; + + lcAnalitic := ''; + lcColoanaP := ''; + lcColoanaS := ''; + if crs_linie.tabel_prefix is not null then + lcColoanaP := 'A.' || crs_linie.camp_leg_prefix; + lcNumeColoanaP := crs_linie.camp_leg_prefix; + lcAnalitic := 'substr(a.' || crs_linie.col_prefix || ',' || + crs_linie.poz_start_prefix || ',' || + crs_linie.nr_return_prefix || ')'; + end if; + + if crs_linie.tabel_sufix is not null then + lcColoanaS := 'B.' || crs_linie.camp_leg_sufix; + lcNumeColoanaS := crs_linie.camp_leg_prefix; + lcAnalitic := lcAnalitic || '||substr(b.' || crs_linie.col_sufix || ',' || + crs_linie.poz_start_sufix || ',' || + crs_linie.nr_return_sufix || ')'; + end if; + + lcParametruP := CASE UPPER(lcNumeColoanaP) + WHEN 'ID_GESTIUNE' THEN + 'tnIdGestiune' + WHEN 'ID_ARTICOL' THEN + 'tnIdArticol' + ELSE + '' + END; + lcParametruS := CASE UPPER(lcNumeColoanaS) + WHEN 'ID_GESTIUNE' THEN + 'tnIdGestiune' + WHEN 'ID_ARTICOL' THEN + 'tnIdArticol' + ELSE + '' + END; + if lcParametruP is not null then + lcSelect := 'SELECT ' || lcAnalitic || ' AS ACONT + FROM ' || crs_linie.tabel_prefix || + ' A ' || (CASE + WHEN lcColoanaS IS NULL THEN + '' + ELSE + 'LEFT JOIN ' || crs_linie.tabel_sufix || + ' B ON 1=1 AND A.STERS = 0 AND B.STERS = 0 ' + END) || 'WHERE ' || CASE UPPER(lcNumeColoanaP) + WHEN 'ID_GESTIUNE' THEN + tnIdGestiune + WHEN 'ID_ARTICOL' THEN + tnIdArticol + END || ' = ' || lcNumeColoanaP || ' ' || (CASE + WHEN lcColoanaS IS NULL or lcParametruS IS NULL THEN + '' + ELSE + 'AND ' || CASE UPPER(lcNumeColoanaS) + WHEN 'ID_GESTIUNE' THEN + 'tnIdGestiune' + WHEN 'ID_ARTICOL' THEN + 'tnIdArticol' + END || ' = ' || lcNumeColoanaS + END); + + EXECUTE IMMEDIATE lcSelect + into lcAcont; + END IF; -- lcParametruP + + return lcAcont; + END GetAnaliticByArticol; + ----------------------------------------------------------------------------------------------- + Procedure citeste_vanzari_seturi(V_COD IN NUMBER, + V_CURSOR OUT cursor_facturare) is + begin + OPEN V_CURSOR FOR + select b2.id_vanzare_set, + cast(a2.id_vanzare_det as number(10)) as id_vanzare_det, + b2.denumire, + b2.explicatie, + b2.cantitate, + b2.um, + b2.serie, + cast(decode(a2.in_valuta, + 1, + round(b2.pret * a2.curs / a2.multiplicator, + pack_sesiune.nzecimale_pretv), + b2.pret) as number(14, 4)) as pret, + cast(decode(a2.in_valuta, 1, b2.pret, 0) as number(14, 4)) as pret_val, + a2.id_valuta, + a2.in_valuta as tip_valuta, + c2.nume_val, + decode(a2.in_valuta, + 1, + round(Nvl(b2.discount_unitar, 0) * a2.curs / + a2.multiplicator, + pack_sesiune.nzecimale_pretv), + Nvl(b2.discount_unitar, 0)) as discount_unitar, + decode(a2.in_valuta, 1, Nvl(b2.discount_unitar, 0), 0) as discount_unitar_val, + b2.pret_cu_tva as pret_cu_tva, + a2.curs, + a2.multiplicator, + cast(0 as number(18)) as id_ctr, -- a2.id_ctr, + cast(null as varchar2(100)) as numar_contract, -- c2.numar_contract, + cast(a2.proc_tvav as number(8, 4)) as proc_Tvav, + cast(a2.id_jtva_coloana as number(10)) as id_jtva_coloana, + cast(a2.gestionabil as number(1)) as gestionabil, + cast(null as varchar2(100)) as codmat, + cast(null as varchar2(100)) as codmatf, + cast(null as varchar2(100)) as codbare, + cast(0 as number(14, 4)) as pret_achizitie, + cast(null as number(10)) as id_gestiune + from (select b.id_vanzare_set, + a.in_valuta, + -- b.id_ctr, + max(b.proc_tvav) as proc_tvav, + max(nvl2(b.id_gestiune, 1, 0)) as gestionabil, + min(b.id_jtva_coloana) as id_jtva_coloana, + min(b.id_vanzare_det) as id_vanzare_det, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala()) as id_valuta + from (select id_vanzare, in_valuta + from vanzari + where cod = V_COD + and sters = 0) a + left join vanzari_detalii b + on a.id_vanzare = b.id_vanzare + and b.sters = 0 + left join vanzari_cursuri c + on decode(a.in_valuta, 1, b.id_valuta, -10000) = + decode(a.in_valuta, 1, c.id_valuta, -9999) + and a.id_vanzare = c.id_vanzare + where b.id_vanzare_set is not null + group by b.id_vanzare_set, + a.in_valuta, + b.id_ctr, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala())) a2 + left join vanzari_seturi b2 + on a2.id_vanzare_set = b2.id_vanzare_set + left join nom_valute c2 + on a2.id_valuta = c2.id_valuta; + + end citeste_vanzari_seturi; + ----------------------------------------------------------------------------------------------- + Procedure citeste_proforme_seturi(V_ID_PROFORMA IN NUMBER, + V_CURSOR OUT cursor_facturare) is + begin + OPEN V_CURSOR FOR + select b2.id_proforma_set as id_vanzare_set, + cast(a2.id_proforma_det as number(10)) as id_vanzare_det, + b2.denumire, + b2.explicatie, + b2.cantitate, + b2.um, + b2.serie, + cast(round(decode(a2.in_valuta, + 1, + round(b2.pret * a2.curs / a2.multiplicator, + pack_sesiune.nzecimale_pretv), + b2.pret), + pack_sesiune.nzecimale_pretv) as number(14, 4)) as pret, + cast(round(decode(a2.in_valuta, 1, b2.pret, 0), + pack_sesiune.nzecimale_pretvval) as number(14, 4)) as pret_val, + a2.id_valuta, + a2.in_valuta as tip_valuta, + c2.nume_val, + decode(a2.in_valuta, + 1, + round(Nvl(b2.discount_unitar, 0) * a2.curs / + a2.multiplicator, + pack_sesiune.nzecimale_pretv), + Nvl(b2.discount_unitar, 0)) as discount_unitar, + decode(a2.in_valuta, 1, Nvl(b2.discount_unitar, 0), 0) as discount_unitar_val, + b2.pret_cu_tva as pret_cu_tva, + a2.curs, + a2.multiplicator, + cast(0 as number(18)) as id_ctr, -- a2.id_ctr, + cast(null as varchar2(100)) as numar_contract, -- c2.numar_contract, + cast(a2.proc_tvav as number(8, 4)) as proc_Tvav, + cast(a2.id_jtva_coloana as number(10)) as id_jtva_coloana, + cast(a2.gestionabil as number(1)) as gestionabil, + cast(null as varchar2(100)) as codmat, + cast(null as varchar2(100)) as codmatf, + cast(null as varchar2(100)) as codbare, + cast(0 as number(14, 4)) as pret_achizitie, + cast(null as number(10)) as id_gestiune + from (select b.id_proforma_set, + a.in_valuta, + -- b.id_ctr, + max(b.proc_tvav) as proc_tvav, + max(nvl2(b.id_gestiune, 1, 0)) as gestionabil, + min(b.id_jtva_coloana) as id_jtva_coloana, + min(b.id_proforma_det) as id_proforma_det, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala()) as id_valuta + from (select id_proforma, in_valuta + from proforme + where id_proforma = V_ID_PROFORMA + and sters = 0) a + left join proforme_detalii b + on a.id_proforma = b.id_proforma + and b.sters = 0 + left join proforme_cursuri c + on decode(a.in_valuta, 1, b.id_valuta, -10000) = + decode(a.in_valuta, 1, c.id_valuta, -9999) + and a.id_proforma = c.id_proforma + where b.id_proforma_set is not null + group by b.id_proforma_set, + a.in_valuta, + b.id_ctr, + c.curs, + c.multiplicator, + decode(a.in_valuta, + 1, + c.id_valuta, + pack_def.getidmonedanationala())) a2 + left join proforme_seturi b2 + on a2.id_proforma_set = b2.id_proforma_set + left join nom_valute c2 + on a2.id_valuta = c2.id_valuta; + + end citeste_proforme_seturi; + ----------------------------------------------------------------------------------------------- + procedure adauga_note_tva_incasare is + begin + UPDATE ACT_TEMP + SET SCC = '4428' + WHERE SCC = '4427' + AND TVA_INCASARE = 1 + AND ID_JTVA_COLOANA IN + (SELECT ID_TVA + FROM JTVA_COLOANE + WHERE ID_JTVA_COLOANA IN (SELECT ID_JTVA_NEEX + FROM JTVA_COLOANE + WHERE STERS = 0 + AND JV = 1)); + + INSERT INTO ACT_TEMP + (ID_ACT, + SERIE_ACT, + NRACT, + DATAIREG, + DATAACT, + PERECHEC, + SCD, + ASCD, + SCC, + ASCC, + SUMA, + ID_JTVA_COLOANA, + PROC_TVA, + ID_CTR, + ID_LUCRARE, + ID_FDOC, + ID_SECTIE, + ID_VENCHELT, + ID_FACT, + TVA_INCASARE, + ID_SET) + SELECT pack_facturare.nid_act + rownum as ID_ACT, + pack_facturare.cserie_act_incasare as serie_act, + pack_facturare.nnumar_act_incasare as nract, + pack_facturare.ddata_ireg as dataireg, + pack_facturare.ddata_act as dataact, + pack_facturare.nnumar_act as perechec, + '4428' as scd, + A1.ACONT as ascd, + '4427' as scc, + '' as ascc, + ROUND((CASE + WHEN A1.DIF <= 0 THEN + A1.totctva + ELSE + A1.totctva - A1.DIF + END) / A1.proc_tva * (A1.proc_tva - 1), + pack_sesiune.getoptiunefirma('PC')) as suma, + A3.ID_TVA AS ID_JTVA_COLOANA, + A1.PROC_TVA, + Null as id_ctr, + NVL(pack_facturare.nid_lucrare, 0) as id_lucrare, + A1.ID_FDOC, + A1.ID_SECTIE, + A1.ID_VENCHELT, + -5 AS id_fact, + pack_facturare.ntva_incasare, + pack_facturare.nid_set as id_set + FROM (select MAX(ID_FDOC) OVER() as id_fdoc, + acont, + proc_tva, + id_jtva_coloana, + baza, + tva, + totctva, + id_sectie, + id_venchelt, + SUM(totctva) OVER(ORDER BY PROC_TVA DESC, ACONT) as DIF + from (SELECT MAX(ID_FDOC) AS ID_FDOC, + NULL AS ACONT, + 2 AS PROC_TVA, + 0 as baza, + 0 as tva, + (-1) * sum(suma) AS totctva, + NULL AS ID_JTVA_COLOANA, + NULL AS ID_SECTIE, + NULL AS ID_VENCHELT + FROM act_temp + WHERE scc = '4111' + and id_jtva_coloana is null + UNION ALL + select null as id_fdoc, + a.ascc as acont, + a.proc_tva, + c.baza, + a.tva, + c.baza + a.tva as totctva, + a.id_jtva_coloana, + a.id_sectie, + a.id_venchelt + from (select ascc, + proc_tva, + sum(suma) as tva, + id_jtva_coloana, + max(id_sectie) as id_sectie, + max(id_venchelt) as id_venchelt + from act_temp + where id_jtva_coloana in + (SELECT ID_TVA + FROM VJTVA_COLOANE + WHERE ID_JTVA_EX IS NOT NULL) + group by proc_tva, id_jtva_coloana, ascc) a + left join jtva_coloane b + on a.id_jtva_coloana = b.id_tva + left join (select sum(decode(scc, '4111', -1, 1) * suma) as baza, + id_jtva_coloana + from act_temp + where id_jtva_coloana in + (SELECT ID_JTVA_COLOANA + FROM VJTVA_COLOANE + WHERE ID_JTVA_EX IS NOT NULL) + group by id_jtva_coloana) c + on b.id_jtva_coloana = c.id_jtva_coloana)) A1 + LEFT JOIN VJTVA_COLOANE A2 + ON A1.ID_JTVA_COLOANA = A2.ID_TVA + LEFT JOIN VJTVA_COLOANE A3 + ON A2.ID_JTVA_EX = A3.ID_JTVA_COLOANA + WHERE A1.ID_JTVA_COLOANA IS NOT NULL + AND A1.totctva > A1.DIF; + + end adauga_note_tva_incasare; + ----------------------------------------------------------------------------------------------- + function citeste_lungcampexplart return NUMBER is + V_LUNGIME NUMBER(10); + begin + select data_length + into V_LUNGIME + from user_tab_columns + where column_name = 'EXPLICATIE' + and table_name = 'VANZARI_DETALII'; + return V_LUNGIME; + end citeste_lungcampexplart; + ----------------------------------------------------------------------------------------------- + function getAnaliticK(tnProcTvaV IN NUMBER) return VARCHAR2 is + V_ANALITICCUST ACT.ASCC%TYPE; + lnProcTVA number(2); + begin + if tnProcTvaV between 1 and 2 then + lnProcTVA := round((tnProcTvaV - 1) * 100, 0); + else + lnProcTVA := tnProcTvaV; + end if; + + -- analiticele tip nou 371,378,4428 pentru descarcarea K + -- tnProcTvaV = 5/9/19/20/24 sau 1.05/1.09/1.19/1.20/1.24 + -- optiuni de tipul FACTANALITICCUSTK_5/FACTANALITICCUSTK_9/FACTANALITICCUSTK_19... + V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK_' || + lnProcTVA); + if V_ANALITICCUST is null then + -- daca nu gasesc analitice cu optiuni de tip nou, caut optiunile vechi pentru cota standard si cota redusa 5% + if tnProcTvaV in (1.24, 1.20, 1.19) then + V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK2'); + else + V_ANALITICCUST := pack_sesiune.getoptiunefirma('FACTANALITICCUSTK'); + end if; + end if; + return V_ANALITICCUST; + end getAnaliticK; + + ---------------------------- + -- Obtine sold client 4111 + 461 -419 din balanta_parteneri sau din ireg_parteneri pana la numarul facturii + -- Pentru afisarea in raportul factura + procedure getSoldClient(tnAn IN NUMBER, + tnLuna IN NUMBER, + tnIdPart IN NUMBER, + tnIdFact IN NUMBER default 0, + V_CURSOR OUT cursor_facturare) is + begin + IF nvl(tnIdFact, 0) = 0 then + OPEN V_CURSOR FOR + SELECT SUM(semn * (precdeb + debit - preccred - credit)) as sold_lei, + SUM(semn * (precvaldeb + valdebit - precvalcred - valcredit)) as sold_valuta + from (select 1 as semn, + precdeb, + debit, + preccred, + credit, + precvaldeb, + valdebit, + precvalcred, + valcredit + from balanta_parteneri + WHERE an = tnAn + AND luna = tnLuna + and id_part = tnIdPart + AND cont in ('4111', '461')); + ELSE + + OPEN V_CURSOR FOR + SELECT SUM(semn * (precdeb + debit - preccred - credit)) as sold_lei, + SUM(semn * (precvaldeb + valdebit - precvalcred - valcredit)) as sold_valuta + from (select 1 as semn, + precdeb, + debit, + preccred, + credit, + precvaldeb, + valdebit, + precvalcred, + valcredit + from ireg_parteneri + WHERE an = tnAn + AND luna = tnLuna + and id_part = tnIdPart + AND cont in ('4111', '461') + and (dataact < (select max(dataact) + from ireg_parteneri + where an = tnAn + and luna = tnLuna + and id_part = tnIdPart + and id_fact = tnIdFact) or + nract <= (select max(nract) + from ireg_parteneri + where an = tnAn + and luna = tnLuna + and id_part = tnIdPart + and id_fact = tnIdFact))); + + END IF; + end getSoldClient; + +end PACK_FACTURARE; +/ diff --git a/docs/service-auto/claude-main-design-20260411-rethink.md b/docs/service-auto/claude-main-design-20260411-rethink.md index 6d11ef4..8380c57 100644 --- a/docs/service-auto/claude-main-design-20260411-rethink.md +++ b/docs/service-auto/claude-main-design-20260411-rethink.md @@ -294,6 +294,91 @@ template + decision-log. Ce se schimbă: **țintim o tabelă reală (`dev_ordl`) real (`dev_tip_deviz`), și documentăm un path clar spre reuse-ul pachet-urilor legacy pentru phase 2**. Hedge-ul devine mai credibil, nu mai slab. +### Correction 13 — Ground truth complet din MARIUSM_AUTO (2026-04-11 later) + +**Ce s-a schimbat:** Marius a furnizat versiunile reale din producție: +- `docs/service-auto/mariusm_ddl_export.sql` (5127 linii DDL: tabele + views + triggere) +- `docs/service-auto/pack_auto.pck`, `PACK_FACTURARE.pck`, `PACK_SESIUNE.pck`, + `PACK_CONTAFIN.pck`, `PACK_COMENZI.pck` — body-urile reale + +**Ce s-a invalidat:** +- **`vfp_roaauto/Scripturi_instalare/packages.sql` = alt produs** ("devize producție"), NU + service auto. Toate referințele v2 la `pack_devize.dev_adauga_lucrare` erau la un pachet + care nu există în MARIUSM_AUTO. +- **`VCOMENZI` din MARIUSM_AUTO nu e pentru service auto** — e pentru ROA ERP base + (vânzări/contracte generice), cu coloane `id_codclient`/`interna`/`id_masina` care + nu aparțin flux-ului auto. +- **`dev_distribuie_timp_n`** are semnătură nouă: `(v_luna, v_an)` nu `(v_gcs, v_filtru)`. + +**Ce s-a reconfirmat ca fiind corect:** +- Pattern-ul de inheritance `NOM_LUCRARI` (parent) + `DEV_ORDL` (child, FK `id_lucrare`) +- `TRG_NOM_LUCRARI_BEFOINS` populează `pack_sesiune.dev_idLucrare` din `SEQ_NOM_LUCRARI.NEXTVAL` +- `TRG_DEV_ORDL_BEFOINS` populează `pack_sesiune.dev_idOrdl` din `SEQ_DEV_ORDL.NEXTVAL` +- Bypass `pack_sesiune` prin `RETURNING id_lucrare INTO v_local` e **trivial și safe** + (trigger-ul rulează oricum, noi îl ignorăm) + +**Descoperiri NOI critice:** +1. **`DEV_ORDL` are 37 coloane în producție** (nu 28-30 cum estima v2), cu + `PROC_TVAV`, `SOLICITARI_CLIENT CLOB`, `OBSERVATII`, `DEFECTIUNI`, `NR_DOSAR`, + `ID_PART` (FK la NOM_PARTENERI — client direct, nu doar prin mașină), `ID_AGENT`, + `ID_PART_REF`, `ORE_FUNCTIONARE`, `IN_LUCRU`, `COADA_DEVIZ`, `ID_UTIL_INCHIS`, + `DATAORAINCHIS`, `DATA_IN_LUCRU`, `DATAORAINLUCRU`, `FACTUREZMIX`, `DATA_CURS`, + `ID_VALUTA_DEVIZ`, `INCHIS_FORTAT`. FK constraints ENABLE: + `FK_DEV_ORDL_001..006` pe `DEV_NOM_INSPECTORI`, `NOM_LUCRARI`, `NOM_PARTENERI` ×3, + `NOM_VALUTE`. +2. **`DEV_OPER` e polimorfic**: poate fi **manoperă** (`id_norme` non-NULL) SAU **linie + material** (`id_articol` non-NULL + `id_rul_aux` FK la mișcarea de stoc). Materialele + pe comandă nu au tabela `DEV_MAT` separată — sunt linii în `DEV_OPER` cu tip diferit. +3. **`DEV_ESTIMARI_REP`** e tabelă nouă (pre-sale estimate) — linii cu `id_lucrare` FK, + fiecare linie e fie manoperă fie material. `pack_auto.adauga_manopera_de` / + `adauga_material_de` scriu aici. View `AUTO_VESTIMARI_REP` cu `pack_sesiune.calculeaza_*` + pentru prețuri. **Out of scope** pentru prototype. +4. **`DEV_TIP_DEVIZ.INCH_VALIDARE`** (NUMBER(1) default 1) e flag-ul care decide între + **închidere prin validare** (`dev_valideaza_comanda`) sau **închidere prin arhivare** + (`dev_arhiveaza_comanda`). Citit prin `pack_auto.getOptiuneInchidere(id_tip)`. +5. **`actualizeaza_deviz` (pack_auto)** e procedura care replace-uiește vechiul + `dev_completeaza_rul`. Face 3 UPDATE-uri într-o tranzacție: `DEV_ORDL.PROC_TVAV`, + `RUL.ID_FACT` (pentru toate materialele consumate), și — condiționat de `id_set` în + (31003-31011) — `NOM_LUCRARI.ID_FACT`. +6. **Bonuri consum = flux generic ROA, nu `pack_auto`** — `ointroduceri.prg tip=3` scrie + direct în `RUL` + `RUL_AUXILIAR` cu `ID_LUCRARE` tag. `DEV_OPER` capturează liniile + prin `id_rul_aux` FK. **Out of scope.** +7. **View-urile UI**: `AUTO_NORMARE_COMENZI`, `AUTO_VALIDARE_COMENZI`, `AUTO_ORDL_FACTURARE`, + `AUTO_COMENZI_VALIDATE` (cu time-aware validat flag prin `pack_sesiune.getluna()`), + `AUTO_VORDL_MAN`, `AUTO_VORDL_MAT` (citește din `MV_ORDL_MAT` materialized view), + `AUTO_VESTIMARI_REP`. +8. **`pack_audit.verifica_val`** — trigger-ele `_BEFOUPD` pe `NOM_LUCRARI`, `DEV_ORDL`, + `DEV_OPER`, `DEV_OPER_MECANICI` apelează această procedură pentru fiecare câmp modificat + → audit trail automat pentru TOATE UPDATE-urile. Triggerele `_BEFOINS` **nu** apelează + pack_audit — deci prototype-ul care doar inserează **nu atinge pack_audit**. + +**Audit complet:** `docs/service-auto/tabele-service-auto.md` a fost rescris complet +(v3, ~500 linii) cu referințe directe la DDL + pack_auto + pack_facturare real. Conține: +- Diagrama ierarhiei `NOM_LUCRARI → DEV_ORDL → DEV_OPER → DEV_OPER_MECANICI` +- Schema reală `DEV_ORDL` (37 coloane) + `DEV_OPER` (polimorfic) + `DEV_ESTIMARI_REP` +- Map procedure → tabele pentru întreg `pack_auto` (17 proceduri/funcții) +- Flux VFP real pentru create, normare, validare operații, validare comandă, arhivare, + facturare (cu referințe la `pack_facturare.initializeaza_date_factura`, + `adauga_articol_factura_deviz`, `scrie_in_vanzari`) +- List complete de view-uri UI cu rolul fiecăruia +- SP minimal propus pentru prototype (Opțiunea 3, rafinată) — 30 linii PL/SQL, zero + dependențe pe `pack_contafin`/`STRINGAGG`/`pack_sesiune`, doar două INSERT-uri cu + RETURNING și un duplicate-check + +**Scope wall reconfirmat**: prototype-ul rămâne la **creare comandă simplă**. Normare, +validare operații, validare comandă, arhivare, facturare, bonuri consum, estimare = +**phase 2+**. Fluxul complet e documentat ca referință viitoare, nu ca commitment. + +**Impact asupra timeline:** **zero** — task-urile săpt 1-24 rămân identice, doar că săpt 7-8 +("scrie SP_CREEAZA_COMANDA") are acum templatul PL/SQL exact definitivat în tabele-service-auto.md +§12.2, gata de copy-paste + commit. + +**Impact asupra ipotezelor:** niciuna invalidată. Ipoteza #1 rămâne centrală — probă că +Python+oracledb apelează PL/SQL cu OUT params pe un INSERT dual cu RETURNING. Ipoteza #2 +(`session_callback`) rămâne independentă. Ipoteza #3 (grants) este și mai **ușor de probat** +acum că știm exact cele două tabele atinse (`NOM_LUCRARI`, `DEV_ORDL`) și putem scrie +testul negativ cu nume fixe. + ### Correction 4 — `connection.commit()` e explicit în pattern **Prima versiune** nu menționa commit. **Realitate:** `oracledb` driver are autocommit OFF diff --git a/docs/service-auto/export_ddl.sql b/docs/service-auto/export_ddl.sql new file mode 100644 index 0000000..e3b62db --- /dev/null +++ b/docs/service-auto/export_ddl.sql @@ -0,0 +1,402 @@ +-- ============================================================================= +-- Export DDL + date din MARIUSM_AUTO pentru audit service-auto +-- ============================================================================= +-- Utilizare: +-- 1. Deschide SQL Developer (sau sqlplus) conectat ca MARIUSM_AUTO +-- (sau orice user cu SELECT_CATALOG_ROLE) +-- 2. Rulează tot scriptul (F5 în SQL Developer) +-- 3. Output-ul apare în panoul "Script Output" — selectează tot, copiază, +-- trimite la Claude (sau salvează în fișier) +-- +-- Output-ul conține: +-- - DDL pentru tabele DEV_*, NOM_LUCRARI, RUL, ACT, VANZARI +-- - DDL pentru pachete PACK_AUTO, PACK_FACTURARE, PACK_SESIUNE, PACK_CONTAFIN +-- - DDL pentru triggere TRG_DEV_*, TRG_NOM_LUCRARI_* +-- - DDL pentru views AUTO_*, DEV_V*, DEV_COMENZI_VALIDATE +-- - Conținutul enum DEV_TIP_DEVIZ (live) +-- - Coloanele live din DEV_ORDL, DEV_MASINICLIENTI, DEV_ESTIMARI_REP +-- +-- Alternativ pentru sqlplus cu spool în fișier: +-- sqlplus MARIUSM_AUTO/parola@10.0.20.121:1521/ROA @export_ddl.sql +-- → fișierul `mariusm_ddl_export.log` e generat în directorul curent +-- ============================================================================= + +SET SERVEROUTPUT ON SIZE UNLIMITED +SET LINESIZE 32767 +SET LONG 100000000 +SET LONGCHUNKSIZE 32767 +SET PAGESIZE 0 +SET FEEDBACK OFF +SET VERIFY OFF +SET HEADING OFF +SET TRIMSPOOL ON +SET TRIMOUT ON +SET WRAP OFF + +-- Spool DOAR dacă rulezi din sqlplus. SQL Developer ignoră această linie dacă +-- nu folosește `@script`. În SQL Developer pur, rezultatul apare în "Script Output". +SPOOL mariusm_ddl_export.log + +-- Schema țintă — modifică dacă testezi pe alt user +DEFINE schema_name = 'MARIUSM_AUTO' + +-- ============================================================================= +-- Config DBMS_METADATA pentru DDL curat (fără storage/segment noise) +-- ============================================================================= +BEGIN + DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', FALSE); + DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', FALSE); + DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'TABLESPACE', FALSE); + DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'PRETTY', TRUE); + DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE); +END; +/ + +PROMPT +PROMPT ============================================================================= +PROMPT == MARIUSM_AUTO DDL EXPORT — start +PROMPT == Data rulare: &_DATE +PROMPT ============================================================================= +PROMPT + +-- ============================================================================= +-- BLOCUL MARE: tot exportul rulează într-un PL/SQL anonim care folosește +-- DBMS_OUTPUT.PUT_LINE ca să scrie totul în ordinea dorită. +-- Marca de secțiune e `-- === SECTION: ===` ca să o putem parsa ulterior. +-- ============================================================================= +DECLARE + v_schema VARCHAR2(30) := '&schema_name'; + v_ddl CLOB; + v_offset NUMBER; + v_chunk_size NUMBER := 30000; + v_length NUMBER; + + -- Liste de obiecte de exportat — pattern-urile sunt SQL LIKE cu ESCAPE '\' + TYPE t_patterns IS TABLE OF VARCHAR2(100); + + -- Tabele relevante + v_table_patterns t_patterns := t_patterns( + 'DEV\_%', -- toate DEV_* (ordl, oper, nom_norme, tip_deviz, estimari_rep, masiniclienti, ...) + 'NOM\_LUCRARI', + 'NOM\_ARTICOLE', + 'RUL', + 'ACT', + 'VANZARI', + 'CONTRACTE', + 'CTR\_ARTICOLE', + 'CALENDAR', + 'NOM\_PARTENERI', + 'PARTENERI' + ); + + -- Views relevante + v_view_patterns t_patterns := t_patterns( + 'AUTO\_%', -- AUTO_NORMARE_COMENZI, AUTO_ORDL_FACTURARE, AUTO_VNORME + 'DEV\_V%', -- DEV_VORDL, DEV_VOPER, DEV_VVALID_COMENZI + 'DEV\_COMENZI\_VALIDATE', + 'VCOMENZI', + 'VNOM\_%' + ); + + -- Triggere relevante + v_trigger_patterns t_patterns := t_patterns( + 'TRG\_DEV\_%', + 'TRG\_NOM\_LUCRARI\_%' + ); + + -- Pachete — listă explicită (DBMS_METADATA cere nume exact pentru PACKAGE) + TYPE t_packages IS TABLE OF VARCHAR2(30); + v_packages t_packages := t_packages( + 'PACK_AUTO', + 'PACK_FACTURARE', + 'PACK_SESIUNE', + 'PACK_CONTAFIN', + 'PACK_COMENZI', + 'PACK_TYPES' + ); + + -- ===================================================== + -- Helper: print CLOB în chunk-uri (DBMS_OUTPUT limit = 32767/linie) + -- ===================================================== + PROCEDURE print_clob(p_clob IN CLOB) IS + v_pos NUMBER := 1; + v_line VARCHAR2(32767); + v_nl NUMBER; + BEGIN + IF p_clob IS NULL THEN RETURN; END IF; + WHILE v_pos <= DBMS_LOB.GETLENGTH(p_clob) LOOP + v_nl := DBMS_LOB.INSTR(p_clob, CHR(10), v_pos); + IF v_nl = 0 OR v_nl - v_pos > 32000 THEN + v_line := DBMS_LOB.SUBSTR(p_clob, LEAST(32000, DBMS_LOB.GETLENGTH(p_clob) - v_pos + 1), v_pos); + DBMS_OUTPUT.PUT_LINE(v_line); + v_pos := v_pos + LENGTH(v_line); + ELSE + v_line := DBMS_LOB.SUBSTR(p_clob, v_nl - v_pos, v_pos); + DBMS_OUTPUT.PUT_LINE(v_line); + v_pos := v_nl + 1; + END IF; + END LOOP; + END; + + -- ===================================================== + -- Helper: export un grup de obiecte descoperite prin LIKE pe ALL_OBJECTS + -- ===================================================== + PROCEDURE export_group( + p_object_type IN VARCHAR2, + p_patterns IN t_patterns, + p_section IN VARCHAR2 + ) IS + v_where_clause VARCHAR2(4000); + v_sql VARCHAR2(4000); + TYPE t_names IS TABLE OF VARCHAR2(128); + v_names t_names; + BEGIN + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE('-- ============================================================'); + DBMS_OUTPUT.PUT_LINE('-- === SECTION: ' || p_section || ' ==='); + DBMS_OUTPUT.PUT_LINE('-- ============================================================'); + + -- Build WHERE clause din pattern-uri + v_where_clause := ''; + FOR i IN 1 .. p_patterns.COUNT LOOP + IF i > 1 THEN v_where_clause := v_where_clause || ' OR '; END IF; + v_where_clause := v_where_clause || + 'object_name LIKE ''' || p_patterns(i) || ''' ESCAPE ''\'''; + END LOOP; + + v_sql := 'SELECT object_name FROM all_objects ' || + 'WHERE owner = :1 AND object_type = :2 AND (' || v_where_clause || ') ' || + 'ORDER BY object_name'; + + EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_names USING v_schema, p_object_type; + + DBMS_OUTPUT.PUT_LINE('-- Găsite: ' || v_names.COUNT || ' obiecte'); + DBMS_OUTPUT.PUT_LINE(''); + + FOR i IN 1 .. v_names.COUNT LOOP + BEGIN + DBMS_OUTPUT.PUT_LINE('-- --- ' || p_object_type || ': ' || v_names(i) || ' ---'); + v_ddl := DBMS_METADATA.GET_DDL(p_object_type, v_names(i), v_schema); + print_clob(v_ddl); + DBMS_OUTPUT.PUT_LINE(''); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('-- ERROR la ' || v_names(i) || ': ' || SQLERRM); + END; + END LOOP; + END; + + -- ===================================================== + -- Helper: export pachet (spec + body separate) + -- ===================================================== + PROCEDURE export_package(p_name IN VARCHAR2) IS + v_exists NUMBER; + BEGIN + SELECT COUNT(*) INTO v_exists + FROM all_objects + WHERE owner = v_schema + AND object_name = p_name + AND object_type IN ('PACKAGE', 'PACKAGE BODY'); + + IF v_exists = 0 THEN + DBMS_OUTPUT.PUT_LINE('-- SKIP ' || p_name || ' — nu există în ' || v_schema); + RETURN; + END IF; + + DBMS_OUTPUT.PUT_LINE('-- --- PACKAGE SPEC: ' || p_name || ' ---'); + BEGIN + v_ddl := DBMS_METADATA.GET_DDL('PACKAGE_SPEC', p_name, v_schema); + print_clob(v_ddl); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('-- ERROR spec: ' || SQLERRM); + END; + DBMS_OUTPUT.PUT_LINE(''); + + DBMS_OUTPUT.PUT_LINE('-- --- PACKAGE BODY: ' || p_name || ' ---'); + BEGIN + v_ddl := DBMS_METADATA.GET_DDL('PACKAGE_BODY', p_name, v_schema); + print_clob(v_ddl); + EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('-- ERROR body: ' || SQLERRM); + END; + DBMS_OUTPUT.PUT_LINE(''); + END; + +BEGIN + -- ===================================================== + -- 1. TABELE + -- ===================================================== + export_group('TABLE', v_table_patterns, 'TABLES'); + + -- ===================================================== + -- 2. VIEWS + -- ===================================================== + export_group('VIEW', v_view_patterns, 'VIEWS'); + + -- ===================================================== + -- 3. TRIGGERE + -- ===================================================== + export_group('TRIGGER', v_trigger_patterns, 'TRIGGERS'); + + -- ===================================================== + -- 4. PACHETE (spec + body) + -- ===================================================== + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE('-- ============================================================'); + DBMS_OUTPUT.PUT_LINE('-- === SECTION: PACKAGES ==='); + DBMS_OUTPUT.PUT_LINE('-- ============================================================'); + DBMS_OUTPUT.PUT_LINE(''); + FOR i IN 1 .. v_packages.COUNT LOOP + export_package(v_packages(i)); + END LOOP; +END; +/ + +-- ============================================================================= +-- SECTION: DATA SAMPLES & COLUMN METADATA +-- ============================================================================= + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: DATA - DEV_TIP_DEVIZ (enum live) === +PROMPT -- ============================================================ +PROMPT + +SET HEADING ON +SET PAGESIZE 1000 +SET FEEDBACK ON +COLUMN id_tip FORMAT 999 +COLUMN denumire FORMAT A40 +COLUMN sters FORMAT 9 +COLUMN inch_validare FORMAT 9 + +SELECT id_tip, denumire, sters, inch_validare + FROM &schema_name..dev_tip_deviz + ORDER BY id_tip; + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: COLUMNS - DEV_ORDL (live schema) === +PROMPT -- ============================================================ +PROMPT + +COLUMN column_name FORMAT A30 +COLUMN data_type FORMAT A15 +COLUMN data_length FORMAT 99999 +COLUMN nullable FORMAT A3 +COLUMN data_default FORMAT A20 + +SELECT column_name, data_type, data_length, nullable, data_default + FROM all_tab_columns + WHERE owner = '&schema_name' + AND table_name = 'DEV_ORDL' + ORDER BY column_id; + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: COLUMNS - DEV_OPER (live schema) === +PROMPT -- ============================================================ +PROMPT + +SELECT column_name, data_type, data_length, nullable, data_default + FROM all_tab_columns + WHERE owner = '&schema_name' + AND table_name = 'DEV_OPER' + ORDER BY column_id; + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: COLUMNS - DEV_ESTIMARI_REP (live schema) === +PROMPT -- ============================================================ +PROMPT + +SELECT column_name, data_type, data_length, nullable, data_default + FROM all_tab_columns + WHERE owner = '&schema_name' + AND table_name = 'DEV_ESTIMARI_REP' + ORDER BY column_id; + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: COLUMNS - DEV_MASINICLIENTI (live schema) === +PROMPT -- ============================================================ +PROMPT + +SELECT column_name, data_type, data_length, nullable + FROM all_tab_columns + WHERE owner = '&schema_name' + AND table_name = 'DEV_MASINICLIENTI' + ORDER BY column_id; + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: COLUMNS - NOM_LUCRARI (live schema) === +PROMPT -- ============================================================ +PROMPT + +SELECT column_name, data_type, data_length, nullable + FROM all_tab_columns + WHERE owner = '&schema_name' + AND table_name = 'NOM_LUCRARI' + ORDER BY column_id; + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: FK CONSTRAINTS pe DEV_* și NOM_LUCRARI === +PROMPT -- ============================================================ +PROMPT + +COLUMN constraint_name FORMAT A30 +COLUMN table_name FORMAT A25 +COLUMN column_name FORMAT A25 +COLUMN r_table FORMAT A25 +COLUMN r_column FORMAT A25 + +SELECT c.constraint_name, + c.table_name, + cc.column_name, + rcc.table_name AS r_table, + rcc.column_name AS r_column + FROM all_constraints c + JOIN all_cons_columns cc + ON c.owner = cc.owner + AND c.constraint_name = cc.constraint_name + JOIN all_cons_columns rcc + ON c.r_owner = rcc.owner + AND c.r_constraint_name = rcc.constraint_name + AND cc.position = rcc.position + WHERE c.owner = '&schema_name' + AND c.constraint_type = 'R' + AND (c.table_name LIKE 'DEV\_%' ESCAPE '\' OR c.table_name = 'NOM_LUCRARI') + ORDER BY c.table_name, c.constraint_name, cc.position; + +PROMPT +PROMPT -- ============================================================ +PROMPT -- === SECTION: SEQUENCES (SEQ_DEV_*, SEQ_NOM_LUCRARI) === +PROMPT -- ============================================================ +PROMPT + +COLUMN sequence_name FORMAT A30 +COLUMN last_number FORMAT 99999999999 +COLUMN increment_by FORMAT 99999 + +SELECT sequence_name, last_number, increment_by, cycle_flag + FROM all_sequences + WHERE sequence_owner = '&schema_name' + AND (sequence_name LIKE 'SEQ\_DEV\_%' ESCAPE '\' + OR sequence_name LIKE 'SEQ\_NOM\_LUCRARI%' ESCAPE '\' + OR sequence_name LIKE 'SEQ\_NRORD%' ESCAPE '\') + ORDER BY sequence_name; + +PROMPT +PROMPT ============================================================================= +PROMPT == MARIUSM_AUTO DDL EXPORT — done +PROMPT ============================================================================= + +SPOOL OFF + +SET FEEDBACK ON +SET PAGESIZE 14 +SET HEADING ON diff --git a/docs/service-auto/mariusm_ddl_export.sql b/docs/service-auto/mariusm_ddl_export.sql new file mode 100644 index 0000000..ac39564 --- /dev/null +++ b/docs/service-auto/mariusm_ddl_export.sql @@ -0,0 +1,5127 @@ + +============================================================================= +== MARIUSM_AUTO DDL EXPORT — start +== Data rulare: 4/11/2026 +============================================================================= + + +-- ============================================================ +-- === SECTION: TABLES === +-- ============================================================ +-- Gasite: 29 obiecte + +-- --- TABLE: ACT --- + + CREATE TABLE "MARIUSM_AUTO"."ACT" + ( "ID_ACT" NUMBER(20,0) NOT NULL ENABLE, + "LUNA" NUMBER(2,0) DEFAULT 0 NOT NULL ENABLE, + "AN" NUMBER(4,0) DEFAULT 0 NOT NULL ENABLE, + "COD" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "DATAIREG" DATE, + "NRACT" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "DATAACT" DATE, + "EXPLICATIA" VARCHAR2(100), + "SCD" VARCHAR2(4), + "ASCD" VARCHAR2(4), + "SCC" VARCHAR2(4), + "ASCC" VARCHAR2(4), + "SUMA" NUMBER(20,4) DEFAULT 0 NOT NULL ENABLE, + "ID_FACTD" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "ID_FACTC" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "PERECHED" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "PERECHEC" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "SUMA_VAL" NUMBER(20,4) DEFAULT 0 NOT NULL ENABLE, + "CURS" NUMBER(12,6) DEFAULT 0 NOT NULL ENABLE, + "DATASCAD" DATE, + "NEIMPOZAB" NUMBER(20,4) DEFAULT 0 NOT NULL ENABLE, + "NNIR" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "ID_UTIL" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "DATAORA" DATE, + "ID_UTILS" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "DATAORAS" DATE, + "ID_RESPONSABIL" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_VENCHELT" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "ID_SECTIE" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "ID_SET" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "ID_FACT" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "ID_PARTD" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_PARTC" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_SUCURSALA" NUMBER(5,0) DEFAULT null, + "ID_FDOC" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "EXPLICATIA4" VARCHAR2(100), + "EXPLICATIA5" VARCHAR2(100), + "ID_LUCRARE" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_GESTIN" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "ID_GESTOUT" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "ID_VALUTA" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "PROC_TVA" NUMBER(5,2) DEFAULT 0 NOT NULL ENABLE, + "ID_CTR" NUMBER(8,0), + "ID_JTVA_COLOANA" NUMBER(4,0), + "SERIE_ACT" VARCHAR2(10), + "VALIDAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_UTILV" NUMBER(10,0), + "DATAORAV" DATE, + "TAXCODE" NUMBER(6,0), + "PAYMENTCODE" VARCHAR2(9), + CONSTRAINT "FK_ACT_001" FOREIGN KEY ("ID_SUCURSALA") + REFERENCES "CONTAFIN_ORACLE"."NOM_FIRME" ("ID_FIRMA") ENABLE, + CONSTRAINT "FK_ACT_002" FOREIGN KEY ("TAXCODE") + REFERENCES "MARIUSM_AUTO"."SAFT_TAXTABLE" ("TAXCODE") ENABLE, + CONSTRAINT "FK_ACT_003" FOREIGN KEY ("PAYMENTCODE") + REFERENCES "MARIUSM_AUTO"."SAFT_MECANISME_PLATI" ("MECHANISMCODE") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_ACT" ON "MARIUSM_AUTO"."ACT" ("ID_ACT") + ; +ALTER TABLE "MARIUSM_AUTO"."ACT" ADD CONSTRAINT "PK_ACT" PRIMARY KEY ("ID_ACT") + USING INDEX "MARIUSM_AUTO"."PK_ACT" ENABLE; + +-- --- TABLE: CALENDAR --- + + CREATE TABLE "MARIUSM_AUTO"."CALENDAR" + ( "ID_CALENDAR" NUMBER(5,0), + "NL" VARCHAR2(2), + "AN" VARCHAR2(4), + "CTVAI" NUMBER(7,3), + "CTVAM" NUMBER(7,3), + "PLAFON_CASA" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "INCHIS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "PLAFON_PLATI" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "PLAFON_FURNIZORI" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "ANUL" NUMBER(4,0) DEFAULT 0 NOT NULL ENABLE, + "LUNA" NUMBER(2,0) DEFAULT 0 NOT NULL ENABLE, + "LUNA_INITIALA" NUMBER(1,0), + "TVA_INCASARE" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "IMPOZIT_PROFIT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_CALENDAR" ON "MARIUSM_AUTO"."CALENDAR" ("ID_CALENDAR") + ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."UK_CALENDAR_001" ON "MARIUSM_AUTO"."CALENDAR" ("ANUL", "LUNA") + ; +ALTER TABLE "MARIUSM_AUTO"."CALENDAR" ADD CONSTRAINT "PK_CALENDAR" PRIMARY KEY ("ID_CALENDAR") + USING INDEX "MARIUSM_AUTO"."PK_CALENDAR" ENABLE; +ALTER TABLE "MARIUSM_AUTO"."CALENDAR" ADD CONSTRAINT "UK_CALENDAR_001" UNIQUE ("ANUL", "LUNA") + USING INDEX "MARIUSM_AUTO"."UK_CALENDAR_001" ENABLE; + +-- --- TABLE: CONTRACTE --- + + CREATE TABLE "MARIUSM_AUTO"."CONTRACTE" + ( "ID_CTR" NUMBER(8,0) NOT NULL ENABLE, + "ID_PART" NUMBER(10,0), + "DATA" DATE DEFAULT SYSDATE, + "NUMAR" VARCHAR2(100), + "STERS" NUMBER(1,0) DEFAULT 0, + "ID_UTIL" NUMBER(8,0), + "DATAORA" DATE DEFAULT sysdate, + "ID_UTILS" NUMBER(8,0), + "DATAORAS" DATE, + "ID_TIP_CTR" NUMBER(4,0) NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "VALFTVA" NUMBER(16,4), + "VALCTVA" NUMBER(16,4), + "ID_VALUTA" NUMBER(5,0), + "VAL_DISCOUNT" NUMBER(16,4), + "PROC_TVA" NUMBER(6,2) DEFAULT 19 NOT NULL ENABLE, + "INCETAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "DATA_INCEPUT" DATE, + "DATA_SFARSIT" DATE, + "DURATA" NUMBER(5,0), + "DATA_INCETAT" DATE, + "MOTIV_INCETAT" VARCHAR2(200), + "SCADENTA_INCASARE" NUMBER(3,0) DEFAULT 15 NOT NULL ENABLE, + "COEF_PENALITATI" NUMBER(6,2), + "ID_RESPONSABIL" NUMBER(10,0), + "ID_SECTIE" NUMBER(5,0), + "SEMNAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "OBSERVATII" CLOB, + "OPT_FACTURARE" NUMBER(4,0), + "TEXT_STANDARD" NUMBER(1,0), + "ID_NOTA" NUMBER(10,0), + "ID_AGENT" NUMBER(20,0), + "DESCRIERE" VARCHAR2(250), + "ID_SELECTIE" NUMBER(4,0), + "GRNT_PROC_RET" NUMBER(2,0), + "GRNT_VAL_RET" NUMBER(10,4), + "GRNT_ALERTA1" NUMBER(4,0), + "GRNT_PROC_ALERTA1" NUMBER(3,0), + "GRNT_PV_NR" NUMBER(10,0), + "GRNT_PV_DATA" DATE, + "NUMAR_INTERN" VARCHAR2(20), + "DATA_INTERN" DATE, + "OFERTANTI" VARCHAR2(200), + "TIP_ISTORIC" VARCHAR2(1) DEFAULT 'C' NOT NULL ENABLE, + "ID_TATA" NUMBER(8,0), + "ACTIV" NUMBER(1,0) DEFAULT 0, + "ID_ACT_ADITIONAL" NUMBER(8,0), + "GRNT_PERIOADA" NUMBER(2,0) DEFAULT 12, + "CURS" NUMBER(22,6), + "ID_SUCURSALA" NUMBER(5,0), + "SUSPENDAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "AFISARE_SCADENTA" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE, + "TIP_CURS" NUMBER(2,0) DEFAULT 0 NOT NULL ENABLE, + "COEF_PENALITATI2" NUMBER(6,2), + "ZILE_PENALITATI" NUMBER(4,0), + "ZILE_PENALITATI2" NUMBER(4,0), + "ZILE_GRATIE_PENALITATI" NUMBER(4,0), + CONSTRAINT "FK_CONTRACTE_001" FOREIGN KEY ("ID_SUCURSALA") + REFERENCES "CONTAFIN_ORACLE"."NOM_FIRME" ("ID_FIRMA") ENABLE, + CONSTRAINT "FK_CONTRACTE_004" FOREIGN KEY ("ID_SELECTIE") + REFERENCES "MARIUSM_AUTO"."CTR_SELECTII" ("ID_SELECTIE") ENABLE, + CONSTRAINT "FK_CONTRACTE_003" FOREIGN KEY ("ID_AGENT") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE, + CONSTRAINT "FK_CONTRACTE_002" FOREIGN KEY ("ID_TIP_CTR") + REFERENCES "MARIUSM_AUTO"."TIPURI_CONTRACTE" ("ID_TIP_CTR") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_CONTRACTE" ON "MARIUSM_AUTO"."CONTRACTE" ("ID_CTR") + ; +ALTER TABLE "MARIUSM_AUTO"."CONTRACTE" ADD CONSTRAINT "PK_CONTRACTE" PRIMARY KEY ("ID_CTR") + USING INDEX "MARIUSM_AUTO"."PK_CONTRACTE" ENABLE; + +-- --- TABLE: CTR_ARTICOLE --- + + CREATE TABLE "MARIUSM_AUTO"."CTR_ARTICOLE" + ( "ID_CTR_ART" NUMBER(5,0) NOT NULL ENABLE, + "ID_CTR" NUMBER(5,0), + "ID_POL_ART" NUMBER(5,0), + "PRET_UNITAR" NUMBER(20,4), + "CANT" NUMBER(10,4), + "COEF_DISCOUNT" NUMBER(10,4), + "VAL_DISCOUNT" NUMBER(20,4), + "ID_VALUTA" NUMBER(5,0), + "EXPLICATIE" VARCHAR2(100), + "UM" VARCHAR2(10), + "ID_ARTICOL" NUMBER(20,0), + "PRET_CU_TVA" NUMBER(1,0) DEFAULT 0, + "ID_LOCATIA" NUMBER(5,0), + "PROC_TVAV" NUMBER(5,2), + "VALOARE" NUMBER(20,4), + CONSTRAINT "FK_CTR_ART_001" FOREIGN KEY ("ID_CTR") + REFERENCES "MARIUSM_AUTO"."CONTRACTE" ("ID_CTR") ENABLE, + CONSTRAINT "FK_CTR_ART_002" FOREIGN KEY ("ID_POL_ART") + REFERENCES "MARIUSM_AUTO"."CRM_POLITICI_PRET_ART" ("ID_POL_ART") ENABLE, + CONSTRAINT "FK_CTR_ART_003" FOREIGN KEY ("ID_ARTICOL") + REFERENCES "MARIUSM_AUTO"."NOM_ARTICOLE" ("ID_ARTICOL") ENABLE, + CONSTRAINT "FK_CTR_ART_004" FOREIGN KEY ("ID_LOCATIA") + REFERENCES "MARIUSM_AUTO"."NOM_LOCATII" ("ID") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_CTR_ART" ON "MARIUSM_AUTO"."CTR_ARTICOLE" ("ID_CTR_ART") + ; +ALTER TABLE "MARIUSM_AUTO"."CTR_ARTICOLE" ADD CONSTRAINT "PK_CTR_ART" PRIMARY KEY ("ID_CTR_ART") + USING INDEX "MARIUSM_AUTO"."PK_CTR_ART" ENABLE; + +-- --- TABLE: DEV_ESTIMARI_PRODUSE --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_ESTIMARI_PRODUSE" + ( "ID_DEV_ESTIMARE_PROD" NUMBER(20,0) NOT NULL ENABLE, + "ID_LUCRARE" NUMBER(20,0) NOT NULL ENABLE, + "ID_ARTICOL" NUMBER(20,0), + "CANTITATE" NUMBER(20,4) NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_UTIL" NUMBER(20,0) NOT NULL ENABLE, + "DATAORA" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "ID_UTILS" NUMBER(20,0), + "DATAORAS" DATE, + "DIMENSIUNI" NUMBER(20,6), + "EXPLICATIE" VARCHAR2(240), + "PROC_PIERDERITEHN" NUMBER(20,4) DEFAULT 0 NOT NULL ENABLE, + "LUNGIME" NUMBER(20,6) DEFAULT 0 NOT NULL ENABLE, + "LATIME" NUMBER(20,6) DEFAULT 0 NOT NULL ENABLE, + "PRET" NUMBER(20,4) DEFAULT 0 NOT NULL ENABLE, + "PRET_CU_TVA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_PROD_003" FOREIGN KEY ("ID_UTIL") + REFERENCES "CONTAFIN_ORACLE"."UTILIZATORI" ("ID_UTIL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_PROD_004" FOREIGN KEY ("ID_UTILS") + REFERENCES "CONTAFIN_ORACLE"."UTILIZATORI" ("ID_UTIL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_PROD_002" FOREIGN KEY ("ID_ARTICOL") + REFERENCES "MARIUSM_AUTO"."NOM_ARTICOLE" ("ID_ARTICOL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_PROD_001" FOREIGN KEY ("ID_LUCRARE") + REFERENCES "MARIUSM_AUTO"."NOM_LUCRARI" ("ID_LUCRARE") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_DEV_ESTIMARI_PROD" ON "MARIUSM_AUTO"."DEV_ESTIMARI_PRODUSE" ("ID_DEV_ESTIMARE_PROD") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_ESTIMARI_PRODUSE" ADD CONSTRAINT "PK_DEV_ESTIMARI_PROD" PRIMARY KEY ("ID_DEV_ESTIMARE_PROD") + USING INDEX "MARIUSM_AUTO"."PK_DEV_ESTIMARI_PROD" ENABLE; + +-- --- TABLE: DEV_ESTIMARI_REP --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_ESTIMARI_REP" + ( "ID_DEV_ESTIMARE_REP" NUMBER(20,0) NOT NULL ENABLE, + "ID_LUCRARE" NUMBER(20,0) NOT NULL ENABLE, + "ID_NORME" NUMBER(20,0), + "ID_ARTICOL" NUMBER(20,0), + "CANTITATE" NUMBER(20,4) NOT NULL ENABLE, + "PRET" NUMBER(20,4) DEFAULT 0 NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_UTIL" NUMBER(20,0) NOT NULL ENABLE, + "DATAORA" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "ID_UTILS" NUMBER(20,0), + "DATAORAS" DATE, + "PRET_CU_TVA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "COTA_TVA" NUMBER(10,0) DEFAULT null, + "ID_SECTIE" NUMBER(10,0), + "ID_POL" NUMBER(20,0), + "ID_DEV_ESTIMARE_PROD" NUMBER(20,0), + "ID_ARTICOL_GRUPARE" NUMBER(20,0), + "CU_PIERDERI" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_VALUTA" NUMBER(10,0), + "SEMIFABRICAT_ALES" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "SEMIFABRICAT_ID" NUMBER(10,0), + CONSTRAINT "FK_DEV_ESTIMARI_REP_004" FOREIGN KEY ("ID_UTIL") + REFERENCES "CONTAFIN_ORACLE"."UTILIZATORI" ("ID_UTIL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_005" FOREIGN KEY ("ID_UTILS") + REFERENCES "CONTAFIN_ORACLE"."UTILIZATORI" ("ID_UTIL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_008" FOREIGN KEY ("ID_POL") + REFERENCES "MARIUSM_AUTO"."CRM_POLITICI_PRETURI" ("ID_POL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_002" FOREIGN KEY ("ID_NORME") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_NORME" ("ID_NORME") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_003" FOREIGN KEY ("ID_ARTICOL") + REFERENCES "MARIUSM_AUTO"."NOM_ARTICOLE" ("ID_ARTICOL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_009" FOREIGN KEY ("ID_ARTICOL_GRUPARE") + REFERENCES "MARIUSM_AUTO"."NOM_ARTICOLE" ("ID_ARTICOL") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_001" FOREIGN KEY ("ID_LUCRARE") + REFERENCES "MARIUSM_AUTO"."NOM_LUCRARI" ("ID_LUCRARE") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_007" FOREIGN KEY ("ID_SECTIE") + REFERENCES "MARIUSM_AUTO"."NOM_SECTII" ("ID_SECTIE") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_010" FOREIGN KEY ("ID_VALUTA") + REFERENCES "MARIUSM_AUTO"."NOM_VALUTE" ("ID_VALUTA") ENABLE, + CONSTRAINT "FK_DEV_ESTIMARI_REP_006" FOREIGN KEY ("ID_DEV_ESTIMARE_PROD") + REFERENCES "MARIUSM_AUTO"."DEV_ESTIMARI_PRODUSE" ("ID_DEV_ESTIMARE_PROD") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_DEV_ESTIMARI_REP" ON "MARIUSM_AUTO"."DEV_ESTIMARI_REP" ("ID_DEV_ESTIMARE_REP") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_ESTIMARI_REP" ADD CONSTRAINT "PK_DEV_ESTIMARI_REP" PRIMARY KEY ("ID_DEV_ESTIMARE_REP") + USING INDEX "MARIUSM_AUTO"."PK_DEV_ESTIMARI_REP" ENABLE; + +-- --- TABLE: DEV_MASINICLIENTI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_MASINICLIENTI" + ( "ID_MASINICLIENT" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_TIPMOTOR" NUMBER(5,0), + "ID_FURNIZOR" NUMBER(5,0), + "ID_MASINA" NUMBER(5,0), + "ID_PARTENER" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "NRINMAT" VARCHAR2(40) NOT NULL ENABLE, + "SERIES" VARCHAR2(17), + "SERIEM" VARCHAR2(18), + "CULOARE" VARCHAR2(30), + "KMINT" NUMBER(10,0), + "DATAACHI" DATE, + "NRACHI" NUMBER(16,0), + "SERIEF" VARCHAR2(20), + "SERIECV" VARCHAR2(20), + "ANFABRICATIE" NUMBER(4,0), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "CILINDREE" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "PUTERECP" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "PUTEREKW" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "ORE_FUNCTIONARE" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + CONSTRAINT "FK_FURNIZOR" FOREIGN KEY ("ID_FURNIZOR") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_FURNIZORIMASINI" ("ID_FURNIZOR") ENABLE NOVALIDATE, + CONSTRAINT "FK_MASINA" FOREIGN KEY ("ID_MASINA") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_MASINI" ("ID_MASINA") ENABLE NOVALIDATE, + CONSTRAINT "FK_TIPMOTOR" FOREIGN KEY ("ID_TIPMOTOR") + REFERENCES "MARIUSM_AUTO"."DEV_TIPURI_MOTOARE" ("ID_TIPMOTOR") ENABLE NOVALIDATE, + CONSTRAINT "FK_ID_PARTENER" FOREIGN KEY ("ID_PARTENER") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE NOVALIDATE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_MASINICLIENT" ON "MARIUSM_AUTO"."DEV_MASINICLIENTI" ("ID_MASINICLIENT") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_MASINICLIENTI" ADD CONSTRAINT "PK_MASINICLIENT" PRIMARY KEY ("ID_MASINICLIENT") + USING INDEX "MARIUSM_AUTO"."PK_MASINICLIENT" ENABLE; + +-- --- TABLE: DEV_MECANICI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_MECANICI" + ( "ID_MECANIC" NUMBER(5,0) NOT NULL ENABLE, + "ID_SECTIE" NUMBER(5,0), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_PART" NUMBER(20,0), + CONSTRAINT "FK_DEV_MECANICI_001" FOREIGN KEY ("ID_PART") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE, + CONSTRAINT "FK_DEV_MECANICI_002" FOREIGN KEY ("ID_SECTIE") + REFERENCES "MARIUSM_AUTO"."NOM_SECTII" ("ID_SECTIE") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_MECANICI" ON "MARIUSM_AUTO"."DEV_MECANICI" ("ID_MECANIC") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_MECANICI" ADD CONSTRAINT "PK_MECANICI" PRIMARY KEY ("ID_MECANIC") + USING INDEX "MARIUSM_AUTO"."PK_MECANICI" ENABLE; + +-- --- TABLE: DEV_NOM_ANSAMBLE --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_ANSAMBLE" + ( "ID_ANSAMBLU" NUMBER(5,0) NOT NULL ENABLE, + "DENUMIRE" VARCHAR2(100), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_ANSAMBLE" ON "MARIUSM_AUTO"."DEV_NOM_ANSAMBLE" ("ID_ANSAMBLU") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_ANSAMBLE" ADD CONSTRAINT "PK_ANSAMBLE" PRIMARY KEY ("ID_ANSAMBLU") + USING INDEX "MARIUSM_AUTO"."PK_ANSAMBLE" ENABLE; + +-- --- TABLE: DEV_NOM_ASIGURATORI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_ASIGURATORI" + ( "ID_ASIGURATOR" NUMBER(5,0) NOT NULL ENABLE, + "ASIGURATOR_VECHI" VARCHAR2(24), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_PART" NUMBER(10,0) NOT NULL ENABLE, + CONSTRAINT "FK_ASIGURATORI_001" FOREIGN KEY ("ID_PART") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_ASIGURATORI" ON "MARIUSM_AUTO"."DEV_NOM_ASIGURATORI" ("ID_ASIGURATOR") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_ASIGURATORI" ADD CONSTRAINT "PK_ASIGURATORI" PRIMARY KEY ("ID_ASIGURATOR") + USING INDEX "MARIUSM_AUTO"."PK_ASIGURATORI" ENABLE; + +-- --- TABLE: DEV_NOM_DELEGATI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_DELEGATI" + ( "ID_NOM_DELEGATI" NUMBER(5,0) NOT NULL ENABLE, + "DELEGAT" VARCHAR2(64), + "ELIBERATDE" VARCHAR2(64), + "ID_PARTENER" NUMBER(10,0) NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "BI" VARCHAR2(10), + "TELEFON1" VARCHAR2(20), + "TELEFON2" VARCHAR2(20), + CONSTRAINT "FK_PARTENER" FOREIGN KEY ("ID_PARTENER") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE NOVALIDATE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_DELEGAT" ON "MARIUSM_AUTO"."DEV_NOM_DELEGATI" ("ID_NOM_DELEGATI") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_DELEGATI" ADD CONSTRAINT "PK_DELEGAT" PRIMARY KEY ("ID_NOM_DELEGATI") + USING INDEX "MARIUSM_AUTO"."PK_DELEGAT" ENABLE; + +-- --- TABLE: DEV_NOM_FURNIZORIMASINI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_FURNIZORIMASINI" + ( "ID_FURNIZOR" NUMBER(5,0) NOT NULL ENABLE, + "DENUMIRE" VARCHAR2(50), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_FURNIZOR" ON "MARIUSM_AUTO"."DEV_NOM_FURNIZORIMASINI" ("ID_FURNIZOR") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_FURNIZORIMASINI" ADD CONSTRAINT "PK_FURNIZOR" PRIMARY KEY ("ID_FURNIZOR") + USING INDEX "MARIUSM_AUTO"."PK_FURNIZOR" ENABLE; + +-- --- TABLE: DEV_NOM_INSPECTORI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_INSPECTORI" + ( "ID_INSPECTOR" NUMBER(5,0) NOT NULL ENABLE, + "INSPECTOR" VARCHAR2(24), + "ID_ASIGURATOR" NUMBER(5,0), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + CONSTRAINT "FK_NOM_ASIGURATORI" FOREIGN KEY ("ID_ASIGURATOR") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_ASIGURATORI" ("ID_ASIGURATOR") ENABLE NOVALIDATE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_NOM_INSPECTORI" ON "MARIUSM_AUTO"."DEV_NOM_INSPECTORI" ("ID_INSPECTOR") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_INSPECTORI" ADD CONSTRAINT "PK_NOM_INSPECTORI" PRIMARY KEY ("ID_INSPECTOR") + USING INDEX "MARIUSM_AUTO"."PK_NOM_INSPECTORI" ENABLE; + +-- --- TABLE: DEV_NOM_MARCI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_MARCI" + ( "ID_MARCA" NUMBER(5,0) NOT NULL ENABLE, + "MARCA" VARCHAR2(24), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_MARCA" ON "MARIUSM_AUTO"."DEV_NOM_MARCI" ("ID_MARCA") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_MARCI" ADD CONSTRAINT "PK_MARCA" PRIMARY KEY ("ID_MARCA") + USING INDEX "MARIUSM_AUTO"."PK_MARCA" ENABLE; + +-- --- TABLE: DEV_NOM_MASINI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_MASINI" + ( "ID_MASINA" NUMBER(5,0) NOT NULL ENABLE, + "ID_MARCA" NUMBER(5,0) NOT NULL ENABLE, + "MASINA" VARCHAR2(20), + "SCTIP" VARCHAR2(100), + "CLASA" VARCHAR2(10), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "COMBUSTIBIL" VARCHAR2(50), + "CLINDREE" NUMBER(10,0), + "PUTERE_KW" NUMBER(10,0), + "PUTERE_CP" NUMBER(10,0), + "CUTIE_VITEZE" VARCHAR2(50), + "TRACTIUNE" VARCHAR2(50), + "ECHIPARE" VARCHAR2(50), + CONSTRAINT "FK_MARCA" FOREIGN KEY ("ID_MARCA") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_MARCI" ("ID_MARCA") ENABLE NOVALIDATE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_MASINA" ON "MARIUSM_AUTO"."DEV_NOM_MASINI" ("ID_MASINA") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_MASINI" ADD CONSTRAINT "PK_MASINA" PRIMARY KEY ("ID_MASINA") + USING INDEX "MARIUSM_AUTO"."PK_MASINA" ENABLE; + +-- --- TABLE: DEV_NOM_NORME --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_NORME" + ( "ID_NORME" NUMBER(5,0) NOT NULL ENABLE, + "ID_ANSAMBLU" NUMBER(5,0) DEFAULT null, + "ID_MASINA" NUMBER(5,0) DEFAULT null, + "DENOP" VARCHAR2(100), + "CODOP" VARCHAR2(10), + "TIMPN" NUMBER(7,3) DEFAULT 0 NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + CONSTRAINT "FK_ANSAMBLE" FOREIGN KEY ("ID_ANSAMBLU") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_ANSAMBLE" ("ID_ANSAMBLU") ENABLE NOVALIDATE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_NORME" ON "MARIUSM_AUTO"."DEV_NOM_NORME" ("ID_NORME") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_NORME" ADD CONSTRAINT "PK_NORME" PRIMARY KEY ("ID_NORME") + USING INDEX "MARIUSM_AUTO"."PK_NORME" ENABLE; + +-- --- TABLE: DEV_NOM_PRETURI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_NOM_PRETURI" + ( "ID_PRET" NUMBER(5,0) NOT NULL ENABLE, + "ID_MARCA" NUMBER(5,0), + "ID_ASIGURATOR" NUMBER(5,0), + "PRET" NUMBER(18,4) DEFAULT 0 NOT NULL ENABLE, + "PRET_VAL" NUMBER(10,4) DEFAULT 0 NOT NULL ENABLE, + "ID_VALUTA" NUMBER(5,0), + "CURS" NUMBER(14,6) DEFAULT 0 NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + CONSTRAINT "FK_ASIGURATOR" FOREIGN KEY ("ID_ASIGURATOR") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_ASIGURATORI" ("ID_ASIGURATOR") ENABLE, + CONSTRAINT "FK_MARCA1" FOREIGN KEY ("ID_MARCA") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_MARCI" ("ID_MARCA") ENABLE NOVALIDATE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_PRETURI" ON "MARIUSM_AUTO"."DEV_NOM_PRETURI" ("ID_PRET") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_NOM_PRETURI" ADD CONSTRAINT "PK_PRETURI" PRIMARY KEY ("ID_PRET") + USING INDEX "MARIUSM_AUTO"."PK_PRETURI" ENABLE; + +-- --- TABLE: DEV_OPER --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_OPER" + ( "ID_OPER" NUMBER(10,0) NOT NULL ENABLE, + "ID_ORDL" NUMBER(10,0) NOT NULL ENABLE, + "ID_NORME" NUMBER(10,0), + "TIMPN" NUMBER(8,3) DEFAULT 0 NOT NULL ENABLE, + "PRET" NUMBER(17,4) DEFAULT 0 NOT NULL ENABLE, + "DATAI" DATE DEFAULT sysdate NOT NULL ENABLE, + "ID_SECTIE" NUMBER(5,0), + "ID_UTIL" NUMBER(5,0), + "DATAORA" DATE, + "ID_UTILS" NUMBER(5,0), + "DATAORAS" DATE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "VALIDAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "NOU" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_UTILI" NUMBER(5,0), + "ID_ARTICOL" NUMBER(20,0), + "ID_DEV_ESTIMARE_REP" NUMBER(20,0), + "ID_FACT" NUMBER(20,0), + "ID_RUL_AUX" NUMBER(20,0), + CONSTRAINT "FK_DEV_OPER_006" FOREIGN KEY ("ID_DEV_ESTIMARE_REP") + REFERENCES "MARIUSM_AUTO"."DEV_ESTIMARI_REP" ("ID_DEV_ESTIMARE_REP") ENABLE, + CONSTRAINT "FK_DEV_OPER_002" FOREIGN KEY ("ID_NORME") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_NORME" ("ID_NORME") ENABLE, + CONSTRAINT "FK_DEV_OPER_001" FOREIGN KEY ("ID_ORDL") + REFERENCES "MARIUSM_AUTO"."DEV_ORDL" ("ID_ORDL") ENABLE, + CONSTRAINT "FK_DEV_OPER_007" FOREIGN KEY ("ID_FACT") + REFERENCES "MARIUSM_AUTO"."DOCUMENTE" ("ID_DOC") DISABLE, + CONSTRAINT "FK_DEV_OPER_004" FOREIGN KEY ("ID_ARTICOL") + REFERENCES "MARIUSM_AUTO"."NOM_ARTICOLE" ("ID_ARTICOL") ENABLE, + CONSTRAINT "FK_DEV_OPER_003" FOREIGN KEY ("ID_SECTIE") + REFERENCES "MARIUSM_AUTO"."NOM_SECTII" ("ID_SECTIE") ENABLE, + CONSTRAINT "FK_DEV_OPER_005" FOREIGN KEY ("ID_RUL_AUX") + REFERENCES "MARIUSM_AUTO"."RUL_AUXILIAR" ("ID_RUL_AUX") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_OPER" ON "MARIUSM_AUTO"."DEV_OPER" ("ID_OPER") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_OPER" ADD CONSTRAINT "PK_OPER" PRIMARY KEY ("ID_OPER") + USING INDEX "MARIUSM_AUTO"."PK_OPER" ENABLE; + +-- --- TABLE: DEV_OPER_MECANICI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_OPER_MECANICI" + ( "ID_OPERMECANIC" NUMBER(10,0) NOT NULL ENABLE, + "ID_MECANIC" NUMBER(5,0) NOT NULL ENABLE, + "ID_OPER" NUMBER(10,0) NOT NULL ENABLE, + "ORE" NUMBER(8,3) DEFAULT 0 NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_DEV_OPER_MECANICI" ON "MARIUSM_AUTO"."DEV_OPER_MECANICI" ("ID_OPERMECANIC") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_OPER_MECANICI" ADD CONSTRAINT "PK_DEV_OPER_MECANICI" PRIMARY KEY ("ID_OPERMECANIC") + USING INDEX "MARIUSM_AUTO"."PK_DEV_OPER_MECANICI" ENABLE; + +-- --- TABLE: DEV_ORDL --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_ORDL" + ( "ID_ORDL" NUMBER(10,0) NOT NULL ENABLE, + "LUNA" NUMBER(2,0) DEFAULT 0 NOT NULL ENABLE, + "AN" NUMBER(4,0) DEFAULT 0 NOT NULL ENABLE, + "ID_INSPECTOR" NUMBER(5,0) DEFAULT null, + "ID_LUCRARE" NUMBER(10,0) NOT NULL ENABLE, + "TERMEN" DATE, + "DATAI" DATE, + "ORAI" NUMBER(5,0), + "DATAE" DATE, + "ORAE" NUMBER(5,0), + "VALIDAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_UTIL_AD" NUMBER(5,0) DEFAULT null NOT NULL ENABLE, + "ID_UTIL_VALID" NUMBER(5,0) DEFAULT null, + "DATAORAAD" DATE, + "DATAORAVALID" DATE, + "ID_UTILS" NUMBER(5,0) DEFAULT null, + "DATAORAS" DATE, + "ID_MASINICLIENT" NUMBER(5,0) DEFAULT null, + "ID_ASIGURATOR" NUMBER(5,0) DEFAULT null, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_TIP" NUMBER(5,0) DEFAULT 1 NOT NULL ENABLE, + "INCHIS_FORTAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "KMINT" NUMBER(10,0), + "NR_DOSAR" VARCHAR2(40), + "SOLICITARI_CLIENT" CLOB, + "PROC_TVAV" NUMBER(10,4), + "ID_PART" NUMBER(10,0), + "COADA_DEVIZ" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "OBSERVATII" VARCHAR2(1000), + "DATA_CURS" DATE, + "IN_LUCRU" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_VALUTA_DEVIZ" NUMBER(10,0), + "FACTUREZMIX" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "DATA_IN_LUCRU" DATE, + "DATAORAINLUCRU" DATE, + "ID_AGENT" NUMBER(10,0), + "ID_UTIL_INCHIS" NUMBER(5,0), + "DATAORAINCHIS" DATE, + "ID_PART_REF" NUMBER(10,0), + "ORE_FUNCTIONARE" NUMBER(10,0), + "DEFECTIUNI" VARCHAR2(200), + CONSTRAINT "FK_DEV_ORDL_001" FOREIGN KEY ("ID_INSPECTOR") + REFERENCES "MARIUSM_AUTO"."DEV_NOM_INSPECTORI" ("ID_INSPECTOR") ENABLE, + CONSTRAINT "FK_DEV_ORDL_002" FOREIGN KEY ("ID_LUCRARE") + REFERENCES "MARIUSM_AUTO"."NOM_LUCRARI" ("ID_LUCRARE") ENABLE, + CONSTRAINT "FK_DEV_ORDL_005" FOREIGN KEY ("ID_AGENT") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE, + CONSTRAINT "FK_DEV_ORDL_003" FOREIGN KEY ("ID_PART") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE, + CONSTRAINT "FK_DEV_ORDL_006" FOREIGN KEY ("ID_PART_REF") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE, + CONSTRAINT "FK_DEV_ORDL_004" FOREIGN KEY ("ID_VALUTA_DEVIZ") + REFERENCES "MARIUSM_AUTO"."NOM_VALUTE" ("ID_VALUTA") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_ORDL" ON "MARIUSM_AUTO"."DEV_ORDL" ("ID_ORDL") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_ORDL" ADD CONSTRAINT "PK_DEV_ORDL" PRIMARY KEY ("ID_ORDL") + USING INDEX "MARIUSM_AUTO"."PK_ORDL" ENABLE; + +-- --- TABLE: DEV_RAPOARTE_PROD_DET --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_RAPOARTE_PROD_DET" + ( "ID_DEV_RAP_PROD_DET" NUMBER(20,0) NOT NULL ENABLE, + "ID_ARTICOL" NUMBER(20,0) NOT NULL ENABLE, + "CANTITATE" NUMBER(20,4) NOT NULL ENABLE, + "PRET" NUMBER(20,4) NOT NULL ENABLE, + "ID_FACT" NUMBER(20,0), + "ID_RUL_AUX" NUMBER(20,0) NOT NULL ENABLE, + CONSTRAINT "FK_DEV_RAP_PROD_DET_002" FOREIGN KEY ("ID_FACT") + REFERENCES "MARIUSM_AUTO"."DOCUMENTE" ("ID_DOC") ENABLE, + CONSTRAINT "FK_DEV_RAP_PROD_DET_001" FOREIGN KEY ("ID_ARTICOL") + REFERENCES "MARIUSM_AUTO"."NOM_ARTICOLE" ("ID_ARTICOL") ENABLE, + CONSTRAINT "FK_DEV_RAP_PROD_DET_003" FOREIGN KEY ("ID_RUL_AUX") + REFERENCES "MARIUSM_AUTO"."RUL_AUXILIAR" ("ID_RUL_AUX") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_DEV_RAP_PROD_DET" ON "MARIUSM_AUTO"."DEV_RAPOARTE_PROD_DET" ("ID_DEV_RAP_PROD_DET") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_RAPOARTE_PROD_DET" ADD CONSTRAINT "PK_DEV_RAP_PROD_DET" PRIMARY KEY ("ID_DEV_RAP_PROD_DET") + USING INDEX "MARIUSM_AUTO"."PK_DEV_RAP_PROD_DET" ENABLE; + +-- --- TABLE: DEV_TIPURI_MOTOARE --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_TIPURI_MOTOARE" + ( "ID_TIPMOTOR" NUMBER(5,0) NOT NULL ENABLE, + "DENUMIRE" VARCHAR2(50), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_TIPMOTOR" ON "MARIUSM_AUTO"."DEV_TIPURI_MOTOARE" ("ID_TIPMOTOR") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_TIPURI_MOTOARE" ADD CONSTRAINT "PK_TIPMOTOR" PRIMARY KEY ("ID_TIPMOTOR") + USING INDEX "MARIUSM_AUTO"."PK_TIPMOTOR" ENABLE; + +-- --- TABLE: DEV_TIP_DEVIZ --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_TIP_DEVIZ" + ( "ID_TIP" NUMBER(5,0) NOT NULL ENABLE, + "DENUMIRE" VARCHAR2(50) NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "INCH_VALIDARE" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_TIP_DEVIZ" ON "MARIUSM_AUTO"."DEV_TIP_DEVIZ" ("ID_TIP") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_TIP_DEVIZ" ADD CONSTRAINT "PK_TIP_DEVIZ" PRIMARY KEY ("ID_TIP") + USING INDEX "MARIUSM_AUTO"."PK_TIP_DEVIZ" ENABLE; + +-- --- TABLE: DEV_UTILIZATORI_CODURI --- + + CREATE TABLE "MARIUSM_AUTO"."DEV_UTILIZATORI_CODURI" + ( "ID_UTIL_COD" NUMBER(5,0) NOT NULL ENABLE, + "ID_UTIL" NUMBER(5,0) NOT NULL ENABLE, + "COD" VARCHAR2(44), + CONSTRAINT "FK_DEV_UTILIZATORI_CODURI001" FOREIGN KEY ("ID_UTIL") + REFERENCES "CONTAFIN_ORACLE"."UTILIZATORI" ("ID_UTIL") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_DEV_UTILIZATORI_CODURI" ON "MARIUSM_AUTO"."DEV_UTILIZATORI_CODURI" ("ID_UTIL_COD") + ; +ALTER TABLE "MARIUSM_AUTO"."DEV_UTILIZATORI_CODURI" ADD CONSTRAINT "PK_DEV_UTILIZATORI_CODURI" PRIMARY KEY ("ID_UTIL_COD") + USING INDEX "MARIUSM_AUTO"."PK_DEV_UTILIZATORI_CODURI" ENABLE; + +-- --- TABLE: NOM_ARTICOLE --- + + CREATE TABLE "MARIUSM_AUTO"."NOM_ARTICOLE" + ( "ID_ARTICOL" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "CODMAT" VARCHAR2(50), + "DENUMIRE" VARCHAR2(100), + "UM" VARCHAR2(20), + "CONT" VARCHAR2(4), + "ACONT" VARCHAR2(4), + "DEP" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "ID_SUBGRUPA" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "CANT_BAX" NUMBER(9,4) DEFAULT 1 NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_MOD" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "CODBARE" VARCHAR2(50), + "IN_STOC" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE, + "IN_CRM" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "DNF" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "DESCRIERE" VARCHAR2(500), + "UM2" VARCHAR2(10), + "ID_UTIL" NUMBER(5,0), + "DATAORA" DATE DEFAULT sysdate, + "CODMATF" VARCHAR2(50), + "CONDITII_PASTRARE" VARCHAR2(500), + "ID_PART" NUMBER(10,0), + "PRETACHCTVA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "TAXA_RECONDITIONARE" NUMBER(20,4) DEFAULT 0 NOT NULL ENABLE, + "ID_ARTICOL_GENERAL" NUMBER(20,0), + "LISTARE_CODBARE" NUMBER(1,0) DEFAULT 0, + "TIP" NUMBER(1,0) DEFAULT 0, + "TIMPN" NUMBER(7,3) DEFAULT 0, + "COMPUS" NUMBER(1,0) DEFAULT 0, + "CODNC8" VARCHAR2(20), + "ID_TARA_ORIGINE" NUMBER(4,0), + "GREUTATE" NUMBER(12,4) DEFAULT 0 NOT NULL ENABLE, + "CODCPV" VARCHAR2(20) + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_ARTICOL" ON "MARIUSM_AUTO"."NOM_ARTICOLE" ("ID_ARTICOL") + ; +ALTER TABLE "MARIUSM_AUTO"."NOM_ARTICOLE" ADD CONSTRAINT "PK_ARTICOL" PRIMARY KEY ("ID_ARTICOL") + USING INDEX "MARIUSM_AUTO"."PK_ARTICOL" ENABLE; + +-- --- TABLE: NOM_LUCRARI --- + + CREATE TABLE "MARIUSM_AUTO"."NOM_LUCRARI" + ( "ID_LUCRARE" NUMBER(10,0) NOT NULL ENABLE, + "NRORD" VARCHAR2(50), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_MOD" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "FACTURATA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_TATA" NUMBER(10,0) DEFAULT null, + "ID_FACT" NUMBER(20,0) + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_LUCRARE" ON "MARIUSM_AUTO"."NOM_LUCRARI" ("ID_LUCRARE") + ; +ALTER TABLE "MARIUSM_AUTO"."NOM_LUCRARI" ADD CONSTRAINT "PK_LUCRARE" PRIMARY KEY ("ID_LUCRARE") + USING INDEX "MARIUSM_AUTO"."PK_LUCRARE" ENABLE; + +-- --- TABLE: NOM_PARTENERI --- + + CREATE TABLE "MARIUSM_AUTO"."NOM_PARTENERI" + ( "ID_PART" NUMBER(10,0) NOT NULL ENABLE, + "NUME" VARCHAR2(100), + "COD_FISCAL" VARCHAR2(30), + "REG_COMERT" VARCHAR2(30), + "ADRESA" VARCHAR2(150), + "ID_LOC_BCKP" NUMBER(5,0), + "BANCA" VARCHAR2(60), + "CONT_BANCA" VARCHAR2(60), + "ZONA" VARCHAR2(16), + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_MOD" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "INACTIV" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "TELEFON2" VARCHAR2(32), + "TELEFON3" VARCHAR2(32), + "EMAIL" VARCHAR2(32), + "FAX" VARCHAR2(32), + "DENUMIRE" VARCHAR2(100), + "PRENUME" VARCHAR2(100), + "PREFIX" VARCHAR2(30), + "SUFIX" VARCHAR2(30), + "MOTIV_INACTIV" VARCHAR2(100), + "TIP_PERSOANA" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE, + "ID_UTIL" NUMBER(8,0), + "DATAORA" DATE DEFAULT sysdate, + "ID_UTILS" NUMBER(8,0), + "DATAORAS" DATE, + "ELIBERATDE" VARCHAR2(64), + "DATAELIBERAT" DATE, + "ID_CATEGORIE_ENTITATE" NUMBER(10,0), + "BLOC" VARCHAR2(8), + "SCARA" VARCHAR2(8), + "APARTAMENT" VARCHAR2(8), + "TELEFON" VARCHAR2(1000), + "COD_FISCAL_VECHI" VARCHAR2(1000), + "ID_LOC" NUMBER(10,0), + "COD_FISCAL2" VARCHAR2(30), + "SWIFT_BANCA" VARCHAR2(11), + "ADRESA_BANCA" VARCHAR2(150), + "INSTITUTIE_PUBLICA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ENTITATE_AFILIATA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + CONSTRAINT "FK_NOM_PARTENERI_001" FOREIGN KEY ("ID_CATEGORIE_ENTITATE") + REFERENCES "MARIUSM_AUTO"."NOM_CATEGORII_ENTITATI" ("ID_CATEGORIE_ENTITATE") ENABLE, + CONSTRAINT "FK_NOM_PARTENERI_002" FOREIGN KEY ("ID_LOC") + REFERENCES "CONTAFIN_ORACLE"."NOM_LOCALITATI" ("ID_LOC") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_ID_PART" ON "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") + ; +ALTER TABLE "MARIUSM_AUTO"."NOM_PARTENERI" ADD CONSTRAINT "PK_ID_PART" PRIMARY KEY ("ID_PART") + USING INDEX "MARIUSM_AUTO"."PK_ID_PART" ENABLE; + +-- --- TABLE: RUL --- + + CREATE TABLE "MARIUSM_AUTO"."RUL" + ( "ID_RUL" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "AN" NUMBER(4,0) DEFAULT 0 NOT NULL ENABLE, + "LUNA" NUMBER(2,0) DEFAULT 0 NOT NULL ENABLE, + "COD" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "NNIR" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "ID_ARTICOL" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_GESTIUNE" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "PRET" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "PRETV" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "TVA" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "TVAV" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "CANT" NUMBER(14,3) DEFAULT 0 NOT NULL ENABLE, + "CANTE" NUMBER(14,3) DEFAULT 0 NOT NULL ENABLE, + "CONT" VARCHAR2(4) NOT NULL ENABLE, + "ADAOS" NUMBER(14,4) DEFAULT 0 NOT NULL ENABLE, + "ID_LUCRARE" NUMBER(20,0) DEFAULT 0 NOT NULL ENABLE, + "ID_RESPONSABIL" NUMBER(10,0) DEFAULT 0, + "DATAACT" DATE, + "PROCENT" NUMBER(10,3) DEFAULT 0 NOT NULL ENABLE, + "CURS" NUMBER(16,6) DEFAULT 0 NOT NULL ENABLE, + "PRETD" NUMBER(14,4) DEFAULT 0 NOT NULL ENABLE, + "ID_UTIL" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "DATAORA" DATE, + "ID_SECTIE" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE, + "ALCOOLTUTUN" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "PRETVTVA" NUMBER(14,4) DEFAULT 0 NOT NULL ENABLE, + "ACONT" VARCHAR2(4), + "DATAIN" DATE, + "DATAOUT" DATE, + "PROC_DISC" NUMBER(7,3) DEFAULT 0 NOT NULL ENABLE, + "DISCUNITAR" NUMBER(14,4) DEFAULT 0 NOT NULL ENABLE, + "PROC_TVA" NUMBER(5,2) DEFAULT 0 NOT NULL ENABLE, + "ID_FACT" NUMBER(20,0) DEFAULT 0, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "DISCOUNT_TVA" NUMBER(14,4) DEFAULT 0 NOT NULL ENABLE, + "ADAOS_TVA" NUMBER(14,4) DEFAULT 0 NOT NULL ENABLE, + "PROC_TVAV" NUMBER(5,2) DEFAULT 0 NOT NULL ENABLE, + "VALOARE" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "VALOAREV" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "VALTVA" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "VALTVAV" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "VALOARE_ADAOS" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "VALTVA_ADAOS" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "VALOARE_DISCOUNT" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "VALTVA_DISCOUNT" NUMBER(16,4) DEFAULT 0 NOT NULL ENABLE, + "ID_GESTIUNEC" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_RESPONSABILC" NUMBER(5,0) DEFAULT 0, + "ID_TIP_RULAJ" NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE, + "ID_RETETA" NUMBER(10,0), + "ID_SET" NUMBER(20,0), + "ID_SUCURSALA" NUMBER(5,0), + "ID_OBIECT_DEPOZIT" NUMBER(10,0), + "ID_RUL_AUX" NUMBER(10,0), + "NRACT" NUMBER(20,0), + "ID_UTILS" NUMBER(10,0), + "DATAORAS" DATE, + "SERIE" VARCHAR2(100), + "ID_VALUTA" NUMBER(10,0), + "SERIE_ACT" VARCHAR2(10), + "LOT" VARCHAR2(20), + "ADATA_EXPIRARE" DATE, + "ID_PART_REZ" NUMBER(10,0), + "ID_LUCRARE_REZ" NUMBER(10,0), + "ID_RUL_AUX_INFO" NUMBER(10,0), + "ID_JTVA_COLOANA" NUMBER(4,0), + "TAXCODE" NUMBER(6,0), + CONSTRAINT "FK_RUL_004" FOREIGN KEY ("ID_SUCURSALA") + REFERENCES "CONTAFIN_ORACLE"."NOM_FIRME" ("ID_FIRMA") ENABLE, + CONSTRAINT "FK_RUL_006" FOREIGN KEY ("ID_LUCRARE_REZ") + REFERENCES "MARIUSM_AUTO"."NOM_LUCRARI" ("ID_LUCRARE") DISABLE, + CONSTRAINT "FK_RUL_002" FOREIGN KEY ("ID_OBIECT_DEPOZIT") + REFERENCES "MARIUSM_AUTO"."NOM_OBIECTE_DEPOZITARE" ("ID_OBIECT_DEPOZIT") DISABLE, + CONSTRAINT "FK_RUL_005" FOREIGN KEY ("ID_PART_REZ") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") DISABLE, + CONSTRAINT "FK_RUL_001" FOREIGN KEY ("ID_TIP_RULAJ") + REFERENCES "MARIUSM_AUTO"."NOM_TIP_RULAJ" ("ID_TIP_RULAJ") ENABLE, + CONSTRAINT "FK_RUL_003" FOREIGN KEY ("ID_RUL_AUX") + REFERENCES "MARIUSM_AUTO"."RUL_AUXILIAR" ("ID_RUL_AUX") DISABLE, + CONSTRAINT "FK_RUL_007" FOREIGN KEY ("ID_RUL_AUX_INFO") + REFERENCES "MARIUSM_AUTO"."RUL_AUXILIAR" ("ID_RUL_AUX") DISABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_RUL" ON "MARIUSM_AUTO"."RUL" ("ID_RUL") + ; +ALTER TABLE "MARIUSM_AUTO"."RUL" ADD CONSTRAINT "PK_RUL" PRIMARY KEY ("ID_RUL") + USING INDEX "MARIUSM_AUTO"."PK_RUL" ENABLE; + +-- --- TABLE: VANZARI --- + + CREATE TABLE "MARIUSM_AUTO"."VANZARI" + ( "ID_VANZARE" NUMBER(10,0) NOT NULL ENABLE, + "ID_UTIL" NUMBER(10,0) NOT NULL ENABLE, + "DATAORA" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_UTILS" NUMBER(10,0), + "DATAORAS" DATE, + "ID_LUCRARE" NUMBER(10,0) DEFAULT 0, + "ID_PART" NUMBER(10,0) DEFAULT 0, + "NUMAR_ACT" NUMBER(20,0) DEFAULT 0, + "NR_PERSOANE" NUMBER(10,0) DEFAULT 0, + "NRINMAT" VARCHAR2(20), + "FACTURAT" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "DATA_FACTURAT" DATE, + "ID_UTILFACT" NUMBER(10,0), + "ID_PUNCTVANZARE" NUMBER(5,0) DEFAULT 0, + "ID_COMANDA" NUMBER(20,0), + "TIP" NUMBER(2,0) DEFAULT 0 NOT NULL ENABLE, + "ID_GESTIUNE" NUMBER(20,0), + "COD" NUMBER(20,0), + "ID_DELEGAT" NUMBER(20,0), + "ID_MASINA" NUMBER(20,0), + "DATA_ACT" DATE, + "ID_AGENT" NUMBER(20,0), + "DISCOUNT" NUMBER(20,4), + "DISCOUNT_EVIDENTIAT" NUMBER(1,0), + "TEXT_ADITIONAL" VARCHAR2(1000), + "IN_VALUTA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "SERIE_ACT" VARCHAR2(10), + "ID_SUCURSALA" NUMBER(5,0), + "ID_RUTA" NUMBER(10,0), + "ID_SECTIE" NUMBER(10,0), + "DIFTOTFTVA" NUMBER(20,4), + "DIFTOTTVA" NUMBER(20,4), + "ID_VANZARE2" VARCHAR2(32), + "DATAORA_EXP" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "ID_FACT_DESCARCAT" NUMBER(10,0), + "DATAORA_DESCARCAT" DATE, + "ID_CASA_MARCAT_Z" NUMBER(20,0), + "AFISARE_SCADENTA" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE, + "COEFICIENT_K" NUMBER(5,2), + "ID_ORDL" NUMBER(10,0), + "TVA_INCASARE" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "ID_FACTURARE" NUMBER(10,0), + "LISTARE_DETALIATA" NUMBER(1,0) DEFAULT 0, + "DISCOUNT_TVA" NUMBER(20,4), + "VALOARE_ACHIZITIE" NUMBER(20,4), + "TOTAL_FARA_TVA" NUMBER(20,4), + "TOTAL_TVA" NUMBER(20,4), + "TOTAL_CU_TVA" NUMBER(20,4), + "SERIE_INCASAT" VARCHAR2(10), + "NR_INCASAT" NUMBER(20,0), + "SUMA_INCASAT" NUMBER(20,4), + "TIP_INCASAT" NUMBER(2,0), + "AVIZE" VARCHAR2(1000), + "ID_VALUTA" NUMBER(10,0), + "CURS" NUMBER(22,6), + "MULTIPLICATOR" NUMBER(10,0), + "ID_FACT" NUMBER(20,0), + "DATA_SCAD" DATE, + "ID_CTR" NUMBER(10,0), + "VALVAL" NUMBER(20,4), + "TVAVAL" NUMBER(20,4), + "TOTVAL" NUMBER(20,4), + "TIP_FACTURA" NUMBER(2,0), + "ID_BENEFICIAR" NUMBER(10,0), + "EPROFORMA" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "TIP_SAFT" NUMBER(3,0), + "EFACTURA" NUMBER(1,0), + CONSTRAINT "FK_VANZARI_007" FOREIGN KEY ("ID_SUCURSALA") + REFERENCES "CONTAFIN_ORACLE"."NOM_FIRME" ("ID_FIRMA") ENABLE, + CONSTRAINT "FK_VANZARI_009" FOREIGN KEY ("ID_CASA_MARCAT_Z") + REFERENCES "MARIUSM_AUTO"."CASE_MARCAT_Z" ("ID_CASA_MARCAT_Z") ENABLE, + CONSTRAINT "FK_VANZARI_001" FOREIGN KEY ("ID_COMANDA") + REFERENCES "MARIUSM_AUTO"."COMENZI" ("ID_COMANDA") ENABLE, + CONSTRAINT "FK_VANZARI_008" FOREIGN KEY ("ID_RUTA") + REFERENCES "MARIUSM_AUTO"."FACT_NOM_RUTE" ("ID_RUTA") ENABLE, + CONSTRAINT "FK_VANZARI_004" FOREIGN KEY ("ID_MASINA") + REFERENCES "MARIUSM_AUTO"."NOM_MASINI" ("ID_MASINA") ENABLE, + CONSTRAINT "FK_VANZARI_003" FOREIGN KEY ("ID_DELEGAT") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE, + CONSTRAINT "FK_VANZARI_005" FOREIGN KEY ("ID_AGENT") + REFERENCES "MARIUSM_AUTO"."NOM_PARTENERI" ("ID_PART") ENABLE + ) ; + CREATE UNIQUE INDEX "MARIUSM_AUTO"."PK_VANZARI" ON "MARIUSM_AUTO"."VANZARI" ("ID_VANZARE") + ; +ALTER TABLE "MARIUSM_AUTO"."VANZARI" ADD CONSTRAINT "PK_VANZARI" PRIMARY KEY ("ID_VANZARE") + USING INDEX "MARIUSM_AUTO"."PK_VANZARI" ENABLE; + + +-- ============================================================ +-- === SECTION: VIEWS === +-- ============================================================ +-- Gasite: 88 obiecte + +-- --- VIEW: AUTO_ANALIZA_COMENZI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_ANALIZA_COMENZI" ("NRORD", "ID_PART", "NUME", "COD_FISCAL", "DATAI", "ASIGURATOR", "INSPECTOR", "BANCA", "CONT_BANCA", "ADRESA", "EMAIL", "TELEFON1", "TELEFON2", "NR_DOSAR", "VALIDAT", "ID_MASINICLIENT", "NRINMAT", "SERIES", "SERIEM", "CULOARE", "KMINT", "ID_MASINA", "ID_MARCA", "MARCA", "MASINA", "SEMN", "ID_LUCRARE", "CODMAT", "DENUMIRE", "CANTE", "PRET", "DATA", "ID") AS + select l.nrord, + p.id_part, + p.denumire as nume, + p.cod_fiscal, + ord.datai, + asig1.denumire as asigurator, + ins.inspector, + p.banca, + p.cont_banca, + ap.adresa, + ap.email, + ap.telefon1, + ap.telefon2, + ord.nr_dosar, + ord.validat, + mc.id_masiniclient, + mc.nrinmat, + mc.series, + mc.seriem, + mc.culoare, + ord.kmint, + mc.id_masina, + mm.id_marca, + mm.marca, + ms.masina, + ro.semn, + ro.id_lucrare, + ro.codmat, + ro.denumire, + ro.cante, + ro.pret, + ro.data, + ro.id + from dev_masiniclienti mc + join dev_ordl ord + on ord.id_masiniclient = mc.id_masiniclient + join (select 'A' as semn, + r.id_lucrare, + art.codmat, + art.denumire, + r.cante, + r.pretv as pret, + r.dataact as data, + r.id_rul as id + from rul r + join nom_articole art + on r.id_articol = art.id_articol + where r.sters = 0 + and r.cante <> 0 + union all + select 'B' as semn, + o.id_lucrare, + n.codop as codmat, + n.denop as denumire, + op.timpn as cante, + (case op.nou + when 0 then + round(op.pret / 10000, 2) + else + op.pret + end) as pret, + op.datai as data, + op.id_oper as id + from dev_ordl o + join dev_oper op + on op.id_ordl = o.id_ordl + join dev_nom_norme n + on op.id_norme = n.id_norme) ro + on ro.id_lucrare = ord.id_lucrare + join nom_lucrari l + on ord.id_lucrare = l.id_lucrare + left join nom_parteneri p + on mc.id_partener = p.id_part + left join vadrese_parteneri ap + on p.id_part = ap.id_part + and ap.principala = 1 + left join dev_nom_asiguratori asig + on ord.id_asigurator = asig.id_asigurator + left join nom_parteneri asig1 + on asig.id_part = asig1.id_part + left join dev_nom_inspectori ins + on ord.id_inspector = ins.id_inspector + left join dev_nom_masini ms + on mc.id_masina = ms.id_masina + left join dev_nom_marci mm + on ms.id_marca = mm.id_marca + where nvl(ord.sters,0) = 0 + and mc.sters = 0 + and p.sters = 0; + +-- --- VIEW: AUTO_ANALIZA_MANASIG --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_ANALIZA_MANASIG" ("TIP", "ASIG", "LUNA", "TIMP_N") AS + Select decode(a.id_tip, 1, 'POST GARANTIE', 2, 'GARANTIE', 'REGIE') As tip, + NVL(a.asigurator, 'FARA ASIGURATOR') as asig, + decode(a.id_tip, + 1, + last_day(trunc(a.datafact)), + last_day(trunc(a.dataoravalid))) as luna, + Nvl(Sum(round(b.timpn, 3)), 0) As timp_n + From auto_istoric_comenzi a + Left Join dev_oper b + On a.id_ordl = b.id_ordl + Where ((a.validat = 1 and a.id_tip > 1) or + (a.facturat = 1 and a.id_tip = 1)) + and b.sters = 0 + Group By a.asigurator, + a.id_tip, + decode(a.id_tip, + 1, + last_day(trunc(a.datafact)), + last_day(trunc(a.dataoravalid))); + +-- --- VIEW: AUTO_ANALIZA_SALARII --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_ANALIZA_SALARII" ("ID_ORDL", "ID_TIP") AS + select a.id_ordl, a.id_tip + from dev_ordl a + left join auto_vordl_facturate b + on a.id_lucrare = b.id_lucrare + left join dev_tip_deviz c + on a.id_tip = c.id_tip + where a.sters = 0 + and ((c.inch_validare = 0 and + (b.facturat = 1 and (b.dataact between pack_auto.get_datai() and + pack_auto.get_dataf()))) or + (c.inch_validare = 1 and + (a.validat = 1 and (a.dataoravalid between pack_auto.get_datai() and + pack_auto.get_dataf())))); + +-- --- VIEW: AUTO_ANALIZA_SALARII_REG --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_ANALIZA_SALARII_REG" ("ID_MECANIC", "NUME", "ORE", "MANOPERA", "ORE_REG", "MANOPERA_REG") AS + select d.id_mecanic, + e.denumire as nume, + sum(case + when a.id_tip = 1 then + c.ore + else + 0 + end) as ore, + sum(case + when a.id_tip = 1 then + round(b.pret * c.ore, 2) + else + 0 + end) as manopera, + sum(case + when a.id_tip != 1 then + c.ore + else + 0 + end) as ore_reg, + sum(case + when a.id_tip != 1 then + round(b.pret * c.ore, 2) + else + 0 + end) as manopera_reg + from auto_analiza_salarii a + left join dev_oper b on a.id_ordl = b.id_ordl + left join dev_oper_mecanici c on b.id_oper = c.id_oper + left join dev_mecanici d on c.id_mecanic = d.id_mecanic + left join nom_parteneri e on d.id_part = e.id_part + where b.sters = 0 + and c.sters = 0 + group by d.id_mecanic, e.denumire; + +-- --- VIEW: AUTO_ANALIZA_SALARII_VAL --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_ANALIZA_SALARII_VAL" ("ID_MECANIC", "NUME", "ORE", "MANOPERA", "ORE_REG", "MANOPERA_REG") AS + select d.id_mecanic, + e.denumire as nume, + sum(case + when a.id_tip = 1 then + c.ore + else + 0 + end) as ore, + sum(case + when a.id_tip = 1 then + round(b.pret * c.ore, 2) + else + 0 + end) as manopera, + sum(case + when a.id_tip != 1 then + c.ore + else + 0 + end) as ore_reg, + sum(case + when a.id_tip != 1 then + round(b.pret * c.ore, 2) + else + 0 + end) as manopera_reg + from dev_ordl a + left join dev_oper b on a.id_ordl = b.id_ordl + left join dev_oper_mecanici c on b.id_oper = c.id_oper + left join dev_mecanici d on c.id_mecanic = d.id_mecanic + left join nom_parteneri e on d.id_part = e.id_part + where a.sters = 0 + and a.validat = 1 + and a.dataoravalid between pack_auto.get_datai() and + pack_auto.get_dataf() + and b.sters = 0 + and c.sters = 0 + group by d.id_mecanic, e.denumire; + +-- --- VIEW: AUTO_COMENZI_VALIDATE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_COMENZI_VALIDATE" ("ID_ORDL", "ID_LUCRARE", "ID_MASINICLIENT", "ID_TIP", "DATAI", "ID_INSPECTOR", "ID_ASIGURATOR", "NR_DOSAR", "KMINT", "ORE_FUNCTIONARE", "PROC_TVAV", "VALIDAT", "DATAORAVALID", "UTIL_VALID", "NRORD", "INCHIS_FORTAT", "DATAORAINCHIS", "UTIL_INCHIS", "ID_PART_REF") AS + select a.id_ordl, + a.id_lucrare, + a.id_masiniclient, + a.id_tip, + a.datai, + a.id_inspector, + a.id_asigurator, + a.nr_dosar, + a.kmint, + a.ore_functionare, + a.proc_tvav, + (case + when extract(month from a.dataoravalid) + + extract(year from a.dataoravalid) * 12 <= + pack_sesiune.getluna() + pack_sesiune.getan() * 12 then + 1 + else + 0 + end) as validat, + (case + when extract(month from a.dataoravalid) + + extract(year from a.dataoravalid) * 12 <= + pack_sesiune.getluna() + pack_sesiune.getan() * 12 then + a.dataoravalid + else + null + end) as dataoravalid, + (case + when extract(month from a.dataoravalid) + + extract(year from a.dataoravalid) * 12 <= + pack_sesiune.getluna() + pack_sesiune.getan() * 12 then + b.utilizator + else + null + end) as util_valid, + c.nrord, + a.inchis_fortat, + (case + when extract(month from a.dataorainchis) + + extract(year from a.dataorainchis) * 12 <= + pack_sesiune.getluna() + pack_sesiune.getan() * 12 then + a.dataorainchis + else + null + end) as dataorainchis, + (case + when extract(month from a.dataorainchis) + + extract(year from a.dataorainchis) * 12 <= + pack_sesiune.getluna() + pack_sesiune.getan() * 12 then + d.utilizator + else + null + end) as util_inchis, + a.id_part_ref + from dev_ordl a + left join syn_utilizatori b + on a.id_util_valid = b.id_util + left join nom_lucrari c + on a.id_lucrare = c.id_lucrare + left join syn_utilizatori d + on a.id_util_inchis = d.id_util + where a.sters = 0; + +-- --- VIEW: AUTO_DATE_SUPLIMENTARE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_DATE_SUPLIMENTARE" ("ID_ORDL", "KMINT", "ORE_FUNCTIONARE", "SOLICITARI_CLIENT", "OBSERVATII", "DEFECTIUNI", "TERMEN", "ASIGURATOR", "INSPECTOR", "ID_PARTENER", "SERIES", "MASINA", "MARCA", "ID_MARCA") AS + select a.id_ordl, + a.kmint, + a.ore_functionare, + a.solicitari_client, + a.observatii, + a.defectiuni, + a.termen, + b1.denumire as asigurator, + c.inspector, + d.id_partener, + d.series, + e.masina, + f.marca, + f.id_marca + from dev_ordl a + left join dev_nom_asiguratori b + on a.id_asigurator = b.id_asigurator + left join nom_parteneri b1 + on b.id_part = b1.id_part + left join dev_nom_inspectori c + on a.id_inspector = c.id_inspector + left join dev_masiniclienti d + on a.id_masiniclient = d.id_masiniclient + left join dev_nom_masini e + on d.id_masina = e.id_masina + left join dev_nom_marci f + on e.id_marca = f.id_marca + where a.sters = 0; + +-- --- VIEW: AUTO_DATE_SUPLIMENTARE_RAP --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_DATE_SUPLIMENTARE_RAP" ("ID_ORDL", "TERMEN", "KMINT", "ORE_FUNCTIONARE", "SOLICITARI_CLIENT", "OBSERVATII", "DEFECTIUNI", "ASIGURATOR", "INSPECTOR", "SERIEM", "NRINMAT", "SERIES", "ANFABRICATIE", "NRACHI", "DATAACHI", "MASINA", "MARCA", "TELEFON", "COD_FISCAL", "ADRESA", "FURNIZOR") AS + select a.id_ordl, + a.termen, + a.kmint, + a.ore_functionare, + a.solicitari_client, + a.observatii, + a.defectiuni, + b1.denumire as asigurator, + c.inspector, + d.seriem, + d.nrinmat, + d.series, + d.anfabricatie, + d.nrachi, + d.dataachi, + e.masina, + f.marca, + g.telefon, + g.cod_fiscal, + g.adresa, + h.denumire as furnizor + from dev_ordl a + left join dev_nom_asiguratori b + on a.id_asigurator = b.id_asigurator + left join nom_parteneri b1 + on b.id_part = b1.id_part + left join dev_nom_inspectori c + on a.id_inspector = c.id_inspector + left join dev_masiniclienti d + on a.id_masiniclient = d.id_masiniclient + left join dev_nom_masini e + on d.id_masina = e.id_masina + left join dev_nom_marci f + on e.id_marca = f.id_marca + left join vnom_parteneri g + on d.id_partener = g.id_part + left join dev_nom_furnizorimasini h + on d.id_furnizor = h.id_furnizor + where a.sters = 0; + +-- --- VIEW: AUTO_DETALII_COMENZI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_DETALII_COMENZI" ("ID_ORDL", "VALIDAT", "DATAORAVALID", "ID_TIP", "FACTURAT", "DATAFACT", "NRFACT") AS + select a.id_ordl, + a.validat, + a.dataoravalid, + a.id_tip, + nvl(b.facturat, 0) as facturat, + b.dataact as datafact, + nvl(b.nract, 0) as nrfact + from dev_ordl a + left join auto_vordl_facturi b + on a.id_lucrare = b.id_lucrare + where a.sters = 0; + +-- --- VIEW: AUTO_FACTURI_ASIG --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_FACTURI_ASIG" ("DATAI", "NR_DOSAR", "ASIGURATOR", "NRACT", "DATAACT", "MANOPERA", "MATERIALE", "VALCTVA", "NUME", "NRORD") AS + select a.datai, + a.nr_dosar, + c1.denumire as asigurator, + b.nract, + b.dataact, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + else + b.manopera_rol + end) as manopera, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.materiale_ron + else + b.materiale_rol + end) as materiale, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + b.materiale_ron + b.tva_ron + else + b.manopera_rol + b.materiale_rol + b.tva_rol + end) as valctva, + e.denumire as nume, + f.nrord + from dev_ordl a + join mv_ordl_sume_act b + on a.id_lucrare = b.id_lucrare + left join dev_nom_asiguratori c + on a.id_asigurator = c.id_asigurator + left join nom_parteneri c1 + on c.id_part = c1.id_part + left join dev_masiniclienti d + on a.id_masiniclient = d.id_masiniclient + left join nom_parteneri e + on d.id_partener = e.id_part + left join vnom_lucrari f + on a.id_lucrare = f.id_lucrare + where NVL(a.id_asigurator, 0) <> 0 + and a.sters = 0 + and b.id_set not in (31006, 31007) + order by c1.denumire, b.dataact; + +-- --- VIEW: AUTO_FACTURI_CLIENTI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_FACTURI_CLIENTI" ("DATAI", "NUME", "TELEFON", "NRACT", "DATAACT", "MANOPERA", "MATERIALE", "VALCTVA", "NRORD") AS + select a.datai, + d.denumire as nume, + d.telefon, + b.nract, + b.dataact, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + else + b.manopera_rol + end) as manopera, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.materiale_ron + else + b.materiale_rol + end) as materiale, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + b.materiale_ron + b.tva_ron + else + b.manopera_rol + b.materiale_rol + b.tva_rol + end) as valctva, + e.nrord + from dev_ordl a + join mv_ordl_sume_act b + on a.id_lucrare = b.id_lucrare + left join dev_masiniclienti c + on a.id_masiniclient = c.id_masiniclient + left join vnom_parteneri d + on c.id_partener = d.id_part + left join vnom_lucrari e + on a.id_lucrare = e.id_lucrare + where a.sters = 0 + and b.id_set not in (31006, 31007) + order by b.dataact; + +-- --- VIEW: AUTO_FACTURI_EMISE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_FACTURI_EMISE" ("NRCRT", "DATAORAVALID", "DATAFACT", "VALIDAT", "FACTURAT", "INSPECTOR", "ASIGURATOR", "ID_TIP", "ID_LUCRARE", "NRORD", "DATAI", "NR_DOSAR", "NUME", "TELEFON", "NRACT", "DATAACT", "MANOPERA_DEVIZ", "MATERIALE_DEVIZ", "MANOPERA", "MATERIALE", "NRINMAT", "VALCTVA", "ID_PART_REF", "PART_REF") AS + select row_number() over(partition by a.nrord order by a.datai, a.nrord) as nrcrt, + a.dataoravalid, + a1.dataact as datafact, + nvl(a.validat, 0) as validat, + nvl(a1.facturat, 0) as facturat, + e.inspector, + f1.denumire as asigurator, + a.id_tip, + a.id_lucrare, + a.nrord, + a.datai, + a.nr_dosar, + d.denumire as nume, + d.telefon, + b.nract, + b.dataact, + NVL(a1.manopera, 0) as manopera_deviz, + NVL(a2.materiale, 0) as materiale_deviz, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + else + b.manopera_rol + end) as manopera, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.materiale_ron + else + b.materiale_rol + end) as materiale, + c.nrinmat, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + b.materiale_ron + b.tva_ron + else + b.manopera_rol + b.materiale_rol + b.tva_rol + end) as valctva, + a.id_part_ref, + g.denumire as part_ref + from auto_comenzi_validate a + left join auto_vordl_facturate a1 + on a.id_lucrare = a1.id_lucrare + join mv_ordl_sume_act b + on a.id_lucrare = b.id_lucrare + left join auto_vordl_man a1 + on a.id_ordl = a1.id_ordl + left join auto_vordl_mat a2 + on a.id_lucrare = a2.id_lucrare + left join dev_masiniclienti c + on a.id_masiniclient = c.id_masiniclient + left join vnom_parteneri d + on c.id_partener = d.id_part + left join dev_nom_inspectori e + on a.id_inspector = e.id_inspector + left join dev_nom_asiguratori f + on a.id_asigurator = f.id_asigurator + left join nom_parteneri f1 + on f.id_part = f1.id_part +left join nom_parteneri g + on a.id_part_ref = g.id_part + where b.id_set not in (31006, 31007); + +-- --- VIEW: AUTO_FACTURI_EMISE_VECHI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_FACTURI_EMISE_VECHI" ("NRCRT", "DATAORAVALID", "DATAFACT", "VALIDAT", "FACTURAT", "INSPECTOR", "ASIGURATOR", "ID_TIP", "NRORD", "DATAI", "NR_DOSAR", "NUME", "TELEFON", "NRACT", "DATAACT", "MANOPERA_DEVIZ", "MATERIALE_DEVIZ", "MANOPERA", "MATERIALE", "NRINMAT", "VALCTVA", "ID_PART_REF", "PART_REF") AS + select row_number() over(partition by a.nrord order by a.datai, a.nrord) as nrcrt, + a.dataoravalid, + a.datafact, + a.validat, + a.facturat, + e.inspector, + f1.denumire as asigurator, + a.id_tip, + a.nrord, + a.datai, + a.nr_dosar, + d.denumire as nume, + d.telefon, + b.nract, + b.dataact, + NVL(a1.manopera, 0) as manopera_deviz, + NVL(a2.materiale, 0) as materiale_deviz, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + else + b.manopera_rol + end) as manopera, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.materiale_ron + else + b.materiale_rol + end) as materiale, + a.nrinmat, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + b.materiale_ron + b.tva_ron + else + b.manopera_rol + b.materiale_rol + b.tva_rol + end) as valctva, + a.id_part_ref, + a.part_ref + from auto_normare_comenzi a + join mv_ordl_sume_act b + on a.id_lucrare = b.id_lucrare + left join auto_vordl_man a1 + on a.id_ordl = a1.id_ordl + left join auto_vordl_mat a2 + on a.id_lucrare = a2.id_lucrare + left join dev_masiniclienti c + on a.id_masiniclient = c.id_masiniclient + left join vnom_parteneri d + on c.id_partener = d.id_part + left join dev_nom_inspectori e + on a.id_inspector = e.id_inspector + left join dev_nom_asiguratori f + on a.id_asigurator = f.id_asigurator + left join nom_parteneri f1 + on f.id_part = f1.id_part + where b.id_set not in (31006, 31007) + order by b.dataact; + +-- --- VIEW: AUTO_FACTURI_TOATE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_FACTURI_TOATE" ("NRORD", "DATAI", "NUME", "NR_DOSAR", "ASIGURATOR", "NRACT", "DATAACT", "MANOPERA", "MATERIALE", "VALCTVA") AS + select f.nrord, + a.datai, + e.denumire as nume, + a.nr_dosar, + c1.denumire as asigurator, + b.nract, + b.dataact, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + else + b.manopera_rol + end) as manopera, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.materiale_ron + else + b.materiale_rol + end) as materiale, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + b.manopera_ron + b.materiale_ron + b.tva_ron + else + b.manopera_rol + b.materiale_rol + b.tva_rol + end) as valctva + from dev_ordl a + join mv_ordl_sume_act b + on a.id_lucrare = b.id_lucrare + left join dev_nom_asiguratori c + on a.id_asigurator = c.id_asigurator + left join nom_parteneri c1 + on c.id_part = c1.id_part + left join dev_masiniclienti d + on a.id_masiniclient = d.id_masiniclient + left join nom_parteneri e + on d.id_partener = e.id_part + left join vnom_lucrari f + on a.id_lucrare = f.id_lucrare + where a.sters = 0 + and b.id_set not in (31006, 31007) + order by c1.denumire, b.dataact; + +-- --- VIEW: AUTO_INCHIDERE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_INCHIDERE" ("NRCRT", "DATAORAVALID", "DATAFACT", "VALIDAT", "FACTURAT", "ID_TIP", "NRORD", "DATAI", "NR_DOSAR", "NUME", "NRACT", "DATAACT", "MANOPERA", "MATERIALE", "NRINMAT", "TOTALFTVA", "ID_SET") AS + select row_number() over(partition by a.nrord order by a.datai, a.nrord) as nrcrt, + a.dataoravalid, + a.datafact, + a.validat, + a.facturat, + a.id_tip, + a.nrord, + a.datai, + a.nr_dosar, + d.denumire as nume, + b.nract, + b.dataact, + NVL(a1.manopera, 0) as manopera, + NVL(a2.materiale, 0) as materiale, + a.nrinmat, + NVL(a1.manopera, 0) + NVL(a2.materiale, 0) as totalftva, + b.id_set + from auto_normare_comenzi a + join mv_ordl_sume_act b + on a.id_lucrare = b.id_lucrare + left join auto_vordl_man a1 + on a.id_ordl = a1.id_ordl + left join auto_vordl_mat a2 + on a.id_lucrare = a2.id_lucrare + left join dev_masiniclienti c + on a.id_masiniclient = c.id_masiniclient + left join nom_parteneri d + on c.id_partener = d.id_part + where b.id_set in (31006, 31007) + order by b.dataact; + +-- --- VIEW: AUTO_ISTORIC_COMENZI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_ISTORIC_COMENZI" ("ID_ORDL", "ID_LUCRARE", "ID_MASINICLIENT", "ID_TIP", "DATAI", "NR_DOSAR", "VALIDAT", "DATAORAVALID", "UTIL_VALID", "NRORD", "PROC_TVAV", "FACTURAT", "DATAFACT", "NRFACT", "VALCTVA_FACTURA", "VAL_MANOPERA_FACTURA", "VAL_MATERIALE_FACTURA", "VAL_MATERIALE_ACH", "VAL_MATERIALE_VZ", "ORE_MANOPERA", "VAL_MANOPERA", "ID_PARTENER", "NRINMAT", "SERIES", "CILINDREE", "PUTERECP", "PUTEREKW", "MASINA", "MARCA", "NUME", "ASIGURATOR", "INSPECTOR", "TIP_COMANDA", "KMINT", "ORE_FUNCTIONARE", "INCHIS_FORTAT", "DATAORAINCHIS", "UTIL_INCHIS", "ID_PART_REF", "PART_REF") AS + select a.id_ordl, + a.id_lucrare, + a.id_masiniclient, + a.id_tip, + a.datai, + a.nr_dosar, + nvl(a.validat, 0) as validat, + a.dataoravalid, + a.util_valid, + a.nrord, + a.proc_tvav, + nvl(c.facturat, 0) as facturat, + c.dataact as datafact, + nvl(c.nract, 0) as nrfact, + c.valctva as valctva_factura, + c.valfactmanopera as val_manopera_factura, + c.valfactmateriale as val_materiale_factura, + (select sum(round(pret * cante, 2)) as valoarea from rul where sters = 0 and id_lucrare = a.id_lucrare) as val_materiale_ach, + (select sum(round(pretv * cante, 2)) as valoarea from rul where sters = 0 and id_lucrare = a.id_lucrare) as val_materiale_vz, + (select sum(b1.timpn) as ore from dev_ordl a1 left join dev_oper b1 on a1.id_ordl = b1.id_ordl where a1.id_lucrare = a.id_lucrare and a1.sters = 0 and b1.sters = 0) as ore_manopera, + (select sum(round(b1.timpn * b1.pret, 2)) as valoare_manopera from dev_ordl a1 left join dev_oper b1 on a1.id_ordl = b1.id_ordl where a1.id_lucrare = a.id_lucrare and a1.sters = 0 and b1.sters = 0) as val_manopera, + d.id_partener, + d.nrinmat, + d.series, + d.cilindree, + d.puterecp, + d.puterekw, + b.masina, + b1.marca, + e.denumire as nume, + g1.denumire as asigurator, + h.inspector, + i.denumire as tip_comanda, + a.kmint, + a.ore_functionare, + a.inchis_fortat, + a.dataorainchis, + a.util_inchis, + a.id_part_ref, + j.denumire as part_ref + from auto_comenzi_validate a + left join auto_vordl_facturi c + on a.id_lucrare = c.id_lucrare + left join dev_masiniclienti d + on a.id_masiniclient = d.id_masiniclient + left join dev_nom_masini b + on d.id_masina = b.id_masina + left join dev_nom_marci b1 + on b.id_marca = b1.id_marca + left join nom_parteneri e + on d.id_partener = e.id_part + left join dev_nom_asiguratori g + on a.id_asigurator = g.id_asigurator + left join nom_parteneri g1 + on g.id_part = g1.id_part + left join dev_nom_inspectori h + on a.id_inspector = h.id_inspector + left join dev_tip_deviz i + on a.id_tip = i.id_tip + left join nom_parteneri j + on a.id_part_ref = j.id_part +; + +-- --- VIEW: AUTO_LISTARE_MAN_ANFABR --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_LISTARE_MAN_ANFABR" ("DATAI", "NRORD", "TIP_COMANDA", "ID_SECTIE", "SECTIE", "ANFABRICATIE", "DENUMIRE", "TOTAL") AS + select b.datai, + g.nrord, + c.denumire as tip_comanda, + d.id_sectie, + e.sectie, + f.anfabricatie, + h.denumire, + sum(round(d.timpn * d.pret, 2)) as total + from auto_analiza_salarii a + left join dev_ordl b on a.id_ordl = b.id_ordl + left join dev_tip_deviz c on a.id_tip = c.id_tip + left join dev_oper d on b.id_ordl = d.id_ordl + and d.sters = 0 + left join nom_sectii e on d.id_sectie = e.id_sectie + left join dev_masiniclienti f on b.id_masiniclient = f.id_masiniclient + left join vnom_lucrari g on b.id_lucrare = g.id_lucrare + left join nom_parteneri h on f.id_partener = h.id_part + group by d.id_sectie, + e.sectie, + c.denumire, + f.anfabricatie, + b.datai, + g.nrord, + h.denumire; + +-- --- VIEW: AUTO_LISTARE_MAN_SECTII --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_LISTARE_MAN_SECTII" ("ID_SECTIE", "SECTIE", "TOTAL_ORE", "TOTAL_VALOARE") AS + select NVL(d.id_sectie, -99) as id_sectie, + NVL(e.sectie, '') as sectie, + sum(NVL(d.timpn, 0)) as total_ore, + sum(round(NVL(d.timpn, 0) * + NVL(pack_sesiune.suma_ron(d.pret, d.datai), 0), + 2)) as total_valoare + from auto_analiza_salarii a + left join dev_ordl b on a.id_ordl = b.id_ordl + left join dev_oper d on b.id_ordl = d.id_ordl + and d.sters = 0 + left join nom_sectii e on d.id_sectie = e.id_sectie + group by d.id_sectie, e.sectie; + +-- --- VIEW: AUTO_LISTARE_MAN_TOT_COM --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_LISTARE_MAN_TOT_COM" ("ORE", "ID_MECANIC", "VALOARE", "NUME", "PRENUME", "NRORD", "DATAI", "SECTIE") AS + select sum(d.ore) as ore, + d.id_mecanic, + sum(round(c.pret * d.ore, 2)) as valoare, + d.nume, + d.prenume, + f.nrord, + a.datai, + d.sectie + from dev_ordl a + left join auto_vordl_facturate b + on a.id_lucrare = b.id_lucrare + left join auto_voper_preturi c + on a.id_ordl = c.id_ordl + left join auto_voper_mecanici d + on c.id_oper = d.id_oper + left join dev_tip_deviz e + on a.id_tip = e.id_tip + left join vnom_lucrari f + on a.id_lucrare = f.id_lucrare + where a.sters = 0 + and ((extract(month from a.dataoravalid) = pack_sesiune.getluna() and + extract(year from a.dataoravalid) = pack_sesiune.getan() and + a.validat = 1 and e.inch_validare = 1) or + (extract(month from b.dataact) = pack_sesiune.getluna() and + extract(year from b.dataact) = pack_sesiune.getan() and + b.facturat = 1 and e.inch_validare = 0)) + group by a.id_ordl, + f.nrord, + d.id_mecanic, + d.nume, + d.prenume, + a.datai, + d.sectie + order by d.id_mecanic; + +-- --- VIEW: AUTO_LISTARE_MAN_TOT_DESF --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_LISTARE_MAN_TOT_DESF" ("ID_OPERMECANIC", "ID_OPER", "ORE", "INACTIV", "ID_MECANIC", "NUME", "PRENUME", "MARCA", "SECTIE", "ID_ORDL", "PRET", "DATAI", "NRACT", "DATAFACT", "DENOP", "TIMPN", "NRORD") AS + select d.id_opermecanic, + d.id_oper, + d.ore, + d.inactiv, + d.id_mecanic, + d.nume, + d.prenume, + d.marca, + d.sectie, + a.id_ordl, + c.pret, + a.datai, + b.nract as nract, + b.dataact as datafact, + c.denop, + c.timpn, + f.nrord + from dev_ordl a + left join auto_vordl_facturate b + on a.id_lucrare = b.id_lucrare + left join auto_voper_preturi c + on a.id_ordl = c.id_ordl + left join auto_voper_mecanici d + on c.id_oper = d.id_oper + left join dev_tip_deviz e + on a.id_tip = e.id_tip + left join vnom_lucrari f + on a.id_lucrare = f.id_lucrare + where a.sters = 0 + and ((extract(month from a.dataoravalid) = pack_sesiune.getluna() and + extract(year from a.dataoravalid) = pack_sesiune.getan() and + a.validat = 1 and e.inch_validare = 1) or + (extract(month from b.dataact) = pack_sesiune.getluna() and + extract(year from b.dataact) = pack_sesiune.getan() and + e.inch_validare = 0 and b.facturat = 1)); + +-- --- VIEW: AUTO_NORMARE_COMENZI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_NORMARE_COMENZI" ("ID_ORDL", "ID_LUCRARE", "ID_TIP", "DATAI", "ID_INSPECTOR", "ID_ASIGURATOR", "NR_DOSAR", "PROC_TVAV", "VALIDAT", "DATAORAVALID", "NRORD", "ID_MASINICLIENT", "FACTURAT", "DATAFACT", "NRFACT", "NRINMAT", "SERIES", "NUME", "TIP_COMANDA", "INCH_VALIDARE", "INCHIS_FORTAT", "DATAORAINCHIS", "ID_PART_REF", "PART_REF", "KMINT", "ORE_FUNCTIONARE", "CILINDREE", "PUTERECP", "PUTEREKW") AS + select a.id_ordl, + a.id_lucrare, + a.id_tip, + a.datai, + a.id_inspector, + a.id_asigurator, + a.nr_dosar, + a.proc_tvav, + nvl(a.validat, 0) as validat, + a.dataoravalid, + a.nrord, + a.id_masiniclient, + nvl(b.facturat, 0) as facturat, + b.dataact as datafact, + b.nract as nrfact, + d.nrinmat, + d.series, + e.denumire as nume, + i.denumire as tip_comanda, + i.inch_validare, + a.inchis_fortat, + a.dataorainchis, + a.id_part_ref, + j.denumire as part_ref, + a.kmint, + a.ore_functionare, + d.cilindree, + d.puterecp, + d.puterekw + from auto_comenzi_validate a + left join auto_vordl_facturi b + on a.id_lucrare = b.id_lucrare + left join dev_masiniclienti d + on a.id_masiniclient = d.id_masiniclient + left join nom_parteneri e + on d.id_partener = e.id_part + left join dev_tip_deviz i + on a.id_tip = i.id_tip + left join nom_parteneri j + on a.id_part_ref = j.id_part; + +-- --- VIEW: AUTO_ORDL_FACTURARE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_ORDL_FACTURARE" ("ID_ORDL", "ID_LUCRARE", "DATAI", "ID_MASINICLIENT", "NR_DOSAR", "ID_INSPECTOR", "ID_ASIGURATOR", "PROC_TVAV", "NRORD", "ID_PARTENER", "NRINMAT", "NUME", "MASINA", "MARCA", "ASIGURATOR", "INSPECTOR") AS + select a.id_ordl, + a.id_lucrare, + a.datai, + a.id_masiniclient, + a.nr_dosar, + a.id_inspector, + a.id_asigurator, + a.proc_tvav, + b.nrord, + c.id_partener, + c.nrinmat, + d.nume, + e.masina, + f.marca, + g1.denumire as asigurator, + h.inspector + from dev_ordl a + left join nom_lucrari b + on a.id_lucrare = b.id_lucrare + left join dev_masiniclienti c + on a.id_masiniclient = c.id_masiniclient + left join nom_parteneri d + on c.id_partener = d.id_part + left join dev_nom_masini e + on c.id_masina = e.id_masina + left join dev_nom_marci f + on e.id_marca = f.id_marca + left join dev_nom_asiguratori g + on a.id_asigurator = g.id_asigurator + left join nom_parteneri g1 + on g.id_part = g1.id_part + left join dev_nom_inspectori h + on a.id_inspector = h.id_inspector + where a.sters = 0; + +-- --- VIEW: AUTO_VALIDARE_COMENZI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VALIDARE_COMENZI" ("ID_ORDL", "ID_LUCRARE", "ID_MASINICLIENT", "ID_TIP", "NR_DOSAR", "DATAI", "VALIDAT", "DATAORAVALID", "UTIL_VALID", "NRORD", "PROC_TVAV", "MANOPERA", "MATERIALE", "FACTURAT", "DATAFACT", "NRFACT", "VALCTVA", "ID_PARTENER", "NRINMAT", "SERIES", "CILINDREE", "PUTERECP", "PUTEREKW", "NUME", "ID_PART_ASIG", "ASIGURATOR", "INSPECTOR", "TIP_COMANDA", "INCH_VALIDARE", "KMINT", "ORE_FUNCTIONARE", "INCHIS_FORTAT", "DATAORAINCHIS", "UTIL_INCHIS", "ID_PART_REF", "PART_REF") AS + select a.id_ordl, + a.id_lucrare, + a.id_masiniclient, + a.id_tip, + a.nr_dosar, + a.datai, + nvl(a.validat, 0) as validat, + a.dataoravalid, + a.util_valid, + a.nrord, + a.proc_tvav, + nvl(b.manopera, 0) as manopera, + nvl(b1.materiale, 0) as materiale, + nvl(c.facturat, 0) as facturat, + c.dataact as datafact, + nvl(c.nract, 0) as nrfact, + c.valctva, + d.id_partener, + d.nrinmat, + d.series, + d.cilindree, + d.puterecp, + d.puterekw, + e.denumire as nume, + g.id_part as id_part_asig, + g1.denumire as asigurator, + h.inspector, + i.denumire as tip_comanda, + i.inch_validare, + a.kmint, + a.ore_functionare, + nvl(a.inchis_fortat, 0) as inchis_fortat, + a.dataorainchis, + a.util_inchis, + a.id_part_ref, + j.denumire as part_ref + from auto_comenzi_validate a + left join auto_vordl_man b + on a.id_ordl = b.id_ordl + left join auto_vordl_mat b1 + on a.id_lucrare = b1.id_lucrare + left join auto_vordl_facturi c + on a.id_lucrare = c.id_lucrare + left join dev_masiniclienti d + on a.id_masiniclient = d.id_masiniclient + left join nom_parteneri e + on d.id_partener = e.id_part + left join dev_nom_asiguratori g + on a.id_asigurator = g.id_asigurator + left join nom_parteneri g1 + on g.id_part = g1.id_part + left join dev_nom_inspectori h + on a.id_inspector = h.id_inspector + left join dev_tip_deviz i + on a.id_tip = i.id_tip + left join nom_parteneri j + on a.id_part_ref = j.id_part + order by a.datai, a.nrord; + +-- --- VIEW: AUTO_VANSAMBLE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VANSAMBLE" ("ID_ANSAMBLU", "DENUMIRE", "INACTIV") AS + select a.id_ansamblu, a.denumire, a.inactiv + from dev_nom_ansamble a + where a.sters = 0; + +-- --- VIEW: AUTO_VASIGURATORI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VASIGURATORI" ("ID_ASIGURATOR", "ID_PART", "ASIGURATOR", "INACTIV", "BLOCAT") AS + select a.id_asigurator, + a.id_part, + b.denumire as asigurator, + decode(b.inactiv, 0, a.inactiv, b.inactiv) as inactiv, + b.inactiv as blocat + from dev_nom_asiguratori a + left join nom_parteneri b + on a.id_part = b.id_part + where a.sters = 0; + +-- --- VIEW: AUTO_VCLIENTIMASINI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VCLIENTIMASINI" ("ID_PART", "DENUMIRE", "NUME", "PRENUME", "COD_FISCAL", "REG_COMERT", "ID_LOC_INREG", "ID_CATEGORIE_ENTITATE", "LOCALITATE_INREG", "PREFIX", "SUFIX", "TIP_PERSOANA", "BANCA", "CONT_BANCA", "MOTIV_INACTIV", "CLIENT_INACTIV", "ELIBERATDE", "DATAELIBERAT", "ID_ADRESA", "ADRESA", "TELEFON", "TELEFON2", "ID_LOC", "LOCALITATE", "JUDET", "ID_JUDET", "SECTOR", "APART", "ETAJ", "SCARA", "BLOC", "STRADA", "NUMAR", "CODPOSTAL", "CATEGORIE_ENTITATE", "ID_MASINICLIENT", "ID_TIPMOTOR", "ID_FURNIZOR", "ID_MASINA", "ID_PARTENER", "NRINMAT", "SERIES", "SERIEM", "CULOARE", "KMINT", "DATAACHI", "NRACHI", "SERIEF", "SERIECV", "ANFABRICATIE", "MASINA_INACTIV", "CILINDREE", "PUTERECP", "PUTEREKW", "ORE_FUNCTIONARE", "TIP_MOTOR", "ID_MARCA", "FURNIZOR", "MARCA", "MASINA") AS + SELECT + b.id_part, + b.denumire, + b.nume, + b.prenume, + b.cod_fiscal, + b.reg_comert, + b.id_loc_inreg, + b.id_categorie_entitate, + b.localitate_inreg, + b.prefix, + b.sufix, + b.tip_persoana, + b.banca, + b.cont_banca, + b.motiv_inactiv, + b.inactiv AS client_inactiv, + b.eliberatde, + b.dataeliberat, + b.id_adresa, + b.adresa, + b.telefon, + b.telefon2, + b.id_loc, + b.localitate, + b.judet, + b.id_judet, + b.sector, + b.apart, + b.etaj, + b.scara, + b.bloc, + b.strada, + b.numar, + b.codpostal, + b.categorie_entitate, + mc.id_masiniclient, + mc.id_tipmotor, + mc.id_furnizor, + mc.id_masina, + mc.id_partener, + mc.nrinmat, + mc.series, + mc.seriem, + mc.culoare, + mc.kmint, + mc.dataachi, + mc.nrachi, + mc.serief, + mc.seriecv, + mc.anfabricatie, + mc.inactiv AS masina_inactiv, + mc.cilindree, + mc.puterecp, + mc.puterekw, + mc.ore_functionare, + tm.denumire AS tip_motor, + mm.id_marca, + fm.denumire AS furnizor, + mm.marca, + m.masina +FROM vnom_parteneri b JOIN dev_masiniclienti mc ON b.id_part = mc.id_partener AND mc.sters = 0 +LEFT JOIN dev_tipuri_motoare tm ON mc.id_tipmotor = tm.id_tipmotor +LEFT JOIN dev_nom_furnizorimasini fm ON mc.id_furnizor = fm.id_furnizor +LEFT JOIN dev_nom_masini m ON mc.id_masina = m.id_masina +LEFT JOIN dev_nom_marci mm ON m.id_marca = mm.id_marca +; + +-- --- VIEW: AUTO_VESTIMARI_REP --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VESTIMARI_REP" ("ID_DEV_ESTIMARE_REP", "ID_LUCRARE", "NRORD", "ID_NORME", "ID_ARTICOL", "PRET_CU_TVA", "DENUMIRE", "COD", "UM", "CANTITATE", "PRETFTVA", "PRETCTVA", "COTA_TVA", "VALFTVA", "VALTVA", "VALOARE") AS + select a.id_dev_estimare_rep, + a.id_lucrare, + b.nrord, + a.id_norme, + a.id_articol, + A.PRET_CU_TVA, + nvl2(a.id_norme, c.denop, d.denumire) as denumire, + nvl2(a.id_norme, c.codop, d.codmat) as cod, + nvl2(a.id_norme, 'ORA', d.um) as um, + a.cantitate, + pack_sesiune.calculeaza_pret_fara_tva(a.pret, + 1, + Null, + (a.cota_tva + 100) / 100, + a.pret_cu_tva, + 2) as pretftva, + pack_sesiune.calculeaza_pret_cu_tva(a.pret, + 1, + Null, + (a.cota_tva + 100) / 100, + a.pret_cu_tva, + 2) AS pretctva, + a.cota_tva, + pack_sesiune.calculeaza_total_fara_tva(a.pret, + 0, + 1, + 0, + 1, + a.cantitate, + a.pret_cu_tva, + (a.cota_tva + 100) / 100, + null, + null) as valftva, + pack_sesiune.calculeaza_total_tva(a.pret, + 0, + 1, + 0, + 1, + a.cantitate, + a.pret_cu_tva, + (a.cota_tva + 100) / 100, + null, + null) as valtva, + pack_sesiune.calculeaza_total_cu_tva(a.pret, + 0, + 1, + 0, + 1, + a.cantitate, + a.pret_cu_tva, + (a.cota_tva + 100) / 100, + null, + null) as valoare + from dev_estimari_rep a + left join nom_lucrari b + on a.id_lucrare = b.id_lucrare + left join auto_vnorme c + on a.id_norme = c.id_norme + left join nom_articole d + on a.id_articol = d.ID_ARTICOL + left join syn_utilizatori e + on a.id_util = e.id_util + where a.sters = 0; + +-- --- VIEW: AUTO_VFURNIZORI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VFURNIZORI" ("ID_FURNIZOR", "DENUMIRE", "INACTIV") AS + select f.id_furnizor, f.denumire, f.inactiv + from dev_nom_furnizorimasini f + where f.sters = 0; + +-- --- VIEW: AUTO_VINSPECTORI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VINSPECTORI" ("ID_INSPECTOR", "INSPECTOR", "ID_ASIGURATOR", "INACTIV") AS + select i.id_inspector, i.inspector, i.id_asigurator, i.inactiv + from dev_nom_inspectori i + where i.sters = 0; + +-- --- VIEW: AUTO_VMARCI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VMARCI" ("ID_MARCA", "MARCA", "INACTIV") AS + select m.id_marca, m.marca, m.inactiv + from dev_nom_marci m + where m.sters = 0; + +-- --- VIEW: AUTO_VMASINI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VMASINI" ("ID_MASINA", "ID_MARCA", "MASINA", "SCTIP", "CLASA", "INACTIV", "MARCA") AS + select m.id_masina, + m.id_marca, + m.masina, + m.sctip, + m.clasa, + m.inactiv, + s.marca + from dev_nom_masini m + left join dev_nom_marci s + on m.id_marca = s.id_marca + where m.sters = 0; + +-- --- VIEW: AUTO_VMASINICLIENTI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VMASINICLIENTI" ("ID_MASINICLIENT", "ID_TIPMOTOR", "ID_FURNIZOR", "ID_MASINA", "ID_PARTENER", "NRINMAT", "SERIES", "SERIEM", "CULOARE", "KMINT", "DATAACHI", "NRACHI", "SERIEF", "SERIECV", "ANFABRICATIE", "INACTIV", "TIP_MOTOR", "ID_MARCA", "FURNIZOR", "MARCA", "MASINA", "PARTENER", "CILINDREE", "PUTERECP", "PUTEREKW", "ORE_FUNCTIONARE") AS + select mc.id_masiniclient, + mc.id_tipmotor, + mc.id_furnizor, + mc.id_masina, + mc.id_partener, + mc.nrinmat, + mc.series, + mc.seriem, + mc.culoare, + mc.kmint, + mc.dataachi, + mc.nrachi, + mc.serief, + mc.seriecv, + mc.anfabricatie, + mc.inactiv, + tm.denumire as tip_motor, + m.id_marca, + fm.denumire as furnizor, + mm.marca, + m.masina, + p.denumire as partener, + mc.cilindree, + mc.puterecp, + mc.puterekw, + mc.ore_functionare + from dev_masiniclienti mc + left join dev_tipuri_motoare tm + on mc.id_tipmotor = tm.id_tipmotor + left join dev_nom_furnizorimasini fm + on mc.id_furnizor = fm.id_furnizor + left join dev_nom_masini m + on mc.id_masina = m.id_masina + left join dev_nom_marci mm + on m.id_marca = mm.id_marca + left join nom_parteneri p + on mc.id_partener = p.id_part + where mc.sters = 0; + +-- --- VIEW: AUTO_VMASINICLIENTI_SIMPLU --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VMASINICLIENTI_SIMPLU" ("ID_MASINICLIENT", "NRINMAT", "SERIES", "SERIEM", "CULOARE", "KMINT", "MARCA", "MASINA", "PARTENER", "COD_FISCAL", "ADRESA") AS + select mc.id_masiniclient, + mc.nrinmat, + mc.series, + mc.seriem, + mc.culoare, + mc.kmint, + mm.marca, + m.masina, + p.denumire as partener, + p.cod_fiscal, + p.adresa + from dev_masiniclienti mc + left join dev_nom_masini m + on mc.id_masina = m.id_masina + left join dev_nom_marci mm + on m.id_marca = mm.id_marca + left join vnom_parteneri p + on mc.id_partener = p.id_part + where mc.sters = 0 + and p.inactiv = 0; + +-- --- VIEW: AUTO_VMECANICI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VMECANICI" ("ID_MECANIC", "ID_SECTIE", "INACTIV", "SECTIE", "MARCA", "NUME", "PRENUME", "ID_PART") AS + select m.id_mecanic, + m.id_sectie, + m.inactiv, + s.sectie, + p.marca, + a.nume, + a.prenume, + a.id_part + from dev_mecanici m + left join nom_sectii s + on m.id_sectie = s.id_sectie + left join sal_personal p + on m.id_part = p.id_part + and p.sters = 0 + left join nom_parteneri a + on m.id_part = a.id_part + where m.sters = 0; + +-- --- VIEW: AUTO_VNOM_MASINI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VNOM_MASINI" ("ID_MASINA", "ID_MARCA", "MASINA", "SCTIP", "CLASA", "INACTIV") AS + select m.id_masina, m.id_marca, m.masina, m.sctip, m.clasa, m.inactiv + from dev_nom_masini m + where m.sters = 0; + +-- --- VIEW: AUTO_VNOM_SALARIATI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VNOM_SALARIATI" ("ID_SALARIAT", "MARCA", "INACTIV", "NUME", "PRENUME", "ID_PART") AS + select id_salariat, marca, inactiv, nume, prenume, id_part + from vnom_parteneri_sal; + +-- --- VIEW: AUTO_VNORME --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VNORME" ("ID_NORME", "ID_ANSAMBLU", "ID_MASINA", "DENOP", "CODOP", "TIMPN", "INACTIV", "ANSAMBLU", "MASINA", "MARCA") AS + select n.id_norme, + n.id_ansamblu, + n.id_masina, + n.denop, + n.codop, + n.timpn, + n.inactiv, + a.denumire as ansamblu, + m.masina, + mar.marca + from dev_nom_norme n + left join dev_nom_ansamble a + on n.id_ansamblu = a.id_ansamblu + left join dev_nom_masini m + on n.id_masina = m.id_masina + left join dev_nom_marci mar + on m.id_marca = mar.id_marca + where n.sters = 0; + +-- --- VIEW: AUTO_VOPER --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VOPER" ("TIMPN", "ID_ORDL", "ID_OPER", "DATAORA", "ID_SECTIE", "DATAI", "PRET", "VALIDAT", "NOU", "DENOP", "TIMP_NOM", "CODOP", "ANSAMBLU", "MASINA", "SECTIE", "NSECTIE", "UTIL") AS + select op.timpn, + op.id_ordl, + op.id_oper, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + extract(year from op.dataora) * 12 + + extract(month from op.dataora) then + op.dataora + else + null + end) as dataora, + op.id_sectie, + op.datai, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() < + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + op.pret + else + (case op.nou + when 0 then + round(op.pret / 10000, 2) + else + op.pret + end) + end) as pret, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + extract(year from op.dataora) * 12 + + extract(month from op.dataora) then + op.validat + else + 0 + end) as validat, + op.nou, + n.denop, + n.timpn as timp_nom, + n.codop, + a.denumire as ansamblu, + m.masina, + s.sectie, + s.nsectie, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + extract(year from op.dataora) * 12 + + extract(month from op.dataora) then + ut.utilizator + else + null + end) as util + from dev_oper op + left join dev_nom_norme n + on op.id_norme = n.id_norme + left join dev_nom_ansamble a + on n.id_ansamblu = a.id_ansamblu + left join dev_nom_masini m + on n.id_masina = m.id_masina + left join nom_sectii s + on op.id_sectie = s.id_sectie + left join syn_utilizatori ut + on op.id_util = ut.id_util + where op.sters = 0; + +-- --- VIEW: AUTO_VOPER_DETALII_M --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VOPER_DETALII_M" ("ID_OPERMECANIC", "ID_OPER", "ORE", "ID_MECANIC", "NUME", "PRENUME") AS + select a.id_opermecanic, a.id_oper, a.ore, a.id_mecanic, c.nume, c.prenume + from dev_oper_mecanici a + left join dev_mecanici b + on a.id_mecanic = b.id_mecanic + left join nom_parteneri c + on b.id_part = c.id_part + where a.sters = 0; + +-- --- VIEW: AUTO_VOPER_MECANICI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VOPER_MECANICI" ("ID_OPERMECANIC", "ID_OPER", "ORE", "INACTIV", "ID_MECANIC", "NUME", "PRENUME", "MARCA", "SECTIE") AS + select a.id_opermecanic, + a.id_oper, + a.ore, + a.inactiv, + a.id_mecanic, + e.nume, + e.prenume, + c.marca, + d.sectie + from dev_oper_mecanici a + left join dev_mecanici b + on a.id_mecanic = b.id_mecanic + left join sal_personal c + on b.id_part = c.id_part + and c.sters = 0 + left join nom_sectii d + on b.id_sectie = d.id_sectie + left join nom_parteneri e + on b.id_part = e.id_part + where a.sters = 0; + +-- --- VIEW: AUTO_VOPER_PRETURI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VOPER_PRETURI" ("TIMPN", "ID_ORDL", "ID_OPER", "DATAORA", "DATAI", "PRET", "VALIDAT", "DENOP") AS + select op.timpn, + op.id_ordl, + op.id_oper, + op.dataora, + op.datai, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() < + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + op.pret + else + (case op.nou + when 0 then + round(op.pret / 10000, 2) + else + op.pret + end) + end) as pret, + op.validat, + n.denop + from dev_oper op + left join dev_nom_norme n + on op.id_norme = n.id_norme + where op.sters = 0; + +-- --- VIEW: AUTO_VOPER_SIMPLU --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VOPER_SIMPLU" ("TIMPN", "ID_ORDL", "ID_OPER", "DATAORA", "DATAI", "ID_SECTIE", "VALIDAT", "ID_NORME", "SECTIE", "NSECTIE") AS + select op.timpn, + op.id_ordl, + op.id_oper, + op.dataora, + op.datai, + op.id_sectie, + op.validat, + op.id_norme, + s.sectie, + s.nsectie + from dev_oper op + left join nom_sectii s + on op.id_sectie = s.id_sectie + where op.sters = 0; + +-- --- VIEW: AUTO_VORDL --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VORDL" ("ID_ORDL", "LUNA", "AN", "ID_INSPECTOR", "ID_LUCRARE", "TERMEN", "DATAI", "ORAI", "DATAE", "ORAE", "VALIDAT", "ID_UTIL_AD", "ID_UTIL_VALID", "DATAORAAD", "DATAORAVALID", "ID_MASINICLIENT", "ID_ASIGURATOR", "ID_TIP", "NR_DOSAR", "INCHIS_FORTAT", "KMINT", "ORE_FUNCTIONARE", "SOLICITARI_CLIENT", "OBSERVATII", "DEFECTIUNI", "NUME", "COD_FISCAL", "ADRESA", "TELEFON", "BANCA", "CONT_BANCA", "REG_COMERT", "TIP_PERSOANA", "NRORD", "NRINMAT", "SERIES", "SERIEM", "NRACHI", "ANFABRICATIE", "ASIGURATOR", "MARCA", "MASINA", "INSPECTOR", "UTIL_VALID", "TIP_COMANDA", "INCH_VALIDARE", "FURNIZOR") AS + select o.id_ordl, + o.luna, + o.an, + o.id_inspector, + o.id_lucrare, + o.termen, + o.datai, + o.orai, + o.datae, + o.orae, + o.validat, + o.id_util_ad, + o.id_util_valid, + o.dataoraad, + o.dataoravalid, + o.id_masiniclient, + o.id_asigurator, + o.id_tip, + o.nr_dosar, + o.inchis_fortat, + o.kmint, + o.ore_functionare, + o.solicitari_client, + o.observatii, + o.defectiuni, + p.denumire as nume, + p.cod_fiscal, + p.adresa, + p.telefon, + p.banca, + p.cont_banca, + p.reg_comert, + p.tip_persoana, + l.nrord, + m.nrinmat, + m.series, + m.seriem, + m.nrachi, + m.anfabricatie, + asig1.denumire as asigurator, + mar.marca, + mas.masina, + ins.inspector, + ut.utilizator as util_valid, + k.denumire as tip_comanda, + k.inch_validare, + h.denumire as furnizor + from dev_ordl o + left join dev_masiniclienti m + on o.id_masiniclient = m.id_masiniclient + left join vnom_parteneri p + on m.id_partener = p.id_part + left join dev_nom_furnizorimasini h + on m.id_furnizor = h.id_furnizor + left join nom_lucrari l + on o.id_lucrare = l.id_lucrare + left join dev_nom_asiguratori asig + on o.id_asigurator = asig.id_asigurator + left join nom_parteneri asig1 + on asig.id_part = asig1.id_part + left join dev_nom_masini mas + on m.id_masina = mas.id_masina + left join dev_nom_marci mar + on mas.id_marca = mar.id_marca + left join dev_nom_inspectori ins + on o.id_inspector = ins.id_inspector + left join dev_tip_deviz k + on o.id_tip = k.id_tip + left join syn_vutilizatori ut + on o.id_util_valid = ut.id_util + where o.sters = 0; + +-- --- VIEW: AUTO_VORDL_FACTURATE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VORDL_FACTURATE" ("ID_LUCRARE", "DATAACT", "NRACT", "FACTURAT") AS + select distinct b.id_lucrare, + max(b.dataact) keep(dense_rank first order by b.id_set desc) over(partition by b.id_lucrare) as dataact, + max(b.nract) keep(dense_rank first order by b.id_set desc, b.dataact desc) over(partition by b.id_lucrare) as nract, + max(case + when b.id_set in (31003, + 31004, + 31005, + 31006, + 31007, + 31011, + 31012, + 31013) then + 1 + else + 0 + end) over(partition by b.id_lucrare) as facturat + from mv_ordl_sume_act b + where extract(month from b.dataact) + extract(year from b.dataact) * 12 <= + pack_sesiune.getluna() + pack_sesiune.getAn() * 12; + +-- --- VIEW: AUTO_VORDL_FACTURI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VORDL_FACTURI" ("ID_LUCRARE", "VALFACTMANOPERA", "VALFACTMATERIALE", "VALCTVA", "DATAACT", "NRACT", "FACTURAT") AS + select a.id_lucrare, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + NVL(b.manopera_ron, -1.000) + else + NVL(b.manopera_rol, -1.000) + end) as valfactmanopera, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + NVL(b.materiale_ron, -1.000) + else + NVL(b.materiale_rol, -1.000) + end) as valfactmateriale, + (case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + NVL(b.manopera_ron + b.materiale_ron + b.tva_ron, -1.000) + else + NVL(b.manopera_rol + b.materiale_rol + b.tva_rol, -1.000) + end) as valctva, + a.dataact, + a.nract, + a.facturat + from auto_vordl_facturate a + left join mv_ordl_sume_act b + on a.nract = b.nract + and a.id_lucrare = b.id_lucrare + and a.dataact = b.dataact +; + +-- --- VIEW: AUTO_VORDL_MAN --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VORDL_MAN" ("ID_ORDL", "MANOPERA") AS + select a.id_ordl, + sum((case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + a.manopera_ron + else + a.manopera_rol + end)) as manopera + from mv_ordl_man a + where a.luni <= pack_sesiune.getluna() + pack_sesiune.getan() * 12 + group by a.id_ordl; + +-- --- VIEW: AUTO_VORDL_MAT --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VORDL_MAT" ("ID_LUCRARE", "MATERIALE") AS + select a.id_lucrare, + sum((case + when pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + a.materiale_ron + else + a.materiale_rol + end)) as materiale + from mv_ordl_mat a + where a.luna + a.an * 12 <= pack_sesiune.getluna() + pack_sesiune.getan() * 12 + group by a.id_lucrare; + +-- --- VIEW: AUTO_VPRETURI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."AUTO_VPRETURI" ("ID_PRET", "ID_MARCA", "ID_ASIGURATOR", "PRET", "PRET_VAL", "ID_VALUTA", "CURS", "STERS", "INACTIV", "MARCA", "ASIGURATOR", "NUME_VAL") AS + select p."ID_PRET",p."ID_MARCA",p."ID_ASIGURATOR",p."PRET",p."PRET_VAL",p."ID_VALUTA",p."CURS",p."STERS",p."INACTIV", m.marca, a1.denumire as asigurator, v.nume_val + from dev_nom_preturi p + left join dev_nom_marci m + on p.id_marca = m.id_marca + left join dev_nom_asiguratori a + on p.id_asigurator = a.id_asigurator + left join nom_parteneri a1 + on a.id_part = a1.id_part + left join nom_valute v + on p.id_valuta = v.id_valuta + where p.sters = 0; + +-- --- VIEW: VCOMENZI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VCOMENZI" ("ID_COMANDA", "ID_LUCRARE", "NR_COMANDA", "DATA_COMANDA", "ID_PART", "DATA_LIVRARE", "NR_LIVRARE", "ID_AGENT", "ID_DELEGAT", "ID_MASINA", "INTERNA", "TIP_COMANDA", "NUME", "ID_UTIL", "ID_GESTIUNE", "DATAORA", "DATA_LIVRAT", "PROC_DISCOUNT", "NRORD", "NUME_AGENT", "NUME_DELEGAT", "SERIE_BI", "NUMAR_BI", "ELIBERATDE", "NRINMAT", "UTILIZATOR", "FACTURAT", "INCHISA", "ID_SECTIE", "ID_SECTIE2", "ID_FACTURARE", "ID_LIVRARE", "COMANDA_EXTERNA", "ID_CODCLIENT", "ID_SUCURSALA", "ID_CTR", "NUMAR_CONTRACT", "ID_UTIL_UM", "DATAORA_UM") AS + SELECT a.id_comanda, + a.id_lucrare, + a.nr_comanda, + a.data_comanda, + a.id_part, + a.data_livrare, + a.nr_livrare, + a.id_agent, + a.id_delegat, + a.id_masina, + a.interna, + (CASE a.interna + WHEN 1 THEN 'INTERNA' + WHEN 2 THEN 'EXTERNA - SIMPLA' + WHEN 3 THEN 'GESTIUNE' + WHEN 4 THEN 'SECTIE' + WHEN 5 THEN 'EXTERNA - PE BAZA DE CONTRACT' + END) AS tip_comanda, + (CASE a.interna + WHEN 1 THEN 'INTERNA' + WHEN 2 THEN c.denumire + WHEN 3 THEN j.nume_gestiune + WHEN 4 THEN l.sectie + WHEN 5 THEN c.denumire + END) AS nume, + a.id_util, + a.id_gestiune, + a.dataora, + a.data_livrat, + a.proc_discount, + b.nrord, + d.denumire AS nume_agent, + e.denumire AS nume_delegat, + SUBSTR(TRIM(e.reg_comert), 1, 2) AS serie_bi, + SUBSTR(TRIM(e.reg_comert), 3) AS numar_bi, + k.localitate AS eliberatde, + f.nrinmat, + g.utilizator, + (CASE + WHEN NVL(ce.cant_cmd, -1) - NVL(vf.cant_vanz, 0) = 0 THEN 1 + ELSE 0 + END) AS facturat, + (CASE + WHEN i.termen_executie <= + sysdate + (pack_comenzi.citeste_ore_inchidere(a.id_sectie) / 24) THEN 1 + ELSE 0 + END) AS inchisa, + a.id_sectie, + a.id_sectie2, + a.id_facturare, + a.id_livrare, + a.COMANDA_EXTERNA, + a.id_codclient, + a.id_sucursala, + a.id_ctr, + NVL2(m.numar, m.numar || '/' || TO_CHAR(m.data, 'DD.MM.YYYY'), NULL) AS numar_contract, + a.id_util_um, + a.dataora_um + FROM comenzi a + LEFT JOIN nom_lucrari b ON a.id_lucrare = b.id_lucrare + LEFT JOIN nom_parteneri c ON a.id_part = c.id_part + LEFT JOIN nom_parteneri d ON a.id_agent = d.id_part + LEFT JOIN nom_parteneri e ON a.id_delegat = e.id_part + LEFT JOIN nom_masini f ON a.id_masina = f.id_masina + LEFT JOIN syn_utilizatori g ON a.id_util = g.id_util + LEFT JOIN lucrari_detalii i ON a.id_lucrare = i.id_lucrare + LEFT JOIN nom_gestiuni j ON a.id_gestiune = j.id_gestiune + LEFT JOIN syn_nom_localitati k ON e.id_loc = k.id_loc + LEFT JOIN nom_sectii l ON a.id_sectie2 = l.id_sectie + LEFT JOIN contracte m ON a.id_ctr = m.id_ctr + LEFT JOIN (SELECT id_comanda, + SUM(cantitate) AS cant_cmd + FROM comenzi_elemente + WHERE sters = 0 + GROUP BY id_comanda) ce ON ce.id_comanda = a.id_comanda + LEFT JOIN (SELECT v.id_comanda, + SUM(vd.cantitate) AS cant_vanz + FROM vanzari v + JOIN vanzari_detalii vd ON vd.id_vanzare = v.id_vanzare + AND vd.sters = 0 + WHERE v.sters = 0 + GROUP BY v.id_comanda) vf ON vf.id_comanda = a.id_comanda + WHERE a.sters = 0; + +-- --- VIEW: VNOM_AGENTI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_AGENTI" ("ID_RESPONSABIL", "NUME_AGENT", "BI", "CNP", "ELIBERATDE", "TELEFON1", "TELEFON2", "INACTIV", "FUNCTIE", "ALES") AS + select a.id_part as id_responsabil, + a.denumire as nume_agent, + a.reg_comert as bi, + a.cod_fiscal as cnp, + a.localitate_inreg as eliberatde, + a.telefon as telefon1, + a.telefon2, + a.inactiv, + '' as functie, + 0 as ales + from vnom_parteneri a + join coresp_tip_part b on a.ID_PART = b.id_part + where b.id_tip_part = -42; + +-- --- VIEW: VNOM_ARTICOLE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_ARTICOLE" ("ID_ARTICOL", "CODBARE", "CODMAT", "DENUMIRE", "DESCRIERE", "UM", "UM2", "UM_ISO", "COD_UM_ISO", "CONT", "ACONT", "DEP", "CANT_BAX", "ID_MOD", "INACTIV", "ID_SUBGRUPA", "SUBGRUPA", "ID_GRUPA", "GRUPA", "DNF", "IN_CRM", "IN_STOC", "CODMATF", "CONDITII_PASTRARE", "ID_PART", "PRETACHCTVA", "TAXA_RECONDITIONARE", "PARTENER", "ID_ARTICOL_GENERAL", "ARTICOL_GENERAL", "LISTARE_CODBARE", "TIP", "TIMPN", "COMPUS", "CODNC8", "ID_TARA_ORIGINE", "COD_TARA_ORIGINE", "TARA_ORIGINE", "GREUTATE", "CODCPV") AS + select A.ID_ARTICOL, + A.CODBARE, + A.CODMAT, + A.DENUMIRE, + A.DESCRIERE, + A.UM, + A.UM2, + u.um_iso, + u.cod_um_iso, + A.CONT, + A.ACONT, + A.DEP, + A.CANT_BAX, + A.ID_MOD, + A.INACTIV, + A.ID_SUBGRUPA, + B.SUBGRUPA, + B.ID_GRUPA, + B.GRUPA, + A.DNF, + A.IN_CRM, + a.in_stoc, + a.codmatf, + a.conditii_pastrare, + a.id_part, + a.pretachctva, + a.taxa_reconditionare, + (select denumire from nom_parteneri c where c.id_part = a.id_part) as partener, + a.id_articol_general, + c.denumire as articol_general, + a.listare_codbare, + a.tip, + CASE A.COMPUS WHEN 0 THEN a.timpn ELSE (select sum(decode(connect_by_isleaf, 1, timpn, 0)) as timpn +from +(select ad.id_articolp, ad.id_articol, ac.timpn + from nom_articole_detalii ad + join nom_articole ap + on ad.id_articolp = ap.id_articol + join nom_articole ac + on ad.id_articol = ac.id_articol + where ad.sters = 0) + start with id_articolp = A.ID_ARTICOL + connect by prior id_articol = id_articolp) END AS TIMPN, + a.compus, + a.codnc8, + a.id_tara_origine, + d.prescurtare as cod_tara_origine, + d.tara as tara_origine, + a.greutate, + a.codcpv + from NOM_ARTICOLE A + LEFT JOIN VGEST_ART_SBGR B ON A.ID_SUBGRUPA = B.ID_SUBGRUPA + left join nom_articole c on a.id_articol_general = c.id_articol + left join syn_nom_tari D ON A.ID_TARA_ORIGINE = D.ID_TARA + left join vnom_um u on a.um = u.um + where a.STERS = 0; + +-- --- VIEW: VNOM_ARTICOLE_CRM --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_ARTICOLE_CRM" ("ID_ARTICOL", "CODMAT", "DENUMIRE", "CONT", "ACONT", "UM", "COMISION", "INACTIV", "CODBARE", "IN_STOC", "IN_CRM", "CANT_BAX", "UM2", "CODMATF", "CONDITII_PASTRARE", "PRETACHCTVA", "ID_ARTICOL_GENERAL", "ARTICOL_GENERAL", "LISTARE_CODBARE", "TIP", "TIMPN", "COMPUS") AS + SELECT A.ID_ARTICOL, + A.CODMAT, + A.DENUMIRE, + A.CONT, + A.ACONT, + A.UM, + 0 AS COMISION, + A.INACTIV, + A.CODBARE, + A.IN_STOC, + A.IN_CRM, + A.CANT_BAX, + A.UM2, + a.codmatf, + a.conditii_pastrare, + a.pretachctva, + a.id_articol_general, + b.denumire as articol_general, + a.listare_codbare, + a.tip, + CASE A.COMPUS + WHEN 0 THEN + a.timpn + ELSE + (select sum(decode(connect_by_isleaf, 1, timpn, 0)) as timpn + from (select ad.id_articolp, ad.id_articol, ac.timpn + from nom_articole_detalii ad + join nom_articole ap + on ad.id_articolp = ap.id_articol + join nom_articole ac + on ad.id_articol = ac.id_articol + where ad.sters = 0) + start with id_articolp = A.ID_ARTICOL + connect by prior id_articol = id_articolp) + END AS TIMPN, + a.compus + FROM NOM_ARTICOLE A + left join nom_articole b + on a.id_articol_general = b.id_articol + WHERE A.STERS = 0 + AND A.INACTIV = 0 + AND A.IN_CRM = 1; + +-- --- VIEW: VNOM_ARTICOLE_DEP_NIR --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_ARTICOLE_DEP_NIR" ("ID_ARTICOL", "CODBARE", "CODMAT", "DENUMIRE", "UM", "UM2", "CONT", "ACONT", "DEP", "CANT_BAX", "ID_MOD", "INACTIV", "ID_SUBGRUPA", "SUBGRUPA", "ID_GRUPA", "GRUPA", "DNF", "IN_CRM", "IN_STOC", "CODMATF", "CONDITII_PASTRARE", "ID_PART", "ID_ARTICOL_GENERAL", "PARTENER", "CANTITATE", "NUMARACT", "DATAACT", "ND_ID", "ARTICOL_GENERAL", "LISTARE_CODBARE", "TIP", "TIMPN", "COMPUS") AS + select A.ID_ARTICOL, + A.CODBARE, + A.CODMAT, + A.DENUMIRE, + A.UM, + A.UM2, + A.CONT, + A.ACONT, + A.DEP, + A.CANT_BAX, + A.ID_MOD, + A.INACTIV, + A.ID_SUBGRUPA, + B.SUBGRUPA, + B.ID_GRUPA, + B.GRUPA, + A.DNF, + A.IN_CRM, + A.in_stoc, + A.codmatf, + A.conditii_pastrare, + A.id_part, + a.id_articol_general, + (select denumire from nom_parteneri C where C.id_part = A.id_part) as partener, + ND.Cantitate, + N.NUMARACT, + N.DATAACT, + ND.ID AS ND_ID, + c.denumire as articol_general, + a.listare_codbare, + a.tip, + CASE A.COMPUS + WHEN 0 THEN + a.timpn + ELSE + (select sum(decode(connect_by_isleaf, 1, timpn, 0)) as timpn + from (select ad.id_articolp, ad.id_articol, ac.timpn + from nom_articole_detalii ad + join nom_articole ap + on ad.id_articolp = ap.id_articol + join nom_articole ac + on ad.id_articol = ac.id_articol + where ad.sters = 0) + start with id_articolp = A.ID_ARTICOL + connect by prior id_articol = id_articolp) + END AS TIMPN, + a.compus + from NOM_ARTICOLE A + LEFT JOIN VGEST_ART_SBGR B + ON A.ID_SUBGRUPA = B.ID_SUBGRUPA + left join nom_articole c + on a.id_articol_general = c.id_articol + JOIN DEP_NIR_DETALII ND + ON A.ID_ARTICOL = ND.ID_ARTICOL + JOIN DEP_NIR N + ON ND.ID_NIR = N.ID + WHERE A.STERS = 0 +; + +-- --- VIEW: VNOM_ARTICOLE_DETALII --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_ARTICOLE_DETALII" ("ID", "ID_ARTICOLP", "ID_ARTICOL", "DENUMIREP", "CODMATP", "DENUMIRE", "CODMAT", "TIP", "TIMPN", "COMPUS") AS + select A.ID, + A.ID_ARTICOLP, + A.ID_ARTICOL, + P.DENUMIRE AS DENUMIREP, + P.CODMAT AS CODMATP, + D.DENUMIRE, + D.CODMAT, + D.TIP, + CASE D.COMPUS + WHEN 0 THEN + D.timpn + ELSE + (select sum(decode(connect_by_isleaf, 1, timpn, 0)) as timpn + from (select ad.id_articolp, ad.id_articol, ac.timpn + from nom_articole_detalii ad + join nom_articole ap + on ad.id_articolp = ap.id_articol + join nom_articole ac + on ad.id_articol = ac.id_articol + where ad.sters = 0) + start with id_articolp = D.ID_ARTICOL + connect by prior id_articol = id_articolp) + END AS TIMPN, + D.COMPUS + from NOM_ARTICOLE_DETALII A + JOIN NOM_ARTICOLE P + ON A.ID_ARTICOLP = P.ID_ARTICOL + JOIN NOM_ARTICOLE D + ON A.ID_ARTICOL = D.ID_ARTICOL + LEFT JOIN VGEST_ART_SBGR B + ON D.ID_SUBGRUPA = B.ID_SUBGRUPA + left join nom_articole c + on D.id_articol_general = c.id_articol + where A.STERS = 0 + AND P.STERS = 0 + AND D.STERS = 0 +; + +-- --- VIEW: VNOM_ARTICOLE_FRUNZE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_ARTICOLE_FRUNZE" ("ID_ARTICOL", "TIMPN", "ID_RADACINA", "ID_ARTICOLP") AS + SELECT ID_ARTICOL, TIMPN, ID_RADACINA, ID_ARTICOLP + FROM (SELECT A.ID_ARTICOL, + A.TIMPN, + A.ID_ARTICOLP, + CONNECT_BY_ISLEAF AS FRUNZA, + CONNECT_BY_ROOT(A.ID_ARTICOL) as ID_RADACINA + FROM (SELECT A1.ID_ARTICOL, A1.TIMPN, A2.ID_ARTICOLP + FROM NOM_ARTICOLE A1 + LEFT JOIN NOM_ARTICOLE_DETALII A2 ON A1.ID_ARTICOL = + A2.ID_ARTICOL + AND A2.STERS = 0 + WHERE A1.STERS = 0 + UNION + SELECT B1.ID_ARTICOL, B1.TIMPN, NULL AS ID_ARTICOLP + FROM NOM_ARTICOLE B1 + WHERE B1.STERS = 0 + AND B1.COMPUS = 1) A + START WITH A.ID_ARTICOLP IS NULL + CONNECT BY PRIOR A.ID_ARTICOL = A.ID_ARTICOLP) + WHERE FRUNZA = 1 +; + +-- --- VIEW: VNOM_ARTICOLE_TOATE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_ARTICOLE_TOATE" ("ID_ARTICOL", "CODBARE", "CODMAT", "DENUMIRE", "UM", "UM2", "UM_ISO", "COD_UM_ISO", "CONT", "ACONT", "DEP", "CANT_BAX", "ID_MOD", "INACTIV", "ID_SUBGRUPA", "SUBGRUPA", "ID_GRUPA", "GRUPA", "DNF", "IN_CRM", "IN_STOC", "CODMATF", "CONDITII_PASTRARE", "ID_PART", "PRETACHCTVA", "TAXA_RECONDITIONARE", "PARTENER", "ID_ARTICOL_GENERAL", "INDICATIV", "ARTICOL_GENERAL", "LISTARE_CODBARE", "TIP", "TIMPN", "COMPUS", "CODNC8", "ID_TARA_ORIGINE", "COD_TARA_ORIGINE", "TARA_ORIGINE", "GREUTATE", "CODCPV") AS + select A.ID_ARTICOL, + A.CODBARE, + A.CODMAT, + A.DENUMIRE, + A.UM, + A.UM2, + u.um_iso, + u.cod_um_iso, + A.CONT, + A.ACONT, + A.DEP, + A.CANT_BAX, + A.ID_MOD, + A.INACTIV, + A.ID_SUBGRUPA, + B.SUBGRUPA, + B.ID_GRUPA, + B.GRUPA, + A.DNF, + A.IN_CRM, + a.in_stoc, + a.codmatf, + a.conditii_pastrare, + a.id_part, + a.pretachctva, + a.taxa_reconditionare, + (select denumire from nom_parteneri c where c.id_part = a.id_part) as partener, + a.id_articol_general, + b.indicativ, + c.denumire as articol_general, + a.listare_codbare, + a.tip, + CASE A.COMPUS + WHEN 0 THEN + a.timpn + ELSE + (select sum(decode(connect_by_isleaf, 1, timpn, 0)) as timpn + from (select ad.id_articolp, ad.id_articol, ac.timpn + from nom_articole_detalii ad + join nom_articole ap + on ad.id_articolp = ap.id_articol + join nom_articole ac + on ad.id_articol = ac.id_articol + where ad.sters = 0) + start with id_articolp = A.ID_ARTICOL + connect by prior id_articol = id_articolp) + END AS TIMPN, + a.compus, + a.codnc8, + a.id_tara_origine, + d.prescurtare as cod_tara_origine, + d.tara as tara_origine, + a.greutate, + a.codcpv + from NOM_ARTICOLE A + LEFT JOIN VGEST_ART_SBGR B + ON A.ID_SUBGRUPA = B.ID_SUBGRUPA + left join nom_articole c + on a.id_articol_general = c.id_articol + left join syn_nom_tari D ON A.ID_TARA_ORIGINE = D.ID_TARA + left join vnom_um u on a.um = u.um + WHERE A.STERS = 0; + +-- --- VIEW: VNOM_CASA_LEI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_CASA_LEI" ("ID_PART", "NUME") AS + select a.id_part, b.denumire as nume + from coresp_tip_part a + left join nom_parteneri b on a.id_part = b.id_part + where a.id_tip_part = 22; + +-- --- VIEW: VNOM_CATEGORII_ENTITATI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_CATEGORII_ENTITATI" ("ID_CATEGORIE_ENTITATE", "CATEGORIE_ENTITATE", "INACTIV") AS + select a.id_categorie_entitate, a.categorie_entitate, a.inactiv + from nom_categorii_entitati a + where a.sters = 0; + +-- --- VIEW: VNOM_DELEGATI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_DELEGATI" ("ID_RESPONSABIL", "NUME", "BI", "CNP", "ELIBERATDE", "TELEFON1", "TELEFON2", "INACTIV", "FUNCTIE", "ALES", "ID_PART") AS + select a.id_part as id_responsabil, + a.denumire as nume, + a.reg_comert as bi, + a.cod_fiscal as cnp, + a.localitate_inreg as eliberatde, + a.telefon as telefon1, + a.telefon2, + a.inactiv, + '' as functie, + 0 as ales, + 0 as id_part + from vnom_parteneri a + join coresp_tip_part b on a.ID_PART = b.id_part + where b.id_tip_part = -44; + +-- --- VIEW: VNOM_DELEGATI_PART --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_DELEGATI_PART" ("ID_RESPONSABIL", "NUME", "BI", "CNP", "ELIBERATDE", "TELEFON1", "TELEFON2", "INACTIV", "FUNCTIE", "ALES", "ID_PART") AS + select a.id_part as id_responsabil, + a.denumire as nume, + a.reg_comert as bi, + a.cod_fiscal as cnp, + a.localitate_inreg as eliberatde, + a.telefon as telefon1, + a.telefon2, + a.inactiv, + '' as functie, + 0 as ales, + c.id_part + from vnom_parteneri a + join coresp_tip_part b on a.ID_PART = b.id_part + left join coresp_delegati_part c on b.id_part = c.id_delegat + and c.sters = 0 + where b.id_tip_part = -44; + +-- --- VIEW: VNOM_FDOC --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_FDOC" ("ID_FDOC", "ID_FDOC2", "FEL_DOCUMENT", "ID_MOD", "INACTIV", "TIP_DOC", "DESCRIERE", "PAYMENTCODE", "METHODCODE", "PAYMENTMETHOD", "PAYMENTNAME") AS + select a.id_fdoc, + a.id_fdoc as id_fdoc2, + a.fel_document, + a.id_mod, + a.inactiv, + a.tip_doc, + b.descriere, + a.paymentcode, + sp.methodcode, + sp.methodname as paymentmethod, + sp.paymentname + from NOM_FDOC A + LEFT JOIN NOM_TIP_DOC B + ON A.TIP_DOC = B.TIP + left join vsaft_mecanisme_plati sp + on a.paymentcode = sp.mechanismcode + where STERS = 0; + +-- --- VIEW: VNOM_GESTIUNI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_GESTIUNI" ("ID_GESTIUNE", "NUME_GESTIUNE", "INACTIV", "CONT", "ACONT", "NR_PAG", "CGEST", "ID_SUCURSALA", "DESCRIERE", "NUME_TIP", "SUCURSALA", "ID_RESPONSABIL", "DENUMIRE", "ID_SECTIE", "SECTIE", "ACONT_ADAOS", "ACONT_CHELTUIALA", "ID_LUCRARE", "NRORD", "GESTIONAR", "COMISIE_RECEPTIE1", "COMISIE_RECEPTIE2", "COMISIE_RECEPTIE3") AS + select g.ID_GESTIUNE, + g.NUME_GESTIUNE, + g.INACTIV, + g.CONT, + g.ACONT, + g.NR_PAG, + g.CGEST, + g.id_sucursala, + g.descriere, + t.nume_tip, + a.sucursala, + g.id_responsabil, + p.denumire, + s.id_sectie, + s.sectie, + g.acont_adaos, + g.acont_cheltuiala, + g.id_lucrare, + l.nrord, + g.gestionar, + g.comisie_receptie1, + g.comisie_receptie2, + g.comisie_receptie3 + from NOM_gestiuni g + left join tipuri_gestiuni t on g.nr_pag = t.id_tipgest + left join vnom_sucursale a on g.id_sucursala = a.id_sucursala + left join nom_parteneri p on g.id_responsabil = p.id_part + left join nom_sectii s on s.id_sectie = g.id_sectie + left join nom_lucrari l on g.id_lucrare = l.id_lucrare + where g.STERS = 0; + +-- --- VIEW: VNOM_INTRET --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_INTRET" ("ID_PERS", "NUME", "PRENUME", "CODPERS", "ID_DEDUCERE", "ID_HANDICAP", "ID_STAT", "STERS") AS + select i.* + from sal_persintret i + left join sal_stat s on i.id_stat = s.id_stat + where s.luna = pack_sesiune.getLuna() + and s.an = pack_sesiune.getAn(); + +-- --- VIEW: VNOM_LOCATII --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_LOCATII" ("ID", "DENUMIRE", "STERS", "INACTIV", "ID_UTIL", "DATAORA", "ID_UTILS", "DATAORAS") AS + select id, denumire, sters, inactiv, id_util, dataora, id_utils, dataoras + from nom_locatii + where sters = 0 +; + +-- --- VIEW: VNOM_LOCURI_DEPOZITARE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_LOCURI_DEPOZITARE" ("ID_LOC_DEPOZIT", "DENUMIRE", "INACTIV") AS + select id_loc_depozit, denumire, inactiv + from nom_locuri_depozitare + where sters = 0; + +-- --- VIEW: VNOM_LUCRARI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_LUCRARI" ("ID_LUCRARE", "NRORD", "TATA", "STERS", "ID_MOD", "INACTIV", "ID_TATA", "ID_FACT") AS + select id_lucrare, + cast(substr(sys_connect_by_path(nrord, '//'), 3) as varchar2(100)) as nrord, + cast(substr(sys_connect_by_path(nrord, '//'), + 3, + instr(sys_connect_by_path(nrord, '//'), '//', 1, level) - 3) as + varchar2(100)) as tata, + sters, + id_mod, + inactiv, + id_tata, + id_fact + from nom_lucrari + where sters = 0 + start with id_tata is null +connect by prior id_lucrare = id_tata; + +-- --- VIEW: VNOM_LUCRARI_COMPLET --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_LUCRARI_COMPLET" ("ID_LUCRARE", "NRORD", "CALE", "ID_TATA", "NIVEL", "TIP", "ID_RADACINA") AS + select id_lucrare, + nrord, + cast(substr(sys_connect_by_path(nrord, '//'), + 3) as + varchar2(100)) as cale, + id_tata, + level as nivel, + connect_by_isleaf as tip, + connect_by_root(id_lucrare) as id_radacina + from nom_lucrari + start with id_tata is null +connect by prior id_lucrare = id_tata and sters = 0; + +-- --- VIEW: VNOM_LUCRARI_RADACINI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_LUCRARI_RADACINI" ("ID_LUCRARE", "ID_RADACINA", "NRORD_RADACINA") AS + select id_lucrare, + connect_by_root(id_lucrare) as id_radacina, + connect_by_root(nrord) as nrord_radacina + from nom_lucrari + where sters = 0 + start with id_tata is null +connect by prior id_lucrare = id_tata; + +-- --- VIEW: VNOM_MARCI_MASINI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_MARCI_MASINI" ("ID_MARCA_MASINA", "MARCA_MASINA", "INACTIV") AS + select a.id_marca_masina, a.marca_masina, a.inactiv + from nom_marci_masini a + where a.sters=0; + +-- --- VIEW: VNOM_MASINI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_MASINI" ("ID_MASINA", "ID_PART", "ID_FURNIZOR", "ID_MODEL_MASINA", "NRINMAT", "SERIES", "SERIEM", "CULOARE", "KMINT", "DATAACHI", "NRACHI", "SERIEF", "SERIECV", "ANFABRICATIE", "INACTIV", "FURNIZOR", "MODEL_MASINA", "MARCA_MASINA", "ID_MARCA_MASINA", "CLIENT") AS + select a.id_masina, + a.id_part, + a.id_furnizor, + a.id_model_masina, + a.nrinmat, + a.series, + a.seriem, + a.culoare, + a.kmint, + a.dataachi, + a.nrachi, + a.serief, + a.seriecv, + a.anfabricatie, + a.inactiv, + b.denumire as furnizor, + c.model_masina, + d.marca_masina, + d.id_marca_masina, + e.denumire as client + from nom_masini a + left join nom_parteneri b on a.id_furnizor = b.id_part + left join nom_modele_masini c on a.id_model_masina = c.id_model_masina + left join nom_marci_masini d on c.id_marca_masina = d.id_marca_masina + left join nom_parteneri e on a.id_part = e.id_part + where a.sters = 0; + +-- --- VIEW: VNOM_MEDII_TRANSMISIE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_MEDII_TRANSMISIE" ("ID_MEDIU", "MEDIU_TRANSMISIE", "STERS", "ID_UTIL", "DATAORA", "ID_UTILS", "DATAORAS") AS + select "ID_MEDIU","MEDIU_TRANSMISIE","STERS","ID_UTIL","DATAORA","ID_UTILS","DATAORAS" + from nom_medii_transmisie + where sters = 0; + +-- --- VIEW: VNOM_MODELE_MASINI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_MODELE_MASINI" ("ID_MODEL_MASINA", "MODEL_MASINA", "ID_MARCA_MASINA", "INACTIV", "MARCA_MASINA") AS + select a.id_model_masina, a.model_masina, a.id_marca_masina, a.inactiv, b.marca_masina + from nom_modele_masini a + join vnom_marci_masini b on a.id_marca_masina=b.id_marca_masina + where a.sters=0 + + +; + +-- --- VIEW: VNOM_OBIECTE_DEPOZITARE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_OBIECTE_DEPOZITARE" ("ID_OBIECT_DEPOZIT", "DENUMIRE", "INACTIV", "ID_LOC_DEPOZIT", "CAPACITATE", "UM", "LOC_DEPOZIT", "ID_GESTIUNE", "NUME_GESTIUNE") AS + select a.id_obiect_depozit, + a.denumire, + a.inactiv, + a.id_loc_depozit, + a.capacitate, + a.um, + b.denumire as loc_depozit, + a.id_gestiune, + c.nume_gestiune + from NOM_OBIECTE_DEPOZITARE A + left join NOM_LOCURI_DEPOZITARE B on a.id_loc_depozit = b.id_loc_depozit + left join NOM_GESTIUNI C on a.id_gestiune = c.id_gestiune + where a.sters = 0; + +-- --- VIEW: VNOM_PARTENERI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_PARTENERI" ("ID_PART", "DENUMIRE", "NUME", "PRENUME", "COD_FISCAL", "COD_FISCAL2", "REG_COMERT", "ID_LOC_INREG", "ID_CATEGORIE_ENTITATE", "LOCALITATE_INREG", "PREFIX", "SUFIX", "TIP_PERSOANA", "BANCA", "CONT_BANCA", "MOTIV_INACTIV", "INACTIV", "ELIBERATDE", "DATAELIBERAT", "EMAIL", "WEB", "FAX", "ID_ADRESA", "ADRESA", "TELEFON", "TELEFON2", "ID_LOC", "LOCALITATE", "JUDET", "ID_JUDET", "COD_JUDET", "INDICATIV_JUDET", "SECTOR", "APART", "ETAJ", "SCARA", "BLOC", "STRADA", "NUMAR", "CODPOSTAL", "ID_TARA", "TARA", "COD_TARA", "ID_CETATENIE", "CATEGORIE_ENTITATE", "DATAORA", "UTILIZATOR", "SWIFT_BANCA", "ADRESA_BANCA", "INSTITUTIE_PUBLICA", "ENTITATE_AFILIATA") AS + SELECT P.ID_PART, + P.DENUMIRE, + P.NUME, + P.PRENUME, + P.COD_FISCAL, + P.COD_FISCAL2, + P.REG_COMERT, + P.ID_LOC AS ID_LOC_INREG, + P.ID_CATEGORIE_ENTITATE, + L.LOCALITATE AS LOCALITATE_INREG, + P.PREFIX, + P.SUFIX, + P.TIP_PERSOANA, + P.BANCA, + P.CONT_BANCA, + P.MOTIV_INACTIV, + P.INACTIV, + P.ELIBERATDE, + P.DATAELIBERAT, + A.EMAIL, + A.WEB, + A.FAX, + A.ID_ADRESA, + A.ADRESA, + A.TELEFON, + A.TELEFON2, + A.ID_LOC, + A.LOCALITATE, + A.JUDET, + A.ID_JUDET, + A.COD_JUDET, + A.INDICATIV_JUDET, + A.SECTOR, + A.APART, + A.ETAJ, + A.SCARA, + A.BLOC, + A.STRADA, + A.NUMAR, + A.CODPOSTAL, + A.ID_TARA, + A.TARA, + A.COD_TARA, + A.ID_CETATENIE, + E.CATEGORIE_ENTITATE, + P.DATAORA, + UA.UTILIZATOR, + P.SWIFT_BANCA, + P.ADRESA_BANCA, + P.INSTITUTIE_PUBLICA, + P.ENTITATE_AFILIATA + FROM NOM_PARTENERI P + LEFT JOIN SYN_NOM_LOCALITATI L ON L.ID_LOC = P.ID_LOC + LEFT JOIN (SELECT ID_PART, + ID_ADRESA, + ADRESA, + TELEFON1 AS TELEFON, + TELEFON2, + ID_LOC, + LOCALITATE, + ID_JUDET, + JUDET, + COD_JUDET, + INDICATIV AS INDICATIV_JUDET, + SECTOR, + APART, + ETAJ, + SCARA, + BLOC, + STRADA, + NUMAR, + CODPOSTAL, + ID_TARA, + TARA, + PRESCURTARE AS COD_TARA, + FAX, + EMAIL, + WEB, + ID_CETATENIE + FROM VADRESE_PARTENERI + WHERE PRINCIPALA = 1) A ON P.ID_PART = A.ID_PART + LEFT JOIN VNOM_CATEGORII_ENTITATI E ON P.ID_CATEGORIE_ENTITATE = + E.ID_CATEGORIE_ENTITATE + LEFT JOIN SYN_VUTILIZATORI UA ON P.ID_UTIL = UA.ID_UTIL + WHERE P.STERS = 0; + +-- --- VIEW: VNOM_PARTENERI_EXTINS --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_PARTENERI_EXTINS" ("ID_PART", "DENUMIRE", "NUME", "PRENUME", "COD_FISCAL", "REG_COMERT", "ID_LOC_INREG", "LOCALITATE_INREG", "PREFIX", "SUFIX", "TIP_PERSOANA", "BANCA", "CONT_BANCA", "MOTIV_INACTIV", "INACTIV", "ID_ADRESA", "ADRESA", "TELEFON", "TELEFON2", "LOCALITATE", "JUDET") AS + SELECT DISTINCT P.id_part, + P.denumire, + P.nume, + P.prenume, + P.cod_fiscal, + P.reg_comert, + P.id_loc_inreg, + P.localitate_inreg, + P.prefix, + P.sufix, + P.tip_persoana, + P.banca, + P.cont_banca, + P.motiv_inactiv, + P.inactiv, + P.id_adresa, + P.adresa, + P.telefon, + P.telefon2, + P.localitate, + P.judet + from vnom_parteneri P + LEFT JOIN CORESP_TIP_PART C ON P.ID_PART = C.ID_PART +; + +-- --- VIEW: VNOM_PARTENERI_SAL --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_PARTENERI_SAL" ("ID_SALARIAT", "MARCA", "INACTIV", "NUME", "PRENUME", "ID_PART") AS + select c.id_salariat, c.marca, b.inactiv, b.nume, b.prenume, a.id_part + from (select id_part from coresp_tip_part where id_tip_part = -11) a + left join nom_parteneri b + on a.id_part = b.id_part + left join sal_personal c + on a.id_part = c.id_part + and c.sters = 0 + and c.inactiv = 0 + where b.sters = 0 + and b.inactiv = 0; + +-- --- VIEW: VNOM_PLCONT --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_PLCONT" ("ID_PLCONT", "ACONT", "EXPLICATIE", "CONT", "CONT_ALT", "COD", "TIP_SOLD", "AN", "TIP_CONT", "ID_MOD", "INACTIV", "NEFOLOSIT", "EXPLICATIES") AS + select ID_PLCONT, + ACONT, + EXPLICATIE, + CONT, + CONT_ALT, + COD, + TIP_SOLD, + AN, + TIP_CONT, + ID_MOD, + INACTIV, + NEFOLOSIT, + EXPLICATIES + from PLCONT; + +-- --- VIEW: VNOM_RESPONSABILI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_RESPONSABILI" ("ID_RESPONSABIL", "NUME", "BI", "CNP", "ELIBERATDE", "TELEFON1", "TELEFON2", "INACTIV", "FUNCTIE", "ALES", "MARCA", "ID_FORMATIE", "FORMATIE", "ID_MESERIE", "MESERIE") AS + select a.id_part as id_responsabil, + a.denumire as nume, + a.reg_comert as bi, + a.cod_fiscal as cnp, + a.localitate_inreg as eliberatde, + a.telefon as telefon1, + a.telefon2, + a.inactiv, + '' as functie, + 0 as ales, + cast(nvl(p.marca, 0) as INTEGER) as marca, + p.id_formatie, + p.formatie, + p.id_meserie, + p.meserie + from vnom_parteneri a + join coresp_tip_part b on a.ID_PART = b.id_part + left join vobinv_pers_sal p on p.id_part = a.ID_PART + where b.id_tip_part = -41; + +-- --- VIEW: VNOM_RETETAR --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_RETETAR" ("ID_RETETA", "COD", "ID_ARTICOL", "PRINCIPALA", "EXPLICATIE", "NR_PORTII", "PROC_PIERDERITEHN", "LUNGIME", "LATIME", "ID_UTIL", "DATAORA", "INACTIV", "RETETA", "DENUMIRE", "UM", "CODMAT", "UM2") AS + select a.id_reteta, + a.cod, + a.id_articol, + a.principala, + a.explicatie, + a.nr_portii, + a.proc_pierderitehn, + a.lungime, + a.latime, + a.id_util, + a.dataora, + a.inactiv, + a.cod as reteta, + b.denumire, + b.um, + b.codmat, + b.um2 + from nom_retetar a + left join nom_articole b on a.id_articol = b.id_articol + where a.sters = 0 + +; + +-- --- VIEW: VNOM_RETETAR_ELEMENTE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_RETETAR_ELEMENTE" ("ID_RETETA_ELEM", "ID_RETETA", "ID_ARTICOL", "CANTITATE", "ID_SECTIE", "ID_ARTICOL_GRUPARE", "CU_PIERDERI", "DENUMIRE", "UM", "CONT", "CODMAT", "TIP", "DENUMIRE_SEMIFABRICAT", "SECTIE", "SEMIFABRICAT_ALES", "SEMIFABRICAT_ID") AS + select a.id_reteta_elem, + a.id_reteta, + a.id_articol, + a.cantitate, + a.id_sectie, + a.id_articol_grupare, + a.cu_pierderi, + b.denumire, + b.um, + b.cont, + b.codmat, + (case + when a.semifabricat_id is not null then + -1 + else + b.tip + end) as tip, + c.denumire as denumire_semifabricat, + d.sectie, + a.semifabricat_ales, + a.semifabricat_id + from nom_retetar_elemente a + left join nom_articole b on a.id_articol = b.id_articol + left join nom_articole c on a.id_articol_grupare = c.id_articol + left join nom_sectii d on a.id_sectie = d.id_sectie + where a.sters = 0 +; + +-- --- VIEW: VNOM_SECTII --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_SECTII" ("ID_SECTIE", "SECTIE", "ID_MOD", "INACTIV", "NSECTIE", "CSECTIE", "ID_SUCURSALA", "SUCURSALA", "CAEN") AS + select a.id_sectie, + a.sectie, + a.id_mod, + a.inactiv, + a.nsectie, + a.csectie, + a.id_sucursala, + b.firma as sucursala, + a.caen + from nom_sectii a + left join syn_nom_firme b on a.id_sucursala = b.id_firma + where a.sters = 0; + +-- --- VIEW: VNOM_SOFERI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_SOFERI" ("ID_RESPONSABIL", "NUME", "BI", "CNP", "ELIBERATDE", "TELEFON1", "TELEFON2", "INACTIV", "FUNCTIE", "ALES") AS + select a.id_part as id_responsabil, + a.denumire as nume, + a.reg_comert as bi, + a.cod_fiscal as cnp, + a.localitate_inreg as eliberatde, + a.telefon as telefon1, + a.telefon2, + a.inactiv, + '' as functie, + 0 as ales + from vnom_parteneri a + join coresp_tip_part b on a.ID_PART = b.id_part + where b.id_tip_part = -43; + +-- --- VIEW: VNOM_SUCURSALE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_SUCURSALE" ("ID_SUCURSALA", "SUCURSALA", "STERS", "ID_MOD", "INACTIV", "ID_MAMA", "E_MAMA") AS + SELECT ID_FIRMA AS ID_SUCURSALA, + FIRMA AS SUCURSALA, + STERS, + 0 AS ID_MOD, + 0 AS INACTIV, + ID_MAMA, + E_MAMA + from syn_nom_firme + WHERE STERS = 0 + and schema = user; + +-- --- VIEW: VNOM_TIP_PARTENERI --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_TIP_PARTENERI" ("ID_TIP_PART", "TIP_PARTENER", "PARENT_ID", "INACTIV") AS + SELECT A.ID_TIP_PART, A.TIP_PARTENER, A.PARENT_ID, A.INACTIV + FROM NOM_TIP_PARTENERI A + WHERE A.STERS = 0; + +-- --- VIEW: VNOM_TIP_RULAJ --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_TIP_RULAJ" ("ID_TIP_RULAJ", "DESCRIERE") AS + SELECT ID_TIP_RULAJ, DESCRIERE FROM NOM_TIP_RULAJ WHERE STERS = 0; + +-- --- VIEW: VNOM_UM --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_UM" ("ID", "UM", "COD_UM_ISO", "UM_ISO", "INACTIV", "STERS", "DATAORA", "ID_UTIL", "DATAORAS", "ID_UTILS") AS + select a.id, + a.um, + a.cod_um_iso, + b.um_iso, + a.inactiv, + a.sters, + a.dataora, + a.id_util, + a.dataoras, + a.id_utils + from nom_um a + left join syn_vnom_um_iso b + on a.cod_um_iso = b.cod_um_iso + where a.sters = 0; + +-- --- VIEW: VNOM_VALUTE --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_VALUTE" ("ID_VALUTA", "NUME_VAL", "ID_VALUTA2", "NUME_VAL2", "ID_VALUTA3", "NUME_VAL3", "INACTIV", "MONEDA_NATIONALA") AS + select a.id_valuta, + a.nume_val, + b.id_valuta_iso as id_valuta2, + b.iso_valuta as nume_val2, + a.id_valuta as id_valuta3, + a.nume_val as nume_val3, + a.inactiv, + a.moneda_nationala + from nom_valute a + left join syn_vnom_valute_iso b on a.id_valuta_iso = b.id_valuta_iso + where a.sters = 0; + +-- --- VIEW: VNOM_VENCHEL --- + + CREATE OR REPLACE FORCE EDITIONABLE VIEW "MARIUSM_AUTO"."VNOM_VENCHEL" ("ID_VENCHELT", "ID_TATA", "TIP_VENCHELT", "EXPLICATIE", "EXPLICATIE_FIU", "EXPLICATIE_TATA", "INACTIV", "ID_MOD") AS + select id_venchelt, + id_tata, + tip_venchelt, + cast(substr(sys_connect_by_path(explicatie, ' \ '), 4) as + varchar2(200)) as explicatie, + explicatie as explicatie_fiu, + (case + when id_tata is null then + null + else + connect_by_root explicatie + end) as explicatie_tata, + inactiv, + id_mod + from nom_venit_cheltuieli + where sters = 0 + start with id_tata is null +connect by prior id_venchelt = id_tata; + + +-- ============================================================ +-- === SECTION: TRIGGERS === +-- ============================================================ +-- Gasite: 38 obiecte + +-- --- TRIGGER: TRG_DEV_ESTIMARI_REP_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_ESTIMARI_REP_BEFOINS" + BEFORE INSERT ON DEV_ESTIMARI_REP + REFERENCING OLD AS OLD NEW AS NEW + FOR EACH ROW +BEGIN + SELECT SEQ_DEV_ESTIMARI_REP.NEXTVAL + INTO :NEW.ID_DEV_ESTIMARE_REP + FROM DUAL; +END; + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_ESTIMARI_REP_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_ESTIMARI_REP_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_ESTIMARI_REP_BEFOUPD" + BEFORE UPDATE ON dev_estimari_rep + REFERENCING OLD AS OLD NEW AS NEW + FOR EACH ROW +begin + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_DEV_ESTIMARE_REP', + :OLD.ID_DEV_ESTIMARE_REP, + :NEW.ID_DEV_ESTIMARE_REP); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_LUCRARE', + :OLD.ID_LUCRARE, + :NEW.ID_LUCRARE); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_NORME', + :OLD.ID_NORME, + :NEW.ID_NORME); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_ARTICOL', + :OLD.ID_ARTICOL, + :NEW.ID_ARTICOL); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'CANTITATE', + :OLD.CANTITATE, + :NEW.CANTITATE); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'PRET', + :OLD.PRET, + :NEW.PRET); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'PRET_CU_TVA', + :OLD.PRET_CU_TVA, + :NEW.PRET_CU_TVA); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'COTA_TVA', + :OLD.COTA_TVA, + :NEW.COTA_TVA); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_SECTIE', + :OLD.ID_SECTIE, + :NEW.ID_SECTIE); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_POL', + :OLD.ID_POL, + :NEW.ID_POL); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_DEV_ESTIMARE_PROD', + :OLD.ID_DEV_ESTIMARE_PROD, + :NEW.ID_DEV_ESTIMARE_PROD); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_ARTICOL_GRUPARE', + :OLD.ID_ARTICOL_GRUPARE, + :NEW.ID_ARTICOL_GRUPARE); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'CU_PIERDERI', + :OLD.CU_PIERDERI, + :NEW.CU_PIERDERI); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_VALUTA', + :OLD.ID_VALUTA, + :NEW.ID_VALUTA); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'SEMIFABRICAT_ID', + :OLD.SEMIFABRICAT_ID, + :NEW.SEMIFABRICAT_ID); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'SEMIFABRICAT_ALES', + :OLD.SEMIFABRICAT_ALES, + :NEW.SEMIFABRICAT_ALES); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_UTIL', + :OLD.ID_UTIL, + :NEW.ID_UTIL); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'DATAORA', + :OLD.DATAORA, + :NEW.DATAORA); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'ID_UTILS', + :OLD.ID_UTILS, + :NEW.ID_UTILS); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'DATAORAS', + :OLD.DATAORAS, + :NEW.DATAORAS); + + pack_audit.verifica_val('DEV_ESTIMARI_REP', + :OLD.ID_DEV_ESTIMARE_REP, + 'STERS', + :OLD.STERS, + :NEW.STERS); + +end; + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_ESTIMARI_REP_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_EST_PROD_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_EST_PROD_BEFOINS" +before insert on DEV_ESTIMARI_PRODUSE +referencing old as old new as new +for each row +begin + select SEQ_DEV_EST_PROD.nextval into :new.ID_DEV_ESTIMARE_PROD from dual; +end; + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_EST_PROD_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_FURNIZORI --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_FURNIZORI" + before insert on dev_nom_furnizorimasini + for each row +declare + -- local variables here +begin + select SEQ_dev_nom_FURNIZORIMASINI.NEXTVAL into :new.id_FURNIZOR from dual; +end TRG_DEV_FURNIZORI; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_FURNIZORI" ENABLE; + +-- --- TRIGGER: TRG_DEV_MASINICLIENTI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_MASINICLIENTI_BEFOINS" +before insert on dev_masiniclienti +referencing old as old new as new +for each row +begin +select SEQ_dev_masiniclienti.NEXTVAL into :new.id_masiniclient from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_MASINICLIENTI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_MASINICLIENT_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_MASINICLIENT_BEFOUPD" +BEFORE UPDATE ON DEV_MASINICLIENTI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'ID_MASINICLIENT', + :OLD.ID_MASINICLIENT, + :NEW.ID_MASINICLIENT); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'ID_TIPMOTOR', + :OLD.ID_TIPMOTOR, + :NEW.ID_TIPMOTOR); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'ID_FURNIZOR', + :OLD.ID_FURNIZOR, + :NEW.ID_FURNIZOR); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'ID_MASINA', + :OLD.ID_MASINA, + :NEW.ID_MASINA); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'ID_PARTENER', + :OLD.ID_PARTENER, + :NEW.ID_PARTENER); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'NRINMAT', + :OLD.NRINMAT, + :NEW.NRINMAT); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'SERIES', + :OLD.SERIES, + :NEW.SERIES); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'SERIEM', + :OLD.SERIEM, + :NEW.SERIEM); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'CULOARE', + :OLD.CULOARE, + :NEW.CULOARE); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'KMINT', + :OLD.KMINT, + :NEW.KMINT); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'DATAACHI', + :OLD.DATAACHI, + :NEW.DATAACHI); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'NRACHI', + :OLD.NRACHI, + :NEW.NRACHI); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'SERIEF', + :OLD.SERIEF, + :NEW.SERIEF); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'SERIECV', + :OLD.SERIECV, + :NEW.SERIECV); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'ANFABRICATIE', + :OLD.ANFABRICATIE, + :NEW.ANFABRICATIE); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_MASINICLIENTI', + :OLD.ID_MASINICLIENT, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_MASINICLIENT_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_MECANICI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_MECANICI_BEFOINS" +before insert on dev_mecanici +referencing old as old new as new +for each row +begin +select SEQ_dev_mecanici.NEXTVAL into :new.id_mecanic from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_MECANICI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_MECANICI_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_MECANICI_BEFOUPD" +BEFORE UPDATE ON DEV_MECANICI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_MECANICI', + :OLD.ID_MECANIC, + 'ID_MECANIC', + :OLD.ID_MECANIC, + :NEW.ID_MECANIC); + + pack_audit.verifica_val('DEV_MECANICI', + :OLD.ID_MECANIC, + 'ID_SECTIE', + :OLD.ID_SECTIE, + :NEW.ID_SECTIE); + + pack_audit.verifica_val('DEV_MECANICI', + :OLD.ID_MECANIC, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_MECANICI', + :OLD.ID_MECANIC, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_MECANICI_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_ANSAMBLE_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_ANSAMBLE_BEFOINS" +before insert on dev_nom_ansamble +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_ansamble.NEXTVAL into :new.id_ansamblu from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_ANSAMBLE_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_ANSAMBLE_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_ANSAMBLE_BEFOUPD" +BEFORE UPDATE ON DEV_NOM_ANSAMBLE +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_NOM_ANSAMBLE', + :OLD.ID_ANSAMBLU, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_NOM_ANSAMBLE', + :OLD.ID_ANSAMBLU, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('DEV_NOM_ANSAMBLE', + :OLD.ID_ANSAMBLU, + 'ID_ANSAMBLU', + :OLD.ID_ANSAMBLU, + :NEW.ID_ANSAMBLU); + + pack_audit.verifica_val('DEV_NOM_ANSAMBLE', + :OLD.ID_ANSAMBLU, + 'DENUMIRE', + :OLD.DENUMIRE, + :NEW.DENUMIRE); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_ANSAMBLE_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_FURNIZOR_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_FURNIZOR_BEFOUPD" +BEFORE UPDATE ON DEV_NOM_FURNIZORIMASINI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_NOM_FURNIZORIMASINI', + :OLD.ID_FURNIZOR, + 'ID_FURNIZOR', + :OLD.ID_FURNIZOR, + :NEW.ID_FURNIZOR); + + pack_audit.verifica_val('DEV_NOM_FURNIZORIMASINI', + :OLD.ID_FURNIZOR, + 'DENUMIRE', + :OLD.DENUMIRE, + :NEW.DENUMIRE); + + pack_audit.verifica_val('DEV_NOM_FURNIZORIMASINI', + :OLD.ID_FURNIZOR, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_NOM_FURNIZORIMASINI', + :OLD.ID_FURNIZOR, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_FURNIZOR_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_INSPECTORI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_INSPECTORI_BEFOINS" +before insert on dev_nom_inspectori +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_inspectori.NEXTVAL into :new.id_inspector from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_INSPECTORI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_INSPECTO_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_INSPECTO_BEFOUPD" +BEFORE UPDATE ON DEV_NOM_INSPECTORI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_NOM_INSPECTORI', + :OLD.ID_INSPECTOR, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_NOM_INSPECTORI', + :OLD.ID_INSPECTOR, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('DEV_NOM_INSPECTORI', + :OLD.ID_INSPECTOR, + 'ID_INSPECTOR', + :OLD.ID_INSPECTOR, + :NEW.ID_INSPECTOR); + + pack_audit.verifica_val('DEV_NOM_INSPECTORI', + :OLD.ID_INSPECTOR, + 'INSPECTOR', + :OLD.INSPECTOR, + :NEW.INSPECTOR); + + pack_audit.verifica_val('DEV_NOM_INSPECTORI', + :OLD.ID_INSPECTOR, + 'ID_ASIGURATOR', + :OLD.ID_ASIGURATOR, + :NEW.ID_ASIGURATOR); +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_INSPECTO_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_MARCI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MARCI_BEFOINS" +before insert on dev_nom_marci +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_marci.NEXTVAL into :new.id_marca from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MARCI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_MARCI_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MARCI_BEFOUPD" +BEFORE UPDATE ON DEV_NOM_MARCI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_NOM_MARCI', + :OLD.ID_MARCA, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_NOM_MARCI', + :OLD.ID_MARCA, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('DEV_NOM_MARCI', + :OLD.ID_MARCA, + 'ID_MARCA', + :OLD.ID_MARCA, + :NEW.ID_MARCA); + + pack_audit.verifica_val('DEV_NOM_MARCI', + :OLD.ID_MARCA, + 'MARCA', + :OLD.MARCA, + :NEW.MARCA); +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MARCI_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_MASINI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MASINI_BEFOINS" +before insert on dev_nom_masini +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_masini.NEXTVAL into :new.id_masina from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MASINI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_MASINI_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MASINI_BEFOUPD" +BEFORE UPDATE ON DEV_NOM_MASINI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'ID_MASINA', + :OLD.ID_MASINA, + :NEW.ID_MASINA); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'ID_MARCA', + :OLD.ID_MARCA, + :NEW.ID_MARCA); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'MASINA', + :OLD.MASINA, + :NEW.MASINA); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'SCTIP', + :OLD.SCTIP, + :NEW.SCTIP); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'CLASA', + :OLD.CLASA, + :NEW.CLASA); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'COMBUSTIBIL', + :OLD.COMBUSTIBIL, + :NEW.COMBUSTIBIL); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'CLINDREE', + :OLD.CLINDREE, + :NEW.CLINDREE); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'PUTERE_KW', + :OLD.PUTERE_KW, + :NEW.PUTERE_KW); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'PUTERE_CP', + :OLD.PUTERE_CP, + :NEW.PUTERE_CP); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'CUTIE_VITEZE', + :OLD.CUTIE_VITEZE, + :NEW.CUTIE_VITEZE); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'TRACTIUNE', + :OLD.TRACTIUNE, + :NEW.TRACTIUNE); + + pack_audit.verifica_val('DEV_NOM_MASINI', + :OLD.ID_MASINA, + 'ECHIPARE', + :OLD.ECHIPARE, + :NEW.ECHIPARE); +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_MASINI_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_NORME_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_NORME_BEFOINS" +before insert on dev_nom_norme +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_norme.NEXTVAL into :new.id_norme from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_NORME_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_NORME_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_NORME_BEFOUPD" +BEFORE UPDATE ON DEV_NOM_NORME +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'ID_NORME', + :OLD.ID_NORME, + :NEW.ID_NORME); + + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'ID_ANSAMBLU', + :OLD.ID_ANSAMBLU, + :NEW.ID_ANSAMBLU); + + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'ID_MASINA', + :OLD.ID_MASINA, + :NEW.ID_MASINA); + + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'DENOP', + :OLD.DENOP, + :NEW.DENOP); + + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'CODOP', + :OLD.CODOP, + :NEW.CODOP); + + pack_audit.verifica_val('DEV_NOM_NORME', + :OLD.ID_NORME, + 'TIMPN', + :OLD.TIMPN, + :NEW.TIMPN); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_NORME_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_PRETURI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_PRETURI_BEFOINS" +before insert on dev_nom_preturi +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_preturi.NEXTVAL into :new.id_pret from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_PRETURI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_PRETURI_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_PRETURI_BEFOUPD" +BEFORE UPDATE ON DEV_NOM_PRETURI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'ID_PRET', + :OLD.ID_PRET, + :NEW.ID_PRET); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'ID_MARCA', + :OLD.ID_MARCA, + :NEW.ID_MARCA); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'ID_ASIGURATOR', + :OLD.ID_ASIGURATOR, + :NEW.ID_ASIGURATOR); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'PRET', + :OLD.PRET, + :NEW.PRET); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'PRET_VAL', + :OLD.PRET_VAL, + :NEW.PRET_VAL); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'ID_VALUTA', + :OLD.ID_VALUTA, + :NEW.ID_VALUTA); + + pack_audit.verifica_val('DEV_NOM_PRETURI', + :OLD.ID_PRET, + 'CURS', + :OLD.CURS, + :NEW.CURS); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_PRETURI_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_NOM_PROC_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_PROC_BEFOINS" +before insert on DEVIZE_NOM_PROCENTE +referencing old as old new as new +for each row +begin + select SEQ_DEVIZE_NOM_PROCENTE.nextval into :new.ID_DEV_NOM_PROCENT from dual; +end; + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_NOM_PROC_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_OPER_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_BEFOINS" +BEFORE INSERT ON DEV_OPER +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + select SEQ_dev_oper.NEXTVAL into :new.id_oper from dual; + pack_sesiune.dev_idOper := :new.id_oper; +end; + + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_OPER_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_BEFOUPD" +BEFORE UPDATE ON DEV_OPER +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'ID_OPER', + :OLD.ID_OPER, + :NEW.ID_OPER); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'ID_ORDL', + :OLD.ID_ORDL, + :NEW.ID_ORDL); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'ID_NORME', + :OLD.ID_NORME, + :NEW.ID_NORME); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'TIMPN', + :OLD.TIMPN, + :NEW.TIMPN); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'PRET', + :OLD.PRET, + :NEW.PRET); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'DATAI', + :OLD.DATAI, + :NEW.DATAI); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'ID_SECTIE', + :OLD.ID_SECTIE, + :NEW.ID_SECTIE); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'ID_UTIL', + :OLD.ID_UTIL, + :NEW.ID_UTIL); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'DATAORA', + :OLD.DATAORA, + :NEW.DATAORA); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'ID_UTILS', + :OLD.ID_UTILS, + :NEW.ID_UTILS); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'DATAORAS', + :OLD.DATAORAS, + :NEW.DATAORAS); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'VALIDAT', + :OLD.VALIDAT, + :NEW.VALIDAT); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'NOU', + :OLD.NOU, + :NEW.NOU); + + pack_audit.verifica_val('DEV_OPER', + :OLD.ID_OPER, + 'ID_UTILI', + :OLD.ID_UTILI, + :NEW.ID_UTILI); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_OPER_MECANICI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_MECANICI_BEFOINS" +before insert on DEV_OPER_MECANICI +referencing old as old new as new +for each row +begin +select SEQ_DEV_OPER_MECANICI.NEXTVAL into :new.ID_OPERMECANIC from dual; +end; + + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_MECANICI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_OPER_MECANIC_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_MECANIC_BEFOUPD" +BEFORE UPDATE ON DEV_OPER_MECANICI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ID_OPERMECANIC', + :OLD.ID_OPERMECANIC, + :NEW.ID_OPERMECANIC); + + pack_audit.verifica_val('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ID_MECANIC', + :OLD.ID_MECANIC, + :NEW.ID_MECANIC); + + pack_audit.verifica_val('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ID_OPER', + :OLD.ID_OPER, + :NEW.ID_OPER); + + pack_audit.verifica_val('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ORE', + :OLD.ORE, + :NEW.ORE); + + pack_audit.verifica_val('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_OPER_MECANIC_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_ORDL_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_ORDL_BEFOINS" +BEFORE INSERT ON DEV_ORDL +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + select SEQ_DEV_ORDL.NEXTVAL into :new.ID_ORDL from dual; + pack_sesiune.dev_idOrdl := :new.id_ordl; +end; + + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_ORDL_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_ORDL_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_ORDL_BEFOUPD" + BEFORE UPDATE ON DEV_ORDL + REFERENCING OLD AS OLD NEW AS NEW + FOR EACH ROW +begin + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_ORDL', + :OLD.ID_ORDL, + :NEW.ID_ORDL); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'LUNA', + :OLD.LUNA, + :NEW.LUNA); + + pack_audit.verifica_val('DEV_ORDL', :OLD.ID_ORDL, 'AN', :OLD.AN, :NEW.AN); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_INSPECTOR', + :OLD.ID_INSPECTOR, + :NEW.ID_INSPECTOR); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_LUCRARE', + :OLD.ID_LUCRARE, + :NEW.ID_LUCRARE); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'TERMEN', + :OLD.TERMEN, + :NEW.TERMEN); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATAI', + :OLD.DATAI, + :NEW.DATAI); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ORAI', + :OLD.ORAI, + :NEW.ORAI); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATAE', + :OLD.DATAE, + :NEW.DATAE); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ORAE', + :OLD.ORAE, + :NEW.ORAE); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'VALIDAT', + :OLD.VALIDAT, + :NEW.VALIDAT); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_UTIL_AD', + :OLD.ID_UTIL_AD, + :NEW.ID_UTIL_AD); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_UTIL_VALID', + :OLD.ID_UTIL_VALID, + :NEW.ID_UTIL_VALID); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATAORAAD', + :OLD.DATAORAAD, + :NEW.DATAORAAD); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATAORAVALID', + :OLD.DATAORAVALID, + :NEW.DATAORAVALID); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_UTILS', + :OLD.ID_UTILS, + :NEW.ID_UTILS); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATAORAS', + :OLD.DATAORAS, + :NEW.DATAORAS); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_MASINICLIENT', + :OLD.ID_MASINICLIENT, + :NEW.ID_MASINICLIENT); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_ASIGURATOR', + :OLD.ID_ASIGURATOR, + :NEW.ID_ASIGURATOR); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'NR_DOSAR', + :OLD.NR_DOSAR, + :NEW.NR_DOSAR); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_TIP', + :OLD.ID_TIP, + :NEW.ID_TIP); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'INCHIS_FORTAT', + :OLD.INCHIS_FORTAT, + :NEW.INCHIS_FORTAT); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'KMINT', + :OLD.KMINT, + :NEW.KMINT); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'SOLICITARI_CLIENT', + :OLD.SOLICITARI_CLIENT, + :NEW.SOLICITARI_CLIENT); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'PROC_TVAV', + :OLD.PROC_TVAV, + :NEW.PROC_TVAV); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_PART', + :OLD.ID_PART, + :NEW.ID_PART); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'COADA_DEVIZ', + :OLD.COADA_DEVIZ, + :NEW.COADA_DEVIZ); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'OBSERVATII', + :OLD.OBSERVATII, + :NEW.OBSERVATII); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATA_CURS', + :OLD.DATA_CURS, + :NEW.DATA_CURS); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'IN_LUCRU', + :OLD.IN_LUCRU, + :NEW.IN_LUCRU); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_VALUTA_DEVIZ', + :OLD.ID_VALUTA_DEVIZ, + :NEW.ID_VALUTA_DEVIZ); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'FACTUREZMIX', + :OLD.FACTUREZMIX, + :NEW.FACTUREZMIX); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATA_IN_LUCRU', + :OLD.DATA_IN_LUCRU, + :NEW.DATA_IN_LUCRU); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATAORAINLUCRU', + :OLD.DATAORAINLUCRU, + :NEW.DATAORAINLUCRU); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_AGENT', + :OLD.ID_AGENT, + :NEW.ID_AGENT); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_UTIL_INCHIS', + :OLD.ID_UTIL_INCHIS, + :NEW.ID_UTIL_INCHIS); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'DATAORAINCHIS', + :OLD.DATAORAINCHIS, + :NEW.DATAORAINCHIS); + + pack_audit.verifica_val('DEV_ORDL', + :OLD.ID_ORDL, + 'ID_PART_REF', + :OLD.ID_PART_REF, + :NEW.ID_PART_REF); +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_ORDL_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_PROC_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_PROC_BEFOINS" +before insert on DEVIZE_PROCENTE +referencing old as old new as new +for each row +begin + select SEQ_DEVIZE_PROCENTE.nextval into :new.ID_DEV_PROCENT from dual; +end; + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_PROC_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_RAP_PROD_DET_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_RAP_PROD_DET_BEFOINS" +before insert on DEV_RAPOARTE_PROD_DET +referencing old as old new as new +for each row +begin + if :new.ID_DEV_RAP_PROD_DET is null then + select SEQ_DEV_RAP_PROD_DET.NEXTVAL into :new.ID_DEV_RAP_PROD_DET from dual; + end if; +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_RAP_PROD_DET_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_TIPURI_MOTOARE_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIPURI_MOTOARE_BEFOINS" +before insert on dev_tipuri_motoare +referencing old as old new as new +for each row +begin +select SEQ_dev_tipuri_motoare.NEXTVAL into :new.id_tipmotor from dual; +end; + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIPURI_MOTOARE_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_TIPURI_MOTOA_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIPURI_MOTOA_BEFOUPD" +BEFORE UPDATE ON DEV_TIPURI_MOTOARE +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_TIPURI_MOTOARE', + :OLD.ID_TIPMOTOR, + 'DENUMIRE', + :OLD.DENUMIRE, + :NEW.DENUMIRE); + + pack_audit.verifica_val('DEV_TIPURI_MOTOARE', + :OLD.ID_TIPMOTOR, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('DEV_TIPURI_MOTOARE', + :OLD.ID_TIPMOTOR, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('DEV_TIPURI_MOTOARE', + :OLD.ID_TIPMOTOR, + 'ID_TIPMOTOR', + :OLD.ID_TIPMOTOR, + :NEW.ID_TIPMOTOR); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIPURI_MOTOA_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_TIP_DEVIZ --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIP_DEVIZ" +before insert on DEV_TIP_DEVIZ +referencing old as old new as new +for each row +begin +select SEQ_DEV_TIP_DEVIZ.NEXTVAL into :new.ID_TIP from dual; +end; + + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIP_DEVIZ" ENABLE; + +-- --- TRIGGER: TRG_DEV_TIP_DEVIZ_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIP_DEVIZ_BEFOUPD" + BEFORE UPDATE ON DEV_TIP_DEVIZ + REFERENCING OLD AS OLD NEW AS NEW + FOR EACH ROW +begin + pack_audit.verifica_val('DEV_TIP_DEVIZ', + :OLD.ID_TIP, + 'ID_TIP', + :OLD.ID_TIP, + :NEW.ID_TIP); + + pack_audit.verifica_val('DEV_TIP_DEVIZ', + :OLD.ID_TIP, + 'DENUMIRE', + :OLD.DENUMIRE, + :NEW.DENUMIRE); + + pack_audit.verifica_val('DEV_TIP_DEVIZ', + :OLD.ID_TIP, + 'STERS', + :OLD.STERS, + :NEW.STERS); + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_TIP_DEVIZ_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_DEV_UTIL_CODURI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_UTIL_CODURI_BEFOINS" +before insert on DEV_UTILIZATORI_CODURI +referencing old as old new as new +for each row +begin +select SEQ_DEV_UTILIZATORI_CODURI.NEXTVAL into :new.ID_UTIL_COD from dual; +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_UTIL_CODURI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_DEV_UTIL_CODURI_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_DEV_UTIL_CODURI_BEFOUPD" +BEFORE UPDATE ON DEV_UTILIZATORI_CODURI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('DEV_UTILIZATORI_CODURI', + :OLD.ID_UTIL_COD, + 'ID_UTIL', + :OLD.ID_UTIL, + :NEW.ID_UTIL); + + pack_audit.verifica_val('DEV_MECANICI', + :OLD.ID_UTIL_COD, + 'COD', + :OLD.COD, + :NEW.COD); + + +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_DEV_UTIL_CODURI_BEFOUPD" ENABLE; + +-- --- TRIGGER: TRG_NOM_LUCRARI_BEFOINS --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_NOM_LUCRARI_BEFOINS" +BEFORE INSERT ON NOM_LUCRARI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + select SEQ_NOM_LUCRARI.NEXTVAL into :new.ID_LUCRARE from dual; + pack_sesiune.dev_idLucrare := :new.id_lucrare; +end; + + + + +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_NOM_LUCRARI_BEFOINS" ENABLE; + +-- --- TRIGGER: TRG_NOM_LUCRARI_BEFOUPD --- + + CREATE OR REPLACE EDITIONABLE TRIGGER "MARIUSM_AUTO"."TRG_NOM_LUCRARI_BEFOUPD" +BEFORE UPDATE ON NOM_LUCRARI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + pack_audit.verifica_val('NOM_LUCRARI', + :OLD.ID_LUCRARE, + 'ID_LUCRARE', + :OLD.ID_LUCRARE, + :NEW.ID_LUCRARE); + + pack_audit.verifica_val('NOM_LUCRARI', + :OLD.ID_LUCRARE, + 'NRORD', + :OLD.NRORD, + :NEW.NRORD); + + pack_audit.verifica_val('NOM_LUCRARI', + :OLD.ID_LUCRARE, + 'STERS', + :OLD.STERS, + :NEW.STERS); + + pack_audit.verifica_val('NOM_LUCRARI', + :OLD.ID_LUCRARE, + 'ID_MOD', + :OLD.ID_MOD, + :NEW.ID_MOD); + + pack_audit.verifica_val('NOM_LUCRARI', + :OLD.ID_LUCRARE, + 'INACTIV', + :OLD.INACTIV, + :NEW.INACTIV); + + pack_audit.verifica_val('NOM_LUCRARI', + :OLD.ID_LUCRARE, + 'FACTURATA', + :OLD.FACTURATA, + :NEW.FACTURATA); + + pack_audit.verifica_val('NOM_LUCRARI', + :OLD.ID_LUCRARE, + 'ID_TATA', + :OLD.ID_TATA, + :NEW.ID_TATA); +end; +/ +ALTER TRIGGER "MARIUSM_AUTO"."TRG_NOM_LUCRARI_BEFOUPD" ENABLE; + + diff --git a/docs/service-auto/pack_auto.pck b/docs/service-auto/pack_auto.pck new file mode 100644 index 0000000..72dc372 --- /dev/null +++ b/docs/service-auto/pack_auto.pck @@ -0,0 +1,1798 @@ +create or replace package pack_auto is + v_data_i DATE; + v_data_f DATE; + nid_articol_manopera NUMBER(10) := -100000; -- id_articol pentru articolul MANOPERA + ntip_manopera NUMBER(1) := 1; -- tipul pentru manopera din NOM_ARTICOLE + nIdTipContractAuto TIPURI_CONTRACTE.ID_TIP_CTR%TYPE := -101; -- tip contract CLIENT AUTO pentru citirea discount manopera, materiale pe contract + nIdArticolManopera NOM_ARTICOLE.ID_ARTICOL%TYPE := -100000; + nIdArticolMateriale NOM_ARTICOLE.ID_ARTICOL%TYPE := -100003; + + procedure dev_sterge_comanda(tcSchema in varchar2, + tnIdUtil in number, + tnIdOrdl in number, + tnIdLucrare in number); + + procedure dev_adauga_oper_fact(tcSchema in varchar2, + tnIdOrdl in number, + tnIdSectie in number, + tnIdNorme in number, + tnTotalFTva in number, + tnTimpN in number, + tnOre in number, + tnIdUtil in number, + tnIdMecanic in number); + + procedure dev_adauga_lucrare(v_gcs in varchar2, + tnan in number, + tnluna in number, + tnIdUtil in number, + pcNr in varchar2, + pnIdInsp in number, + pnIdAsig in number, + pcNrDosar in varchar2, + pnIdMC in number, + pnKmInt in number, + pdTermen in date, + pnTipCom in number, + pcSirIdOperatii in varchar2, + pnIdPartRef in number, + V_ID_ORDL out number); + + procedure dev_adauga_lucrare(v_gcs in varchar2, + tnan in number, + tnluna in number, + tnIdUtil in number, + pcNr in varchar2, + pnIdInsp in number, + pnIdAsig in number, + pcNrDosar in varchar2, + pnIdMC in number, + pnKmInt in number, + pnOreFct in number default null, + pdTermen in date, + pnTipCom in number, + pcSirIdOperatii in varchar2, + pcObservatii in varchar2 default null, + pcDefectiuni in varchar2 default null, + pnIdPartRef in number, + pnIdOrdl in out number); + + procedure dev_valideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number, + tnAn in dev_ordl.an%type default null, + tnLuna in dev_ordl.luna%type default null); + + procedure dev_invalideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_utils in number); + + procedure actualizeaza_deviz(tnProcTvav IN NUMBER, + tcSirIdOrdl IN VARCHAR2, + tnIdSet IN NUMBER); + + procedure dev_distribuie_timp_n(V_LUNA IN NUMBER, V_AN IN NUMBER); + + procedure dev_adauga_operatie(v_gcs in varchar2, + tnid_sectie in number, + tnid_ordl in number, + tnpret in number, + tnid_util in number, + tntimpn in number, + tnid_norme in number, + tcsir_idmecanic in varchar2, + tnAn in number default null, + tnLuna in number default null); + + procedure dev_actualizeaza_operatie(v_gcs in varchar2, + v_camp in varchar2, + v_valoare_noua in number, + v_id_oper in number, + v_luna in number, + v_an in number); + + procedure dev_valideaza_operatii(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number); + + /* procedure dev_completeaza_rul(v_gcs in varchar2, tnid_lucrare in number); + + procedure dev_completeaza_rul(v_gcs in varchar2, + tcSirId_lucrare in varchar2, + tcSeparator in varchar2);*/ + + procedure valideaza_operatie(V_SCHEMA IN VARCHAR2, + V_VALIDAT IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_sectie(V_SCHEMA IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_tip_comanda(V_SCHEMA IN VARCHAR2, + V_ID_TIP IN NUMBER, + V_ID_ORDL IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_date_comanda(V_ID_ORDL IN NUMBER, + V_ID_TIP IN NUMBER, + V_KMINT IN NUMBER, + V_ORE_FUNCTIONARE IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure sterge_operatie(V_SCHEMA IN VARCHAR2, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_client_comanda(V_SCHEMA IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_ID_MASINICLIENT IN NUMBER, + V_ID_UTIL IN NUMBER); + + ------------------------------------------------------------------ + -- Adaugari / modificari / stergeri nomenclatoare + ------------------------------------------------------------------ + procedure adauga_manopera_de(V_ID_LUCRARE IN NUMBER, + V_ID_NORME IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_COTA_TVA IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure adauga_material_de(V_ID_LUCRARE IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_COTA_TVA IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_pret_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_PRET IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_cota_tva_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_COTA_TVA IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_cantitate_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_CANTITATE IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure sterge_articol_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure adauga_pret(V_ID_MARCA IN NUMBER, + V_ID_ASIGURATOR IN NUMBER, + V_PRET IN NUMBER, + V_PRET_VAL IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_INACTIV IN NUMBER); + + procedure modifica_pret(V_ID_PRET IN NUMBER, + V_ID_MARCA IN NUMBER, + V_ID_ASIGURATOR IN NUMBER, + V_PRET IN NUMBER, + V_PRET_VAL IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_INACTIV IN NUMBER); + + procedure sterge_pret(V_ID_PRET IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure adauga_ansamblu(V_SCHEMA IN VARCHAR2, + V_DENUMIRE IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_ansamblu(V_SCHEMA IN VARCHAR2, + V_ID_ANSAMBLU IN NUMBER, + V_DENUMIRE IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure sterge_ansamblu(V_SCHEMA IN VARCHAR2, + V_ID_ANSAMBLU IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure adauga_norma(V_ID_MASINA IN NUMBER, + V_ID_ANSAMBLU IN NUMBER, + V_DENOP IN VARCHAR2, + V_CODOP IN VARCHAR2, + V_TIMPN IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_norma(V_ID_NORME IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_ANSAMBLU IN NUMBER, + V_DENOP IN VARCHAR2, + V_CODOP IN VARCHAR2, + V_TIMPN IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure sterge_norma(V_ID_NORME IN NUMBER, V_ID_UTIL IN NUMBER); + + PROCEDURE adauga_mecanic(V_SCHEMA IN VARCHAR2, + V_ID_PART IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE modifica_mecanic(V_SCHEMA IN VARCHAR2, + V_ID_MECANIC IN NUMBER, + V_ID_PART IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE sterge_mecanic(V_SCHEMA IN VARCHAR2, + V_ID_MECANIC IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE adauga_asigurator(V_ID_PART IN NUMBER, V_ID_UTIL IN NUMBER); + + PROCEDURE modifica_asigurator(V_ID_ASIGURATOR IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER); + + PROCEDURE set_perioada_raport(V_LUNA_I IN NUMBER, + V_AN_I IN NUMBER, + V_LUNA_F IN NUMBER, + V_AN_F IN NUMBER); + + FUNCTION get_datai RETURN DATE; + + FUNCTION get_dataf RETURN DATE; + + FUNCTION getOptiuneInchidere(V_TIP IN NUMBER) RETURN NUMBER; + + procedure setOptiuneInchidere(V_TIP IN NUMBER, + V_INCHIDERE_VALIDARE IN NUMBER); + + PROCEDURE citeste_date_avans(V_SIR_ID_LUCRARE IN VARCHAR2, + V_DELIMITATOR IN VARCHAR2, + V_CURSOR OUT pack_types.tip_cursor); + + PROCEDURE citeste_sume_stornare(V_SIR_ID_LUCRARE IN VARCHAR2, + V_DELIMITATOR IN VARCHAR2, + V_CURSOR OUT pack_types.tip_cursor); + + PROCEDURE citeste_discount_contract(V_ID_PART IN CONTRACTE.ID_PART%TYPE, + V_ID_SUCURSALA IN CONTRACTE.ID_SUCURSALA%TYPE, + V_ID_CTR OUT CONTRACTE.ID_CTR%TYPE, + V_DISCOUNT_MANOPERA OUT CTR_ARTICOLE.COEF_DISCOUNT%TYPE, + V_DISCOUNT_MATERIALE OUT CTR_ARTICOLE.COEF_DISCOUNT%TYPE); + + PROCEDURE salveaza_discount_contract(V_ID_PART IN CONTRACTE.ID_PART%TYPE, + V_ID_SUCURSALA IN CONTRACTE.ID_SUCURSALA%TYPE, + V_ID_CTR IN CONTRACTE.ID_CTR%TYPE, + V_DISCOUNT_MANOPERA IN CTR_ARTICOLE.COEF_DISCOUNT%TYPE, + V_DISCOUNT_MATERIALE IN CTR_ARTICOLE.COEF_DISCOUNT%TYPE); + + procedure dev_arhiveaza_comanda(tnid_ordl in number, tnid_util in number); + + procedure dev_dezarhiveaza_comanda(tnid_ordl in number); +end pack_auto; +/ +CREATE OR REPLACE PACKAGE BODY pack_auto is + + -- 10.01.2015 + -- marius.mutu + -- actualizeaza_deviz: hint INDEX(RUL IDX_RUL_001) + + -- 20.08.2015 + -- marius.mutu + -- adaugare citeste_discount_contract, salveaza_discount_contract la editare clienti/masini + + -- 26.08.2015 + -- marius.mutu + -- adaugare dev_arhiveaza_comanda, dev_dezarhiveaza_comanda + + -- 08.10.2015 + -- marius.mutu + -- dev_adauga_lucrare - s-a tratat cazul id_part_ref = 0 in loc de NULL + + -- 27.01.2016 + -- marius.mutu + -- citeste_sume_stornare - se preiau si cota de tva, id_jtva_coloana de la avansurile initiale + -- puteau sa fie cu alta cota de TVA decat cea standard din luna curenta + + -- 21.09.2016 + -- marius.mutu + -- + modifica_date_comanda: kmint, tip_comanda + + -- dev_valideaza_comanda, dev_adauga_operatie + parametru optional tnAn, tnLuna + -- pentru introducerea operatiilor si validarea comenzii dintr-o luna precedenta. + -- sunt cazuri in care se doreste facturarea in luna precedenta si trebuie sa fie si validata in luna precedenta, + -- sau operatiile sa se vada chiar daca sunt introduse intr-o luna anterioara, dupa deschiderea lunii urmatoare + -- chiar daca intre timp s-a trecut in alta luna + + -- 11.04.2022 + -- citeste_sume_stornare + taxcode + + -- 03.07.2024 + -- marius.mutu + -- dev_adauga_lucrare + ore_functionare, observatii + + -- 18.10.2024 + -- marius.mutu + -- citeste_date_avans - se iau toate incasarile like '5%' in loc de '53%' (5125 = 4111, 5311 = 4111) + + -- 21.01.2025 + -- marius.mutu + -- citeste_date_avans + taxcode + + + --17.03.2026 + --robert + --creare procedura setOptiuneInchidere - Modificare modalitate de inchidere comenzi (prin validare sau prin facturare/nota contabila) + + procedure dev_sterge_comanda(tcSchema in varchar2, + tnIdUtil in number, + tnIdOrdl in number, + tnIdLucrare in number) is + lnSumaRulaje RUL.PRETV%type := 0; + /*lnInregRulaje NUMBER(10);*/ + lnOperatii NUMBER(3) := 0; + V_NESTERS NUMBER(1) := 0; + V_ACTIV NUMBER(1) := 0; + BEGIN + SELECT ROUND(SUM(cante * pretv), 2) AS SUMA + INTO lnSumaRulaje + FROM RUL + WHERE ID_LUCRARE = tnIdLucrare + AND STERS = V_NESTERS; + + IF lnSumaRulaje <> 0 then + + /* SELECT COUNT(*) + INTO lnInregRulaje + FROM RUL + WHERE ID_LUCRARE = tnIdLucrare + AND STERS = V_NESTERS; + + IF lnInregRulaje <> 0 then*/ + raise_application_error(-20001, + 'Aceasta comanda nu poate fi stearsa, deoarece are legaturi in rulaje!'); + ELSE + SELECT COUNT(*) AS SUMA + INTO lnOperatii + FROM DEV_OPER + WHERE ID_ORDL = tnIdOrdl + AND STERS = V_NESTERS; + + IF lnOperatii > 0 then + raise_application_error(-20001, + 'Aceasta comanda nu poate fi stearsa, deoarece are adaugate operatii!'); + ELSE + UPDATE DEV_ORDL + SET STERS = V_NESTERS + 1, + ID_UTILS = tnIdUtil, + DATAORAS = SYSDATE + WHERE ID_ORDL = tnIdOrdl; + + UPDATE NOM_LUCRARI + SET INACTIV = V_ACTIV + 1 + WHERE ID_LUCRARE = tnIdLucrare; + END IF; + END IF; + END; + ------------------------------------------------------------------ + procedure dev_adauga_oper_fact(tcSchema in varchar2, + tnIdOrdl in number, + tnIdSectie in number, + tnIdNorme in number, + tnTotalFTva in number, + tnTimpN in number, + tnOre in number, + tnIdUtil in number, + tnIdMecanic in number) is + V_ID_OPER number(10); + V_PRET number(17, 4); + V_DATAORA date; + V_VALIDAT number(1) := 1; + v_nou number(1) := 1; + begin + v_dataora := sysdate; + + UPDATE DEV_ORDL + SET VALIDAT = V_VALIDAT, + ID_UTIL_VALID = tnIdUtil, + DATAORAVALID = V_DATAORA + WHERE ID_ORDL = tnIdOrdl; + + V_PRET := tnTotalFTva / tnTimpN; + + INSERT /*+ APPEND */ + INTO DEV_OPER + (ID_ORDL, + ID_SECTIE, + TIMPN, + PRET, + ID_NORME, + ID_UTIL, + DATAORA, + VALIDAT, + NOU) + VALUES + (tnIdOrdl, + tnIdSectie, + tnTimpN, + V_PRET, + tnIdNorme, + tnIdUtil, + V_DATAORA, + V_VALIDAT, + V_NOU) + RETURNING ID_OPER INTO V_ID_OPER; + + INSERT /*+ APPEND */ + INTO DEV_OPER_MECANICI + (ID_OPER, ID_MECANIC, ORE) + VALUES + (V_ID_OPER, tnIdMecanic, tnOre); + + end; + + ------------------------------------------------------------------ + procedure dev_adauga_lucrare(v_gcs in varchar2, + tnan in number, + tnluna in number, + tnIdUtil in number, + pcNr in varchar2, + pnIdInsp in number, + pnIdAsig in number, + pcNrDosar in varchar2, + pnIdMC in number, + pnKmInt in number, + pdTermen in date, + pnTipCom in number, + pcSirIdOperatii in varchar2, + pnIdPartRef in number, + V_ID_ORDL out number) is + pcObservatii varchar2(1000); + pcDefectiuni varchar2(300); + pnOreFct number(10); + pnIdOrdl number(20); + begin + dev_adauga_lucrare(v_gcs, + tnan, + tnluna, + tnIdUtil, + pcNr, + pnIdInsp, + pnIdAsig, + pcNrDosar, + pnIdMC, + pnKmInt, + pnOreFct, + pdTermen, + pnTipCom, + pcSirIdOperatii, + pcObservatii, + pcDefectiuni, + pnIdPartRef, + pnIdOrdl); + V_ID_ORDL := pnIdOrdl; + end; + + procedure dev_adauga_lucrare(v_gcs in varchar2, + tnan in number, + tnluna in number, + tnIdUtil in number, + pcNr in varchar2, + pnIdInsp in number, + pnIdAsig in number, + pcNrDosar in varchar2, + pnIdMC in number, + pnKmInt in number, + pnOreFct in number default null, + pdTermen in date, + pnTipCom in number, + pcSirIdOperatii in varchar2, + pcObservatii in varchar2 default null, + pcDefectiuni in varchar2 default null, + pnIdPartRef in number, + pnIdOrdl in out number) is + V_SOLICITARI_CLIENT DEV_ORDL.SOLICITARI_CLIENT%TYPE; + V_SEPARATOR VARCHAR2(1) := ','; + V_NR_INREGISTRARI NUMBER(10); + begin + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM NOM_LUCRARI + WHERE STERS = 0 + AND NRORD = pcNr; + + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista o lucrare cu indicativul ' || pcNr || + '!. Daca doriti sa pastrati numele, atunci stergeti lucrarea existenta!'); + END IF; + + INSERT /*+ APPEND */ + INTO NOM_LUCRARI + (NRORD, ID_MOD) + VALUES + (pcNr, 1200); + + IF pcSirIdOperatii IS NOT NULL THEN + SELECT STRINGAGG(DENOP) + INTO V_SOLICITARI_CLIENT + FROM DEV_NOM_NORME + WHERE ID_NORME IN + (SELECT to_number(substr(pcSirIdOperatii || V_SEPARATOR, + decode(rownum, + 1, + 1, + instr(pcSirIdOperatii || + V_SEPARATOR, + V_SEPARATOR, + 1, + rownum - 1) + 1), + instr(pcSirIdOperatii || V_SEPARATOR, + V_SEPARATOR, + 1, + rownum) - + decode(rownum, + 1, + 0, + instr(pcSirIdOperatii || + V_SEPARATOR, + V_SEPARATOR, + 1, + rownum - 1)) - 1)) AS ID_NORME + FROM dual + connect by level <= + length(pcSirIdOperatii || V_SEPARATOR) - + length(REPLACE(pcSirIdOperatii || V_SEPARATOR, + V_SEPARATOR))); + + V_SOLICITARI_CLIENT := V_SOLICITARI_CLIENT; + ELSE + V_SOLICITARI_CLIENT := NULL; + END IF; + + INSERT /*+ APPEND */ + INTO DEV_ORDL + (AN, + LUNA, + ID_INSPECTOR, + ID_LUCRARE, + DATAI, + ID_UTIL_AD, + ID_MASINICLIENT, + ID_ASIGURATOR, + ID_TIP, + KMINT, + ORE_FUNCTIONARE, + TERMEN, + NR_DOSAR, + DATAORAAD, + SOLICITARI_CLIENT, + OBSERVATII, + DEFECTIUNI, + PROC_TVAV, + ID_PART_REF) + VALUES + (tnAn, + tnLuna, + pnIdInsp, + pack_sesiune.dev_idLucrare, + SYSDATE, + tnIdUtil, + pnIdMC, + pnIdAsig, + pnTipCom, + pnKmInt, + pnOreFct, + pdTermen, + pcNrDosar, + SYSDATE, + V_SOLICITARI_CLIENT, + pcObservatii, + pcDefectiuni, + pack_contafin.getCotaTVAStandard(tnLuna, tnAn), + decode(pnIdPartRef, 0, NULL, pnIdPartRef)) + RETURNING ID_ORDL INTO pnidOrdl; + + UPDATE DEV_MASINICLIENTI + SET KMINT = pnKmInt, ORE_FUNCTIONARE = pnOreFct + WHERE ID_MASINICLIENT = pnIdMC; + end; + ------------------------------------------------------------------ + procedure dev_valideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number, + tnAn in dev_ordl.an%type default null, + tnLuna in dev_ordl.luna%type default null) as + lnNevalidate NUMBER(3); + lnLunaDeschisa NUMBER(1); + ldData DATE; + lnLuna NUMBER(2); + lnAn NUMBER(4); + begin + SELECT COUNT(*) + INTO lnNevalidate + FROM DEV_OPER + WHERE STERS = 0 + AND VALIDAT = 0 + AND ID_ORDL = tnid_ordl; + + if lnNevalidate > 0 then + RAISE_APPLICATION_ERROR(-20000, + 'Mai sunt operatii nevalidate pe aceasta comanda!' || + CHR(13) || CHR(10) || + LPAD(CHR(32), 12, CHR(32)) || + 'Comanda nu a fost validata!'); + end if; + -- Validez in ziua curenta daca luna curenta este ultima luna sau ultima zi din luna precedenta + if tnAn is null or tnLuna is null then + ldData := SYSDATE; + else + if extract(year from sysdate) * 12 + extract(month from sysdate) = + tnAn * 12 + tnLuna then + ldData := SYSDATE; + else + ldData := ADD_MONTHS(TO_DATE(LPAD(tnAn, 4, '0') || + LPAD(tnLuna, 2, '0') || '01', + 'YYYYMMDD'), + 1) - 1; + end if; + end if; + + lnLuna := EXTRACT(MONTH FROM ldData); + lnAn := EXTRACT(YEAR FROM ldData); + + SELECT COUNT(*) + INTO lnLunaDeschisa + FROM CALENDAR + WHERE AN = lnAn + AND LUNA = lnLuna; + + IF lnLunaDeschisa = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu puteti valida comanda deoarece nu este deschisa luna ' || + lnLuna || '/' || lnAn || ' !'); + END IF; + + UPDATE DEV_ORDL + SET VALIDAT = 1, + ID_UTIL_VALID = tnid_util, + DATAORAVALID = ldData, + PROC_TVAV = pack_contafin.getCotaTVAStandard(lnLuna, lnAn) + WHERE ID_ORDL = tnid_ordl; + end; + ------------------------------------------------------------------ + procedure dev_invalideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_utils in number) AS + begin + UPDATE DEV_ORDL + SET VALIDAT = 0, + ID_UTIL_VALID = 0, + DATAORAVALID = NULL, + ID_UTILS = tnid_utils, + DATAORAS = SYSDATE, + PROC_TVAV = pack_contafin.getCotaTVAStandard(LUNA, AN) + WHERE ID_ORDL = tnid_ordl; + end; + ------------------------------------------------------------------ + procedure actualizeaza_deviz(tnProcTvav IN NUMBER, + tcSirIdOrdl IN VARCHAR2, + tnIdSet IN NUMBER) is + lcSeparator VARCHAR2(1) := ','; + lnIdFact DOCUMENTE.ID_DOC%TYPE; + begin + -- nu iau pack_contafin.get_idfact pentru ca s-ar putea sa am id_fact de la incasare, nu de la factura + SELECT MAX(ID_FACT) + INTO lnIdFact + FROM ACT + WHERE COD = pack_contafin.get_cod() + AND SCD NOT LIKE '5%'; + + UPDATE DEV_ORDL + SET PROC_TVAV = tnProcTvav + WHERE ID_ORDL IN + (SELECT X as ID_ORDL + FROM table(charn2collection(tcSirIdOrdl, lcSeparator))); + + UPDATE /*+ INDEX(RUL IDX_RUL_001) */ RUL + SET ID_FACT = lnIdFact + WHERE ID_SET <> 229 + AND ID_LUCRARE IN + (SELECT ID_LUCRARE + FROM DEV_ORDL + WHERE ID_ORDL IN + (SELECT X as ID_ORDL + FROM table(charn2collection(tcSirIdOrdl, lcSeparator)))); + + -- pentru id_set 31006, 31007 nu verific daca se inchid la validare pentru ca procedura de inchidere + -- se apeleaza doar daca nu se inchid la validare + IF tnIdSet IN (31003, 31004, 31005, 31006, 31007, 31011) THEN + UPDATE NOM_LUCRARI + SET ID_FACT = lnIdFact + WHERE ID_LUCRARE IN + (SELECT ID_LUCRARE + FROM DEV_ORDL + WHERE ID_ORDL IN + (SELECT X as ID_ORDL + FROM table(charn2collection(tcSirIdOrdl, lcSeparator)))); + END IF; + end actualizeaza_deviz; + ------------------------------------------------------------------ + procedure dev_distribuie_timp_n(V_LUNA IN NUMBER, V_AN IN NUMBER) AS + begin + MERGE INTO DEV_OPER_MECANICI A + USING (SELECT A.ID_OPER, + A.TIMPN, + ROUND(SUM(NVL(B.ORE, -1.000)), 3) AS TOTAL, + COUNT(DISTINCT B.ID_MECANIC) AS NR_MECANICI + FROM DEV_OPER A + LEFT JOIN DEV_OPER_MECANICI B + ON A.ID_OPER = B.ID_OPER + AND B.STERS = 0 + WHERE A.STERS = 0 + AND A.ID_ORDL IN + (SELECT ID_ORDL + FROM AUTO_NORMARE_COMENZI + WHERE TRUNC(DATAI) BETWEEN + TO_DATE(V_LUNA || '/' || V_AN, 'MM/YYYY') AND + LAST_DAY(TO_DATE(V_LUNA || '/' || V_AN, 'MM/YYYY')) + OR (TRUNC(DATAI) < + TO_DATE(V_LUNA || '/' || V_AN, 'MM/YYYY') AND + ((INCH_VALIDARE = 0 AND + (FACTURAT = 0 OR + (FACTURAT = 1 AND + DATAFACT BETWEEN + TO_DATE(V_LUNA || '/' || V_AN, 'MM/YYYY') AND + LAST_DAY(TO_DATE(V_LUNA || '/' || V_AN, + 'MM/YYYY'))))) OR + (INCH_VALIDARE = 1 AND + (VALIDAT = 0 OR + (VALIDAT = 1 AND + DATAORAVALID BETWEEN + TO_DATE(V_LUNA || '/' || V_AN || ' 00:00:00', + 'MM/YYYY HH24:MI:SS') AND + LAST_DAY(TO_DATE(V_LUNA || '/' || V_AN || + ' 23:59:59', + 'MM/YYYY HH24:MI:SS')))))))) + GROUP BY A.ID_OPER, A.TIMPN + HAVING A.TIMPN - ROUND(SUM(NVL(B.ORE, -1.000)), 3) <> 0) B + ON (A.ID_OPER = B.ID_OPER AND A.STERS = 0) + WHEN MATCHED THEN + UPDATE SET ORE = B.TIMPN / B.NR_MECANICI + WHEN NOT MATCHED THEN + INSERT (ID_OPER, ID_MECANIC, ORE) VALUES (B.ID_OPER, 1, B.TIMPN); + + end; + ------------------------------------------------------------------ + procedure dev_adauga_operatie(v_gcs in varchar2, + tnid_sectie in number, + tnid_ordl in number, + tnpret in number, + tnid_util in number, + tntimpn in number, + tnid_norme in number, + tcsir_idmecanic in varchar2, + tnAn in number default null, + tnLuna in number default null) AS + v_id_oper number(10); + v_lungime_sir number(3); + v_ore number(7, 3); + -- v_timp_ramas number(7, 3); + v_nou number(1); + v_validat dev_ordl.validat%type; + ldData date; + begin + + -- Adaug operatii in ziua curenta daca luna curenta este ultima luna sau ultima zi din luna precedenta + -- Astfel se pot adauga operatii intr-o luna anterioara, chiar daca am trecut in alta luna + if tnAn is null or tnLuna is null then + ldData := SYSDATE; + else + if extract(year from sysdate) * 12 + extract(month from sysdate) = + tnAn * 12 + tnLuna then + ldData := SYSDATE; + else + ldData := ADD_MONTHS(TO_DATE(LPAD(tnAn, 4, '0') || + LPAD(tnLuna, 2, '0') || '01', + 'YYYYMMDD'), + 1) - 1; + end if; + end if; + + SELECT VALIDAT INTO v_validat FROM DEV_ORDL WHERE ID_ORDL = tnid_ordl; + + IF V_VALIDAT = 1 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Comanda a fost validata si nu se mai pot face modificari asupra ei!' || + CHR(13) || CHR(10) || + 'Daca nu o vedeti ca fiind validata, atunci iesiti din fereastra de normare si reintrati!'); + END IF; + + v_nou := 1; + INSERT INTO DEV_OPER + (ID_ORDL, ID_SECTIE, TIMPN, PRET, ID_NORME, ID_UTILI, NOU, DATAI, DATAORA) + VALUES + (tnid_ordl, + tnid_sectie, + tntimpn, + tnpret, + tnid_norme, + tnid_util, + v_nou, + ldData, + ldData) + RETURNING ID_OPER INTO v_id_oper; + + v_lungime_sir := SIR_IN_SIR(tcsir_idmecanic, ';'); + v_ore := round(tntimpn / v_lungime_sir, 3); + + if v_lungime_sir > 0 then + for i in 1 .. v_lungime_sir loop + INSERT INTO DEV_OPER_MECANICI + (ID_OPER, ID_MECANIC, ORE) + VALUES + (v_id_oper, ID_DIN_SIR(tcsir_idmecanic, ';', i), v_ore); + end loop; + end if; + + end; + ------------------------------------------------------------------ + procedure dev_actualizeaza_operatie(v_gcs in varchar2, + v_camp in varchar2, + v_valoare_noua in number, + v_id_oper in number, + v_luna in number, + v_an in number) as + v_datai date; + v_data_ron date; + v_data_util date; + v_valoare number; + v_validat DEV_OPER.VALIDAT%TYPE; + begin + SELECT TRUNC(DATAI), VALIDAT + INTO v_datai, v_validat + FROM DEV_OPER + WHERE ID_OPER = v_id_oper; + + IF V_VALIDAT = 1 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Operatia a fost validata si nu se pot face modificari asupra ei!' || + CHR(13) || CHR(10) || + 'Daca nu o vedeti ca fiind validata, atunci iesiti din fereastra de normare si reintrati!'); + ELSE + v_data_ron := to_date(pack_sesiune.get_lunaron || '/' || + pack_sesiune.get_anron, + 'MM/YYYY'); + v_data_util := to_date(v_luna || '/' || v_an, 'MM/YYYY'); + + if UPPER(TRIM(v_camp)) = 'PRET' and v_datai < v_data_ron and + v_data_util >= v_data_ron then + v_valoare := v_valoare_noua * 10000; + else + v_valoare := v_valoare_noua; + end if; + + IF UPPER(TRIM(v_camp)) = 'PRET' THEN + UPDATE DEV_OPER SET PRET = V_VALOARE WHERE ID_OPER = V_ID_OPER; + ELSE + UPDATE DEV_OPER SET TIMPN = V_VALOARE WHERE ID_OPER = V_ID_OPER; + END IF; + END IF; + end dev_actualizeaza_operatie; + ------------------------------------------------------------------ + procedure dev_valideaza_operatii(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number) as + v_validat DEV_ORDL.ID_ORDL%TYPE; + ldData dev_ordl.dataoravalid%type := SYSDATE; + begin + + SELECT VALIDAT INTO v_validat FROM DEV_ORDL WHERE ID_ORDL = tnid_ordl; + + IF V_VALIDAT = 1 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Comanda a fost validata si nu se mai pot face modificari asupra ei!' || + CHR(13) || CHR(10) || + 'Daca nu o vedeti ca fiind validata, atunci iesiti din fereastra de normare si reintrati!'); + END IF; + + UPDATE DEV_OPER + SET VALIDAT = 1, ID_UTIL = tnid_util, DATAORA = ldData + WHERE ID_ORDL = tnid_ordl + AND STERS = 0 + AND VALIDAT = 0; + end; + ------------------------------------------------------------------ + /*procedure dev_completeaza_rul(v_gcs in varchar2, tnid_lucrare in number) AS + begin + UPDATE RUL + SET ID_FACT = pack_contafin.get_idFact() + WHERE ID_LUCRARE = tnId_lucrare + and id_set <> 229; + end;*/ + ------------------------------------------------------------------ + /*procedure dev_completeaza_rul(v_gcs in varchar2, + tcSirId_lucrare in varchar2, + tcSeparator in varchar2) AS + lcSirId_lucrare VARCHAR2(3000); + begin + IF substr(tcSirId_lucrare, length(tcSirId_lucrare), 1) <> tcSeparator THEN + lcSirId_lucrare := tcSirId_lucrare || tcSeparator; + ELSE + lcSirId_lucrare := tcSirId_lucrare; + END IF; + + UPDATE RUL + SET ID_FACT = pack_contafin.get_idFact() + WHERE ID_LUCRARE IN + (SELECT to_number(substr(lcSirId_lucrare, + decode(rownum, + 1, + 1, + instr(lcSirId_lucrare, + tcSeparator, + 1, + rownum - 1) + 1), + instr(lcSirId_lucrare, + tcSeparator, + 1, + rownum) - + decode(rownum, + 1, + 0, + instr(lcSirId_lucrare, + tcSeparator, + 1, + rownum - 1)) - 1)) AS ID_LUCRARE + FROM dual + connect by level <= + length(lcSirId_lucrare) - + length(REPLACE(lcSirId_lucrare, tcSeparator))); + end;*/ + ------------------------------------------------------------------ + procedure valideaza_operatie(V_SCHEMA IN VARCHAR2, + V_VALIDAT IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_DATAORA DATE; + v_validat_com dev_ordl.validat%TYPE; + begin + SELECT VALIDAT + INTO v_validat_com + FROM DEV_ORDL + WHERE ID_ORDL IN + (SELECT ID_ORDL FROM DEV_OPER WHERE ID_OPER = V_ID_OPER); + + IF V_VALIDAT_COM = 1 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Comanda a fost validata si nu se mai pot face modificari asupra ei!' || + CHR(13) || CHR(10) || + 'Daca nu o vedeti ca fiind validata, atunci iesiti din fereastra de normare si reintrati!'); + END IF; + + UPDATE DEV_OPER + SET VALIDAT = V_VALIDAT, + DATAORA = DECODE(V_VALIDAT, 1, SYSDATE, NULL), + ID_UTIL = V_ID_UTIL + WHERE ID_OPER = V_ID_OPER; + + end; + ------------------------------------------------------------------ + procedure modifica_sectie(V_SCHEMA IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE DEV_OPER SET ID_SECTIE = V_ID_SECTIE WHERE ID_OPER = V_ID_OPER; + end; + ------------------------------------------------------------------ + procedure modifica_tip_comanda(V_SCHEMA IN VARCHAR2, + V_ID_TIP IN NUMBER, + V_ID_ORDL IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE DEV_ORDL SET ID_TIP = V_ID_TIP WHERE ID_ORDL = V_ID_ORDL; + end; + + ------------------------------------------------------------------ + procedure modifica_date_comanda(V_ID_ORDL IN NUMBER, + V_ID_TIP IN NUMBER, + V_KMINT IN NUMBER, + V_ORE_FUNCTIONARE IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE DEV_ORDL + SET ID_TIP = V_ID_TIP, KMINT = V_KMINT, ORE_FUNCTIONARE = V_ORE_FUNCTIONARE + WHERE ID_ORDL = V_ID_ORDL; + + UPDATE DEV_MASINICLIENTI + SET KMINT = GREATEST(KMINT, V_KMINT), ORE_FUNCTIONARE = GREATEST(ORE_FUNCTIONARE, V_ORE_FUNCTIONARE) + WHERE ID_MASINICLIENT = + (select ID_MASINICLIENT from dev_ordl where ID_ORDL = V_ID_ORDL); + end; + + ------------------------------------------------------------------ + procedure sterge_operatie(V_SCHEMA IN VARCHAR2, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER) is + v_validat DEV_ORDL.VALIDAT%TYPE; + begin + SELECT VALIDAT + INTO v_validat + FROM DEV_ORDL + WHERE ID_ORDL IN + (SELECT ID_ORDL FROM DEV_OPER WHERE ID_OPER = V_ID_OPER); + + IF V_VALIDAT = 1 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Comanda a fost validata si nu se mai pot face modificari asupra ei!' || + CHR(13) || CHR(10) || + 'Daca nu o vedeti ca fiind validata, atunci iesiti din fereastra de normare si reintrati!'); + END IF; + + UPDATE DEV_OPER + SET STERS = 1, DATAORAS = SYSDATE, ID_UTILS = V_ID_UTIL + WHERE ID_OPER = V_ID_OPER; + end; + ------------------------------------------------------------------ + procedure modifica_client_comanda(V_SCHEMA IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_ID_MASINICLIENT IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE DEV_ORDL + SET ID_MASINICLIENT = V_ID_MASINICLIENT + WHERE ID_ORDL = V_ID_ORDL; + end; + ------------------------------------------------------------------ + -- Adaugari / modificari / stergeri nomenclatoare + ------------------------------------------------------------------ + procedure adauga_manopera_de(V_ID_LUCRARE IN NUMBER, + V_ID_NORME IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_COTA_TVA IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + INSERT INTO dev_estimari_rep + (ID_LUCRARE, + ID_NORME, + CANTITATE, + PRET, + PRET_CU_TVA, + COTA_TVA, + ID_UTIL) + VALUES + (V_ID_LUCRARE, + V_ID_NORME, + V_CANTITATE, + V_PRET, + V_PRET_CU_TVA, + V_COTA_TVA, + V_ID_UTIL); + end adauga_manopera_de; + ------------------------------------------------------------------ + procedure adauga_material_de(V_ID_LUCRARE IN NUMBER, + V_ID_ARTICOL IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_COTA_TVA IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + INSERT INTO dev_estimari_rep + (ID_LUCRARE, + ID_ARTICOL, + CANTITATE, + PRET, + PRET_CU_TVA, + COTA_TVA, + ID_UTIL) + VALUES + (V_ID_LUCRARE, + V_ID_ARTICOL, + V_CANTITATE, + V_PRET, + V_PRET_CU_TVA, + V_COTA_TVA, + V_ID_UTIL); + end adauga_material_de; + ------------------------------------------------------------------ + procedure modifica_pret_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_PRET IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE dev_estimari_rep + SET PRET = V_PRET, PRET_CU_TVA = V_PRET_CU_TVA + WHERE ID_DEV_ESTIMARE_REP = V_ID_DEV_ESTIMARE_REP; + end modifica_pret_de; + ------------------------------------------------------------------ + procedure modifica_cota_tva_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_COTA_TVA IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE dev_estimari_rep + SET COTA_TVA = V_COTA_TVA + WHERE ID_DEV_ESTIMARE_REP = V_ID_DEV_ESTIMARE_REP; + end modifica_cota_tva_de; + ------------------------------------------------------------------ + procedure modifica_cantitate_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_CANTITATE IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE dev_estimari_rep + SET CANTITATE = V_CANTITATE + WHERE ID_DEV_ESTIMARE_REP = V_ID_DEV_ESTIMARE_REP; + end modifica_cantitate_de; + ------------------------------------------------------------------ + procedure sterge_articol_de(V_ID_DEV_ESTIMARE_REP IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE dev_estimari_rep + SET STERS = 1, ID_UTILS = V_ID_UTIL, DATAORAS = SYSDATE + WHERE ID_DEV_ESTIMARE_REP = V_ID_DEV_ESTIMARE_REP; + end sterge_articol_de; + ------------------------------------------------------------------ + procedure adauga_pret(V_ID_MARCA IN NUMBER, + V_ID_ASIGURATOR IN NUMBER, + V_PRET IN NUMBER, + V_PRET_VAL IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_INACTIV IN NUMBER) is + begin + INSERT INTO dev_nom_preturi + (id_marca, id_asigurator, Pret, Pret_val, Curs, Id_valuta, inactiv) + VALUES + (V_ID_MARCA, + V_ID_ASIGURATOR, + V_PRET, + V_PRET_VAL, + V_CURS, + V_ID_VALUTA, + V_INACTIV); + end adauga_pret; + ------------------------------------------------------------------ + procedure modifica_pret(V_ID_PRET IN NUMBER, + V_ID_MARCA IN NUMBER, + V_ID_ASIGURATOR IN NUMBER, + V_PRET IN NUMBER, + V_PRET_VAL IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_INACTIV IN NUMBER) is + begin + UPDATE DEV_NOM_PRETURI + SET ID_MARCA = V_ID_MARCA, + ID_ASIGURATOR = V_ID_ASIGURATOR, + PRET = V_PRET, + PRET_VAL = V_PRET_VAL, + CURS = V_CURS, + ID_VALUTA = V_ID_VALUTA, + INACTIV = V_INACTIV + WHERE ID_PRET = V_ID_PRET; + end modifica_pret; + ------------------------------------------------------------------ + procedure sterge_pret(V_ID_PRET IN NUMBER, V_ID_UTILS IN NUMBER) is + begin + UPDATE DEV_NOM_PRETURI SET STERS = 1 WHERE ID_PRET = V_ID_PRET; + end sterge_pret; + ------------------------------------------------------------------ + procedure adauga_ansamblu(V_SCHEMA IN VARCHAR2, + V_DENUMIRE IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_TOTAL NUMBER(5); + begin + SELECT COUNT(*) + INTO V_TOTAL + FROM DEV_NOM_ANSAMBLE + WHERE DENUMIRE = V_DENUMIRE + AND STERS = 0; + + IF V_TOTAL = 0 THEN + INSERT INTO DEV_NOM_ANSAMBLE + (DENUMIRE, INACTIV) + VALUES + (V_DENUMIRE, V_INACTIV); + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista un ansamblu cu aceasta denumire!'); + END IF; + end; + ------------------------------------------------------------------ + procedure modifica_ansamblu(V_SCHEMA IN VARCHAR2, + V_ID_ANSAMBLU IN NUMBER, + V_DENUMIRE IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_TOTAL NUMBER(5); + begin + SELECT COUNT(*) + INTO V_TOTAL + FROM DEV_NOM_ANSAMBLE + WHERE DENUMIRE = V_DENUMIRE + AND STERS = 0 + AND ID_ANSAMBLU <> V_ID_ANSAMBLU; + + IF V_TOTAL = 0 THEN + UPDATE DEV_NOM_ANSAMBLE + SET DENUMIRE = V_DENUMIRE, INACTIV = V_INACTIV + WHERE ID_ANSAMBLU = V_ID_ANSAMBLU; + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Mai exista un ansamblu cu aceasta denumire!'); + END IF; + end; + ------------------------------------------------------------------ + procedure sterge_ansamblu(V_SCHEMA IN VARCHAR2, + V_ID_ANSAMBLU IN NUMBER, + V_ID_UTIL IN NUMBER) is + V_TOTAL NUMBER(10); + begin + SELECT COUNT(*) + INTO V_TOTAL + FROM DEV_NOM_NORME + WHERE ID_ANSAMBLU = V_ID_ANSAMBLU + AND STERS = 0; + + IF V_TOTAL = 0 THEN + UPDATE DEV_NOM_ANSAMBLE + SET STERS = 1 + WHERE ID_ANSAMBLU = V_ID_ANSAMBLU; + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Acest ansamblu este folosit la norme si nu poate fi sters!'); + END IF; + end; + ------------------------------------------------------------------ + procedure adauga_norma(V_ID_MASINA IN NUMBER, + V_ID_ANSAMBLU IN NUMBER, + V_DENOP IN VARCHAR2, + V_CODOP IN VARCHAR2, + V_TIMPN IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + INSERT INTO DEV_NOM_NORME + (ID_MASINA, ID_ANSAMBLU, DENOP, CODOP, TIMPN, INACTIV) + VALUES + (V_ID_MASINA, V_ID_ANSAMBLU, V_DENOP, V_CODOP, V_TIMPN, V_INACTIV); + end adauga_norma; + ------------------------------------------------------------------ + procedure modifica_norma(V_ID_NORME IN NUMBER, + V_ID_MASINA IN NUMBER, + V_ID_ANSAMBLU IN NUMBER, + V_DENOP IN VARCHAR2, + V_CODOP IN VARCHAR2, + V_TIMPN IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + UPDATE dev_nom_norme + SET id_masina = V_ID_MASINA, + id_ansamblu = V_ID_ANSAMBLU, + Denop = V_DENOP, + Codop = V_CODOP, + timpn = V_TIMPN, + inactiv = V_INACTIV + where id_norme = V_ID_NORME; + end modifica_norma; + ------------------------------------------------------------------ + procedure sterge_norma(V_ID_NORME IN NUMBER, V_ID_UTIL IN NUMBER) is + begin + nomdelproc('DEV_NOM_NORME', + 'ID_NORME', + V_ID_NORME, + 'DEV_OPER', + 'ID_NORME'); + end sterge_norma; + ------------------------------------------------------------------ + PROCEDURE adauga_mecanic(V_SCHEMA IN VARCHAR2, + V_ID_PART IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER) IS + V_NR_INREGISTRARI NUMBER(10); + BEGIN + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM DEV_MECANICI + WHERE ID_PART = V_ID_PART + AND STERS = 0; + + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Acest mecanic este deja inregistrat!'); + END IF; + + INSERT INTO /*+ APPEND */ + DEV_MECANICI + (ID_PART, ID_SECTIE, INACTIV) + VALUES + (V_ID_PART, V_ID_SECTIE, V_INACTIV); + END adauga_mecanic; + ------------------------------------------------------------------ + PROCEDURE modifica_mecanic(V_SCHEMA IN VARCHAR2, + V_ID_MECANIC IN NUMBER, + V_ID_PART IN NUMBER, + V_ID_SECTIE IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + UPDATE DEV_MECANICI + SET ID_SECTIE = V_ID_SECTIE, INACTIV = V_INACTIV + WHERE ID_MECANIC = V_ID_MECANIC; + END modifica_mecanic; + ------------------------------------------------------------------ + PROCEDURE sterge_mecanic(V_SCHEMA IN VARCHAR2, + V_ID_MECANIC IN NUMBER, + V_ID_UTIL IN NUMBER) IS + BEGIN + nomdelproc(V_SCHEMA || '.DEV_MECANICI', + 'ID_MECANIC', + V_ID_MECANIC, + V_SCHEMA || '.DEV_OPER_MECANICI', + 'ID_MECANIC'); + END sterge_mecanic; + ------------------------------------------------------------------ + PROCEDURE adauga_asigurator(V_ID_PART IN NUMBER, V_ID_UTIL IN NUMBER) is + V_NR_INREGISTRARI NUMBER(10); + BEGIN + SELECT COUNT(*) + INTO V_NR_INREGISTRARI + FROM DEV_NOM_ASIGURATORI + WHERE STERS = 0 + AND ID_PART = V_ID_PART; + IF V_NR_INREGISTRARI > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Acest asigurator mai exista deja in baza de date!'); + ELSE + INSERT INTO DEV_NOM_ASIGURATORI (ID_PART) VALUES (V_ID_PART); + END IF; + END adauga_asigurator; + ------------------------------------------------------------------ + PROCEDURE modifica_asigurator(V_ID_ASIGURATOR IN NUMBER, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER) is + BEGIN + UPDATE DEV_NOM_ASIGURATORI + SET INACTIV = V_INACTIV + WHERE ID_ASIGURATOR = V_ID_ASIGURATOR; + END modifica_asigurator; + ------------------------------------------------------------------ + PROCEDURE set_perioada_raport(V_LUNA_I IN NUMBER, + V_AN_I IN NUMBER, + V_LUNA_F IN NUMBER, + V_AN_F IN NUMBER) IS + BEGIN + pack_auto.v_data_i := TO_DATE(LPAD(V_LUNA_I, 2, '0') || V_AN_I || + ' 00:00:00', + 'MMYYYY HH24:mi:ss'); + pack_auto.v_data_f := LAST_DAY(TO_DATE(LPAD(V_LUNA_F, 2, '0') || V_AN_F || + ' 23:59:00', + 'MMYYYY HH24:mi:ss')); + END set_perioada_raport; + ------------------------------------------------------------------ + FUNCTION get_datai RETURN DATE IS + BEGIN + RETURN pack_auto.v_data_i; + END get_datai; + ------------------------------------------------------------------ + FUNCTION get_dataf RETURN DATE IS + BEGIN + RETURN pack_auto.v_data_f; + END get_dataf; + ------------------------------------------------------------------ + FUNCTION getOptiuneInchidere(V_TIP IN NUMBER) RETURN NUMBER IS + V_INCH_VALIDARE DEV_TIP_DEVIZ.INCH_VALIDARE%TYPE; + BEGIN + BEGIN + SELECT INCH_VALIDARE + INTO V_INCH_VALIDARE + FROM DEV_TIP_DEVIZ + WHERE ID_TIP = V_TIP; + EXCEPTION + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, 'Optiune invalida!'); + END; + + RETURN V_INCH_VALIDARE; + END; + ------------------------------------------------------------------ + procedure setOptiuneInchidere(V_TIP IN NUMBER, + V_INCHIDERE_VALIDARE IN NUMBER) is + BEGIN + UPDATE DEV_TIP_DEVIZ + SET INCH_VALIDARE = V_INCHIDERE_VALIDARE + WHERE ID_TIP = V_TIP; + + END; + + ------------------------------------------------------------------ + PROCEDURE citeste_date_avans(V_SIR_ID_LUCRARE IN VARCHAR2, + V_DELIMITATOR IN VARCHAR2, + V_CURSOR OUT pack_types.tip_cursor) IS + V_AN NUMBER(4); + V_LUNA NUMBER(2); + V_AN_RON NUMBER(4); + V_LUNA_RON NUMBER(2); + BEGIN + V_AN := pack_sesiune.getan(); + V_LUNA := pack_sesiune.getluna(); + V_AN_RON := pack_Sesiune.get_ANRON(); + V_LUNA_RON := pack_sesiune.get_lunaron(); + OPEN V_CURSOR FOR + select a.id_lucrare, + (case + when a.luna + a.an * 12 < V_LUNA_RON + V_AN_RON * 12 and + V_AN * 12 + V_LUNA >= V_AN_RON * 12 + V_LUNA_RON then + a.suma / 10000 + else + a.suma + end) as avans, + (case + when a.scc = '4427' then + 0 + when a.luna + a.an * 12 < V_LUNA_RON + V_AN_RON * 12 and + V_AN * 12 + V_LUNA >= V_AN_RON * 12 + V_LUNA_RON then + a.suma / 10000 + else + a.suma + end) as avansftva, + (case + when row_number() over(partition by a.id_lucrare, + a.id_fact order by a.id_fact) = 1 then + (select sum(case + when luna + an * 12 < V_LUNA_RON + V_AN_RON * 12 and + V_AN * 12 + V_LUNA >= + V_AN_RON * 12 + V_LUNA_RON then + suma / 10000 + else + suma + end) + from act + where id_lucrare = a.id_lucrare + and id_factc = a.id_fact + and scd like '5%' + and sters = 0) + else + 0 + end) as incasat, + a.scd, + a.ascd, + a.scc, + a.ascc, + a.id_partc, + a.id_partd, + a.id_sectie, + b.nume as partc, + c.nume as partd, + d.sectie, + a.id_jtva_coloana, + a.proc_tva, + a.taxcode, + e.nrord + from (select * + from act + where sters = 0 + and id_set in (31001, 31002, 31012, 31013) + and scd = '4111' + and id_lucrare in + (SELECT * + FROM TABLE(charn2collection(V_SIR_ID_LUCRARE, + V_DELIMITATOR)))) a + left join nom_parteneri b + on a.id_partc = b.id_part + left join nom_parteneri c + on a.id_partd = c.id_part + left join nom_sectii d + on a.id_sectie = d.id_sectie + left join vnom_lucrari e + on a.id_lucrare = e.id_lucrare; + + end citeste_date_avans; + ------------------------------------------------------------------ + PROCEDURE citeste_sume_stornare(V_SIR_ID_LUCRARE IN VARCHAR2, + V_DELIMITATOR IN VARCHAR2, + V_CURSOR OUT pack_types.tip_cursor) IS + BEGIN + OPEN V_CURSOR FOR + select sum((-1) * pret) as pret, + pret_cu_tva, + proc_tvav, + id_jtva_coloana, + taxcode + from vanzari_detalii + where id_vanzare in + (select id_vanzare + from vanzari + where tip = -12 + and sters = 0 + and id_lucrare in + (SELECT * + FROM TABLE(charn2collection(V_SIR_ID_LUCRARE, + V_DELIMITATOR)))) + and sters = 0 + and id_articol in (-100005, -100006) + group by pret_cu_tva, proc_tvav, id_jtva_coloana, taxcode; + END citeste_sume_stornare; + + ------------------------------------------------------------------ + -- citeste procentele de discount pe contractul tip CLIENT AUTO + -- pentru completarea procentelor de discount la facturare + ------------------------------------------------------------------ + PROCEDURE citeste_discount_contract(V_ID_PART IN CONTRACTE.ID_PART%TYPE, + V_ID_SUCURSALA IN CONTRACTE.ID_SUCURSALA%TYPE, + V_ID_CTR OUT CONTRACTE.ID_CTR%TYPE, + V_DISCOUNT_MANOPERA OUT CTR_ARTICOLE.COEF_DISCOUNT%TYPE, + V_DISCOUNT_MATERIALE OUT CTR_ARTICOLE.COEF_DISCOUNT%TYPE) IS + BEGIN + SELECT min(ctr.id_ctr) + into V_ID_CTR + FROM contracte ctr + where ctr.id_tip_ctr = nIdTipContractAuto + and ctr.id_part = V_ID_PART + and nvl2(V_ID_SUCURSALA, ctr.id_sucursala, -1) = + nvl(V_ID_SUCURSALA, -1); + + select max(decode(ca.id_articol, + nIdArticolManopera, + ca.coef_discount, + cast(0 as number(10, 4)))) as discount_manopera, + max(decode(ca.id_articol, + nIdArticolMateriale, + ca.coef_discount, + cast(0 as number(10, 4)))) as discount_materiale + into V_DISCOUNT_MANOPERA, V_DISCOUNT_MATERIALE + from ctr_articole ca + where ca.id_ctr = V_ID_CTR; + + END citeste_discount_contract; + + ------------------------------------------------------------------ + -- salveaza procentele de discount pe contractul tip CLIENT AUTO + -- adauga contract/articole daca nu exista + ------------------------------------------------------------------ + PROCEDURE salveaza_discount_contract(V_ID_PART IN CONTRACTE.ID_PART%TYPE, + V_ID_SUCURSALA IN CONTRACTE.ID_SUCURSALA%TYPE, + V_ID_CTR IN CONTRACTE.ID_CTR%TYPE, + V_DISCOUNT_MANOPERA IN CTR_ARTICOLE.COEF_DISCOUNT%TYPE, + V_DISCOUNT_MATERIALE IN CTR_ARTICOLE.COEF_DISCOUNT%TYPE) IS + lnIdCtr contracte.id_ctr%type := V_ID_CTR; + lcNumar contracte.numar%type := '1'; + lnIdSucursala contracte.id_sucursala%type := V_ID_SUCURSALA; + lnIdTipContractAuto contracte.id_tip_ctr%type := nIdTipContractAuto; + + lnPret_cu_tva ctr_articole.pret_cu_tva%type := 0; + lnPret_unitar ctr_articole.pret_unitar%type := 0; + lnCant ctr_articole.cant%type := 0; + lnCoef_Discount ctr_articole.coef_discount%type := 0; + lnVal_discount ctr_articole.val_discount%type := 0; + lnId_valuta ctr_articole.id_valuta%type; + lcUm ctr_articole.um%type; + lcExplicatie ctr_articole.explicatie%type := 'CONTRACT SERVICE AUTO CU DISCOUNT, ADAUGAT AUTOMAT'; + lnParametru_prog number(1) := 1; -- CONTRACTE CLIENTI + lnArticole number(1) := 0; + ldDataCtr contracte.data%type := TRUNC(SYSDATE); + lnIdUtil contracte.id_util%type := -3; + + lnIdPolServiceAuto crm_politici_preturi.id_pol%type; + lnIdPolArtMan crm_politici_pret_art.id_pol_art%type; + lnIdPolArtMat crm_politici_pret_art.id_pol_art%type; + + BEGIN + lnId_valuta := pack_def.GetIdMonedaNationala(); + + -- aflu politica de preturi SERVICE AUTO + begin + select pp.id_pol + into lnIdPolServiceAuto + from crm_politici_preturi pp + where pp.nume_lista_preturi = 'SERVICE AUTO' + and pp.sters = 0; + + -- aflu articolele MATERIALE, MANOPERA din politica SERVICE AUTO + select ppa.id_pol_art + into lnIdPolArtMan + from crm_politici_pret_art ppa + where ppa.id_pol = lnIdPolServiceAuto + and ppa.id_articol = nIdArticolManopera; + + select ppa.id_pol_art + into lnIdPolArtMat + from crm_politici_pret_art ppa + where ppa.id_pol = lnIdPolServiceAuto + and ppa.id_articol = nIdArticolMateriale; + exception + when NO_DATA_FOUND then + raise_application_error(-20000, + 'Nu sunt definite articolele Materiale si Manopera in politica de preturi SERVICE AUTO!'); + when OTHERS then + raise; + end; + + -- adaugare contract SERVICE AUTO + IF lnIdCtr IS NULL THEN + pack_crm.adauga_contract(lnIdTipContractAuto, + lnIdSucursala, + lnIdCtr, + lcNumar); + IF lnIdCtr IS NULL THEN + raise_application_error(-20000, + 'Nu s-a putut salva contractul tip SERVICE AUTO!'); + ELSE + update contracte + set id_part = V_ID_PART, + data = ldDataCtr, + numar = lcNumar, + id_valuta = lnId_valuta, + data_inceput = ldDataCtr, + numar_intern = lcNumar, + id_util = lnIdUtil, + dataora = SYSDATE + where id_ctr = lnIdCtr; + END IF; + END IF; + + -- adaugare articol Manopera in ctr_articole + select count(*) as nr + into lnArticole + from ctr_articole ca + where id_ctr = lnIdCtr + and id_pol_art = lnIdPolArtMan; + + if lnArticole = 0 then + lnCoef_Discount := V_DISCOUNT_MANOPERA; + pack_crm.adauga_ctr_art(lnIdCtr, + lnIdPolArtMan, + nIdArticolManopera, + lnPret_cu_tva, + lnPret_unitar, + lnCant, + lnCoef_Discount, + lnVal_discount, + lnId_valuta, + lcUm, + lcExplicatie); + end if; + + -- adaugare articol Materiale in ctr_articole + select count(*) as nr + into lnArticole + from ctr_articole ca + where id_ctr = lnIdCtr + and id_pol_art = lnIdPolArtMat; + + if lnArticole = 0 then + lnCoef_Discount := V_DISCOUNT_MATERIALE; + pack_crm.adauga_ctr_art(lnIdCtr, + lnIdPolArtMat, + nIdArticolMateriale, + lnPret_cu_tva, + lnPret_unitar, + lnCant, + lnCoef_Discount, + lnVal_discount, + lnId_valuta, + lcUm, + lcExplicatie); + end if; + + -- actualizare discount articol Manopera in ctr_articole + begin + lnCoef_Discount := V_DISCOUNT_MANOPERA; + select pret_unitar, cant, val_discount, id_valuta, pret_cu_tva + into lnPret_unitar, + lnCant, + lnVal_discount, + lnId_valuta, + lnPret_cu_tva + from ctr_articole + where id_ctr = lnIdCtr + and id_pol_art = lnIdPolArtMan; + + pack_crm.modifica_ctr_art(lnParametru_prog, + lnIdCtr, + lnIdPolArtMan, + nIdArticolManopera, + lnCant, + lnPret_cu_tva, + lnPret_unitar, + lnCoef_Discount, + lnVal_discount, + lnId_valuta); + exception + when NO_DATA_FOUND then + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articolul MANOPERA in contractul tip SERVICE AUTO!'); + when OTHERS then + RAISE; + end; + + -- actualizare discount articol Manopera in ctr_articole + begin + lnCoef_Discount := V_DISCOUNT_MATERIALE; + select pret_unitar, cant, val_discount, id_valuta, pret_cu_tva + into lnPret_unitar, + lnCant, + lnVal_discount, + lnId_valuta, + lnPret_cu_tva + from ctr_articole + where id_ctr = lnIdCtr + and id_pol_art = lnIdPolArtMat; + + pack_crm.modifica_ctr_art(lnParametru_prog, + lnIdCtr, + lnIdPolArtMat, + nIdArticolMateriale, + lnCant, + lnPret_cu_tva, + lnPret_unitar, + lnCoef_Discount, + lnVal_discount, + lnId_valuta); + exception + when NO_DATA_FOUND then + RAISE_APPLICATION_ERROR(-20000, + 'Nu exista articolul MATERIALE in contractul tip SERVICE AUTO!'); + when OTHERS then + RAISE; + end; + + END salveaza_discount_contract; + + ------------------------------------------------------------------ + procedure dev_arhiveaza_comanda(tnid_ordl in number, tnid_util in number) as + lnNevalidate NUMBER(3); + lnLunaDeschisa NUMBER(1); + ldData DATE; + lnLuna NUMBER(2); + lnAn NUMBER(4); + begin + + ldData := SYSDATE; + lnLuna := EXTRACT(MONTH FROM ldData); + lnAn := EXTRACT(YEAR FROM ldData); + + SELECT COUNT(*) + INTO lnLunaDeschisa + FROM CALENDAR + WHERE AN = lnAn + AND LUNA = lnLuna; + + IF lnLunaDeschisa = 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu puteti arhiva comanda deoarece nu este deschisa luna ' || + lnLuna || '/' || lnAn || ' !'); + END IF; + + UPDATE DEV_ORDL + SET INCHIS_FORTAT = 1, + ID_UTIL_INCHIS = tnid_util, + DATAORAINCHIS = ldData + WHERE ID_ORDL = tnid_ordl; + end; + ------------------------------------------------------------------ + procedure dev_dezarhiveaza_comanda(tnid_ordl in number) AS + begin + UPDATE DEV_ORDL + SET INCHIS_FORTAT = 0, ID_UTIL_INCHIS = 0, DATAORAINCHIS = NULL + WHERE ID_ORDL = tnid_ordl; + end; + +end pack_auto; +/ diff --git a/docs/service-auto/pack_sesiune.pck b/docs/service-auto/pack_sesiune.pck new file mode 100644 index 0000000..63e65e7 --- /dev/null +++ b/docs/service-auto/pack_sesiune.pck @@ -0,0 +1,1179 @@ +create or replace package pack_sesiune is + + -- Author : LIANA.MACINIC + -- Created : 1/6/2005 3:32:39 PM + -- Purpose : + + -- 30.09.2009 + -- marius.mutu + -- calculeaza_total_cu_tva, calculeaza_total_fara_tva, calculeaza_total_tva - nvl(V_AJUSTARE,0) + + -- Public type declarations + V_Schema varchar2(64); + dev_idLucrare number(20); + dev_idOrdl number(20); + dev_idOper number(20); + anbal number(4); + lunabal number(2); + dev_an number(4); + dev_luna number(2); + an number(4); + luna number(2); + gest_data_init date; + gest_data_final date; + sal_idStat number(10); + id_prg_owner syn_nom_programe.id_program%Type; + id_prg syn_def_programe.id_prog%Type; + comenzi_idSectie number(5); + + -- cont plcont.cont%type; + cont VARCHAR2(4); + + nIdeROASTART number(2) := 0; + nIdeROADEF number(2) := 1; + nIdeROACONT number(2) := 2; + nIdeROASAL number(2) := 3; + nIdeROARES number(2) := 4; + nIdeROAGEST number(2) := 5; + nIdeROAIMOB number(2) := 6; + nIdeROAMANAGER number(2) := 7; + nIdeROAAUTO number(2) := 8; + nIdeROANOR number(2) := 9; + nIdeROADECL number(2) := 10; + nIdeROARETAIL number(2) := 58; + nID_UTIL syn_utilizatori.id_util%Type; + nid_moneda_nationala nom_valute.id_valuta%TYPE; + nzecimale_pretv number(2); + nzecimale_preta number(2); + nzecimale_pretaval number(2); + nzecimale_pretvval number(2); + nzecimale_sumav number(2); + nzecimale_sumaa number(2); + nzecimale_sumaval number(2); + + function id_sesiune RETURN NUMBER; + function get_data_init return date; + function get_data_final return date; + procedure set_data_init(tcdata date); + procedure set_data_final(tcdata date); + procedure setlunabal(V_LUNA in number); + procedure setanbal(V_AN in number); + procedure setLuna(V_LUNA in number); + procedure setAn(V_AN in number); + procedure setcont(V_CONT IN varchar2); + procedure setSchema(v_gcs in varchar2); + function getlunabal return number; + function getanbal return number; + function getluna return number; + function getan return number; + function getcont return varchar2; + function getultimazi return date; + function getSchema return varchar2; + PROCEDURE set_data_ron(V_GCS VARCHAR2); + FUNCTION get_anron RETURN ACT_TEMP.AN%TYPE; + FUNCTION get_lunaron RETURN ACT_TEMP.LUNA%TYPE; + FUNCTION suma_ron(TNSUMA NUMBER, TNAN NUMBER, TNLUNA NUMBER) RETURN NUMBER; + FUNCTION suma_ron(TNSUMA NUMBER, + TNAN NUMBER, + TNLUNA NUMBER, + TNPRECIZIE NUMBER) RETURN NUMBER; + FUNCTION suma_ron(TNSUMA NUMBER, TDDATA DATE) RETURN NUMBER; + procedure set_id_stat(tn_id_stat in number); + function get_id_stat return number; + FUNCTION getoptiunefirma(tcS IN VARCHAR2, tcOptiune IN VARCHAR2) + RETURN VARCHAR2; + FUNCTION getOptiuneFirma(tcOptiune IN VARCHAR2) RETURN VARCHAR2; + PROCEDURE set_id_prg_owner(tnId_Prg_Owner IN syn_nom_programe.id_program%Type); + PROCEDURE set_id_prg(tnId_Prg IN syn_def_programe.id_prog%Type); + FUNCTION get_id_prg_owner return syn_nom_programe.id_program%Type; + FUNCTION get_id_prg return syn_def_programe.id_prog%Type; + PROCEDURE set_id_util(tnId_Util IN syn_utilizatori.id_util%Type); + FUNCTION get_id_util RETURN syn_utilizatori.id_util%Type; + procedure set_id_sectie_comenzi(tn_id_sectie IN NUMBER); + function get_id_sectie_comenzi return number; + function e_mama(tnIdFirma IN NUMBER) return number; + PROCEDURE SetOptiuneUtilizator(tcVarname IN OPTIUNI_UTIL.VARNAME%TYPE, + tnIdUtil OPTIUNI_UTIL.ID_UTIL%TYPE, + tcVarvalue OPTIUNI_UTIL.VARVALUE%TYPE, + tcVardesc OPTIUNI_UTIL.VARDESC%TYPE := NULL); + PROCEDURE SetOptiune(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL); + + PROCEDURE SetOptiune2(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE2%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL); + + function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function converteste_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function converteste_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + function converteste_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number; + + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + return number; + + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + return number; + + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + return number; + + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, + V_PRET IN ACT.SUMA%TYPE, + V_AN IN ACT.AN%TYPE, + V_LUNA IN ACT.LUNA%TYPE) RETURN ACT.PROC_TVA%TYPE; + + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, V_PRET IN ACT.SUMA%TYPE) + RETURN ACT.PROC_TVA%TYPE; + + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER) RETURN VARCHAR2; + + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER, + V_TIP IN NUMBER) RETURN VARCHAR2; + + PROCEDURE blocheaza_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER); + + PROCEDURE deblocheaza_acces(V_SID IN NUMBER); + + PROCEDURE deblocheaza_acces(V_TABELA IN VARCHAR2, V_ID IN NUMBER); + + PROCEDURE deblocheaza_acces_expirat(V_TABELA IN VARCHAR2, V_ID IN NUMBER); +end pack_sesiune; +/ +create or replace package body pack_sesiune is + + -- 17.03.2016 + -- marius.mutu + -- tva2proctva - s-a calculat si procent tva 5% din raportul tva/pret, + -- la 5% aparea cota standard ex: 20% 2016 + + -- 18.10.2016 + -- marius.mutu + -- + SetOptiune + + -- 13.11.2020 + -- marius.mutu + -- + SetOptiune2 (salveaza in optiuni.varvalue2 clob in loc de optiuni.varvalue varchar2) + + FUNCTION id_sesiune RETURN NUMBER IS + V_RETURN NUMBER(20) := 0; + BEGIN + V_RETURN := DEV_IDLUCRARE; + RETURN V_RETURN; + END; + + FUNCTION get_data_init RETURN date IS + BEGIN + + return gest_data_init; + END; + + FUNCTION get_data_final RETURN date IS + BEGIN + + return gest_data_final; + END; + + procedure set_data_init(tcdata in date) is + + lcdata date := tcdata; + begin + gest_data_init := lcdata; + end; + + procedure set_data_final(tcdata in date) is + + lcdata date := tcdata; + begin + gest_data_final := lcdata; + end; + ------------------------------------------------------------------ + procedure setlunabal(V_LUNA IN NUMBER) is + begin + lunabal := V_LUNA; + end; + ------------------------------------------------------------------ + procedure setanbal(V_AN IN NUMBER) is + begin + anbal := V_AN; + end; + ------------------------------------------------------------------ + procedure setluna(V_LUNA IN NUMBER) is + begin + dev_luna := V_LUNA; + luna := V_LUNA; + end; + ------------------------------------------------------------------ + procedure setan(V_AN IN NUMBER) is + begin + dev_an := V_AN; + an := V_AN; + end; + ------------------------------------------------------------------ + procedure setcont(V_CONT IN varchar2) is + begin + cont := V_CONT; + end; + ------------------------------------------------------------------ + procedure setschema(V_gcs IN varchar2) is + begin + V_schema := v_gcs; + end; + ------------------------------------------------------------------ + function getlunabal return number is + begin + return lunabal; + end; + ------------------------------------------------------------------ + function getanbal return number is + begin + return anbal; + end; + ------------------------------------------------------------------ + function getluna return number is + begin + return dev_luna; + end; + ------------------------------------------------------------------ + function getan return number is + begin + return dev_an; + end; + ------------------------------------------------------------------ + function getcont return varchar2 is + begin + return cont; + end; + ------------------------------------------------------------------ + function getultimazi return date is + begin + return last_day(to_date(dev_an || '/' || dev_luna || '/01', + 'YYYY/MM/DD')); + end; + + --------------------------------------------------------------- + function getschema return varchar2 is + begin + return v_schema; + end; + + --------------------------------------------------------------- + FUNCTION getoptiunefirma(tcS IN VARCHAR2, tcOptiune IN VARCHAR2) + RETURN VARCHAR2 IS + lcValue Optiuni.Varvalue%Type := ''; + BEGIN + BEGIN + select varvalue + INTO lcValue + from optiuni + where UPPER(TRIM(VARNAME)) = UPPER(TRIM(tcOptiune)); + EXCEPTION + WHEN OTHERS THEN + lcValue := ''; + END; + RETURN lcValue; + END; + + --------------------------------------------------------------- + FUNCTION getOptiuneFirma(tcOptiune IN VARCHAR2) RETURN VARCHAR2 IS + lcValue Optiuni.Varvalue%Type := ''; + BEGIN + lcValue := getOptiuneFirma(user, tcOptiune); + return lcValue; + END; + + --------------------------------------------------------------- + PROCEDURE set_data_ron(V_GCS VARCHAR2) IS + lcDataRon varchar2(50); + + BEGIN + execute immediate 'SELECT varvalue from ' || V_GCS || + '.optiuni where upper(varname) = ''DATARON''' + into lcDataRon; + if lcDataRon is not null then + pack_contafin.nAnRON := to_number(substr(lcDataRon, 4, 4)); + pack_contafin.nLunaRON := to_number(substr(lcDataRon, 1, 2)); + else + pack_contafin.nAnRON := 2005; + pack_contafin.nLunaRON := 7; + end if; + END; + + --------------------------------------------------------------- + FUNCTION get_anron RETURN ACT_TEMP.AN%TYPE IS + BEGIN + return pack_contafin.nAnRON; + END GET_ANRON; + + --------------------------------------------------------------- + + FUNCTION get_lunaron RETURN ACT_TEMP.LUNA%TYPE IS + BEGIN + return pack_contafin.nLunaRon; + END GET_LUNARON; + + --------------------------------------------------------------- + + FUNCTION suma_ron(TNSUMA NUMBER, TNAN NUMBER, TNLUNA NUMBER) RETURN NUMBER IS + + BEGIN + + IF (tnluna + tnan * 12 < + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) AND + (pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) THEN + RETURN NVL(TNSUMA, 0) / 10000; + ELSE + RETURN NVL(TNSUMA, 0); + END IF; + + END SUMA_RON; + + --------------------------------------------------------------- + + FUNCTION suma_ron(TNSUMA NUMBER, + TNAN NUMBER, + TNLUNA NUMBER, + TNPRECIZIE NUMBER) RETURN NUMBER IS + + BEGIN + + IF (tnluna + tnan * 12 < + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) AND + (pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON()) THEN + RETURN round(NVL(TNSUMA, 0) / 10000, TNPRECIZIE); + ELSE + RETURN ROUND(NVL(TNSUMA, 0), TNPRECIZIE); + END IF; + + END SUMA_RON; + ---------------------------- + FUNCTION suma_ron(TNSUMA NUMBER, TDDATA DATE) RETURN NUMBER IS + lnAn number(4); + lnLuna number(2); + BEGIN + lnAn := extract(year from TDDATA); + lnLuna := extract(month from TDDATA); + RETURN pack_sesiune.suma_ron(TNSUMA, LNAN, LNLUNA); + + END SUMA_RON; + ---------------------------- + procedure set_id_stat(tn_id_stat IN NUMBER) is + begin + sal_idStat := tn_id_stat; + end; + ----------------------------------- + function get_id_stat return number is + begin + return sal_idStat; + end; + ----------------------------------- + PROCEDURE set_id_prg_owner(tnId_Prg_Owner IN syn_nom_programe.id_program%Type) IS + BEGIN + id_prg_owner := tnId_Prg_Owner; + END set_id_prg_owner; + ----------------------------------- + PROCEDURE set_id_prg(tnId_Prg IN syn_def_programe.id_prog%Type) IS + BEGIN + id_prg := tnId_Prg; + END set_id_prg; + ----------------------------------- + FUNCTION get_id_prg_owner return syn_nom_programe.id_program%Type IS + BEGIN + RETURN id_prg_owner; + END get_id_prg_owner; + ----------------------------------- + FUNCTION get_id_prg return syn_def_programe.id_prog%Type IS + BEGIN + RETURN id_prg; + END get_id_prg; + ----------------------------------- + ----------------------------------- + PROCEDURE set_id_util(tnId_Util IN syn_utilizatori.id_util%Type) IS + v_utilizator syn_vutilizatori.UTILIZATOR%type; + BEGIN + nId_Util := tnId_Util; + begin + SELECT UTILIZATOR + INTO v_utilizator + FROM syn_vutilizatori + WHERE ID_UTIL = tnId_Util + AND INACTIV = 0; + exception + when NO_DATA_FOUND then + v_utilizator := ''; + end; + dbms_session.set_identifier(v_utilizator); + END set_id_util; + ----------------------------------- + FUNCTION get_id_util RETURN syn_utilizatori.id_util%Type IS + BEGIN + RETURN nId_Util; + END get_id_util; + ----------------------------------- + procedure set_id_sectie_comenzi(tn_id_sectie IN NUMBER) is + begin + comenzi_idSectie := tn_id_sectie; + end; + ----------------------------------- + function get_id_sectie_comenzi return number is + begin + return comenzi_idSectie; + end; + ----------------------------------- + function e_mama(tnIdFirma IN NUMBER) return number is + V_E_MAMA NUMBER(1) := 0; + begin + if tnIdFirma IS NOT NULL then + V_E_MAMA := 0; + else + select max(NVL(e_mama, 0)) + into V_E_MAMA + from syn_nom_firme + where schema = USER; + end if; + + return v_e_mama; + end; + ----------------------------------- + PROCEDURE SetOptiuneUtilizator(tcVarname IN OPTIUNI_UTIL.VARNAME%TYPE, + tnIdUtil OPTIUNI_UTIL.ID_UTIL%TYPE, + tcVarvalue OPTIUNI_UTIL.VARVALUE%TYPE, + tcVardesc OPTIUNI_UTIL.VARDESC%TYPE := NULL) IS + + BEGIN + + MERGE INTO optiuni_util + USING dual + on (upper(varname) = upper(tcVarname) and id_util = tnIdUtil) + WHEN MATCHED THEN + UPDATE SET varvalue = tcVarvalue + WHEN NOT MATCHED THEN + INSERT + (varname, id_util, vardesc, varvalue) + VALUES + (upper(tcVarname), tnIdUtil, tcVardesc, tcVarvalue); + + END SetOptiuneUtilizator; + ----------------------------------- + PROCEDURE SetOptiune(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL) IS + + BEGIN + + MERGE INTO optiuni + USING dual + on (upper(varname) = upper(tcVarname)) + WHEN MATCHED THEN + UPDATE SET varvalue = tcVarvalue + WHEN NOT MATCHED THEN + INSERT + (varname, varvalue, vartype, vardesc) + VALUES + (upper(tcVarname), tcVarvalue, tcVarType, tcVardesc); + + END SetOptiune; + + ---------------------------------------------------------------------------- + PROCEDURE SetOptiune2(tcVarname IN OPTIUNI.VARNAME%TYPE, + tcVarvalue OPTIUNI.VARVALUE2%TYPE, + tcVarType OPTIUNI.VARTYPE%TYPE DEFAULT 'CHARACTER', + tcVardesc OPTIUNI.VARDESC%TYPE DEFAULT NULL) IS + BEGIN + MERGE INTO optiuni + USING dual + on (upper(varname) = upper(tcVarname)) + WHEN MATCHED THEN + UPDATE SET varvalue2 = tcVarvalue + WHEN NOT MATCHED THEN + INSERT + (varname, varvalue2, vartype, vardesc) + VALUES + (upper(tcVarname), tcVarvalue, tcVarType, tcVardesc); + + END SetOptiune2; + + ---------------------------------------------------------------------------- + function calculeaza_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number IS + V_PRET_FARA_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_FARA_TVA := ROUND(V_CURS * + ROUND(V_PRET_UNITAR, V_ZECIMALEVAL), + V_ZECIMALE); + ELSE + V_PRET_FARA_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + ELSE + -- pretul de referinta este cu tva + V_PRET_FARA_TVA := ROUND(calculeaza_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + / V_PROC_TVA, + V_ZECIMALE); + END IF; + return V_PRET_FARA_TVA; + END calculeaza_pret_fara_tva; + ---------------------------------------------------------------------------- + function calculeaza_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return NUMBER IS + V_PRET_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + V_PRET_TVA := ROUND(pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) * + (V_PROC_TVA - 1), + V_ZECIMALE); + ELSE + -- pretul de referinta este cu tva + V_PRET_TVA := pack_sesiune.calculeaza_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) - + pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + END IF; + return V_PRET_TVA; + END calculeaza_pret_TVA; + ---------------------------------------------------------------------------- + function calculeaza_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) RETURN NUMBER IS + V_PRET_CU_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + V_PRET_CU_TVA := pack_sesiune.calculeaza_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + pack_sesiune.calculeaza_pret_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + ELSE + -- pretul de referinta este cu tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_CU_TVA := ROUND(V_CURS * ROUND(V_PRET_UNITAR, V_ZECIMALEVAL), + V_ZECIMALE); + ELSE + V_PRET_CU_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + END IF; + return V_PRET_CU_TVA; + end calculeaza_pret_cu_tva; + ---------------------------------------------------------------------------- + function converteste_pret_fara_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return number IS + V_PRET_FARA_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_FARA_TVA := ROUND(ROUND(V_PRET_UNITAR, V_ZECIMALE) / V_CURS, + V_ZECIMALEVAL); + ELSE + V_PRET_FARA_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + ELSE + -- pretul de referinta este cu tva + V_PRET_FARA_TVA := ROUND(pack_sesiune.converteste_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + / V_PROC_TVA, + (CASE + WHEN NVL(V_ID_VALUTA, + pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + V_ZECIMALEVAL + ELSE + V_ZECIMALE + END)); + END IF; + return V_PRET_FARA_TVA; + END converteste_pret_fara_tva; + ---------------------------------------------------------------------------- + function converteste_pret_TVA(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) return NUMBER IS + V_PRET_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + -- pretul de referinta este fara tva + V_PRET_TVA := ROUND(pack_sesiune.converteste_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) * + (V_PROC_TVA - 1), + (CASE + WHEN NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + V_ZECIMALEVAL + ELSE + V_ZECIMALE + END)); + ELSE + -- pretul de referinta este cu tva + V_PRET_TVA := pack_sesiune.converteste_pret_cu_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) - + pack_sesiune.converteste_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + END IF; + return V_PRET_TVA; + END converteste_pret_TVA; + ---------------------------------------------------------------------------- + function converteste_pret_cu_tva(V_PRET_UNITAR IN NUMBER, + V_CURS IN NUMBER, + V_ID_VALUTA IN NUMBER, + V_PROC_TVA IN NUMBER, + V_PRET_ARE_TVA IN NUMBER, + V_TIP IN NUMBER) RETURN NUMBER IS + V_PRET_CU_TVA number := 0; + V_ZECIMALE number(2); + V_ZECIMALEVAL number(2); + BEGIN + IF V_TIP = 1 THEN + -- achizitie + V_ZECIMALE := pack_sesiune.nzecimale_preta; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretaval; + ELSE + -- vanzare + V_ZECIMALE := pack_sesiune.nzecimale_pretv; + V_ZECIMALEVAL := pack_sesiune.nzecimale_pretvval; + END IF; + IF V_PRET_ARE_TVA = 0 THEN + V_PRET_CU_TVA := pack_sesiune.converteste_pret_fara_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip) + + pack_sesiune.converteste_pret_tva(v_pret_unitar, + v_curs, + v_id_valuta, + v_proc_tva, + v_pret_are_tva, + v_tip); + ELSE + -- pretul de referinta este cu tva + IF NVL(V_ID_VALUTA, pack_sesiune.nid_moneda_nationala) <> + pack_sesiune.nid_moneda_nationala THEN + -- pretul este in valuta + V_PRET_CU_TVA := ROUND(ROUND(V_PRET_UNITAR, V_ZECIMALE) / V_CURS, + V_ZECIMALEVAL); + ELSE + V_PRET_CU_TVA := ROUND(V_PRET_UNITAR, V_ZECIMALE); + END IF; + END IF; + return V_PRET_CU_TVA; + end converteste_pret_cu_tva; + ---------------------------------------------------------------------------- + FUNCTION calculeaza_total_cu_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + V_SUMA_CU_TVA ACT.SUMA%TYPE; + V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET, + pack_sesiune.nzecimale_pretv); + V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA, + pack_sesiune.nzecimale_sumav); + BEGIN + IF V_PRET_CU_TVA = 1 THEN + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALEPRET) + + ROUND(NVL(V_AJUSTARE, 0) * V_PROC_TVAV, + V_ZECIMALEPRET)) * V_CANTITATE, + V_ZECIMALESUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET) * V_CANTITATE, + V_ZECIMALESUMA); + ELSE + V_SUMA_CU_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALEPRET), + V_ZECIMALEPRET) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET), + V_ZECIMALEPRET) + + ROUND(NVL(V_AJUSTARE, 0) * V_PROC_TVAV, + V_ZECIMALEPRET)) * V_CANTITATE, + V_ZECIMALESUMA); + END IF; + ELSE + V_SUMA_CU_TVA := pack_sesiune.calculeaza_total_fara_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA) + + pack_sesiune.calculeaza_total_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA); + END IF; + RETURN V_SUMA_CU_TVA; + END calculeaza_total_cu_tva; + ---------------------------------------------------------------------------- + FUNCTION calculeaza_total_fara_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + V_SUMA_FARA_TVA ACT.SUMA%TYPE; + V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET, + pack_sesiune.nzecimale_pretv); + V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA, + pack_sesiune.nzecimale_sumav); + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_FARA_TVA := pack_sesiune.calculeaza_total_cu_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA) - + pack_sesiune.calculeaza_total_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA); + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA) - + ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET) * V_CANTITATE, + V_ZECIMALESUMA); + ELSE + V_SUMA_FARA_TVA := ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALEPRET), + V_ZECIMALEPRET) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET), + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA); + END IF; + END IF; + RETURN V_SUMA_FARA_TVA; + END calculeaza_total_fara_tva; + ---------------------------------------------------------------------------- + FUNCTION calculeaza_total_tva(V_PRET IN NUMBER, + V_AJUSTARE IN NUMBER, + V_CURS IN NUMBER, + V_DISCOUNT_UNITAR IN NUMBER, + V_DISCOUNT_EVIDENTIAT IN NUMBER, + V_CANTITATE IN NUMBER, + V_PRET_CU_TVA IN NUMBER, + V_PROC_TVAV IN NUMBER, + V_ZECIMALE_PRET IN NUMBER, + V_ZECIMALE_SUMA IN NUMBER) + RETURN NUMBER IS + V_SUMA_TVA ACT.SUMA%TYPE; + V_ZECIMALEPRET NUMBER(1) := NVL(V_ZECIMALE_PRET, + pack_sesiune.nzecimale_pretv); + V_ZECIMALESUMA NUMBER(1) := NVL(V_ZECIMALE_SUMA, + pack_sesiune.nzecimale_sumav); + BEGIN + IF V_PRET_CU_TVA = 1 THEN + V_SUMA_TVA := ROUND(pack_sesiune.calculeaza_total_cu_tva(V_PRET, + V_AJUSTARE, + V_CURS, + V_DISCOUNT_UNITAR, + V_DISCOUNT_EVIDENTIAT, + V_CANTITATE, + V_PRET_CU_TVA, + V_PROC_TVAV, + V_ZECIMALEPRET, + V_ZECIMALESUMA) * + (V_PROC_TVAV - 1) / V_PROC_TVAV, + V_ZECIMALESUMA); + + ELSE + IF V_DISCOUNT_EVIDENTIAT = 1 THEN + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * V_PRET, + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA) * (V_PROC_TVAV - 1), + V_ZECIMALESUMA) - + ROUND(ROUND(ROUND(NVL(V_CURS, 1) * + NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET) * V_CANTITATE, + V_ZECIMALESUMA) * (V_PROC_TVAV - 1), + V_ZECIMALESUMA); + ELSE + V_SUMA_TVA := ROUND(ROUND((ROUND(NVL(V_CURS, 1) * + ROUND(V_PRET, V_ZECIMALEPRET), + V_ZECIMALEPRET) - + ROUND(NVL(V_CURS, 1) * + ROUND(NVL(V_DISCOUNT_UNITAR, 0), + V_ZECIMALEPRET), + V_ZECIMALEPRET) + + NVL(V_AJUSTARE, 0)) * V_CANTITATE, + V_ZECIMALESUMA) * (V_PROC_TVAV - 1), + V_ZECIMALESUMA); + END IF; + END IF; + RETURN V_SUMA_TVA; + END calculeaza_total_tva; + ---------------------------------------------------------------------------- + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, + V_PRET IN ACT.SUMA%TYPE, + V_AN IN ACT.AN%TYPE, + V_LUNA IN ACT.LUNA%TYPE) RETURN ACT.PROC_TVA%TYPE is + V_PROC_TVA ACT.PROC_TVA%TYPE; + BEGIN + + if V_PRET = 0 or V_TVA = 0 then + V_PROC_TVA := 1; + else + V_PROC_TVA := ROUND(V_TVA / V_PRET, 2); + if V_PROC_TVA between 0.03 and 0.07 then + V_PROC_TVA := 1.05; + elsif V_PROC_TVA between 0.08 and 0.11 then + V_PROC_TVA := 1.09; + else + V_PROC_TVA := pack_contafin.getCotaTVAStandard(V_LUNA, V_AN); + end if; + end if; + return V_PROC_TVA; + END tva2proctva; + ---------------------------------------------------------------------------- + function tva2proctva(V_TVA IN ACT.SUMA%TYPE, V_PRET IN ACT.SUMA%TYPE) + RETURN ACT.PROC_TVA%TYPE is + BEGIN + return pack_sesiune.tva2proctva(V_TVA, + V_PRET, + pack_sesiune.an, + pack_sesiune.luna); + END tva2proctva; + ---------------------------------------------------------------------------- + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER) RETURN VARCHAR2 IS + BEGIN + RETURN pack_sesiune.verifica_acces(V_TABELA, V_ID, V_MINUTE_MAX, 1); + END verifica_acces; + ---------------------------------------------------------------------------- + FUNCTION verifica_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER, + V_TIP IN NUMBER) RETURN VARCHAR2 IS + -- V_TIP = 1 - verifica si blocheaza + -- = 2 - doar verifica + V_MESAJ VARCHAR2(1000); + V_DATAORAE DATE; + V_DATA_ACTUALA DATE; + BEGIN + BEGIN + SELECT MAX(DATAORAE) AS DATAORAE, SYSDATE + INTO V_DATAORAE, V_DATA_ACTUALA + FROM TABELE_BLOCATE + WHERE TABELA = V_TABELA + AND ID = V_ID; + EXCEPTION + WHEN NO_DATA_FOUND THEN + V_DATAORAE := NULL; + V_DATA_ACTUALA := NULL; + END; + + IF V_DATAORAE IS NULL THEN + V_MESAJ := NULL; + IF V_TIP = 1 THEN + pack_sesiune.blocheaza_acces(V_TABELA, V_ID, NVL(V_MINUTE_MAX, 60)); + END IF; + ELSE + IF V_DATA_ACTUALA > V_DATAORAE THEN + V_MESAJ := NULL; + pack_sesiune.deblocheaza_acces_expirat(V_TABELA, V_ID); + IF V_TIP = 1 THEN + pack_sesiune.blocheaza_acces(V_TABELA, + V_ID, + NVL(V_MINUTE_MAX, 60)); + END IF; + ELSE + V_MESAJ := 'Nu puteti face operatii asupra acestei inregistrari! Sesiunea expira la ' || + to_char(V_DATAORAE, 'DD/MM/YYYY HH24:mi:ss') || ' !'; + END IF; + END IF; + RETURN V_MESAJ; + END verifica_acces; + ---------------------------------------------------------------------------- + PROCEDURE blocheaza_acces(V_TABELA IN VARCHAR2, + V_ID IN NUMBER, + V_MINUTE_MAX IN NUMBER) is + BEGIN + INSERT INTO TABELE_BLOCATE + (SID, TABELA, ID, DATAORAE) + VALUES + (sys_context('userenv', 'SID'), + V_TABELA, + V_ID, + SYSDATE + NVL(V_MINUTE_MAX, 60) / (24 * 60)); + END blocheaza_acces; + ---------------------------------------------------------------------------- + PROCEDURE deblocheaza_acces(V_SID IN NUMBER) is + BEGIN + DELETE FROM TABELE_BLOCATE WHERE SID = V_SID; + END deblocheaza_acces; + ---------------------------------------------------------------------------- + PROCEDURE deblocheaza_acces(V_TABELA IN VARCHAR2, V_ID IN NUMBER) is + BEGIN + DELETE FROM TABELE_BLOCATE + WHERE SID = sys_context('userenv', 'SID') + AND TABELA = V_TABELA + AND ID = V_ID; + END deblocheaza_acces; + ---------------------------------------------------------------------------- + PROCEDURE deblocheaza_acces_expirat(V_TABELA IN VARCHAR2, V_ID IN NUMBER) is + BEGIN + DELETE FROM TABELE_BLOCATE + WHERE TABELA = V_TABELA + AND ID = V_ID; + END deblocheaza_acces_expirat; + ---------------------------------------------------------------------------- +begin + pack_sesiune.nid_moneda_nationala := pack_def.GetIdMonedaNationala(); + pack_sesiune.nzecimale_preta := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRET'); + pack_sesiune.nzecimale_pretv := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRETV'); + pack_sesiune.nzecimale_pretaval := PACK_SESIUNE.getoptiunefirma(USER, + 'PPRETVAL'); + pack_sesiune.nzecimale_pretvval := PACK_SESIUNE.getoptiunefirma(USER, + 'PVAL'); + pack_sesiune.nzecimale_sumaa := PACK_SESIUNE.getoptiunefirma(USER, + 'PC'); + pack_sesiune.nzecimale_sumav := PACK_SESIUNE.getoptiunefirma(USER, + 'PC'); + pack_sesiune.nzecimale_sumaval := PACK_SESIUNE.getoptiunefirma(USER, + 'PVAL'); +end pack_sesiune; +/ diff --git a/docs/service-auto/tabele-service-auto.md b/docs/service-auto/tabele-service-auto.md index d940c4e..0f4cf58 100644 --- a/docs/service-auto/tabele-service-auto.md +++ b/docs/service-auto/tabele-service-auto.md @@ -1,532 +1,882 @@ -# Tabele + SP-uri Service Auto — VFP ground truth audit (v2) +# Tabele + SP-uri Service Auto — MARIUSM_AUTO ground truth (v3) -> **Status:** v2 generat 2026-04-11 de Claude pe baza analizei `gitea.romfast.ro/romfast/vfp_roaauto` -> (clonat în `/workspace/vfp_roaauto`). **Acum se bazează și pe `Scripturi_instalare/packages.sql`, -> `initializari.sql`, `triggere.sql`, `tabele.sql`** — nu doar pe .prg files. **DE CONFIRMAT** în -> săpt 3 prin interogări reale pe schema MARIUSM_AUTO. +> **Status:** v3 complet rescris 2026-04-11 pe baza sursă producție. > -> **Scop:** înlocuiește task-ul "deschide VFP producție cu grijă" din planul v2. Sursa e -> gitea, zero risc de modificare accidentală. +> **Surse (toate din `docs/service-auto/`):** +> - `mariusm_ddl_export.sql` — DDL exportat din producție (tabele, views, triggere) +> - `pack_auto.pck` — pachet principal service auto +> - `PACK_FACTURARE.pck` — pachet facturare +> - `PACK_SESIUNE.pck` — session state (dev_idLucrare, dev_idOrdl, getAn/getLuna) +> - `PACK_CONTAFIN.pck` — financial utilities (getCotaTVAStandard, get_idFact) +> - `PACK_COMENZI.pck` — **pentru ROA ERP base comenzi**, NU service auto > -> **Corecție v2 (2026-04-11):** v1 presupunea că tabela principală e `comenzi`. **REALITATE:** -> tabela fizică e **`DEV_ORDL`** (PK: `id_ordl`). `vcomenzi` e un view denormalizat care face -> JOIN cu `dev_tip_deviz`, `dev_masiniclienti`, `parteneri`, etc. Planul v2 referință corectă: -> DB = `dev_ordl`, UI = "comandă". +> **Versiuni anterioare invalidate:** +> - v1/v2 a referit `vfp_roaauto/Scripturi_instalare/packages.sql` → acel fișier era pentru +> **alt produs** ("devize producție"), NU service auto. +> - v2 a presupus că tabela e `comenzi`/`vcomenzi` → view-ul `VCOMENZI` din MARIUSM_AUTO +> **nu e pentru service auto** (e pentru ROA ERP base, tabela sursă `comenzi` + `nom_masini` + +> `id_codclient` + field `interna` cu valori `INTERNA/EXTERNA/GESTIUNE/SECTIE`). +> - Service auto = **`DEV_ORDL` + `NOM_LUCRARI`** (pattern de inheritance), cu view-uri +> dedicate prefixate `AUTO_*`. --- -## 1. Entități — terminologie reconciliată +## 1. Model de entități — ierarhie ROA + extensie ROAAUTO -**Confirmat de Marius 2026-04-11**: terminologia vine din ierarhia ROA (ERP generic) vs -ROAAUTO (extensie service auto). Pattern de **inheritance prin două tabele**: +``` +┌──────────────────────────────────────────────────────────────────────────┐ +│ NOM_LUCRARI (ROA ERP base — header generic al oricărei "lucrări"/comenzi) │ +│ id_lucrare PK, nrord, id_mod, facturata, id_fact, id_tata │ +│ TRIGGER TRG_NOM_LUCRARI_BEFOINS: NEXTVAL → id_lucrare │ +│ pack_sesiune.dev_idLucrare := ID │ +└────────────────────────────────┬─────────────────────────────────────────┘ + │ FK id_lucrare (FK_DEV_ORDL_002) + ▼ +┌──────────────────────────────────────────────────────────────────────────┐ +│ DEV_ORDL (ROAAUTO — extensie service auto) │ +│ id_ordl PK, id_lucrare FK, id_tip FK, id_masiniclient FK, │ +│ id_inspector, id_asigurator, id_part, id_part_ref, id_agent, │ +│ validat, inchis_fortat, proc_tvav, kmint, ore_functionare, │ +│ solicitari_client CLOB, observatii, defectiuni, nr_dosar, ... │ +│ TRIGGER TRG_DEV_ORDL_BEFOINS: NEXTVAL → id_ordl │ +│ pack_sesiune.dev_idOrdl := ID │ +└──┬───────────────────────────────────────────────┬───────────────────────┘ + │ │ + │ FK id_ordl │ id_lucrare (NU FK direct, + ▼ │ tag logic prin coloană) +┌─────────────────────────────────────┐ ┌─────────────────────────────┐ +│ DEV_OPER │ │ RUL (ROA generic warehouse) │ +│ (NUMAI manoperă pentru service auto)│ │ id_rul PK, id_lucrare, │ +│ id_oper PK, id_ordl FK, │ │ id_articol, cante, pretv, │ +│ id_norme FK → DEV_NOM_NORME, │ │ id_set, id_fact, ... │ +│ timpn, pret, validat, │ │ │ +│ id_util, dataora, sters, nou │ │ Populat de "Bon consum" │ +│ │ │ (ointroduceri.prg tip=3) │ +│ Coloane id_articol / id_rul_aux: │ │ cu ID_LUCRARE tag. │ +│ EXISTĂ în DDL (pentru alt produs │ └─────────────────────────────┘ +│ "producție" care partajează schema),│ +│ dar NU sunt populate de service auto│ +└────┬────────────────────────────────┘ + │ FK id_oper + ▼ +┌──────────────────────────────────────────────────────────────────────────┐ +│ DEV_OPER_MECANICI — distribuția timpului pe mecanici │ +│ id_opermecanic PK, id_oper FK, id_mecanic FK, ore │ +└──────────────────────────────────────────────────────────────────────────┘ +``` -| Nivel | Termen | Tabelă | Ce conține | +**Materialele consumate pe o comandă NU sunt în `DEV_OPER`.** Sunt în **`RUL`** (tabela +generică ROA de rulaje / mișcări de stoc), legate de comandă prin coloana `RUL.ID_LUCRARE`. +Flow-ul e: + +1. User face "Bon consum" în `ointroduceri.prg` (tip=3) → selectează articole din stoc + + tag-uiește comandă (id_lucrare) → salvare +2. Generic ROA warehouse scrie rânduri în `RUL` cu `ID_LUCRARE = X`, `SCD = '3xx'`, + `SCC = '6xx'` (consum de stoc) +3. La afișarea devizului și la facturare, materialele se citesc ca `SUM(cante * pretv) + FROM RUL WHERE id_lucrare = X` + +**Notă business Marius 2026-04-11:** este posibil ca `DEV_OPER` să fie folosit de alt program +de producție care are și materiale în DEV_OPER (cu `id_articol` + `id_rul_aux` populate), +dar **pentru service auto ROAAUTO, `DEV_OPER` conține doar operații de manoperă** — fiecare +linie are `id_norme` non-NULL și `id_articol` NULL. + +**Separat, deviz estimativ (pre-sale, ofertă către client):** + +``` +DEV_ESTIMARI_REP (deviz estimativ — ofertă pentru client înainte de a începe lucrarea) + id_dev_estimare_rep PK, id_lucrare FK, + id_norme (manoperă estimată) SAU id_articol (material estimat), + cantitate, pret, pret_cu_tva, cota_tva, id_sectie, id_valuta, ... +``` + +**Cele trei flux-uri paralele și independente pe o lucrare (`id_lucrare`):** + +| # | Tabel | Ce conține | Când se populează | |---|---|---|---| -| **Base** (ROA ERP) | **comandă** | `nom_lucrari` | Doar numele/nrord-ul comenzii — vizibil în ACT (registrul jurnal) și RUL (rulaje gestiune) când comanda e referențiată la facturare | -| **Extension** (ROAAUTO) | **deviz auto** | `dev_ordl` | Toate detaliile specifice auto: mașină, km, termen, asigurator, tip deviz, inspector, observații | +| 1 | `DEV_ESTIMARI_REP` | Deviz estimativ (manoperă + materiale estimate) dat ca ofertă clientului | **Înainte** de a începe lucrarea | +| 2 | `DEV_OPER` | Manopera **reală** executată (doar `id_norme`, service auto) | **În timpul** lucrării | +| 3 | `RUL` cu `id_lucrare` | Materialele **reale** consumate (bonuri de consum din stoc) | **În timpul** lucrării | -**"Comandă"** = generic (valabil pentru orice industrie — service, construcții, producție...). -**"Deviz"** e mai specific: e calculul costului (manoperă + materiale consumate) pentru o -comandă într-un context de industrie: `deviz auto`, `deviz construcții`, etc. În ROAAUTO, -fiecare comandă de service auto ARE un deviz auto atașat (prin `dev_ordl` + `dev_oper` + -`dev_mat`). - -**Relația FK**: -``` -nom_lucrari (id_lucrare PK) - ↑ - │ FK (id_lucrare) - │ -dev_ordl (id_ordl PK, id_lucrare FK → nom_lucrari.id_lucrare) -``` - -Confirmat în `tabele.sql:634`: -```sql -alter table DEV_ORDL add constraint FK_... - references NOM_LUCRARI (ID_LUCRARE); -``` - -**Consecință pentru prototype**: crearea unei comenzi face INSERT în **AMBELE tabele**, -în ordine: -1. `INSERT INTO nom_lucrari (nrord, id_mod) VALUES (...)` — creează header-ul generic -2. `INSERT INTO dev_ordl (id_lucrare, id_tip, id_masiniclient, kmint, ...) VALUES (...)` - — creează extensia auto, legată prin `id_lucrare` - -**ACT și RUL**: `nom_lucrari.nrord` e **vizibil** în ACT (registrul jurnal) și RUL (rulaje -gestiune) când comanda e referențiată la facturare. Dar **crearea comenzii NU touch-uiește -nici ACT nici RUL** — acestea sunt hit-uite doar la facturare, care e NOT IN SCOPE pentru -prototype. Correction 3 din planul v2 rămâne validă. - -**Componente backend Pydantic**: `ComandaCreate`, `ComandaCreated` (termen UI), backend -service face cele două INSERT-uri într-o tranzacție, returnează `id_ordl` și `nr_comanda`. +Nu există sincronizare automată: estimarea e doar o ofertă pre-sale, iar lucrarea reală +(manoperă + materiale) poate devia de la ea. Comparațiile estimat vs. real se fac în +rapoarte analitice, nu în flux-ul operațional. --- -## 2. Tabela principală: `comenzi` (view: `vcomenzi`) +## 2. DEV_ORDL — schema reală producție -Schema extrasă din `COMUN/programe/onom_comenzi.prg:72-79`. **Partea vizibilă în UI**: +Exportat via `DBMS_METADATA.GET_DDL` pe 2026-04-11 din MARIUSM_AUTO. +**37 coloane**, FK-uri active: -| Coloană | Tip VFP | Tip Oracle probabil | Note | +| Coloană | Tip | Null | Note | |---|---|---|---| -| `id_comanda` | `N(20)` | `NUMBER(20)` | PK, alias-ul pentru `id_ordl` | -| `id_ordl` | — | `NUMBER(20)` | Numele intern în PL/SQL (OUT param din SP) | -| `comanda_externa` | `C(20)` | `VARCHAR2(20)` | Nr. comandă extern client | -| `id_codclient` | `C(20)` | `VARCHAR2(20)` | FK client (**char**, nu numeric!) | -| `id_lucrare` | `N(20)` | `NUMBER(20)` | FK la `vlucrari_detalii` | -| `id_part` | `N(20)` | `NUMBER(20)` | FK partener | -| `id_agent` | `N(20)` | `NUMBER(20)` | FK agent vânzări | -| `id_delegat` | `N(20)` | `NUMBER(20)` | FK delegat | -| `id_masina` | `N(20)` | `NUMBER(20)` | FK la `masini_client` (id_mc) | -| `nr_comanda` | `C(100)` | `VARCHAR2(100)` | Nr. comandă intern cu prefix tip (ex: `G123`, `R456`) | -| `data_comanda` | `T` | `TIMESTAMP` | Data creării | -| `nume` | `C(70)` | `VARCHAR2(70)` | Nume client (denormalizat) | -| `tip_comanda` | `C(20)` sau `C(50)` | `VARCHAR2(50)` | **Display name denormalizat** (ex: "Garanție") | -| `data_livrare` | `T` | `TIMESTAMP` | Termen execuție/livrare | -| `nume_agent` | `C(70)` | — | Denormalizat | -| `nume_delegat` | `C(70)` | — | Denormalizat | -| `nrinmat` | `C(10)` | `VARCHAR2(10)` | Nr. înmatriculare mașină | -| `nrord` | `C(30)` | `VARCHAR2(30)` | Nr. ordine (intern) | -| `facturat` | `N(1)` | `NUMBER(1)` | Flag facturat (0/1) | -| `dataora` | `T` | `TIMESTAMP` | Audit | -| `utilizator` | `C(40)` | `VARCHAR2(40)` | Username creator | -| `data_livrat` | `T` | `TIMESTAMP` | Data livrării efective | -| `interna` | `N(1)` | `NUMBER(1)` | Flag comandă internă | -| `nr_livrare` | `C(50)` | `VARCHAR2(50)` | Nr. bon livrare | -| `inchisa` | `N(1)` | `NUMBER(1)` | Flag închisă | -| `id_sectie` | `N(5)` | `NUMBER(5)` | **Secția care a creat comanda (MANDATORY)** | -| `id_sectie2` | `N(5)` | `NUMBER(5)` | Secția care execută (dacă diferă) | -| `id_facturare` | `N(5)` | `NUMBER(5)` | FK adresa facturare | -| `id_livrare` | `N(5)` | `NUMBER(5)` | FK adresa livrare | -| `id_ctr` | `N(10)` | `NUMBER(10)` | FK contract (pentru clienți B2B cu discount-uri) | -| `numar_contract` | `C(100)` | `VARCHAR2(100)` | Nr. contract denormalizat | +| `id_ordl` | `NUMBER(10)` | NN | PK, alocat de trigger din `SEQ_DEV_ORDL` | +| `luna` | `NUMBER(2)` | NN | Luna contabilă (0 default) | +| `an` | `NUMBER(4)` | NN | Anul contabil (0 default) | +| `id_inspector` | `NUMBER(5)` | Y | FK → `DEV_NOM_INSPECTORI` | +| `id_lucrare` | `NUMBER(10)` | NN | **FK → `NOM_LUCRARI` (FK_DEV_ORDL_002)** | +| `termen` | `DATE` | Y | Termen execuție (default `SYSDATE + gnTermenZileService`, de obicei +10 zile) | +| `datai` | `DATE` | Y | Data intrării | +| `orai` / `orae` | `NUMBER(5)` | Y | Ora intrare/ieșire | +| `datae` | `DATE` | Y | Data ieșirii | +| `validat` | `NUMBER(1)` | NN | 0/1 | +| `id_util_ad` | `NUMBER(5)` | NN | User creator | +| `id_util_valid` | `NUMBER(5)` | Y | User care a validat | +| `dataoraad` | `DATE` | Y | Audit: momentul creării | +| `dataoravalid` | `DATE` | Y | Audit: momentul validării | +| `id_utils` / `dataoras` | | Y | Audit: ștergere logică | +| `id_masiniclient` | `NUMBER(5)` | Y | **FK → `DEV_MASINICLIENTI`** | +| `id_asigurator` | `NUMBER(5)` | Y | FK → `DEV_NOM_ASIGURATORI` | +| `sters` | `NUMBER(1)` | NN | Soft delete | +| `id_tip` | `NUMBER(5)` | NN | **FK → `DEV_TIP_DEVIZ`** (default 1) | +| `inchis_fortat` | `NUMBER(1)` | NN | 0/1 — arhivat fără validare | +| `kmint` | `NUMBER(10)` | Y | Km la bord intrare | +| `nr_dosar` | `VARCHAR2(40)` | Y | Nr. dosar daună (pentru garanție asigurator) | +| `solicitari_client` | `CLOB` | Y | Text denormalizat: numele normelor solicitate (agregat prin `STRINGAGG` din `DEV_NOM_NORME` la crearea comenzii) | +| `proc_tvav` | `NUMBER(10,4)` | Y | Procent TVA (citit din `pack_contafin.getCotaTVAStandard(luna, an)` la creare) | +| `id_part` | `NUMBER(10)` | Y | **FK → `NOM_PARTENERI`** — clientul **direct pe comandă** (nu doar prin mașină) | +| `coada_deviz` | `NUMBER(1)` | NN | Flag "în coada devizelor" | +| `observatii` | `VARCHAR2(1000)` | Y | | +| `data_curs` | `DATE` | Y | Pentru comenzi în valută | +| `in_lucru` | `NUMBER(1)` | NN | Flag "comanda în lucru" | +| `id_valuta_deviz` | `NUMBER(10)` | Y | FK → `NOM_VALUTE` | +| `facturezmix` | `NUMBER(1)` | NN | Flag "facturare mixtă" | +| `data_in_lucru` / `dataorainlucru` | `DATE` | Y | Audit trecere în lucru | +| `id_agent` | `NUMBER(10)` | Y | FK → `NOM_PARTENERI` (agent vânzări) | +| `id_util_inchis` / `dataorainchis` | | Y | Audit "închidere forțată" (arhivare) | +| `id_part_ref` | `NUMBER(10)` | Y | FK → `NOM_PARTENERI` (partener referent) | +| `ore_functionare` | `NUMBER(10)` | Y | Pentru vehicule utilitare (ore motor în loc de km) | +| `defectiuni` | `VARCHAR2(200)` | Y | | -**Total: ~28 coloane în view-ul `vcomenzi`.** Planul prototype-ului (4 fields: tip, client, -mașină, operații) e o simplificare **agresivă** — e OK pentru learning, dar să fii conștient -că VFP-ul real captează mult mai multă informație. +**PK:** `PK_DEV_ORDL` pe `id_ordl`. + +**FK active în producție:** +- `FK_DEV_ORDL_001` → `DEV_NOM_INSPECTORI(id_inspector)` ENABLE +- `FK_DEV_ORDL_002` → `NOM_LUCRARI(id_lucrare)` **ENABLE** ← constraint critic +- `FK_DEV_ORDL_003` → `NOM_PARTENERI(id_part)` ENABLE (client direct) +- `FK_DEV_ORDL_004` → `NOM_VALUTE(id_valuta)` ENABLE +- `FK_DEV_ORDL_005` → `NOM_PARTENERI(id_agent)` ENABLE +- `FK_DEV_ORDL_006` → `NOM_PARTENERI(id_part_ref)` ENABLE + +**Nu există FK pe `id_masiniclient`** (probabil pentru a permite comenzi pentru mașini +temporare sau fără înmatriculare persistentă). + +**Coloane `AVANS`, `VALCTVA`, `TIP_INCAS`, `ID_CTR`, `ID_FACT`, `ID_CONTRACT`** care apăreau +în v2 DDL **NU există** în producție reală. Sunt artefacte ale scripturilor de instalare +vechi care au fost abandonate. --- -## 3. Tabele conexe (referențiate la create) +## 3. NOM_LUCRARI — header parent (ROA ERP base) -| Tabelă / view | Rol | Folosită de prototype? | -|---|---|---| -| `vcomenzi_elemente` | Linii detaliu (articole, cantități) — "rețeta" comenzii | **NU** — prototype scope wall, doar header | -| `vlucrari_detalii` | Lucrări / operații finalizate | **NU** — execuție post-creare | -| `vlucrari_elemente` | Articole consumate pe o lucrare | **NU** | -| `masini_client` | Mașinile clienților (FK `id_mc`) | **NU** — dropdown hardcodat în Vue | -| `parteneri` | Clienți (FK `id_codclient`) | **NU** — dropdown hardcodat | -| `optiuni` | Configurare per-secție (Key/Value) | Doar indirect prin `pack_comenzi.extrage_optiuni` | -| `adrese_parteneri` | Adrese facturare/livrare | **NU** — valoare default din partener | -| `contracte` | Contracte cu discount-uri B2B | **NU** — scope wall | - -**Pentru prototype**: insert-ul simplificat atinge **doar `comenzi`** (view `vcomenzi`), -zero JOIN-uri cross-table. Scope wall ține. - ---- - -## 4. SP-ul real de creare — DOUĂ versiuni - -Surpriză importantă: **există două versiuni** ale `dev_adauga_lucrare` în sursele ROAAUTO, -în pachete diferite. - -### 4.1. Versiunea INSTALL-TIME: `pack_devize.dev_adauga_lucrare` (12 IN + 1 OUT) - -**Sursa:** `Scripturi_instalare/packages.sql:182-212` — body-ul complet e vizibil. - -**Semnătura:** ```sql -procedure dev_adauga_lucrare( - v_gcs in varchar2, -- schema - tnan in number, -- an - tnluna in number, -- luna - tnIdUtil in number, -- id user - pcNr in varchar2, -- nr comandă cu prefix (ex: 'G12345') - pnIdInsp in number, -- id inspector - pnIdAsig in number, -- id asigurator - pnIdMC in number, -- id mașină client (dev_masiniclienti.id_masiniclient) - pnKmInt in number, -- km la bord - pdTermen in date, -- termen execuție - pnTipCom in number, -- id tip (FK dev_tip_deviz.id_tip) - pnIdOrdl out number -- OUT: id_ordl generat +NOM_LUCRARI ( + id_lucrare NUMBER(10) NN PK, + nrord VARCHAR2(50), + sters NUMBER(1) NN default 0, + id_mod NUMBER(20) NN default 0, -- 1200 pentru service auto + inactiv NUMBER(1) NN default 0, + facturata NUMBER(1) NN default 0, + id_tata NUMBER(10), -- parent hierarchy + id_fact NUMBER(20) -- populat la facturare ) ``` -**Body real (din `packages.sql:196-212`):** +**Trigger `TRG_NOM_LUCRARI_BEFOINS`:** ```sql -begin - -- 1. Side effect: creează rând în NOM_LUCRARI cu id_mod=1200 - execute immediate 'INSERT INTO ' || v_gcs || '.NOM_LUCRARI (NRORD, ID_MOD) - VALUES (:1, 1200)' - using pcNr; - - -- 2. Insert principal în DEV_ORDL - execute immediate 'insert into ' || v_gcs || '.dev_ordl - (an, luna, id_inspector, id_lucrare, datai, id_util_ad, - id_masiniclient, id_asigurator, id_tip, kmint, termen, dataoraad) - values (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12) - returning id_ordl into :13' - using tnAn, tnLuna, pnIdInsp, - pack_sesiune.dev_idLucrare, -- <-- session state dependency! - v_dataora, tnIdUtil, pnIdMC, pnIdAsig, pnTipCom, - pnKmInt, pdTermen, V_DATAORA - returning into pnIdOrdl; - - -- 3. Side effect: update km la mașina clientului - execute immediate 'update ' || v_gcs || '.dev_masiniclienti - set kmint=:1 where id_masiniclient=:2' - using pnKmInt, pnIdMC; -end; +select SEQ_NOM_LUCRARI.NEXTVAL into :new.ID_LUCRARE from dual; +pack_sesiune.dev_idLucrare := :new.id_lucrare; -- <-- session state pentru pack_auto ``` -**Observații critice (post-clarificare Marius 2026-04-11):** -- **Cele două INSERT-uri sunt pattern de inheritance, nu side effects**: - - Step 1 = INSERT în `NOM_LUCRARI` (parent, base ROA ERP) — creează header-ul generic - al comenzii (numele care va fi vizibil în ACT/RUL la facturare) - - Step 2 = INSERT în `DEV_ORDL` (child, extensie ROAAUTO) — creează extensia auto - legată prin `id_lucrare` - - Ambele sunt **esențiale**. Fără step 1, `dev_ordl` e orphan FK violation. -- **Side effect real** (step 3): UPDATE pe `dev_masiniclienti.kmint` — actualizează - odometrul mașinii clientului pentru a reflecta ultima intrare în service. Nu e parte - din creare, e sincronizare colaterală. Poate fi omis în prototype. -- **Dependency pe `pack_sesiune.dev_idLucrare`** — după step 1, trigger-ul pe `nom_lucrari` - (probabil `TRG_NOM_LUCRARI_BEFOINS`) populează `pack_sesiune.dev_idLucrare := :new.id_lucrare`. - Step 2 citește acest state session pentru a completa `id_lucrare` în `dev_ordl`. - **Pattern-ul vine din ROA ERP-ul mainframe-era**, unde session state era modul standard - de comunicare între trigger și procedură. **Nu e bug, e convenție istorică.** -- **Pentru roa2web bypass e trivial**: folosim `RETURNING id_lucrare INTO v_local` după - INSERT-ul pe `nom_lucrari` — trigger-ul încă populează `pack_sesiune.dev_idLucrare` - (dacă există în MARIUSM_AUTO), dar noi îl ignorăm și citim direct prin RETURNING clause. - Standard Oracle, zero dependency. Confirmat prin pattern-ul identic la `dev_ordl` - (`TRG_DEV_ORDL_BEFOINS` la triggere.sql:1165-1172 — `SEQ_DEV_ORDL.NEXTVAL INTO :new.id_ordl` + - `pack_sesiune.dev_idOrdl := :new.id_ordl`). -- `datai` și `dataoraad` sunt ambele `sysdate` local — nu primite ca param. +**Implicație pentru roa2web:** după `INSERT INTO nom_lucrari ... RETURNING id_lucrare INTO v_local`, +ai id-ul în două locuri simultan — în `v_local` (prin RETURNING) și în +`pack_sesiune.dev_idLucrare` (prin trigger). Poți folosi oricare. `pack_auto.dev_adauga_lucrare` +folosește intern `pack_sesiune.dev_idLucrare` pentru step-ul 2 (INSERT în `DEV_ORDL`). -### 4.2. Versiunea PRODUCȚIE: `pack_auto.dev_adauga_lucrare` (17 IN + 1 OUT) +**Trigger `TRG_NOM_LUCRARI_BEFOUPD`:** cheamă `pack_audit.verifica_val(...)` pentru fiecare +câmp modificat → toate UPDATE-urile pe `NOM_LUCRARI` sunt **audit trail-uite automat** +într-un pachet separat `pack_audit` (nu am încă sursa, nu e în scope imediat). -**Sursa:** `Programe/oproceduri_devize.prg:147-148` — doar CALL-ul VFP. Body-ul **NU** e în -`Scripturi_instalare/packages.sql` — pachetul `pack_auto` a fost adăugat după install. -Body-ul real trăiește doar în DB-ul MARIUS-ului. +--- + +## 4. DEV_OPER — liniile de operații manoperă (doar) + +**Important:** pentru service auto ROAAUTO, `DEV_OPER` conține **numai operații de manoperă**. +Deși schema fizică are coloanele `id_articol`, `id_rul_aux`, `id_dev_estimare_rep` (probabil +pentru compatibilitate cu alt produs de producție care partajează aceeași tabelă), **SP-urile +`pack_auto.*` pentru service auto nu le populează**. Verificare în body-ul `dev_adauga_operatie` +și `dev_adauga_oper_fact`: ambele inserează doar `id_norme`, nu `id_articol`. -**Call-ul din VFP:** ```sql -begin - pack_auto.dev_adauga_lucrare( - ?gcS, ?gnAn, ?gnLuna, ?gnIdUtil, ?pcNr, ?pnIdInsp, - ?pnIdAsig, ?pcNrDosar, ?pnIdMC, ?pnKmInt, ?pnOreFct, - to_date(?, 'DD/MM/YYYY'), - ?pntipcom, ?pcSirIDOperatiiClient, ?pcObservatii, - ?pcDefectiuni, ?pnIdPartRef, ?@pnIdOrdl - ); -end; +DEV_OPER ( + id_oper NUMBER(10) NN PK, + id_ordl NUMBER(10) NN FK → DEV_ORDL, + id_norme NUMBER(10) FK → DEV_NOM_NORME -- SERVICE AUTO: mereu non-NULL + timpn NUMBER(8,3) NN default 0, -- ore manoperă + pret NUMBER(17,4) NN default 0, -- preț oră (lei/oră) + datai DATE NN default SYSDATE, + id_sectie NUMBER(5) FK → NOM_SECTII, + id_util NUMBER(5), -- validator (populat la validare) + dataora DATE, -- momentul validării + id_utili NUMBER(5), -- creator (introducător) + id_utils NUMBER(5), -- user care a șters + dataoras DATE, + sters NUMBER(1) NN default 0, + validat NUMBER(1) NN default 0, + nou NUMBER(1) NN default 0, -- flag heritage-currency RON/ROL + id_fact NUMBER(20) FK → DOCUMENTE -- populat la facturare + -- Coloanele următoare există în DDL dar NU sunt folosite de service auto: + -- id_articol NUMBER(20) FK → NOM_ARTICOLE (pentru alt produs: producție) + -- id_dev_estimare_rep NUMBER(20) FK → DEV_ESTIMARI_REP (pentru alt produs) + -- id_rul_aux NUMBER(20) FK → RUL_AUXILIAR (pentru alt produs) +) ``` -**5 params adăugați în v2** față de v1: -- `pcNrDosar` — nr dosar daună (pentru garanție cu asigurator) -- `pnOreFct` — estimare ore manoperă la intrare -- `pcSirIDOperatiiClient` — listă operații pre-selectate de client (CSV de IDs) -- `pcObservatii` / `pcDefectiuni` — notes structurate -- `pnIdPartRef` — partener referent +**Materialele consumate NU sunt aici.** Sunt în **`RUL.id_lucrare`** (vezi secțiunea 8 +pentru flux-ul de bon consum). -**Sursa body-ului real în MARIUSM_AUTO** — de extras în săpt 3 cu: +**Câmpul `nou`** = flag heritage-currency (RON denominat 2005+ vs vechiul ROL). Setat +automat în SP-uri pe baza comparației lună curentă vs `pack_sesiune.GET_ANRON()` / +`GET_LUNARON()`. Pentru orice lucrare modernă (post-2005) → mereu `nou = 1`. View-urile +`AUTO_VOPER` conțin un `CASE` care împarte `pret` la 10000 pentru valorile ROL vechi. +Artefact istoric, zero impact asupra prototype-ului nou. + +**Trigger `TRG_DEV_OPER_BEFOINS`:** ```sql -SELECT text FROM all_source -WHERE owner='MARIUSM_AUTO' AND name='PACK_AUTO' AND type='PACKAGE BODY' -ORDER BY line; +select SEQ_dev_oper.NEXTVAL into :new.id_oper from dual; +``` +(Nu populează session state — deosebire față de DEV_ORDL.) + +--- + +## 5. DEV_ESTIMARI_REP — deviz estimativ pentru client (pre-sale) + +**Rol:** deviz estimativ pe care service-ul îl oferă clientului **înainte** ca lucrarea +să înceapă — o "ofertă" care conține estimarea de manoperă și materiale pentru o reparație +propusă. **Este complet separat de lucrarea reală.** + +``` +DEV_ESTIMARI_REP ≠ DEV_OPER ≠ RUL (id_lucrare) +(deviz estimativ (manopera reală (bonuri consum materiale + către client, cronometrată pe reale pe comandă, din stoc, + manopera + materiale) comandă) din warehouse generic ROA) ``` -### 4.3. Implicații pentru prototype — trei opțiuni +Cele **trei flux-uri sunt independente**: -| # | Strategie | Pro | Contra | -|---|---|---|---| -| **1** | Reuse `pack_auto.dev_adauga_lucrare` v2 direct (17 params, majoritatea defaults hardcodate în Python) | Hedge max: dovedește reuse pachet producție inclusiv side-effects. Template deliverable max value. | Depinde de `pack_sesiune.dev_idLucrare` care nu e inițializat în sesiunea roa2web. Risc că pică la primul call pentru context lipsă. | -| **2** | Reuse `pack_devize.dev_adauga_lucrare` v1 (12 params, body vizibil în sursă) | Știi exact ce face SP-ul (body în `packages.sql`). 5 params mai puțin. | Același bug `pack_sesiune`. 12 params sunt încă mult pentru 2h/săpt. | -| **3** | **SP nou minimal** `SP_CREEAZA_COMANDA_PROTOTIP` cu INSERT direct în `dev_ordl` cu câmpurile minime + `returning id_ordl` | Control total. Zero dependențe. Simplu. Testable. Hypothesis #1 probată la fel de bine. | Bypass-uie business logic. Template deliverable e "SP simplu", nu "reuse pachet legacy". Hedge slăbit puțin. | +1. **DEV_ESTIMARI_REP** — înainte de lucrare, utilizatorul face o estimare pentru client + cu linii mixte (manoperă estimată + materiale estimate). Clientul primește devizul, + decide dacă aprobă lucrarea. +2. **DEV_OPER** — în timpul lucrării, se înregistrează manopera efectiv executată + (doar operații cu `id_norme`, timp real, preț manoperă). +3. **RUL cu `id_lucrare`** — în paralel, bonurile de consum reale scot materiale din + stoc tag-uite pe comandă. -**Recomandare actualizată (după descoperirea `pack_sesiune`):** +**Nu există sincronizare automată** între estimare și real — un client poate aproba un +deviz estimativ de 1000 lei, dar lucrarea reală să se termine la 1200 lei (fie pentru +că s-a găsit ceva în plus, fie pentru că au fost piese mai scumpe decât s-a estimat). +Comparația real vs. estimat se face probabil la facturare sau în raporte. -**Opțiunea 3** (SP nou minimal) e acum **recomandarea principală**. Motivul: `pack_sesiune` -introduce un coupling invizibil cu session state VFP care ar sabota prototype-ul la prima -tentativă — iar ipoteza #1 (Python+oracledb apelează PL/SQL cu OUT params) e probată la fel -de bine de un SP simplu ca de unul complex. Reuse-ul production-logic rămâne pentru phase 2. +**Schema:** fiecare linie e fie manoperă estimată (`id_norme` NN) fie material estimat +(`id_articol` NN): -**Hedge-ul rămâne valabil**: template-ul deliverable poate documenta ambele pattern-uri -("pentru SP-uri simple: pattern X; pentru SP-uri legacy cu `pack_sesiune`: investigă în -phase 2 cum să inițializezi session state în Python"). +```sql +DEV_ESTIMARI_REP ( + id_dev_estimare_rep NUMBER(20) NN PK, + id_lucrare NUMBER(20) NN FK → NOM_LUCRARI, + id_norme NUMBER(20) FK → DEV_NOM_NORME, + id_articol NUMBER(20) FK → NOM_ARTICOLE, + cantitate NUMBER(20,4) NN, + pret NUMBER(20,4) NN default 0, + pret_cu_tva NUMBER(1) NN default 0, + cota_tva NUMBER(10), + id_sectie NUMBER(10) FK → NOM_SECTII, + id_pol NUMBER(20) FK → CRM_POLITICI_PRETURI, + id_dev_estimare_prod NUMBER(20) FK → DEV_ESTIMARI_PRODUSE, + id_articol_grupare NUMBER(20), + cu_pierderi NUMBER(1) NN default 0, + id_valuta NUMBER(10), + semifabricat_ales / semifabricat_id NUMBER(10), + id_util / dataora, id_utils / dataoras, sters +) +``` -**Decision point săpt 3/4**: verifică body-ul `pack_auto.dev_adauga_lucrare` în MARIUSM_AUTO. -Dacă e refactored fără `pack_sesiune`, revin-o la opțiunea 1. Altfel, opțiunea 3. +**View-ul UI:** `AUTO_VESTIMARI_REP` — denormalizează `dev_estimari_rep` cu `dev_nom_norme` + +`nom_articole`, calculează `pretftva` / `pretctva` / `valftva` / `valtva` / `valoare` prin +`pack_sesiune.calculeaza_pret_*` + `calculeaza_total_*`. -**SP minimal propus (opțiunea 3) — corectat pentru inheritance pattern:** +**SP-uri pentru estimare** (din `pack_auto`): +- `adauga_manopera_de(id_lucrare, id_norme, cantitate, pret, pret_cu_tva, cota_tva, id_util)` +- `adauga_material_de(id_lucrare, id_articol, cantitate, pret, pret_cu_tva, cota_tva, id_util)` +- `modifica_pret_de`, `modifica_cota_tva_de`, `modifica_cantitate_de`, `sterge_articol_de` + +**NOT IN SCOPE pentru prototype** — estimarea e un sub-flux pre-sale dedicat. + +--- + +## 6. DEV_TIP_DEVIZ — enum tip comandă (cu flag închidere prin validare) + +```sql +DEV_TIP_DEVIZ ( + id_tip NUMBER(5) NN PK, + denumire VARCHAR2(50) NN, + sters NUMBER(1) NN default 0, + inch_validare NUMBER(1) NN default 1 -- 1 = închidere prin validare, 0 = alt mod +) +``` + +**Coloana `inch_validare`** e cheia pentru a înțelege flux-ul post-validare. Default = 1 +(închidere implicită prin validare). Setată per tip-comandă prin +`pack_auto.setOptiuneInchidere(v_tip, v_inchidere_validare)` și citită prin +`pack_auto.getOptiuneInchidere(v_tip) RETURN NUMBER`. + +**Valori live confirmate 2026-04-11 de Marius (`SELECT id_tip, denumire, sters, inch_validare +FROM MARIUSM_AUTO.DEV_TIP_DEVIZ ORDER BY id_tip`):** + +| id_tip | denumire | prefix | sters | inch_validare | Natura comenzii | Închidere reală | +|---|---|---|---|---|---|---| +| 1 | POST GARANTIE | *(fără)* | 0 | **0** | Se facturează client direct | prin factură (`pack_facturare.*`) → `facturat=1` | +| 2 | GARANTIE | G | 0 | **0** | Se facturează asigurator prin dosar daună | prin factură → `facturat=1` | +| 3 | REGIE | R | 0 | **1** | Auto proprii — NU se facturează | **validare directă** — `validat=1` suficient | +| 4 | PREGATIRE | P | 0 | **0** | Se facturează | prin factură → `facturat=1` | +| 5 | REGIE 2 | *(fără)* | 0 | **0** | Se facturează | prin factură → `facturat=1` | +| 6 | PRODUCTIE | PR | 0 | **1** | Producție internă — NU se facturează | **validare directă** — `validat=1` suficient | +| 7 | CONSTATARE | C | 0 | **1** | Doar diagnostic — NU se facturează | **validare directă** — `validat=1` suficient | + +Prefixele sunt construite în VFP la `oproceduri_devize.prg:108-120` (hardcodate în client, +nu în DB). + +**Semantica `inch_validare` (corectată 2026-04-11 după clarificare iterativă Marius):** + +Flag-ul decide **dacă validarea comenzii e suficientă pentru a o considera închisă, sau +e necesară încă o notă contabilă suplimentară**. + +- **`inch_validare = 1`** → **Validarea ESTE închiderea.** Comanda se consideră închisă + prin simplul fapt că `DEV_ORDL.VALIDAT = 1`. **NU** se generează nicio notă contabilă + suplimentară. Folosit tipic pentru comenzi interne (REGIE = auto proprii, PRODUCTIE, + CONSTATARE) unde nu se facturează nimic și nu se dorește impact contabil la închidere. + +- **`inch_validare = 0`** → **Validarea NU e închiderea.** Comanda rămâne "deschisă" + contabil chiar și după `VALIDAT = 1`. E nevoie de o notă contabilă suplimentară pentru + a o închide real: + - Pentru tipuri **facturabile** (GARANTIE, POST GARANTIE, PREGATIRE, REGIE 2) → nota + vine prin **facturare** (`pack_facturare.*`), care setează și `facturat = 1` pe flux-ul + de agregate. + - Pentru tipuri **nefacturabile** (teoretic REGIE/PRODUCTIE dacă ar fi configurate așa) → + se generează o notă contabilă `711 = 332` care recunoaște venitul intern și închide + stocul "servicii în curs de execuție". + +**Dovada în cod — view-urile `AUTO_LISTARE_MAN_TOT_COM` și `AUTO_LISTARE_MAN_TOT_DESF`** +(`mariusm_ddl_export.sql:1795-1800` și `:1842-1847`) au condiția **exactă** pentru "comandă +închisă în luna curentă": + +```sql +WHERE a.sters = 0 + AND ( (extract(month from a.dataoravalid) = pack_sesiune.getluna() + AND extract(year from a.dataoravalid) = pack_sesiune.getan() + AND a.validat = 1 + AND e.inch_validare = 1) -- inchis prin validare singura + OR + (extract(month from b.dataact) = pack_sesiune.getluna() + AND extract(year from b.dataact) = pack_sesiune.getan() + AND b.facturat = 1 + AND e.inch_validare = 0)) -- inchis prin facturare/nota +``` + +Cu alte cuvinte, view-ul consideră o comandă "închisă" DOAR dacă: +- **`inch_validare = 1` + `VALIDAT = 1`** (calea A: validarea închide) **SAU** +- **`inch_validare = 0` + `FACTURAT = 1`** (calea B: trebuie factură/notă de închidere) + +**Configurare live MARIUSM_AUTO (2026-04-11):** + +| Tip comandă | Configurare | Efect | +|---|---|---| +| REGIE, PRODUCTIE, CONSTATARE | `inch_validare = 1` | Validarea **e** închiderea. Zero notă contabilă. | +| POST GARANTIE, GARANTIE, PREGATIRE, REGIE 2 | `inch_validare = 0` | Validarea nu e suficientă. Trebuie factură. | + +Marius poate schimba configurarea per tip — ex: dacă schimbă REGIE la `inch_validare = 0`, +atunci comenzile REGIE nu se mai consideră închise la validare, ci necesită o notă contabilă +`711 = 332` suplimentară înainte ca `FACTURAT = 1` să apară în agregat. + +**`dev_arhiveaza_comanda` este o procedură complet separată** (setează `INCHIS_FORTAT = 1`), +apelată doar pentru a abandona forțat o comandă — nu e legată de `inch_validare`. Folosit +doar pentru cazuri excepționale (client a renunțat, constatare fără urmare tehnică, etc.). + +**Implicație pentru prototype (creare only):** irelevant pentru scope wall. **Critic pentru +phase 2+** când se implementează închiderea comenzii: UI-ul trebuie să știe că validarea +singură NU închide în toate cazurile, și să navigheze la facturare sau notă contabilă de +închidere în funcție de `tip.inch_validare`. + +--- + +## 7. Pachetul principal `pack_auto` — map procedure → tabel + +Map complet (din `docs/service-auto/pack_auto.pck`): + +### 7.1. Create comandă + +| Procedură | Operație | +|---|---| +| `dev_adauga_lucrare` (15 params, overload scurt) | Wrapper peste versiunea lungă. Apelează versiunea cu 17 params cu defaults pe `pnOreFct`, `pcObservatii`, `pcDefectiuni`. | +| `dev_adauga_lucrare` (17 params, overload lung) | **Flux real:** (1) INSERT `NOM_LUCRARI(nrord, id_mod=1200)`; (2) agregă `solicitari_client` din `DEV_NOM_NORME.DENOP` pentru id-urile din CSV; (3) INSERT `DEV_ORDL` cu toate câmpurile; (4) UPDATE `DEV_MASINICLIENTI` SET `kmint`, `ore_functionare`. Verifică mai întâi că `NRORD` nu e duplicat pe `NOM_LUCRARI` (aruncă `ORA-20000`). | + +**Dependențe runtime ale versiunii lungi:** +- `pack_sesiune.dev_idLucrare` — populat de `TRG_NOM_LUCRARI_BEFOINS`, citit intern la step 3 +- `pack_contafin.getCotaTVAStandard(luna, an)` — pentru `proc_tvav` (citit din `CALENDAR` / config lunar) +- `STRINGAGG(DENOP)` agregat peste `DEV_NOM_NORME.ID_NORME IN (...)` unde `...` provine din parsarea CSV +- (Oracle 19c+ are `STRINGAGG` ca user-defined aggregate; verifică dacă există în MARIUSM_AUTO) + +### 7.2. Normare operații + +| Procedură | Operație | +|---|---| +| `dev_adauga_operatie(v_gcs, id_sectie, id_ordl, pret, id_util, timpn, id_norme, csv_id_mecanic, an?, luna?)` | **(1)** Citește `DEV_ORDL.VALIDAT` → dacă = 1, aruncă `ORA-20000 Comanda validata nu se mai poate modifica`. **(2)** INSERT `DEV_OPER` cu `validat=0, nou=1`. **(3)** Sparge `csv_id_mecanic` pe `;` → insert multiplu în `DEV_OPER_MECANICI` cu `ore = timpn / count(mecanici)`. | +| `dev_actualizeaza_operatie(v_gcs, camp, valoare_noua, id_oper, luna, an)` | Verifică `VALIDAT=0`. Actualizează `PRET` sau `TIMPN`. Suportă tranziția RON/ROL: dacă `DATAI < get_lunaron()` și luna-țintă ≥ get_lunaron() atunci `valoare_noua * 10000`. | +| `dev_valideaza_operatii(v_gcs, id_ordl, id_util)` | Verifică mai întâi `DEV_ORDL.VALIDAT = 0`. Setează `VALIDAT=1, ID_UTIL, DATAORA=SYSDATE` pe toate liniile din `DEV_OPER WHERE id_ordl = X AND sters=0 AND validat=0`. | +| `valideaza_operatie(schema, validat, id_oper, id_util)` | Setează manual `VALIDAT` pe o singură operație. | +| `sterge_operatie(schema, id_oper, id_util)` | Soft delete: `sters=1, dataoras=SYSDATE`. | +| `modifica_sectie(schema, id_sectie, id_oper, id_util)` | UPDATE secție pe operație. | +| `dev_distribuie_timp_n(v_luna, v_an)` | **MERGE** peste `DEV_OPER_MECANICI`: pentru operațiile unde `sum(ore_mecanici) <> timpn`, redistribuie uniform. Folosit ca housekeeping periodic. | + +**View-ul UI pentru normare:** `AUTO_NORMARE_COMENZI` — filtrat pe +`inchis_fortat = 0 AND validat = 0` (din `AUTO_COMENZI_VALIDATE`). + +### 7.3. Validare comandă + +| Procedură | Operație | +|---|---| +| `dev_valideaza_comanda(v_gcs, id_ordl, id_util, an?, luna?)` | **(1)** Verifică `DEV_OPER WHERE id_ordl = X AND sters=0 AND validat=0` → dacă există, aruncă `ORA-20000 Mai sunt operatii nevalidate`. **(2)** Calculează `ldData` = SYSDATE sau ultima zi a lunii vechi. **(3)** Verifică `CALENDAR` că luna e deschisă. **(4)** UPDATE `DEV_ORDL SET VALIDAT=1, ID_UTIL_VALID, DATAORAVALID=ldData, PROC_TVAV = pack_contafin.getCotaTVAStandard(luna, an)`. | +| `dev_invalideaza_comanda(v_gcs, id_ordl, id_utils)` | Reverse: `VALIDAT=0, DATAORAVALID=NULL`, recalculează `PROC_TVAV` din luna/an curentă a comenzii. | +| `dev_arhiveaza_comanda(id_ordl, id_util)` | **Alternativă la validare** — pentru tipuri cu `inch_validare=0`. Verifică `CALENDAR` luna deschisă, setează `INCHIS_FORTAT=1, ID_UTIL_INCHIS, DATAORAINCHIS = SYSDATE`. | +| `dev_dezarhiveaza_comanda(id_ordl)` | Reverse: `INCHIS_FORTAT=0`. | +| `dev_sterge_comanda(schema, id_util, id_ordl, id_lucrare)` | Verifică că `RUL WHERE id_lucrare = X AND sters=0` e gol la sum(cante*pretv). Verifică `DEV_OPER WHERE id_ordl = X AND sters=0` = 0. Setează `sters=1` pe `DEV_ORDL` și `inactiv=1` pe `NOM_LUCRARI`. | + +**View-ul UI:** `AUTO_VALIDARE_COMENZI` — JOIN peste `AUTO_COMENZI_VALIDATE` + +`AUTO_VORDL_MAN` (manoperă agregată) + `AUTO_VORDL_MAT` (materiale agregate) + +`AUTO_VORDL_FACTURI` (info factură emisă). + +**Flux de validare condiționat:** tipul comenzii (`dev_tip_deviz.inch_validare`) decide care +dintre `dev_valideaza_comanda` (dacă `inch_validare=1`) sau `dev_arhiveaza_comanda` +(dacă `inch_validare=0`) se apelează la închiderea comenzii. View-ul `AUTO_COMENZI_VALIDATE` +are chiar o logică "time-aware": consideră o comandă validată **doar dacă** `dataoravalid` +e ≤ luna curentă din `pack_sesiune.getluna() + pack_sesiune.getan() * 12`. Validările +în viitor apar ca `validat=0` în view, ceea ce e intenționat pentru izolare contabilă +pe lună. + +### 7.4. Facturare + +| Procedură | Operație | +|---|---| +| `dev_adauga_oper_fact(schema, id_ordl, id_sectie, id_norme, total_f_tva, timpn, ore, id_util, id_mecanic)` | Folosit pentru tipuri speciale ITP/SPALARE/DIVERSE unde se adaugă o operație "sintetică" direct la facturare. Setează `DEV_ORDL.VALIDAT=1` + INSERT în `DEV_OPER` + `DEV_OPER_MECANICI`. `V_PRET = total_f_tva / timpn` (calcul reverse pentru a păstra total exact). | +| `actualizeaza_deviz(proc_tvav, csv_id_ordl, id_set)` | **Apelat la final de facturare**. (1) Ia ultimul `ID_FACT` din `ACT WHERE cod = current_cod AND scd NOT LIKE '5%'`. (2) UPDATE `DEV_ORDL SET PROC_TVAV` pentru id-urile din CSV. (3) UPDATE `RUL SET ID_FACT = v_id_fact WHERE id_set <> 229 AND id_lucrare IN (...)` (index hint `IDX_RUL_001`). (4) Pentru `id_set` în (31003-31011), UPDATE și `NOM_LUCRARI SET ID_FACT`. | +| `citeste_sume_stornare(csv_id_lucrare, delim, cursor OUT)` | Citește sume storno avans pentru listele CSV de lucrări. | +| `citeste_date_avans(csv_id_lucrare, delim, cursor OUT)` | Citește avansurile pentru facturare. | +| `citeste_discount_contract / salveaza_discount_contract` | Citește / salvează discount-uri contract per partener + sucursală. | + +**Flux facturare real (VFP `factureaza_comanda` → `factureaza_deviz` → +`pack_facturare.*`):** + +``` +1. [pack_auto.dev_adauga_lucrare] — uneori se creează o comandă ad-hoc pentru facturi + ITP/SPALARE/DIVERSE (altfel se pleacă de la o comandă existentă) +2. User completează date factură (client, valoare, TVA, incasare) în VFP form +3. [lans(lnIdSet, ...)] — VFP generează note contabile pentru factură în cursor actactan +4. [verificare_note_contabile()] — validare locală VFP +5. [pack_auto.dev_adauga_oper_fact] — pentru tipuri ITP/SPALARE/DIVERSE, adaugă operația sintetică +6. [factureaza_deviz]: + a. [pack_facturare.initializeaza_date_factura(...)] → INSERT în VANZARI header (20+ param) + b. pentru fiecare articol în crsvanztemp: + [pack_facturare.adauga_articol_factura_deviz(...)] → INSERT în VANZARI_DETALII + c. [oscrie_in_fisiere(...)] — scrie cursor actactan în ACT (registrul jurnal) + d. [pack_facturare.scrie_in_vanzari(...)] → finalizare VANZARI (incasare, discount, delegat) + apelează în aceeași tranzacție: + [pack_auto.actualizeaza_deviz(proc_tvav, csv_id_ordl, id_set)] + → UPDATE DEV_ORDL.PROC_TVAV + RUL.ID_FACT + NOM_LUCRARI.ID_FACT (pentru id_set specifice) + e. MERGE INTO vanzari SET id_fact FROM act WHERE cod=v.cod AND scd='4111' +7. COMMIT sau ROLLBACK +``` + +**Tabele atinse la facturare:** `VANZARI`, `VANZARI_DETALII`, `ACT`, `DEV_ORDL.PROC_TVAV`, +`RUL.ID_FACT` (pentru materiale consumate), `NOM_LUCRARI.ID_FACT`, `ACT.ID_FACT` +(prin pack_facturare). **IN SCOPE abia pentru phase 3-4**, după ce prototype-ul probează +crearea unei comenzi simple. + +### 7.5. Alte operații + +- `modifica_date_comanda(id_ordl, id_tip, kmint, ore_functionare, id_util)` — edit rapid +- `modifica_tip_comanda(schema, id_tip, id_ordl, id_util)` — schimbă tip +- `modifica_client_comanda(schema, id_ordl, id_masiniclient, id_util)` — schimbă mașina + +--- + +## 8. Bonuri consum = **flow generic ROA, în `RUL.id_lucrare`** + +`pack_auto` **nu are** nicio procedură pentru bonuri consum. Materialele consumate pe +comandă sunt **100% în tabela generică `RUL`** (rulaje ROA), tag-uite prin +`RUL.ID_LUCRARE = X`. Flux-ul: + +1. VFP `ointroduceri.prg` cu `tip=3` (BON CONSUM) deschide un form de introducere articole + din stoc → user selectează linii + alege comanda (id_lucrare) → salvare. +2. Generic ROA warehouse SP generează rânduri în `RUL` cu: + - `ID_LUCRARE = X` (tag-ul comenzii) + - `SCD = '3xx'` (contul de stoc), `SCC = '6xx'` sau `'332'` (contul de destinație) + - `CANTE`, `PRETV` (cantitate + preț unitar) + - `ID_SET` care tipizează operațiunea de stoc +3. **La afișarea devizului** (view-urile `AUTO_VORDL_MAT`, `AUTO_VALIDARE_COMENZI`), + materialele se citesc ca agregat din `MV_ORDL_MAT` (materialized view peste `RUL`) + pe `id_lucrare`. +4. **La facturare**, `factureaza_deviz` citește suma materialelor din cursoarele `actactan` + + `vanzari` (generate de `lans(lnIdSet...)` local în VFP), apoi + `pack_auto.actualizeaza_deviz` face `UPDATE RUL SET ID_FACT = :v_id_fact + WHERE ID_LUCRARE IN (...) AND ID_SET <> 229` — marchează materialele ca facturate. + +**Impact asupra DEV_OPER:** zero. Pentru service auto, `DEV_OPER` conține **doar manoperă**; +materialele nu intră în DEV_OPER deloc. + +**Implicație pentru prototype:** Bonul de consum este **out of scope**. Flux-ul atinge +pachete generice ROA (neauditate) + tabela `RUL` (nu e în scheme ROAAUTO dedicate). Dacă +phase 2 cere "service auto complet", bonul de consum va fi un sub-modul separat cu propriul +audit asupra pachetului generic ROA `pack_intrari_iesiri` (sau similar). + +**Observație specială pentru tipurile nefacturabile (`inch_validare = 1` în live MARIUSM_AUTO):** +REGIE/PRODUCTIE/CONSTATARE se închid **prin simpla validare** — zero notă contabilă. +Bonurile de consum materiale rămân în `RUL` cu `ID_FACT = NULL` permanent (fără a fi legate +de vreo factură), dar comanda e considerată "închisă" în agregatele de raportare. Impactul +contabil al materialelor consumate pe aceste comenzi se face prin flux-ul generic ROA de +rulaje (stocul e deja scăzut prin `scd='3xx', scc='6xx'` la momentul bonului de consum). + +**Dacă Marius ar schimba REGIE la `inch_validare = 0`** (scenariu teoretic), atunci pentru +a închide o comandă REGIE ar trebui: +1. Validare (`VALIDAT = 1`) — doar un pas intermediar +2. O notă contabilă suplimentară `711 = 332` (care recunoaște venitul intern aferent + materialelor deja consumate) — această notă trebuie să seteze `facturat = 1` sau un + mecanism echivalent ca să apară în agregatele view-ului +3. Abia atunci view-ul `AUTO_LISTARE_MAN_TOT_COM` consideră comanda "închisă" + +Acest scenariu nu e activ în configurarea curentă, dar e permis de schema. + +--- + +## 9. View-uri cheie pentru UI service auto + +Toate definite în `mariusm_ddl_export.sql` (secțiunea VIEWS). Cele relevante pentru ecrane: + +| View | Rol | JOIN-uri principale | +|---|---|---| +| `AUTO_COMENZI_VALIDATE` | Base view — "comenzi cu time-aware validat flag" (validat = 1 doar dacă `dataoravalid` ≤ luna curentă session) | `dev_ordl` + `syn_utilizatori` + `nom_lucrari` | +| `AUTO_NORMARE_COMENZI` | Listare comenzi care așteaptă normare operații. **Filtru tipic:** `inchis_fortat=0 AND validat=0` | `auto_comenzi_validate` + `auto_vordl_facturi` + `dev_masiniclienti` + `nom_parteneri` + `dev_tip_deviz` | +| `AUTO_VALIDARE_COMENZI` | Listare comenzi în curs de validare + manopera/materiale agregate | `auto_comenzi_validate` + `auto_vordl_man` + `auto_vordl_mat` + `auto_vordl_facturi` + lookup-uri | +| `AUTO_ORDL_FACTURARE` | Listare comenzi pregătite pentru facturare | `dev_ordl` + `nom_lucrari` + `dev_masiniclienti` + `nom_parteneri` + `dev_nom_masini` + `dev_nom_marci` + `dev_nom_asiguratori` + `dev_nom_inspectori` WHERE `sters = 0` | +| `AUTO_VORDL` | Listare completă comandă (toate câmpurile expuse) | ~10 JOIN-uri | +| `AUTO_VORDL_MAN` | Agregat manoperă pe comandă (sum după `pack_sesiune` RON/ROL) | derivat | +| `AUTO_VORDL_MAT` | Agregat materiale pe comandă — **folosește `MV_ORDL_MAT` (materialized view)** cu pack_sesiune currency logic | `MV_ORDL_MAT` grupat pe `id_lucrare` | +| `AUTO_VORDL_FACTURI` | Facturile emise per `id_lucrare` | derivat | +| `AUTO_VESTIMARI_REP` | Linii estimare pentru un deviz pre-sale | `dev_estimari_rep` + `dev_nom_norme` + `nom_articole` + `syn_utilizatori` | +| `AUTO_VOPER` | Liniile de operație cu lookup norme + ansamblu + mașină + secție + mecanic | `dev_oper` + `dev_nom_norme` + `dev_nom_ansamble` + `dev_nom_masini` + `nom_sectii` + `syn_utilizatori` | +| `AUTO_VOPER_DETALII_M` | Detalii mecanici per operație | `dev_oper_mecanici` + `dev_mecanici` + `nom_parteneri` | +| `AUTO_VMASINICLIENTI` | Lista mașini + clienți pentru dropdown-uri | `dev_masiniclienti` + `dev_nom_masini` + `dev_nom_marci` + `nom_parteneri` | +| `AUTO_VNORME` | Catalog norme manoperă pentru picker | `dev_nom_norme` + `dev_nom_masini` + `dev_nom_ansamble` | + +**Notă `pack_sesiune` currency logic:** multe view-uri (`AUTO_VOPER`, `AUTO_VORDL_MAT`) +conțin `CASE WHEN pack_sesiune.getAn()*12 + getLuna() >= GET_ANRON()*12 + GET_LUNARON() THEN ron ELSE rol END`. +Acesta e un heritage-currency switch (RON denominat 2005 vs vechiul ROL) — după 2005 toate +înregistrările noi sunt RON, deci în practică întotdeauna se ia branch-ul RON. **Pentru +prototype modern, acest CASE e un artefact istoric** care nu trebuie replicat — noi inserăm +direct RON fără switch. + +--- + +## 10. Flux end-to-end real (VFP → DB) + +### 10.1. Creare comandă + +``` +[VFP: frm_gencom] Submit + ↓ +VFP SQL: begin pack_auto.dev_adauga_lucrare( + gcS, gnAn, gnLuna, gnIdUtil, + pcNr, -- 'G12345' / 'R...' + pnIdInsp, + pnIdAsig, pcNrDosar, + pnIdMC, pnKmInt, pnOreFct, + to_date(pdTermen, 'DD/MM/YYYY'), + pntipcom, + pcSirIDOperatiiClient, + pcObservatii, pcDefectiuni, + pnIdPartRef, + ?@pnIdOrdl); end; + ↓ +PACK_AUTO.DEV_ADAUGA_LUCRARE (overload 17 params): + 1. SELECT COUNT(*) FROM NOM_LUCRARI WHERE sters=0 AND nrord=pcNr + → IF > 0 THEN RAISE ORA-20000 'Mai exista o lucrare...' + 2. INSERT INTO NOM_LUCRARI (nrord, id_mod) VALUES (pcNr, 1200) + → TRG_NOM_LUCRARI_BEFOINS populează :new.id_lucrare din SEQ_NOM_LUCRARI + + pack_sesiune.dev_idLucrare := :new.id_lucrare + 3. IF pcSirIdOperatii IS NOT NULL THEN + SELECT STRINGAGG(DENOP) INTO v_solicitari_client FROM DEV_NOM_NORME + WHERE id_norme IN () + 4. INSERT INTO DEV_ORDL (an, luna, id_inspector, id_lucrare, datai, + id_util_ad, id_masiniclient, id_asigurator, id_tip, kmint, + ore_functionare, termen, nr_dosar, dataoraad, solicitari_client, + observatii, defectiuni, proc_tvav, id_part_ref) + VALUES (tnAn, tnLuna, pnIdInsp, + pack_sesiune.dev_idLucrare, -- <-- citit din session state populat la pasul 2 + SYSDATE, tnIdUtil, pnIdMC, pnIdAsig, pnTipCom, pnKmInt, + pnOreFct, pdTermen, pcNrDosar, SYSDATE, v_solicitari_client, + pcObservatii, pcDefectiuni, + pack_contafin.getCotaTVAStandard(tnLuna, tnAn), + decode(pnIdPartRef, 0, NULL, pnIdPartRef)) + RETURNING id_ordl INTO pnIdOrdl + → TRG_DEV_ORDL_BEFOINS populează :new.id_ordl din SEQ_DEV_ORDL + + pack_sesiune.dev_idOrdl := :new.id_ordl + 5. UPDATE DEV_MASINICLIENTI SET kmint, ore_functionare WHERE id_masiniclient=pnIdMC +``` + +**Nu touch-uiește ACT, nici RUL, nici VANZARI.** Facturare e un flux separat. + +### 10.2. Normare operații (adaugă manoperă pe o comandă existentă) + +``` +[VFP: normare_comanda()] deschide FRM_NOM_COM cu cursor AUTO_NORMARE_COMENZI + ↓ +User selectează o comandă + alege norme din AUTO_VNORME + alocă mecanici + ↓ +VFP SQL: begin pack_auto.dev_adauga_operatie( + gcS, pnid_sectie, pnIdOrdl, pnpret, gnIdUtil, + pntimpn, pnid_norme, pcsir_idmecanic); end; + ↓ +PACK_AUTO.DEV_ADAUGA_OPERATIE: + 1. SELECT VALIDAT FROM DEV_ORDL WHERE id_ordl = X + → IF validat=1 THEN RAISE ORA-20000 'Comanda validata nu mai poate fi modificata' + 2. INSERT INTO DEV_OPER (id_ordl, id_sectie, timpn, pret, id_norme, + id_utili, nou, datai, dataora) + VALUES (..., 1, SYSDATE, SYSDATE) + RETURNING id_oper INTO v_id_oper + → TRG_DEV_OPER_BEFOINS populează :new.id_oper din SEQ_dev_oper + 3. PARSE csv_id_mecanic pe ';' → FOR i IN 1..count LOOP + INSERT INTO DEV_OPER_MECANICI (id_oper, id_mecanic, ore) + VALUES (v_id_oper, id_mec_i, timpn / count) +``` + +### 10.3. Validare operații (marchează fiecare operație ca "gata") + +``` +[VFP user click "Valideaza operatii"] pe o comandă + ↓ +VFP SQL: begin pack_auto.dev_valideaza_operatii(gcS, pnIdOrdl, gnIdUtil); end; + ↓ +PACK_AUTO.DEV_VALIDEAZA_OPERATII: + 1. SELECT VALIDAT FROM DEV_ORDL WHERE id_ordl = X + → IF validat=1 THEN RAISE ORA-20000 'Comanda validata...' + 2. UPDATE DEV_OPER SET validat=1, id_util, dataora=SYSDATE + WHERE id_ordl = X AND sters=0 AND validat=0 +``` + +**Alternativ, linie cu linie:** +``` +begin pack_auto.dev_valideaza_operatie(gcS, pn_id_oper, gnIdUtil); end; +→ UPDATE DEV_OPER SET VALIDAT=1 WHERE id_oper=X +``` + +### 10.4. Validare comandă (finalizează comanda după ce toate operațiile sunt validate) + +``` +[VFP user click "Valideaza comanda"] + ↓ +VFP SQL: begin pack_auto.dev_valideaza_comanda(gcS, pnIdOrdl, gnIdUtil, an?, luna?); end; + ↓ +PACK_AUTO.DEV_VALIDEAZA_COMANDA: + 1. SELECT COUNT(*) FROM DEV_OPER WHERE id_ordl = X AND sters=0 AND validat=0 + → IF > 0 THEN RAISE ORA-20000 'Mai sunt operatii nevalidate' + 2. Calculează ldData: SYSDATE dacă luna curentă = luna_comandă, else LAST_DAY + 3. SELECT COUNT(*) FROM CALENDAR WHERE an=.. AND luna=.. + → IF 0 THEN RAISE ORA-20000 'Nu puteti valida deoarece nu este deschisa luna' + 4. UPDATE DEV_ORDL SET VALIDAT=1, ID_UTIL_VALID, DATAORAVALID=ldData, + PROC_TVAV = pack_contafin.getCotaTVAStandard(luna, an) + WHERE id_ordl = X +``` + +### 10.5. Închidere forțată (arhivare — pentru tipuri cu `inch_validare=0`) + +``` +[VFP user click "Inchide comanda" pe tip POST_GARANTIE/etc.] + ↓ +VFP SQL: begin pack_auto.dev_arhiveaza_comanda(pnIdOrdl, gnIdUtil); end; + ↓ +PACK_AUTO.DEV_ARHIVEAZA_COMANDA: + 1. Verifică CALENDAR luna curentă deschisă + 2. UPDATE DEV_ORDL SET INCHIS_FORTAT=1, ID_UTIL_INCHIS, DATAORAINCHIS=SYSDATE +``` + +### 10.6. Facturare + +Vezi secțiunea 7.4 de mai sus. IN SCOPE abia pentru phase 3-4. + +### 10.7. Bonuri consum + +Vezi secțiunea 8. Out of scope — e flux generic ROA. + +--- + +## 11. Labelurile UI (Romanian) + +| Câmp DB | Label UI (din VFP ground truth) | +|---|---| +| `id_tip` | **Tip comandă** | +| `nrinmat` (via masiniclienti) | **Număr înmatriculare** / **Mașină** | +| `id_part` (via masiniclienti.id_partener) | **Client** | +| `solicitari_client` (derivat din norme) | **Operații solicitate** | +| `kmint` | **Km la bord** | +| `ore_functionare` | **Ore funcționare** (pt utilitare) | +| `termen` | **Termen execuție** | +| `observatii` | **Observații** | +| `defectiuni` | **Defecțiuni** | +| `nr_dosar` | **Nr. dosar** (doar pentru tip=garanție) | +| `id_inspector` | **Inspector** | +| `id_asigurator` | **Asigurator** | +| `id_part_ref` | **Partener referent** | +| `id_agent` | **Agent vânzări** | + +**Toast-uri (convenție ROA2WEB din `ReceiptCreateUnifiedView.vue`):** +- Success: `summary="Comandă creată"`, `detail="Nr ${nr_comanda}"` +- Business error: `summary="Validare"`, `detail=` +- Infra: `summary="Eroare conexiune"` (503) / `"Eroare internă"` (500) + +--- + +## 12. Implicații pentru prototype-ul roa2web + +### 12.1. Scope wall reconfirmat + +Prototype-ul scrie **1 SP minimal pentru 1 acțiune = creare comandă**. Tot restul (normare, +validare operații/comandă, arhivare, facturare, bonuri consum, estimare) e **out of scope**. + +### 12.2. Opțiunea 3 (SP nou minimal) — actualizată + +Față de v2, acum știm **exact** ce face `pack_auto.dev_adauga_lucrare` versiunea lungă. +Versiunea minimală a SP-ului nostru va: ```sql CREATE OR REPLACE PROCEDURE MARIUSM_AUTO.SP_CREEAZA_COMANDA_PROTOTIP( - p_id_tip IN NUMBER, -- FK dev_tip_deviz.id_tip (1-7) + p_id_tip IN NUMBER, -- FK dev_tip_deviz.id_tip p_id_masiniclient IN NUMBER, -- FK dev_masiniclienti.id_masiniclient - p_kmint IN NUMBER, -- km la bord - p_termen IN DATE, -- termen execuție - p_id_util IN NUMBER, -- user creator + p_kmint IN NUMBER, + p_termen IN DATE, + p_id_util IN NUMBER, p_nr_comanda IN VARCHAR2, -- generat în Python cu prefix (G/R/P/PR/C) - p_id_ordl OUT NUMBER, -- id-ul din dev_ordl (pentru UI) - p_numar_out OUT VARCHAR2 -- ecou al nr_comanda (simetrie API) + p_id_ordl OUT NUMBER, + p_numar_out OUT VARCHAR2 ) AS - v_id_lucrare NUMBER; -- local, bypass pack_sesiune.dev_idLucrare - v_dataora DATE := SYSDATE; + v_id_lucrare NUMBER; + v_nr_existent NUMBER; + v_now DATE := SYSDATE; BEGIN - -- 1. INSERT parent: nom_lucrari (header generic vizibil în ACT/RUL la facturare) - INSERT INTO MARIUSM_AUTO.nom_lucrari (nrord, id_mod) + -- 1. Duplicate-check (paritate cu pack_auto) + SELECT COUNT(*) INTO v_nr_existent + FROM MARIUSM_AUTO.NOM_LUCRARI + WHERE sters = 0 AND nrord = p_nr_comanda; + IF v_nr_existent > 0 THEN + RAISE_APPLICATION_ERROR(-20001, + 'Mai exista o comanda cu numarul ' || p_nr_comanda); + END IF; + + -- 2. Parent INSERT (trigger-ul alocă id_lucrare + populează pack_sesiune.dev_idLucrare) + INSERT INTO MARIUSM_AUTO.NOM_LUCRARI (nrord, id_mod) VALUES (p_nr_comanda, 1200) RETURNING id_lucrare INTO v_id_lucrare; - -- ^ RETURNING bypasses dependency on pack_sesiune.dev_idLucrare - -- ^ trigger TRG_NOM_LUCRARI_BEFOINS still fires + populates session var, - -- but we ignore it and use our local v_id_lucrare instead - -- 2. INSERT child: dev_ordl (extensia auto, FK la nom_lucrari prin id_lucrare) - INSERT INTO MARIUSM_AUTO.dev_ordl - (an, luna, id_inspector, id_lucrare, datai, id_util_ad, - id_masiniclient, id_asigurator, id_tip, kmint, termen, dataoraad) - VALUES - (EXTRACT(YEAR FROM v_dataora), EXTRACT(MONTH FROM v_dataora), - 0, -- id_inspector = 0 (nu folosim inspector în prototype) - v_id_lucrare, -- FK la nom_lucrari - v_dataora, -- datai - p_id_util, - p_id_masiniclient, - 0, -- id_asigurator = 0 (nu folosim asigurator) - p_id_tip, - p_kmint, - p_termen, - v_dataora) -- dataoraad - RETURNING id_ordl INTO p_id_ordl; - - -- Step 3 (UPDATE dev_masiniclienti.kmint) SKIP — side effect opțional - -- pentru prototype. Dacă vrem să-l includem, adăugăm aici: - -- UPDATE dev_masiniclienti SET kmint = p_kmint - -- WHERE id_masiniclient = p_id_masiniclient; + -- 3. Child INSERT minimal — doar coloane obligatorii + clientul (prin masiniclient) + INSERT INTO MARIUSM_AUTO.DEV_ORDL ( + an, luna, + id_lucrare, + datai, dataoraad, + id_util_ad, + id_masiniclient, + id_tip, + kmint, + termen + ) VALUES ( + EXTRACT(YEAR FROM v_now), EXTRACT(MONTH FROM v_now), + v_id_lucrare, + v_now, v_now, + p_id_util, + p_id_masiniclient, + p_id_tip, + p_kmint, + p_termen + ) RETURNING id_ordl INTO p_id_ordl; p_numar_out := p_nr_comanda; END; / ``` -**~40 linii**, două INSERT-uri în ordinea FK-ului parent→child, RETURNING pentru chaining, -zero dependency pe `pack_sesiune`. Testabil din SQL Developer: +**~30 linii PL/SQL, două INSERT-uri, zero dependency pe `pack_contafin` / `STRINGAGG` / `pack_sesiune`** — minim absolut ca să probeze ipoteza #1 (Python + oracledb + OUT params + PL/SQL procedure call pe un INSERT dual cu RETURNING). + +**Trigger-ele rulează oricum** — `pack_sesiune.dev_idLucrare` și `dev_idOrdl` vor fi populate, dar nu le citim. E trivial de demonstrat că e safe: pattern-ul Oracle `RETURNING INTO` e standard. + +**Coloane SĂRITE pe care SP-ul real le are:** +- `id_inspector`, `id_asigurator` — folosite doar pentru service cu asigurator +- `nr_dosar`, `pcNrDosar` — dosar daună +- `ore_functionare`, `pnOreFct` — pentru utilitare +- `solicitari_client` (agregat din STRINGAGG) — derivat din CSV, dispensabil pentru prototype +- `observatii`, `defectiuni` — free text opțional +- `id_part_ref` — referent +- `proc_tvav` (via `pack_contafin.getCotaTVAStandard`) — dacă e NOT NULL vor primi default implicit (NULL); dacă schema real e NOT NULL, adăugăm valoarea 19 hardcodat + +**De verificat în săpt 3:** rulează `DESC MARIUSM_AUTO.DEV_ORDL` sau din `mariusm_ddl_export.sql` +linia 565 — `PROC_TVAV` e `NUMBER(10,4)` nullable, deci OK. + +### 12.3. GRANTS pentru ROA_WEB user ```sql -DECLARE - v_id NUMBER; - v_num VARCHAR2(100); -BEGIN - MARIUSM_AUTO.SP_CREEAZA_COMANDA_PROTOTIP( - p_id_tip => 3, -- Regie - p_id_masiniclient => 1, -- prima mașină client existentă - p_kmint => 150000, - p_termen => SYSDATE + 10, - p_id_util => 1, -- user test - p_nr_comanda => 'R' || TO_CHAR(MARIUSM_AUTO.SEQ_NRORD.NEXTVAL), - p_id_ordl => v_id, - p_numar_out => v_num - ); - DBMS_OUTPUT.PUT_LINE('id_ordl: ' || v_id || ', nr: ' || v_num); - ROLLBACK; -- pentru test, nu commit -END; -/ +CREATE USER ROA_WEB IDENTIFIED BY "..."; +GRANT CONNECT, CREATE SESSION TO ROA_WEB; +GRANT EXECUTE ON MARIUSM_AUTO.SP_CREEAZA_COMANDA_PROTOTIP TO ROA_WEB; + +-- Pentru read-only selectors (ipoteza #3 = grants model funcționează) +GRANT SELECT ON MARIUSM_AUTO.AUTO_VMASINICLIENTI TO ROA_WEB; +GRANT SELECT ON MARIUSM_AUTO.DEV_TIP_DEVIZ TO ROA_WEB; ``` -**Avantaj**: exact pattern-ul pe care îl va folosi Python (`callproc` cu OUT params + manual -commit). Dovedește ipoteza #1 pe un SP realist care atinge DOUĂ tabele în ordine corectă, -nu pe un `test_out` trivial. +### 12.4. Test negativ pentru ipoteza #3 + +```sql +-- Connected as ROA_WEB: +INSERT INTO MARIUSM_AUTO.DEV_ORDL ... ; -- așteptat: ORA-00942 +SELECT * FROM MARIUSM_AUTO.DEV_ORDL WHERE ROWNUM < 2; -- așteptat: ORA-00942 +EXEC MARIUSM_AUTO.SP_CREEAZA_COMANDA_PROTOTIP(...); -- așteptat: succes + row inserted +``` --- -## 5. `tip_comanda` — enum real extras din DDL + seed +## 13. Gap-uri rămase (de acoperit după sapt 3) -**Sursa primară:** `Scripturi_instalare/tabele.sql:763-794` (DDL) + -`Scripturi_instalare/initializari.sql:199-208` (seed INSERT). - -**Tabela reală: `DEV_TIP_DEVIZ`** (nu `dev_tip_comenzi` — user a corectat, dar ground truth -din scripturile de instalare zice `dev_tip_deviz`; **confirmă în săpt 3 care e numele în -MARIUSM_AUTO** — poate au redenumit-o). - -### DDL - -```sql -create table DEV_TIP_DEVIZ -( - ID_TIP NUMBER(5) not null, -- PK, auto-generat din SEQ_DEV_TIP_DEVIZ - DENUMIRE VARCHAR2(50) not null, -- Label afișat în dropdown - STERS NUMBER(1) default 0 not null -- Soft delete flag -); -alter table DEV_TIP_DEVIZ add constraint PK_TIP_DEVIZ primary key (ID_TIP); -``` - -**Notă:** `update_devize.prg:424` selectează `id_tip, denumire, inch_validare from dev_tip_deviz` -— coloana `inch_validare` **NU** e în DDL-ul din `tabele.sql`, deci a fost adăugată post-install -printr-o migrație. Așteaptă-te la diferențe între schema "curată" și MARIUSM_AUTO real. - -### FK în `DEV_ORDL` - -Linia 203 din `packages.sql` arată coloana folosită pe tabela de comandă: -```sql -insert into .dev_ordl - (an, luna, id_inspector, id_lucrare, datai, id_util_ad, id_masiniclient, - id_asigurator, id_tip, kmint, termen, dataoraad) - values (...) - returning id_ordl into pnIdOrdl -``` - -Coloana este **`id_tip`** (nu `tip_comanda`). Numele `tip_comanda` apare doar în view-ul -`vcomenzi` ca alias denormalizat pentru `denumire` din JOIN-ul cu `dev_tip_deviz`. - -### Seed values (install-time, din `initializari.sql:199-208`) - -| ID_TIP | DENUMIRE | Prefix pe `nr_comanda` (din `oproceduri_devize.prg:109-120`) | -|---|---|---| -| 1 | **POST GARANTIE** | *(niciun prefix)* | -| 2 | **GARANTIE** | **G** | -| 3 | **REGIE** | **R** | -| 4 | **PREGATIRE** | **P** | -| 5 | **REGIE 2** | *(niciun prefix — skipped în switch)* | - -**IDs 6 și 7** (cu prefix `PR`, respectiv `C`) **NU sunt în seed-ul de install** — au fost -adăugate în producție prin `INSERT INTO dev_tip_deviz` (sau prin UI-ul VFP de admin). -Denumirea lor o știe Marius — de confirmat în săpt 3. - -### Verificare în săpt 3 - -```sql --- Lista completă curentă din MARIUSM_AUTO -SELECT id_tip, denumire, sters -FROM MARIUSM_AUTO.DEV_TIP_DEVIZ -ORDER BY id_tip; - --- Verifică dacă există alias-ul 'dev_tip_comenzi' ca synonym sau view -SELECT object_name, object_type -FROM all_objects -WHERE owner='MARIUSM_AUTO' - AND UPPER(object_name) LIKE '%TIP%COM%'; -``` - -### Pentru prototype (decision) - -`ComandaNoua.vue` are nevoie de un dropdown cu 4 opțiuni. **Hardcodarea în Vue** e OK pentru -prototype (scope wall: nu există endpoint `/tipuri-comanda`). Recomandare valori: -- `{id: 1, label: 'Post Garanție'}` -- `{id: 2, label: 'Garanție'}` -- `{id: 3, label: 'Regie'}` -- `{id: 4, label: 'Pregatire'}` -- `{id: 5, label: 'Regie 2'}` -- `{id: 6, label: 'Productie'}` -- `{id: 7, label: 'Constatare'}` - -Skip ID-ul 5 (REGIE 2, probabil deprecated). - ---- - -## 6. Label-uri Romanian pentru formulare - -**Extrase din context VFP** (nume variabile + procese). Aceste label-uri le folosești în -`ComandaNoua.vue`: - -| Câmp UI | Label Romanian | Corespondent VFP | -|---|---|---| -| Tip comandă | **Tip comandă** | `tip_comanda` / combobox în `frm_gencom` | -| Client | **Client** | `nume` (denormalizat) / `id_codclient` | -| Mașină | **Mașină** (sau **Număr înmatriculare**) | `nrinmat` / `id_masina` | -| Operații solicitate | **Operații solicitate** | `pcSirIDOperatiiClient` | -| Km la intrare | **Km la bord** | `pnKmInt` (în VFP se afișează "kmint") | -| Ore manoperă estimate | **Ore manoperă** | `pnOreFct` | -| Termen execuție | **Termen execuție** (default = `today + gnTermenZileService`) | `pdTermen` | -| Observații | **Observații** | `pcObservatii` | -| Defecțiuni | **Defecțiuni** | `pcDefectiuni` | -| Nr. dosar daună | **Nr. dosar** (doar dacă tip=garanție/asigurare) | `pcNrDosar` | - -**Pentru MVP-ul prototype-ului (4 câmpuri)**: păstrează doar primele 4 din tabel -(tip / client / mașină / operații). Restul trec în plan ca TODO-phase2 sau se afișează -cu valori default hardcodate. - -**Toast-uri (Romanian, convenție ROA2WEB din `ReceiptCreateUnifiedView.vue`):** -- Success: `summary="Comandă creată"`, `detail="Nr ${nr_comanda}"` (ex: "Nr G12345") -- Business error: `summary="Validare"`, `detail=` -- Infra error: `summary="Eroare conexiune"` (503) / `"Eroare internă"` (500) - ---- - -## 7. Funcții PL/SQL utile găsite în VFP source - -Din grep `pack_auto\.` și `pack_comenzi\.` pe tot repo-ul: - -| Funcție/Proc | Scop | Relevantă pentru prototype? | -|---|---|---| -| `pack_auto.dev_adauga_lucrare` | Creează comandă (17 params) | **DA** — SP-ul principal | -| `pack_auto.dev_adauga_oper_fact` | Adaugă operații pe comandă pentru facturare | NU — post-facturare | -| `pack_auto.dev_distribuie_timp_n` | Distribuie timp pe norme | NU | -| `pack_auto.citeste_discount_contract` | Citește discount-uri contract | NU | -| `pack_auto.actualizeaza_deviz` | Updatează deviz | NU | -| `pack_auto.getOptiuneInchidere(n)` | Citește opțiune închidere | NU | -| `pack_auto.set_perioada_raport` | Setează perioadă raport | NU | -| `pack_comenzi.extrage_optiuni(varvalue, id_sectie)` | Citește opțiuni pe secție | **Poate** — pentru `tip_comanda` default | -| `pack_comenzi.genereaza_nr_lucrare` | Generează nr. lucrare | **Poate** — alternativ la prefix hardcodat | -| `pack_comenzi.sectii_utilizator(id_util, id_sucursala)` | Secții accesibile utilizatorului | **Poate** — pentru multi-section support phase 2 | - -**Pattern observat**: `{call pack_auto.proc(?param, ?@out_param)}` pentru apeluri cu OUT. -Confirmă că oracledb async cu OUT params e un pattern deja stabilit în stack-ul VFP → Oracle. - ---- - -## 8. Next steps — săpt 3 task list (actualizat) - -În loc de task-ul vag "deschide VFP producție și caută fluxul de creare comandă": - -- [ ] Clonează `gitea.romfast.ro/romfast/vfp_roaauto` local (dacă nu e clonat) -- [ ] Conectează-te la `10.0.20.121/ROA` ca `ROA_WEB` (sau alt user cu acces la - `all_objects` pe MARIUSM_AUTO) -- [ ] Rulează și salvează în `week3-verification.sql`: +- `PACK_SESIUNE.pck` citit — de confirmat că `dev_idLucrare`, `dev_idOrdl`, `getAn`, `getLuna`, + `GET_ANRON`, `GET_LUNARON`, `get_cod`, `get_id_util` sunt toate exported și nu ascund + ceva surprinzător (nu am citit încă body-ul, doar referințe). +- `PACK_CONTAFIN.pck` citit — de confirmat `getCotaTVAStandard(luna, an)` și `get_idFact()`. +- `PACK_FACTURARE.pck` citit — necesar doar când intrăm în flux-ul de facturare (phase 3-4). +- `DEV_TIP_DEVIZ.inch_validare` per rând — rulează query-ul de verificare: ```sql - -- Verifică existența pachetului pack_auto - SELECT object_name, object_type, status - FROM all_objects - WHERE owner='MARIUSM_AUTO' - AND object_name IN ('PACK_AUTO','PACK_COMENZI'); - - -- Verifică coloanele din comenzi (confirmă schema de mai sus) - SELECT column_name, data_type, data_length, nullable - FROM all_tab_columns - WHERE owner='MARIUSM_AUTO' AND table_name='COMENZI' - ORDER BY column_id; - - -- Găsește tabela/nomenclatorul pentru tip_comanda - SELECT table_name - FROM all_tables - WHERE owner='MARIUSM_AUTO' - AND UPPER(table_name) LIKE '%TIP%COM%'; - - -- Lista procedurilor din pack_auto (pentru a decide opțiunea 1 vs 3) - SELECT procedure_name, overload - FROM all_procedures - WHERE owner='MARIUSM_AUTO' AND object_name='PACK_AUTO' - ORDER BY procedure_name; + SELECT id_tip, denumire, sters, inch_validare FROM MARIUSM_AUTO.DEV_TIP_DEVIZ ORDER BY id_tip; ``` -- [ ] Decide: opțiunea 1 (reuse `dev_adauga_lucrare`), 2 (wrapper), sau 3 (INSERT direct) -- [ ] Confirmă denumirile pentru `tip_comanda` = 4, 6, 7 -- [ ] Completează secțiunea 5 și 6 de mai sus cu valorile confirmate -- [ ] Commit pe branch `feat/service-auto` cu mesaj `docs(service-auto): confirm VFP audit against real MARIUSM_AUTO schema` +- `MV_ORDL_MAT` materialized view — de verificat refresh schedule; dacă refresh e "on commit" + atunci UPDATE-urile pe RUL sunt imediate în AUTO_VORDL_MAT; dacă e "on demand" cu DBMS_JOB + atunci e latency în UI. +- `pack_audit.verifica_val` — folosit de toate trigger-ele `_BEFOUPD`. E dependency ascuns + pentru orice UPDATE pe `NOM_LUCRARI`, `DEV_ORDL`, `DEV_OPER`, etc. Nu e folosit la INSERT, + deci prototype-ul (care doar inserează) nu-l atinge. --- -## 9. Ce NU am găsit încă (gaps pentru săpt 3) +## 14. Referințe -- **Forma UI reală** — `frm_gencom` e definită într-un `.vcx` (VFP binary class file), - nu grep-abil direct. Pentru layout-ul real și ordinea câmpurilor în UI-ul VFP, fie - deschid VFP-ul (nu în scope), fie Marius trimite un screenshot în săpt 3. -- **Default values** — care sunt valorile default în `frm_gencom`? `pdTermen` are - `DATE() + gnTermenZileService` (default 10 zile) — asta e relevant. Restul defaults - trebuie verificate. -- **Validările client-side** — VFP face probabil validări în `frm_gencom.valid()`. - Pentru prototype, planul deja spune "no client-side validation" — nu e gap real. -- **Permission model** — `gcAcces=[1;2;3;4;]` apare în `onom_comenzi.prg:14` — sugerează - un sistem de ACL cu 4 nivele. Irelevant pentru prototype (1 user), dar de notat pentru - TODO-phase2. - ---- - -**END OF DRAFT** — să fie revăzut și completat în săpt 3, 2026-05-05 → 2026-05-09. +- **Ground truth DDL:** `docs/service-auto/mariusm_ddl_export.sql` (5127 linii) +- **Pachete production:** `pack_auto.pck`, `PACK_FACTURARE.pck`, `PACK_SESIUNE.pck`, + `PACK_CONTAFIN.pck`, `PACK_COMENZI.pck` (toate în `docs/service-auto/`) +- **VFP consumer code:** `gitea.romfast.ro/romfast/vfp_roaauto/Programe/oproceduri_devize.prg` + (`generare_com`, `normare_comanda`, `factureaza_comanda`, `factureaza_deviz`) +- **Manual utilizator:** `docs/service-auto/manual_ROAAUTO.pdf` +- **Plan master:** `docs/service-auto/claude-main-design-20260411-rethink.md`