diff --git a/api/database-scripts/04_pack_comenzi.pck b/api/database-scripts/04_pack_comenzi.pck index c0d32f4..9666cec 100644 --- a/api/database-scripts/04_pack_comenzi.pck +++ b/api/database-scripts/04_pack_comenzi.pck @@ -4,8 +4,6 @@ create or replace package PACK_COMENZI is -- 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, @@ -103,7 +101,7 @@ create or replace package PACK_COMENZI is 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, @@ -122,6 +120,9 @@ create or replace package PACK_COMENZI is V_ID_UTIL IN NUMBER, V_ID_SECTIE IN NUMBER); + procedure adauga_comanda_pe_factura(V_ID_COMANDA IN NUMBER, + V_ID_VANZARE IN NUMBER); + procedure livreaza_comanda(V_ID_COMANDA IN NUMBER, V_ID_AGENT IN NUMBER, V_ID_DELEGAT IN NUMBER, @@ -311,9 +312,13 @@ create or replace package body PACK_COMENZI is -- 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%) + + -- 20.03.2026 - duplicate CODMAT pe comanda: discriminare pe PRET + SIGN(CANTITATE) + -- 15.04.2026 - adaugare adauga_comanda_pe_factura() + ---------------------------------------------------------------------------------- procedure adauga_masina(V_ID_MODEL_MASINA IN NUMBER, @@ -327,7 +332,7 @@ create or replace package body PACK_COMENZI is 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!'); @@ -352,7 +357,7 @@ create or replace package body PACK_COMENZI is 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!'); @@ -435,12 +440,12 @@ create or replace package body PACK_COMENZI is 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 @@ -453,13 +458,13 @@ create or replace package body PACK_COMENZI is (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; @@ -498,12 +503,12 @@ create or replace package body PACK_COMENZI is 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, @@ -574,12 +579,12 @@ create or replace package body PACK_COMENZI is 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 @@ -592,19 +597,19 @@ create or replace package body PACK_COMENZI is (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, @@ -613,7 +618,7 @@ create or replace package body PACK_COMENZI is FROM COMENZI WHERE STERS = V_NESTERS AND ID_COMANDA = V_ID_COMANDA; - + CASE WHEN V_INTERNA = 1 THEN V_ID_GESTIUNE := NULL; @@ -631,7 +636,7 @@ create or replace package body PACK_COMENZI is 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; @@ -647,7 +652,7 @@ create or replace package body PACK_COMENZI is 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, @@ -665,12 +670,12 @@ create or replace package body PACK_COMENZI is 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; ---------------------------------------------------------------------------------- @@ -684,18 +689,18 @@ create or replace package body PACK_COMENZI is 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; ---------------------------------------------------------------------------------- @@ -725,7 +730,7 @@ create or replace package body PACK_COMENZI is V_NUMAR_CTR := NULL; V_ID_CTR := NULL; end; - + end cauta_contract_comanda; ---------------------------------------------------------------------------------- procedure adauga_articol_comanda(V_ID_COMANDA IN NUMBER, @@ -759,7 +764,7 @@ create or replace package body PACK_COMENZI is 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 @@ -776,11 +781,11 @@ create or replace package body PACK_COMENZI is 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 @@ -790,18 +795,18 @@ create or replace package body PACK_COMENZI is 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, @@ -824,7 +829,7 @@ create or replace package body PACK_COMENZI is V_PRET_CU_TVA, V_ID_SECTIE, V_PTVA); - + end adauga_articol_comanda; ---------------------------------------------------------------------------------- procedure modifica_articol_comanda(V_ID_COMANDA_ELEMENT IN NUMBER, @@ -845,7 +850,7 @@ create or replace package body PACK_COMENZI is 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, @@ -856,7 +861,7 @@ create or replace package body PACK_COMENZI is 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, @@ -894,11 +899,11 @@ create or replace package body PACK_COMENZI is 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, @@ -914,7 +919,7 @@ create or replace package body PACK_COMENZI is 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, @@ -922,11 +927,30 @@ create or replace package body PACK_COMENZI is V_ID_UTIL, V_ID_SECTIE); END LOOP; - + pack_comenzi.actualizeaza_articole_lucrare(V_ID_LUCRARE, V_ID_UTIL, V_ID_SECTIE); end; + + ---------------------------------------------------------------------------------- + -- asociez comanda cu vanzari.id_comanda pe o factura fara comanda + -- ca sa inchid comenzile facturate separat prin facturi lista preturi + ---------------------------------------------------------------------------------- + procedure adauga_comanda_pe_factura(V_ID_COMANDA IN NUMBER, + V_ID_VANZARE IN NUMBER) is + V_EXISTA NUMBER(10); + begin + SELECT COUNT(*) INTO V_EXISTA FROM VANZARI WHERE ID_VANZARE = V_ID_VANZARE AND NVL(ID_COMANDA,0) <> 0; + + IF V_EXISTA > 0 THEN + RAISE_APPLICATION_ERROR(-20000, + 'Factura are deja o comanda asociata. Alegeti alta factura!'); + ELSE + UPDATE VANZARI SET ID_COMANDA = V_ID_COMANDA, TIP = 3 + WHERE ID_VANZARE = V_ID_VANZARE AND NVL(ID_COMANDA, 0) = 0; + END IF; + end; ---------------------------------------------------------------------------------- procedure livreaza_comanda(V_ID_COMANDA IN NUMBER, V_ID_AGENT IN NUMBER, @@ -946,7 +970,7 @@ create or replace package body PACK_COMENZI is 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 @@ -966,7 +990,7 @@ create or replace package body PACK_COMENZI is 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 @@ -988,13 +1012,13 @@ create or replace package body PACK_COMENZI is 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 @@ -1006,7 +1030,7 @@ create or replace package body PACK_COMENZI is 1), V_ID_UTIL, V_ID_SECTIE); - + end genereaza_lucrare; ---------------------------------------------------------------------------------- procedure adauga_lucrare(V_NRORD IN VARCHAR2, @@ -1015,28 +1039,28 @@ create or replace package body PACK_COMENZI is 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 ' || @@ -1044,13 +1068,13 @@ create or replace package body PACK_COMENZI is '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, @@ -1083,27 +1107,27 @@ create or replace package body PACK_COMENZI is 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, @@ -1120,9 +1144,9 @@ create or replace package body PACK_COMENZI is 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 @@ -1140,12 +1164,12 @@ create or replace package body PACK_COMENZI is 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; @@ -1154,13 +1178,13 @@ create or replace package body PACK_COMENZI is 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;*/ @@ -1176,13 +1200,13 @@ create or replace package body PACK_COMENZI is 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, @@ -1196,14 +1220,14 @@ create or replace package body PACK_COMENZI is 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, @@ -1249,7 +1273,7 @@ create or replace package body PACK_COMENZI is 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 @@ -1257,13 +1281,13 @@ create or replace package body PACK_COMENZI is 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 @@ -1279,7 +1303,7 @@ create or replace package body PACK_COMENZI is (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)) @@ -1302,9 +1326,9 @@ create or replace package body PACK_COMENZI is crs_linie.pret, crs_linie.discount_unitar, crs_linie.id_sectie); - + end loop; - + close crs; end adauga_loturi; ---------------------------------------------------------------------------------- @@ -1313,7 +1337,7 @@ create or replace package body PACK_COMENZI is 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; ---------------------------------------------------------------------------------- @@ -1349,19 +1373,19 @@ create or replace package body PACK_COMENZI is 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; @@ -1378,7 +1402,7 @@ create or replace package body PACK_COMENZI is 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; @@ -1418,13 +1442,13 @@ create or replace package body PACK_COMENZI is 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'), @@ -1441,7 +1465,7 @@ create or replace package body PACK_COMENZI is ELSE V_COPIERECANTITATE := V_OPTIUNE_CANT; END IF; - + CASE WHEN V_INTERNA = 1 THEN V_OPTIUNE := 'ID_LISTA_PRETURI_PV'; @@ -1450,12 +1474,12 @@ create or replace package body PACK_COMENZI is 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, @@ -1489,7 +1513,7 @@ create or replace package body PACK_COMENZI is 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, @@ -1565,17 +1589,17 @@ create or replace package body PACK_COMENZI is 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 @@ -1586,7 +1610,7 @@ create or replace package body PACK_COMENZI is 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, @@ -1608,23 +1632,23 @@ create or replace package body PACK_COMENZI is 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 @@ -1636,19 +1660,19 @@ create or replace package body PACK_COMENZI is 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 @@ -1658,7 +1682,7 @@ create or replace package body PACK_COMENZI is lcReturn := GETWORDNUM(lcExtragOptId, 2, '::'); end if; end loop; - + RETURN lcReturn; end extrage_optiuni; ---------------------------------------------------------------------------------- @@ -1667,7 +1691,7 @@ create or replace package body PACK_COMENZI is lcLista varchar2(1000); lnId number(5) := 0; begin - + lnId := tnId; begin SELECT VARVALUE @@ -1679,14 +1703,14 @@ create or replace package body PACK_COMENZI is 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; @@ -1708,7 +1732,7 @@ create or replace package body PACK_COMENZI is 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; @@ -1716,7 +1740,7 @@ create or replace package body PACK_COMENZI is 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'), @@ -1729,20 +1753,20 @@ create or replace package body PACK_COMENZI is 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 @@ -1754,7 +1778,7 @@ create or replace package body PACK_COMENZI is V_ID_UTIL, V_ID_SUCURSALA) RETURNING ID_COMRAPVANZ INTO V_ID_COMRAPVANZ; - + INSERT INTO COMRAPVANZELEM (ID_COMRAPVANZ, ID_GESTIUNE, @@ -1872,7 +1896,7 @@ create or replace package body PACK_COMENZI is 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, @@ -1901,7 +1925,7 @@ create or replace package body PACK_COMENZI is 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, @@ -1925,12 +1949,12 @@ create or replace package body PACK_COMENZI is 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 @@ -2010,7 +2034,7 @@ create or replace package body PACK_COMENZI is B.STOCI, B.VANZARI, B.STOCF); - + -- aceleasi coloane ca si cursorul din raport_proc_vanzari OPEN V_CURSOR FOR SELECT A.ID_COMRAPVANZ, @@ -2040,7 +2064,7 @@ create or replace package body PACK_COMENZI is 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; ------------------------------------------------------------- @@ -2077,7 +2101,7 @@ create or replace package body PACK_COMENZI is 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, @@ -2106,16 +2130,16 @@ create or replace package body PACK_COMENZI is 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!'); @@ -2129,7 +2153,7 @@ create or replace package body PACK_COMENZI is '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 @@ -2143,7 +2167,7 @@ create or replace package body PACK_COMENZI is 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 @@ -2152,12 +2176,12 @@ create or replace package body PACK_COMENZI is (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, @@ -2170,17 +2194,17 @@ create or replace package body PACK_COMENZI is 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, @@ -2200,9 +2224,9 @@ create or replace package body PACK_COMENZI is 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, @@ -2240,10 +2264,10 @@ create or replace package body PACK_COMENZI is 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; @@ -2273,7 +2297,7 @@ create or replace package body PACK_COMENZI is 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, @@ -2284,7 +2308,7 @@ create or replace package body PACK_COMENZI is INTO V_DATA FROM COMRAPVANZ WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ; - + OPEN V_CURSOR FOR SELECT A.ID_COMRAPVANZ, A.ID_COMRAPVANZELEM, @@ -2320,7 +2344,7 @@ create or replace package body PACK_COMENZI is INTO V_DATA, V_DATAI, V_DATAS FROM COMRAPVANZ WHERE ID_COMRAPVANZ = V_ID_COMRAPVANZ; - + OPEN V_CURSOR FOR SELECT E.GRUPA, D.SUBGRUPA, @@ -2354,7 +2378,7 @@ create or replace package body PACK_COMENZI is C.CODMAT, C.UM ORDER BY E.GRUPA, D.SUBGRUPA, B.DENUMIRE, C.DENUMIRE, C.CODMAT; - + end listeaza_raport_vz_fz; ---------------------------------------------------------------------------------- @@ -2374,7 +2398,7 @@ create or replace package body PACK_COMENZI is 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, @@ -2404,7 +2428,7 @@ create or replace package body PACK_COMENZI is EXTRACT(YEAR FROM V_DATAS) AND R.ID_TIP_RULAJ = 0 ORDER BY R.DATAORA; - + end rap_vanz_per_detaliu; ---------------------------------------------------------------------------------- @@ -2415,7 +2439,7 @@ create or replace package body PACK_COMENZI is 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'), @@ -2448,17 +2472,17 @@ create or replace package body PACK_COMENZI is 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; @@ -2466,7 +2490,7 @@ create or replace package body PACK_COMENZI is 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; @@ -2474,15 +2498,15 @@ create or replace package body PACK_COMENZI is 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; @@ -2491,10 +2515,10 @@ create or replace package body PACK_COMENZI is 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; @@ -2502,7 +2526,7 @@ create or replace package body PACK_COMENZI is 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; @@ -2520,10 +2544,10 @@ create or replace package body PACK_COMENZI is ldDataIreg := ldDataAct; ldDataScad := ldDataAct; ldDataCurs := ldDataAct; - + pack_sesiune.setAn(lnAn); pack_sesiune.setLuna(lnLuna); - + begin SELECT TVA_INCASARE INTO lnTvaIncasare @@ -2536,7 +2560,7 @@ create or replace package body PACK_COMENZI is 'Nu s-a deschis luna ' || lpad(lnLuna, 2, '0') || '/' || lnAn || '!'); end; - + lnTipIncasare := case when tcTipIncasare = 'BONFISCAL' then pack_facturare.nTipIncasareBonFiscal @@ -2549,19 +2573,19 @@ create or replace package body PACK_COMENZI is 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 @@ -2582,7 +2606,7 @@ create or replace package body PACK_COMENZI is 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, @@ -2606,7 +2630,7 @@ create or replace package body PACK_COMENZI is lnTvaIncasare, lnIdSucursala, lnIdUtil); - + insert into vanzari_detalii_temp (id_pol, id_articol, @@ -2664,9 +2688,9 @@ create or replace package body PACK_COMENZI is 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, @@ -2706,7 +2730,7 @@ create or replace package body PACK_COMENZI is 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 @@ -2716,11 +2740,11 @@ create or replace package body PACK_COMENZI is 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, @@ -2739,7 +2763,7 @@ create or replace package body PACK_COMENZI is 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, @@ -2757,7 +2781,7 @@ create or replace package body PACK_COMENZI is /* RAISE_APPLICATION_ERROR(-20000, 'Nu s-au configurat partenerii si/sau conturile analitice!');*/ end if; - + <> null; end factureaza_comanda; @@ -2801,4 +2825,4 @@ end;*/ -- raport comenzi furnizori pe baza vanzarilor ---------------------------------------------------------------------------------- end PACK_COMENZI; -/ +/ \ No newline at end of file