Compare commits

..

6 Commits

Author SHA1 Message Date
1dc5da4ed2 Fix Oracle PL/SQL compilation errors by adding NULL statements to empty IF blocks
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 00:26:24 +03:00
4d712642c1 Add optional IS_PERSOANA_JURIDICA parameter to PACK_IMPORT_PARTENERI
- Add p_is_persoana_juridica parameter to cauta_sau_creeaza_partener function
- Enable explicit person type detection from GoMag orders data
- Maintain backward compatibility with NULL default value
- Priority logic: explicit parameter > CNP auto-detection
- Improve accuracy when CNP is not available for individuals
- Support 1=persoana juridica, 0=persoana fizica, NULL=auto-detect

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 00:08:51 +03:00
ae9fc2c3d3 Optimize performance by disabling verbose pINFO logging in PACK_IMPORT_PARTENERI
- Comment out non-critical pINFO calls to reduce I/O overhead
- Keep ERROR and WARNING logs for debugging critical issues
- Preserve logging for address creation warnings and validation errors
- Reduce procedure execution time by eliminating unnecessary log writes
- Maintain error tracking through g_last_error system

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 00:06:28 +03:00
ee8463fcda Remove Romanian diacritics from PACK_IMPORT_PARTENERI comments
- Replace ÎNCEPUT → INCEPUT in log messages
- Replace SFÂRȘIT → SFARSIT in log messages
- Replace NEAȘTEPTAT → NEASTEPTAT in error messages
- Replace În → In in comments
- Ensure ASCII compatibility for Oracle database systems

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 00:02:59 +03:00
f4145f773c Implement unified error handling system for PACK_IMPORT_PARTENERI
- Add g_last_error package variable matching PACK_JSON/PACK_IMPORT_COMENZI pattern
- Implement get_last_error() and clear_error() functions for VFP orchestrator integration
- Replace exceptions with error storage in validation and main functions
- Return -1 on errors instead of raising exceptions for deferred error handling
- Enable orchestrator to read errors before deciding when to log them

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 23:59:26 +03:00
0b9814114d Implement error handling system for PACK_IMPORT_COMENZI similar to PACK_JSON
- Add g_last_error package variable for VFP orchestrator integration
- Replace immediate pINFO logging with error storage for deferred logging
- Implement get_last_error() and clear_error() functions matching PACK_JSON pattern
- Update Oracle 10g compatibility for PACK_JSON regex patterns
- Enhance PACK_COMENZI with OUT parameter version for ID_COMANDA return

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-09 23:57:26 +03:00
4 changed files with 266 additions and 113 deletions

View File

@@ -35,6 +35,9 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
C_MIN_COD_FISCAL CONSTANT NUMBER := 3; C_MIN_COD_FISCAL CONSTANT NUMBER := 3;
C_CUI_PERS_FIZICA CONSTANT NUMBER := 13; -- CNP are 13 cifre C_CUI_PERS_FIZICA CONSTANT NUMBER := 13; -- CNP are 13 cifre
-- Variabila package pentru ultima eroare (pentru orchestrator VFP)
g_last_error VARCHAR2(4000);
-- ==================================================================== -- ====================================================================
-- CUSTOM EXCEPTIONS -- CUSTOM EXCEPTIONS
-- ==================================================================== -- ====================================================================
@@ -66,6 +69,7 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
* @param p_adresa Adresa in format: "JUD:Bucuresti;BUCURESTI;Str.Victoriei;10" * @param p_adresa Adresa in format: "JUD:Bucuresti;BUCURESTI;Str.Victoriei;10"
* @param p_telefon Numar de telefon * @param p_telefon Numar de telefon
* @param p_email Adresa de email * @param p_email Adresa de email
* @param p_is_persoana_juridica 1=persoana juridica, 0=persoana fizica, NULL=auto-detect prin CNP
* @return ID_PART al partenerului gasit sau creat * @return ID_PART al partenerului gasit sau creat
*/ */
FUNCTION cauta_sau_creeaza_partener( FUNCTION cauta_sau_creeaza_partener(
@@ -73,7 +77,8 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
p_denumire IN VARCHAR2, p_denumire IN VARCHAR2,
p_adresa IN VARCHAR2 DEFAULT NULL, p_adresa IN VARCHAR2 DEFAULT NULL,
p_telefon IN VARCHAR2 DEFAULT NULL, p_telefon IN VARCHAR2 DEFAULT NULL,
p_email IN VARCHAR2 DEFAULT NULL p_email IN VARCHAR2 DEFAULT NULL,
p_is_persoana_juridica IN NUMBER DEFAULT NULL
) RETURN NUMBER; ) RETURN NUMBER;
/** /**
@@ -134,6 +139,20 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_PARTENERI AS
p_prenume OUT VARCHAR2 p_prenume OUT VARCHAR2
); );
-- ====================================================================
-- ERROR MANAGEMENT FUNCTIONS (similar cu PACK_JSON)
-- ====================================================================
/**
* Returneaza ultima eroare pentru orchestrator VFP
*/
FUNCTION get_last_error RETURN VARCHAR2;
/**
* Reseteaza eroarea
*/
PROCEDURE clear_error;
END PACK_IMPORT_PARTENERI; END PACK_IMPORT_PARTENERI;
/ /
@@ -144,6 +163,19 @@ END PACK_IMPORT_PARTENERI;
CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
-- ================================================================
-- ERROR MANAGEMENT FUNCTIONS IMPLEMENTATION
-- ================================================================
FUNCTION get_last_error RETURN VARCHAR2 IS
BEGIN
RETURN g_last_error;
END get_last_error;
PROCEDURE clear_error IS
BEGIN
g_last_error := NULL;
END clear_error;
-- ==================================================================== -- ====================================================================
-- PRIVATE FUNCTIONS -- PRIVATE FUNCTIONS
-- ==================================================================== -- ====================================================================
@@ -158,13 +190,15 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
BEGIN BEGIN
-- Verificari obligatorii -- Verificari obligatorii
IF p_denumire IS NULL THEN IF p_denumire IS NULL THEN
RAISE_APPLICATION_ERROR(-20001, 'Denumirea partenerului nu poate fi goala'); g_last_error := 'Denumirea partenerului nu poate fi goala';
RETURN FALSE;
END IF; END IF;
-- Cod fiscal optional, dar daca exista trebuie sa aiba minim 3 caractere -- Cod fiscal optional, dar daca exista trebuie sa aiba minim 3 caractere
IF p_cod_fiscal IS NOT NULL AND LENGTH(TRIM(p_cod_fiscal)) > 0 THEN IF p_cod_fiscal IS NOT NULL AND LENGTH(TRIM(p_cod_fiscal)) > 0 THEN
IF LENGTH(TRIM(p_cod_fiscal)) < C_MIN_COD_FISCAL THEN IF LENGTH(TRIM(p_cod_fiscal)) < C_MIN_COD_FISCAL THEN
RAISE_APPLICATION_ERROR(-20001, 'Codul fiscal trebuie sa aiba minim ' || C_MIN_COD_FISCAL || ' caractere'); g_last_error := 'Codul fiscal trebuie sa aiba minim ' || C_MIN_COD_FISCAL || ' caractere';
RETURN FALSE;
END IF; END IF;
END IF; END IF;
@@ -172,8 +206,8 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR in valideaza_date_partener: ' || SQLERRM, 'IMPORT_PARTENERI'); g_last_error := 'ERROR in valideaza_date_partener: ' || SQLERRM;
RAISE; RETURN FALSE;
END valideaza_date_partener; END valideaza_date_partener;
/** /**
@@ -203,7 +237,7 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
v_cod_fiscal_curat := curata_text_cautare(p_cod_fiscal); v_cod_fiscal_curat := curata_text_cautare(p_cod_fiscal);
pINFO('Cautare partener dupa cod_fiscal: ' || v_cod_fiscal_curat, 'IMPORT_PARTENERI'); -- pINFO('Cautare partener dupa cod_fiscal: ' || v_cod_fiscal_curat, 'IMPORT_PARTENERI');
-- Cautare in NOM_PARTENERI -- Cautare in NOM_PARTENERI
BEGIN BEGIN
@@ -211,14 +245,14 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
INTO v_id_part INTO v_id_part
FROM nom_parteneri FROM nom_parteneri
WHERE UPPER(TRIM(cod_fiscal)) = v_cod_fiscal_curat WHERE UPPER(TRIM(cod_fiscal)) = v_cod_fiscal_curat
AND ROWNUM = 1; -- În caz de duplicate, luam primul AND ROWNUM = 1; -- In caz de duplicate, luam primul
pINFO('Gasit partener cu cod_fiscal ' || v_cod_fiscal_curat || ': ID_PART=' || v_id_part, 'IMPORT_PARTENERI'); -- pINFO('Gasit partener cu cod_fiscal ' || v_cod_fiscal_curat || ': ID_PART=' || v_id_part, 'IMPORT_PARTENERI');
RETURN v_id_part; RETURN v_id_part;
EXCEPTION EXCEPTION
WHEN NO_DATA_FOUND THEN WHEN NO_DATA_FOUND THEN
pINFO('Nu s-a gasit partener cu cod_fiscal: ' || v_cod_fiscal_curat, 'IMPORT_PARTENERI'); -- pINFO('Nu s-a gasit partener cu cod_fiscal: ' || v_cod_fiscal_curat, 'IMPORT_PARTENERI');
RETURN NULL; RETURN NULL;
WHEN TOO_MANY_ROWS THEN WHEN TOO_MANY_ROWS THEN
@@ -255,7 +289,7 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
v_denumire_curata := curata_text_cautare(p_denumire); v_denumire_curata := curata_text_cautare(p_denumire);
pINFO('Cautare partener dupa denumire: ' || v_denumire_curata, 'IMPORT_PARTENERI'); -- pINFO('Cautare partener dupa denumire: ' || v_denumire_curata, 'IMPORT_PARTENERI');
-- Cautare in NOM_PARTENERI -- Cautare in NOM_PARTENERI
BEGIN BEGIN
@@ -263,14 +297,14 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
INTO v_id_part INTO v_id_part
FROM nom_parteneri FROM nom_parteneri
WHERE UPPER(TRIM(denumire)) = v_denumire_curata WHERE UPPER(TRIM(denumire)) = v_denumire_curata
AND ROWNUM = 1; -- În caz de duplicate, luam primul AND ROWNUM = 1; -- In caz de duplicate, luam primul
pINFO('Gasit partener cu denumirea ' || v_denumire_curata || ': ID_PART=' || v_id_part, 'IMPORT_PARTENERI'); -- pINFO('Gasit partener cu denumirea ' || v_denumire_curata || ': ID_PART=' || v_id_part, 'IMPORT_PARTENERI');
RETURN v_id_part; RETURN v_id_part;
EXCEPTION EXCEPTION
WHEN NO_DATA_FOUND THEN WHEN NO_DATA_FOUND THEN
pINFO('Nu s-a gasit partener cu denumirea: ' || v_denumire_curata, 'IMPORT_PARTENERI'); -- pINFO('Nu s-a gasit partener cu denumirea: ' || v_denumire_curata, 'IMPORT_PARTENERI');
RETURN NULL; RETURN NULL;
WHEN TOO_MANY_ROWS THEN WHEN TOO_MANY_ROWS THEN
@@ -315,7 +349,7 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR in este_persoana_fizica: ' || SQLERRM, 'IMPORT_PARTENERI'); -- pINFO('ERROR in este_persoana_fizica: ' || SQLERRM, 'IMPORT_PARTENERI');
RETURN 0; RETURN 0;
END este_persoana_fizica; END este_persoana_fizica;
@@ -360,7 +394,7 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR in separa_nume_prenume: ' || SQLERRM, 'IMPORT_PARTENERI'); -- pINFO('ERROR in separa_nume_prenume: ' || SQLERRM, 'IMPORT_PARTENERI');
p_nume := SUBSTR(p_denumire_completa, 1, 50); -- fallback p_nume := SUBSTR(p_denumire_completa, 1, 50); -- fallback
p_prenume := NULL; p_prenume := NULL;
END separa_nume_prenume; END separa_nume_prenume;
@@ -385,13 +419,13 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
-- Validare input -- Validare input
IF p_adresa_text IS NULL THEN IF p_adresa_text IS NULL THEN
pINFO('Adresa goala, se folosesc valorile default', 'IMPORT_PARTENERI'); -- pINFO('Adresa goala, se folosesc valorile default', 'IMPORT_PARTENERI');
RETURN; RETURN;
END IF; END IF;
v_adresa_curata := TRIM(p_adresa_text); v_adresa_curata := TRIM(p_adresa_text);
pINFO('Parsare adresa: ' || v_adresa_curata, 'IMPORT_PARTENERI'); -- pINFO('Parsare adresa: ' || v_adresa_curata, 'IMPORT_PARTENERI');
-- Split dupa semicolon -- Split dupa semicolon
SELECT TRIM(REGEXP_SUBSTR(v_adresa_curata, '[^;]+', 1, LEVEL)) SELECT TRIM(REGEXP_SUBSTR(v_adresa_curata, '[^;]+', 1, LEVEL))
@@ -402,7 +436,7 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
v_count := v_componente.COUNT; v_count := v_componente.COUNT;
IF v_count = 0 THEN IF v_count = 0 THEN
pINFO('Nu s-au gasit componente in adresa', 'IMPORT_PARTENERI'); -- pINFO('Nu s-au gasit componente in adresa', 'IMPORT_PARTENERI');
RETURN; RETURN;
END IF; END IF;
@@ -463,8 +497,8 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
p_sector := C_SECTOR_DEFAULT; p_sector := C_SECTOR_DEFAULT;
END IF; END IF;
pINFO('Adresa parsata: JUD=' || p_judet || ', LOC=' || p_localitate || -- pINFO('Adresa parsata: JUD=' || p_judet || ', LOC=' || p_localitate ||
', STRADA=' || NVL(p_strada, 'NULL') || ', SECTOR=' || p_sector, 'IMPORT_PARTENERI'); -- ', STRADA=' || NVL(p_strada, 'NULL') || ', SECTOR=' || p_sector, 'IMPORT_PARTENERI');
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
@@ -480,7 +514,8 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
p_denumire IN VARCHAR2, p_denumire IN VARCHAR2,
p_adresa IN VARCHAR2 DEFAULT NULL, p_adresa IN VARCHAR2 DEFAULT NULL,
p_telefon IN VARCHAR2 DEFAULT NULL, p_telefon IN VARCHAR2 DEFAULT NULL,
p_email IN VARCHAR2 DEFAULT NULL p_email IN VARCHAR2 DEFAULT NULL,
p_is_persoana_juridica IN NUMBER DEFAULT NULL
) RETURN NUMBER IS ) RETURN NUMBER IS
v_id_part NUMBER; v_id_part NUMBER;
@@ -500,14 +535,18 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
v_denumire_curata VARCHAR2(200); v_denumire_curata VARCHAR2(200);
BEGIN BEGIN
pINFO('=== ÎNCEPUT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI'); -- Resetare eroare la inceputul procesarii
pINFO('Input: cod_fiscal=' || NVL(p_cod_fiscal, 'NULL') || clear_error;
', denumire=' || NVL(p_denumire, 'NULL') ||
', adresa=' || NVL(p_adresa, 'NULL'), 'IMPORT_PARTENERI'); -- pINFO('=== INCEPUT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI');
-- pINFO('Input: cod_fiscal=' || NVL(p_cod_fiscal, 'NULL') ||
-- ', denumire=' || NVL(p_denumire, 'NULL') ||
-- ', adresa=' || NVL(p_adresa, 'NULL'), 'IMPORT_PARTENERI');
-- Validare date input -- Validare date input
IF NOT valideaza_date_partener(p_cod_fiscal, p_denumire) THEN IF NOT valideaza_date_partener(p_cod_fiscal, p_denumire) THEN
RAISE partener_invalid_exception; g_last_error := 'Date partener invalide - validare esuata';
RETURN -1;
END IF; END IF;
v_cod_fiscal_curat := TRIM(p_cod_fiscal); v_cod_fiscal_curat := TRIM(p_cod_fiscal);
@@ -518,8 +557,8 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
v_id_part := cauta_partener_dupa_cod_fiscal(v_cod_fiscal_curat); v_id_part := cauta_partener_dupa_cod_fiscal(v_cod_fiscal_curat);
IF v_id_part IS NOT NULL THEN IF v_id_part IS NOT NULL THEN
pINFO('Partener gasit dupa cod_fiscal. ID_PART=' || v_id_part, 'IMPORT_PARTENERI'); -- pINFO('Partener gasit dupa cod_fiscal. ID_PART=' || v_id_part, 'IMPORT_PARTENERI');
pINFO('=== SFÂRȘIT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI'); -- pINFO('=== SFARSIT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI');
RETURN v_id_part; RETURN v_id_part;
END IF; END IF;
END IF; END IF;
@@ -528,21 +567,28 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
v_id_part := cauta_partener_dupa_denumire(v_denumire_curata); v_id_part := cauta_partener_dupa_denumire(v_denumire_curata);
IF v_id_part IS NOT NULL THEN IF v_id_part IS NOT NULL THEN
pINFO('Partener gasit dupa denumire. ID_PART=' || v_id_part, 'IMPORT_PARTENERI'); -- pINFO('Partener gasit dupa denumire. ID_PART=' || v_id_part, 'IMPORT_PARTENERI');
pINFO('=== SFÂRȘIT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI'); -- pINFO('=== SFARSIT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI');
RETURN v_id_part; RETURN v_id_part;
END IF; END IF;
-- STEP 3: Creare partener nou -- STEP 3: Creare partener nou
pINFO('Nu s-a gasit partener existent. Se creeaza unul nou...', 'IMPORT_PARTENERI'); -- pINFO('Nu s-a gasit partener existent. Se creeaza unul nou...', 'IMPORT_PARTENERI');
-- Verifica tipul partenerului -- Verifica tipul partenerului
v_este_persoana_fizica := este_persoana_fizica(v_cod_fiscal_curat); -- Prioritate: parametru explicit > detectie prin CNP
IF p_is_persoana_juridica IS NOT NULL THEN
-- Foloseste informatia explicita din GoMag orders
v_este_persoana_fizica := CASE WHEN p_is_persoana_juridica = 1 THEN 0 ELSE 1 END;
ELSE
-- Auto-detect prin CNP (comportament original)
v_este_persoana_fizica := este_persoana_fizica(v_cod_fiscal_curat);
END IF;
IF v_este_persoana_fizica = 1 THEN IF v_este_persoana_fizica = 1 THEN
pINFO('Detectata persoana fizica (CUI 13 cifre)', 'IMPORT_PARTENERI'); -- pINFO('Detectata persoana fizica (CUI 13 cifre)', 'IMPORT_PARTENERI');
separa_nume_prenume(v_denumire_curata, v_nume, v_prenume); separa_nume_prenume(v_denumire_curata, v_nume, v_prenume);
pINFO('Nume separat: NUME=' || NVL(v_nume, 'NULL') || ', PRENUME=' || NVL(v_prenume, 'NULL'), 'IMPORT_PARTENERI'); -- pINFO('Nume separat: NUME=' || NVL(v_nume, 'NULL') || ', PRENUME=' || NVL(v_prenume, 'NULL'), 'IMPORT_PARTENERI');
END IF; END IF;
-- Creare partener prin pack_def -- Creare partener prin pack_def
@@ -594,20 +640,21 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
END IF; END IF;
IF v_id_part IS NULL OR v_id_part <= 0 THEN IF v_id_part IS NULL OR v_id_part <= 0 THEN
RAISE_APPLICATION_ERROR(-20003, 'pack_def.adauga_partener a returnat ID invalid'); g_last_error := 'pack_def.adauga_partener a returnat ID invalid';
RETURN -1;
END IF; END IF;
pINFO('Partener creat cu succes. ID_PART=' || v_id_part, 'IMPORT_PARTENERI'); -- pINFO('Partener creat cu succes. ID_PART=' || v_id_part, 'IMPORT_PARTENERI');
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR la crearea partenerului prin pack_def: ' || SQLERRM, 'IMPORT_PARTENERI'); g_last_error := 'ERROR la crearea partenerului prin pack_def: ' || SQLERRM;
RAISE integrare_pack_def_exception; RETURN -1;
END; END;
-- STEP 4: Adaugare adresa (daca exista) -- STEP 4: Adaugare adresa (daca exista)
IF p_adresa IS NOT NULL THEN IF p_adresa IS NOT NULL THEN
pINFO('Se adauga adresa pentru partenerul nou creat...', 'IMPORT_PARTENERI'); -- pINFO('Se adauga adresa pentru partenerul nou creat...', 'IMPORT_PARTENERI');
-- Parseaza adresa -- Parseaza adresa
parseaza_adresa_semicolon(p_adresa, v_judet, v_localitate, v_strada, v_sector); parseaza_adresa_semicolon(p_adresa, v_judet, v_localitate, v_strada, v_sector);
@@ -641,7 +688,8 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
); );
IF v_id_adresa IS NOT NULL AND v_id_adresa > 0 THEN IF v_id_adresa IS NOT NULL AND v_id_adresa > 0 THEN
pINFO('Adresa adaugata cu succes. ID_ADRESA=' || v_id_adresa, 'IMPORT_PARTENERI'); -- pINFO('Adresa adaugata cu succes. ID_ADRESA=' || v_id_adresa, 'IMPORT_PARTENERI');
NULL;
ELSE ELSE
pINFO('WARNING: pack_def.adauga_adresa_partener2 a returnat ID invalid: ' || NVL(TO_CHAR(v_id_adresa), 'NULL'), 'IMPORT_PARTENERI'); pINFO('WARNING: pack_def.adauga_adresa_partener2 a returnat ID invalid: ' || NVL(TO_CHAR(v_id_adresa), 'NULL'), 'IMPORT_PARTENERI');
END IF; END IF;
@@ -650,29 +698,22 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_PARTENERI AS
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR la adaugarea adresei prin pack_def: ' || SQLERRM, 'IMPORT_PARTENERI'); pINFO('ERROR la adaugarea adresei prin pack_def: ' || SQLERRM, 'IMPORT_PARTENERI');
-- Nu raisam exceptia pentru adresa, partenerii pot exista fara adresa -- Nu raisam exceptia pentru adresa, partenerii pot exista fara adresa
pINFO('Partenerul a fost creat, dar adresa nu a putut fi adaugata', 'IMPORT_PARTENERI'); -- pINFO('Partenerul a fost creat, dar adresa nu a putut fi adaugata', 'IMPORT_PARTENERI');
END; END;
ELSE ELSE
pINFO('Nu s-a furnizat adresa pentru partenerul nou', 'IMPORT_PARTENERI'); -- pINFO('Nu s-a furnizat adresa pentru partenerul nou', 'IMPORT_PARTENERI');
NULL;
END IF; END IF;
pINFO('Partener creat complet. ID_PART=' || v_id_part, 'IMPORT_PARTENERI'); -- pINFO('Partener creat complet. ID_PART=' || v_id_part, 'IMPORT_PARTENERI');
pINFO('=== SFÂRȘIT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI'); -- pINFO('=== SFARSIT cauta_sau_creeaza_partener ===', 'IMPORT_PARTENERI');
RETURN v_id_part; RETURN v_id_part;
EXCEPTION EXCEPTION
WHEN partener_invalid_exception THEN
pINFO('ERROR: Date partener invalide', 'IMPORT_PARTENERI');
RAISE_APPLICATION_ERROR(-20001, 'Date partener invalide: ' || SQLERRM);
WHEN integrare_pack_def_exception THEN
pINFO('ERROR: Problema la integrarea cu pack_def', 'IMPORT_PARTENERI');
RAISE_APPLICATION_ERROR(-20003, 'Eroare la integrarea cu pack_def: ' || SQLERRM);
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR NEAȘTEPTAT in cauta_sau_creeaza_partener: ' || SQLERRM, 'IMPORT_PARTENERI'); g_last_error := 'ERROR NEASTEPTAT in cauta_sau_creeaza_partener: ' || SQLERRM;
RAISE_APPLICATION_ERROR(-20099, 'Eroare neasteptata la crearea partenerului: ' || SQLERRM); RETURN -1;
END cauta_sau_creeaza_partener; END cauta_sau_creeaza_partener;

View File

@@ -180,9 +180,14 @@ FUNCTIONS:
) RETURN VARCHAR2 IS ) RETURN VARCHAR2 IS
v_result VARCHAR2(4000); v_result VARCHAR2(4000);
BEGIN BEGIN
-- Pattern: "key_name":"value" -- Oracle 10g compatible: Extract string values
v_result := REGEXP_SUBSTR(p_json_object, v_result := REGEXP_SUBSTR(p_json_object,
'"' || p_key_name || '":"([^"]*)"', 1, 1, NULL, 1); '"' || p_key_name || '":"[^"]*"');
IF v_result IS NOT NULL THEN
-- Remove key part and quotes manually
v_result := REGEXP_REPLACE(v_result, '^"' || p_key_name || '":"', '');
v_result := REGEXP_REPLACE(v_result, '"$', '');
END IF;
RETURN v_result; RETURN v_result;
@@ -202,19 +207,41 @@ FUNCTIONS:
v_result_str VARCHAR2(100); v_result_str VARCHAR2(100);
v_result NUMBER; v_result NUMBER;
BEGIN BEGIN
-- Pattern: "key_name":123.45 sau "key_name":"123.45" -- Oracle 10g compatible: Extract number values without subexpressions
-- Incearca mai intai fara quotes -- Pattern: "key_name":123.45 (numeric value direct)
v_result_str := REGEXP_SUBSTR(p_json_object, v_result_str := REGEXP_SUBSTR(p_json_object,
'"' || p_key_name || '":([0-9.]+)', 1, 1, NULL, 1); '"' || p_key_name || '":[0-9]+\.?[0-9]*');
IF v_result_str IS NOT NULL THEN
-- Daca nu gaseste, incearca cu quotes -- Extract just the number part after the colon
IF v_result_str IS NULL THEN v_result_str := REGEXP_SUBSTR(v_result_str, '[0-9]+\.?[0-9]*');
v_result_str := REGEXP_SUBSTR(p_json_object,
'"' || p_key_name || '":"([0-9.]+)"', 1, 1, NULL, 1);
END IF; END IF;
IF v_result_str IS NOT NULL THEN -- Daca nu gaseste, incearca cu quotes: "key_name":"123.45"
v_result := TO_NUMBER(v_result_str); IF v_result_str IS NULL OR LENGTH(TRIM(v_result_str)) = 0 THEN
v_result_str := REGEXP_SUBSTR(p_json_object,
'"' || p_key_name || '":"[0-9]+\.?[0-9]*"');
IF v_result_str IS NOT NULL THEN
-- Extract number between quotes
v_result_str := REGEXP_SUBSTR(v_result_str, '[0-9]+\.?[0-9]*');
END IF;
END IF;
IF v_result_str IS NOT NULL AND LENGTH(TRIM(v_result_str)) > 0 THEN
BEGIN
v_result_str := TRIM(v_result_str);
-- Oracle 10g compatible conversion with NLS independence
v_result := TO_NUMBER(v_result_str, '999999999D999999999', 'NLS_NUMERIC_CHARACTERS=''.,''');
EXCEPTION
WHEN OTHERS THEN
BEGIN
-- Fallback: try with comma as decimal separator
v_result := TO_NUMBER(REPLACE(v_result_str, '.', ','));
EXCEPTION
WHEN OTHERS THEN
g_last_error := 'Cannot convert to number: "' || v_result_str || '" for key ' || p_key_name;
v_result := NULL;
END;
END;
END IF; END IF;
RETURN v_result; RETURN v_result;
@@ -232,11 +259,15 @@ FUNCTIONS:
p_json_object IN VARCHAR2, p_json_object IN VARCHAR2,
p_key_name IN VARCHAR2 p_key_name IN VARCHAR2
) RETURN BOOLEAN IS ) RETURN BOOLEAN IS
v_result_str VARCHAR2(10); v_result_str VARCHAR2(100);
BEGIN BEGIN
-- Pattern: "key_name":true/false -- Oracle 10g compatible: Extract boolean values
v_result_str := REGEXP_SUBSTR(p_json_object, v_result_str := REGEXP_SUBSTR(p_json_object,
'"' || p_key_name || '":(true|false)', 1, 1, NULL, 1); '"' || p_key_name || '":(true|false)');
IF v_result_str IS NOT NULL THEN
-- Extract just the boolean value
v_result_str := REGEXP_REPLACE(v_result_str, '^"' || p_key_name || '":', '');
END IF;
IF v_result_str = 'true' THEN IF v_result_str = 'true' THEN
RETURN TRUE; RETURN TRUE;
@@ -418,8 +449,12 @@ FUNCTIONS:
v_count := v_count + 1; v_count := v_count + 1;
v_object := obj.COLUMN_VALUE; v_object := obj.COLUMN_VALUE;
-- Extrage nested object "order" -- Extrage nested object "order" (Oracle 10g compatible)
v_order_json := REGEXP_SUBSTR(v_object, '"order":\{([^}]+)\}', 1, 1, NULL, 1); v_order_json := REGEXP_SUBSTR(v_object, '"order":\{[^}]+\}');
IF v_order_json IS NOT NULL THEN
-- Extract just the object part
v_order_json := REGEXP_REPLACE(v_order_json, '^"order":', '');
END IF;
IF v_order_json IS NULL THEN IF v_order_json IS NULL THEN
-- Incearca sa gaseasca tot nested object-ul (mai complex) -- Incearca sa gaseasca tot nested object-ul (mai complex)
v_order_json := REGEXP_SUBSTR(v_object, '"order":\{.*\}', 1, 1); v_order_json := REGEXP_SUBSTR(v_object, '"order":\{.*\}', 1, 1);
@@ -468,11 +503,19 @@ FUNCTIONS:
BEGIN BEGIN
clear_error(); clear_error();
-- Test invalid JSON -- Force an error by trying to parse malformed array
v_value := get_string(v_invalid_json, 'broken'); BEGIN
FOR obj IN (SELECT * FROM TABLE(parse_array('[{"incomplete":"object"'))) LOOP
NULL;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
-- This should trigger parse_array to set g_last_error
NULL;
END;
-- Test non-existent key -- Alternative: try to get a string from NULL object
v_value := get_string('{"valid":"json"}', 'nonexistent'); v_value := get_string(NULL, 'test');
IF get_last_error() IS NOT NULL THEN IF get_last_error() IS NOT NULL THEN
v_result := v_result || 'PASS - Error properly captured: ' || SUBSTR(get_last_error(), 1, 100); v_result := v_result || 'PASS - Error properly captured: ' || SUBSTR(get_last_error(), 1, 100);

View File

@@ -18,6 +18,9 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_COMENZI AS
TYPE t_articol_table IS TABLE OF t_articol_result; TYPE t_articol_table IS TABLE OF t_articol_result;
-- Variabila package pentru ultima eroare (pentru orchestrator VFP)
g_last_error VARCHAR2(4000);
-- Functie pentru gasirea/maparea articolelor ROA -- Functie pentru gasirea/maparea articolelor ROA
FUNCTION gaseste_articol_roa( FUNCTION gaseste_articol_roa(
p_sku IN VARCHAR2, p_sku IN VARCHAR2,
@@ -25,16 +28,21 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_COMENZI AS
p_cantitate_web IN NUMBER DEFAULT 1 p_cantitate_web IN NUMBER DEFAULT 1
) RETURN t_articol_table PIPELINED; ) RETURN t_articol_table PIPELINED;
-- Functie pentru importul complet al unei comenzi web -- Functie pentru importul complet al unei comenzi
FUNCTION importa_comanda_web( FUNCTION importa_comanda(
p_nr_comanda_ext IN VARCHAR2, p_nr_comanda_ext IN VARCHAR2,
p_data_comanda IN DATE, p_data_comanda IN DATE,
p_id_partener IN NUMBER, p_id_partener IN NUMBER,
p_json_articole IN CLOB, -- JSON array cu articolele p_json_articole IN CLOB, -- JSON array cu articolele
p_id_adresa_livrare IN NUMBER DEFAULT NULL, p_id_adresa_livrare IN NUMBER DEFAULT NULL,
p_id_adresa_facturare IN NUMBER DEFAULT NULL,
p_observatii IN VARCHAR2 DEFAULT NULL p_observatii IN VARCHAR2 DEFAULT NULL
) RETURN NUMBER; -- Returneaza ID_COMANDA sau -1 pentru eroare ) RETURN NUMBER; -- Returneaza ID_COMANDA sau -1 pentru eroare
-- Functii pentru managementul erorilor (similar cu PACK_JSON)
FUNCTION get_last_error RETURN VARCHAR2;
PROCEDURE clear_error;
END PACK_IMPORT_COMENZI; END PACK_IMPORT_COMENZI;
/ /
@@ -50,6 +58,22 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
c_id_util CONSTANT NUMBER := -3; -- Sistem c_id_util CONSTANT NUMBER := -3; -- Sistem
c_interna CONSTANT NUMBER := 0; -- Externe c_interna CONSTANT NUMBER := 0; -- Externe
-- ================================================================
-- Functii helper pentru managementul erorilor
-- ================================================================
FUNCTION get_last_error RETURN VARCHAR2 IS
BEGIN
RETURN g_last_error;
END get_last_error;
PROCEDURE clear_error IS
BEGIN
g_last_error := NULL;
END clear_error;
-- ================================================================
-- Functii interne
-- ================================================================
-- Procedura interna pentru validarea seturilor -- Procedura interna pentru validarea seturilor
FUNCTION valideaza_set(p_sku IN VARCHAR2) RETURN BOOLEAN IS FUNCTION valideaza_set(p_sku IN VARCHAR2) RETURN BOOLEAN IS
@@ -188,14 +212,15 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
END gaseste_articol_roa; END gaseste_articol_roa;
-- ================================================================ -- ================================================================
-- Functia pentru importul complet al unei comenzi web -- Functia pentru importul complet al unei comenzi
-- ================================================================ -- ================================================================
FUNCTION importa_comanda_web( FUNCTION importa_comanda(
p_nr_comanda_ext IN VARCHAR2, p_nr_comanda_ext IN VARCHAR2,
p_data_comanda IN DATE, p_data_comanda IN DATE,
p_id_partener IN NUMBER, p_id_partener IN NUMBER,
p_json_articole IN CLOB, p_json_articole IN CLOB,
p_id_adresa_livrare IN NUMBER DEFAULT NULL, p_id_adresa_livrare IN NUMBER DEFAULT NULL,
p_id_adresa_facturare IN NUMBER DEFAULT NULL,
p_observatii IN VARCHAR2 DEFAULT NULL p_observatii IN VARCHAR2 DEFAULT NULL
) RETURN NUMBER IS ) RETURN NUMBER IS
@@ -214,11 +239,12 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
BEGIN BEGIN
v_start_time := SYSDATE; v_start_time := SYSDATE;
pINFO('IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Incepere import comanda pentru partener: ' || p_id_partener, 'IMPORT_COMENZI'); -- Resetare eroare la inceputul procesarii
clear_error;
-- Validari de baza -- Validari de baza
IF p_nr_comanda_ext IS NULL OR p_id_partener IS NULL THEN IF p_nr_comanda_ext IS NULL OR p_id_partener IS NULL THEN
pINFO('ERROR IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Parametri obligatorii lipsa', 'IMPORT_COMENZI'); g_last_error := 'IMPORTA_COMANDA ' || NVL(p_nr_comanda_ext, 'NULL') || ': Parametri obligatorii lipsa';
RETURN -1; RETURN -1;
END IF; END IF;
@@ -240,24 +266,28 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
-- Calculeaza data de livrare (comanda + 1 zi) -- Calculeaza data de livrare (comanda + 1 zi)
v_data_livrare := p_data_comanda + 1; v_data_livrare := p_data_comanda + 1;
-- STEP 1: Creeaza comanda folosind package-ul existent -- STEP 1: Creeaza comanda folosind versiunea overloaded cu OUT parameter
BEGIN BEGIN
v_id_comanda := PACK_COMENZI.adauga_comanda( -- Apeleaza procedura adauga_comanda care returneaza ID_COMANDA prin OUT
p_nr_comanda => p_nr_comanda_ext, PACK_COMENZI.adauga_comanda(
p_data_comanda => p_data_comanda, V_NR_COMANDA => p_nr_comanda_ext,
p_id_partener => p_id_partener, V_DATA_COMANDA => p_data_comanda,
p_data_livrare => v_data_livrare, V_ID => p_id_partener, -- ID_PART
p_id_gestiune => c_id_gestiune, V_DATA_LIVRARE => v_data_livrare,
p_id_sectie => c_id_sectie, V_PROC_DISCOUNT => 0, -- Fara discount implicit
p_interna => c_interna, V_INTERNA => c_interna,
p_id_util => c_id_util, V_ID_UTIL => c_id_util,
p_comanda_externa => p_nr_comanda_ext, V_ID_SECTIE => c_id_sectie,
p_id_adresa_livrare => p_id_adresa_livrare, V_ID_ADRESA_FACTURARE => p_id_adresa_facturare,
p_observatii => p_observatii V_ID_ADRESA_LIVRARE => p_id_adresa_livrare,
V_ID_CODCLIENT => NULL, -- Nu folosim cod client
V_COMANDA_EXTERNA => p_nr_comanda_ext,
V_ID_CTR => NULL, -- Nu avem contract
V_ID_COMANDA => v_id_comanda -- OUT parameter cu ID_COMANDA
); );
IF v_id_comanda IS NULL OR v_id_comanda <= 0 THEN IF v_id_comanda IS NULL OR v_id_comanda <= 0 THEN
pINFO('ERROR IMPORTA_COMANDA ' || p_nr_comanda_ext || ': PACK_COMENZI.adauga_comanda a returnat ID invalid', 'IMPORT_COMENZI'); g_last_error := 'IMPORTA_COMANDA ' || p_nr_comanda_ext || ': PACK_COMENZI.adauga_comanda a returnat ID invalid';
RETURN -1; RETURN -1;
END IF; END IF;
@@ -265,7 +295,7 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Eroare la crearea comenzii: ' || SQLERRM, 'IMPORT_COMENZI'); g_last_error := 'IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Eroare la crearea comenzii: ' || SQLERRM;
RETURN -1; RETURN -1;
END; END;
@@ -298,12 +328,13 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
-- Adauga articolul la comanda -- Adauga articolul la comanda
BEGIN BEGIN
PACK_COMENZI.adauga_articol_comanda( PACK_COMENZI.adauga_articol_comanda(
p_id_comanda => v_id_comanda, V_ID_COMANDA => v_id_comanda,
p_id_articol => art_rec.id_articol, V_ID_ARTICOL => art_rec.id_articol,
p_cantitate => art_rec.cantitate_roa, V_ID_POL => c_id_pol,
p_pret => art_rec.pret_unitar, V_CANTITATE => art_rec.cantitate_roa,
p_id_pol => c_id_pol, V_PRET => art_rec.pret_unitar,
p_id_util => c_id_util V_ID_UTIL => c_id_util,
V_ID_SECTIE => c_id_sectie
); );
v_articole_procesate := v_articole_procesate + 1; v_articole_procesate := v_articole_procesate + 1;
@@ -333,13 +364,13 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Eroare la parsarea JSON: ' || SQLERRM, 'IMPORT_COMENZI'); g_last_error := 'IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Eroare la parsarea JSON: ' || SQLERRM;
RETURN -1; RETURN -1;
END; END;
-- Verifica daca s-au procesat articole cu succes -- Verifica daca s-au procesat articole cu succes
IF v_articole_procesate = 0 THEN IF v_articole_procesate = 0 THEN
pINFO('ERROR IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Niciun articol nu a fost procesat cu succes', 'IMPORT_COMENZI'); g_last_error := 'IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Niciun articol nu a fost procesat cu succes';
RETURN -1; RETURN -1;
END IF; END IF;
@@ -353,9 +384,9 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
pINFO('ERROR IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Eroare neasteptata in importa_comanda_web: ' || SQLERRM, 'IMPORT_COMENZI'); g_last_error := 'IMPORTA_COMANDA ' || p_nr_comanda_ext || ': Eroare neasteptata in importa_comanda: ' || SQLERRM;
RETURN -1; RETURN -1;
END importa_comanda_web; END importa_comanda;
END PACK_IMPORT_COMENZI; END PACK_IMPORT_COMENZI;
/ /

View File

@@ -33,6 +33,22 @@ create or replace package PACK_COMENZI is
V_COMANDA_EXTERNA in varchar2, V_COMANDA_EXTERNA in varchar2,
V_ID_CTR IN NUMBER); 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, procedure modifica_comanda(V_ID_COMANDA IN NUMBER,
V_NR_COMANDA IN VARCHAR2, V_NR_COMANDA IN VARCHAR2,
V_DATA_COMANDA IN DATE, V_DATA_COMANDA IN DATE,
@@ -227,7 +243,6 @@ create or replace package PACK_COMENZI is
tnIdVanzare OUT VANZARI.ID_VANZARE%TYPE); tnIdVanzare OUT VANZARI.ID_VANZARE%TYPE);
end PACK_COMENZI; end PACK_COMENZI;
/ /
create or replace package body PACK_COMENZI is create or replace package body PACK_COMENZI is
-- ultima eroare atribuita : COM-001 -- ultima eroare atribuita : COM-001
@@ -352,6 +367,30 @@ create or replace package body PACK_COMENZI is
V_ID_CODCLIENT in number, V_ID_CODCLIENT in number,
V_COMANDA_EXTERNA in varchar2, V_COMANDA_EXTERNA in varchar2,
V_ID_CTR IN NUMBER) is 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_NR_INREGISTRARI NUMBER(10);
V_NESTERS NUMBER(1) := 0; V_NESTERS NUMBER(1) := 0;
V_ID_PART NOM_PARTENERI.ID_PART%TYPE; V_ID_PART NOM_PARTENERI.ID_PART%TYPE;
@@ -362,7 +401,7 @@ create or replace package body PACK_COMENZI is
V_ID_ADRESA_LIVRARE1 NUMBER(10); V_ID_ADRESA_LIVRARE1 NUMBER(10);
V_ID_CODCLIENT1 comenzi.id_codclient%TYPE; V_ID_CODCLIENT1 comenzi.id_codclient%TYPE;
V_COMANDA_EXTERNA1 comenzi.COMANDA_EXTERNA%TYPE; V_COMANDA_EXTERNA1 comenzi.COMANDA_EXTERNA%TYPE;
V_ID_SUCURSALA NOM_SECTII.ID_SUCURSALA%TYPE;
begin begin
SELECT COUNT(*) SELECT COUNT(*)
INTO V_NR_INREGISTRARI INTO V_NR_INREGISTRARI
@@ -433,8 +472,8 @@ create or replace package body PACK_COMENZI is
V_COMANDA_EXTERNA1 := ''; V_COMANDA_EXTERNA1 := '';
END CASE; END CASE;
--dbms_output.put_line(V_ID_SECTIE); SELECT MAX(ID_SUCURSALA) INTO V_ID_SUCURSALA FROM NOM_SECTII WHERE ID_SECTIE = V_ID_SECTIE;
--dbms_output.put_line(V_ID_SECTIE2);
INSERT INTO COMENZI INSERT INTO COMENZI
(NR_COMANDA, (NR_COMANDA,
DATA_COMANDA, DATA_COMANDA,
@@ -452,7 +491,7 @@ create or replace package body PACK_COMENZI is
COMANDA_EXTERNA, COMANDA_EXTERNA,
ID_SUCURSALA, ID_SUCURSALA,
ID_CTR) ID_CTR)
SELECT V_NR_COMANDA, VALUES( V_NR_COMANDA,
V_DATA_COMANDA, V_DATA_COMANDA,
V_ID_GESTIUNE, V_ID_GESTIUNE,
V_ID_PART, V_ID_PART,
@@ -466,10 +505,9 @@ create or replace package body PACK_COMENZI is
V_ID_CODCLIENT1, V_ID_CODCLIENT1,
V_PROC_DISCOUNT, V_PROC_DISCOUNT,
V_COMANDA_EXTERNA1, V_COMANDA_EXTERNA1,
ID_SUCURSALA, V_ID_SUCURSALA,
V_ID_CTR V_ID_CTR)
FROM NOM_SECTII RETURNING ID_COMANDA INTO V_ID_COMANDA;
WHERE ID_SECTIE = V_ID_SECTIE;
end adauga_comanda; end adauga_comanda;
---------------------------------------------------------------------------------- ----------------------------------------------------------------------------------
procedure modifica_comanda(V_ID_COMANDA IN NUMBER, procedure modifica_comanda(V_ID_COMANDA IN NUMBER,