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>
This commit is contained in:
2025-09-09 23:57:26 +03:00
parent dc91372760
commit 0b9814114d
3 changed files with 171 additions and 59 deletions

View File

@@ -18,6 +18,9 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_COMENZI AS
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
FUNCTION gaseste_articol_roa(
p_sku IN VARCHAR2,
@@ -25,15 +28,20 @@ CREATE OR REPLACE PACKAGE PACK_IMPORT_COMENZI AS
p_cantitate_web IN NUMBER DEFAULT 1
) RETURN t_articol_table PIPELINED;
-- Functie pentru importul complet al unei comenzi web
FUNCTION importa_comanda_web(
-- Functie pentru importul complet al unei comenzi
FUNCTION importa_comanda(
p_nr_comanda_ext IN VARCHAR2,
p_data_comanda IN DATE,
p_id_partener IN NUMBER,
p_json_articole IN CLOB, -- JSON array cu articolele
p_id_adresa_livrare IN NUMBER DEFAULT NULL,
p_id_adresa_facturare IN NUMBER DEFAULT NULL,
p_observatii IN VARCHAR2 DEFAULT NULL
) 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;
/
@@ -50,6 +58,22 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
c_id_util CONSTANT NUMBER := -3; -- Sistem
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
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;
-- ================================================================
-- 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_data_comanda IN DATE,
p_id_partener IN NUMBER,
p_json_articole IN CLOB,
p_id_adresa_livrare IN NUMBER DEFAULT NULL,
p_id_adresa_facturare IN NUMBER DEFAULT NULL,
p_observatii IN VARCHAR2 DEFAULT NULL
) RETURN NUMBER IS
@@ -214,11 +239,12 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
BEGIN
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
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;
END IF;
@@ -240,24 +266,28 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
-- Calculeaza data de livrare (comanda + 1 zi)
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
v_id_comanda := PACK_COMENZI.adauga_comanda(
p_nr_comanda => p_nr_comanda_ext,
p_data_comanda => p_data_comanda,
p_id_partener => p_id_partener,
p_data_livrare => v_data_livrare,
p_id_gestiune => c_id_gestiune,
p_id_sectie => c_id_sectie,
p_interna => c_interna,
p_id_util => c_id_util,
p_comanda_externa => p_nr_comanda_ext,
p_id_adresa_livrare => p_id_adresa_livrare,
p_observatii => p_observatii
-- Apeleaza procedura adauga_comanda care returneaza ID_COMANDA prin OUT
PACK_COMENZI.adauga_comanda(
V_NR_COMANDA => p_nr_comanda_ext,
V_DATA_COMANDA => p_data_comanda,
V_ID => p_id_partener, -- ID_PART
V_DATA_LIVRARE => v_data_livrare,
V_PROC_DISCOUNT => 0, -- Fara discount implicit
V_INTERNA => c_interna,
V_ID_UTIL => c_id_util,
V_ID_SECTIE => c_id_sectie,
V_ID_ADRESA_FACTURARE => p_id_adresa_facturare,
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
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;
END IF;
@@ -265,7 +295,7 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
EXCEPTION
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;
END;
@@ -298,12 +328,13 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
-- Adauga articolul la comanda
BEGIN
PACK_COMENZI.adauga_articol_comanda(
p_id_comanda => v_id_comanda,
p_id_articol => art_rec.id_articol,
p_cantitate => art_rec.cantitate_roa,
p_pret => art_rec.pret_unitar,
p_id_pol => c_id_pol,
p_id_util => c_id_util
V_ID_COMANDA => v_id_comanda,
V_ID_ARTICOL => art_rec.id_articol,
V_ID_POL => c_id_pol,
V_CANTITATE => art_rec.cantitate_roa,
V_PRET => art_rec.pret_unitar,
V_ID_UTIL => c_id_util,
V_ID_SECTIE => c_id_sectie
);
v_articole_procesate := v_articole_procesate + 1;
@@ -333,13 +364,13 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
EXCEPTION
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;
END;
-- Verifica daca s-au procesat articole cu succes
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;
END IF;
@@ -353,9 +384,9 @@ CREATE OR REPLACE PACKAGE BODY PACK_IMPORT_COMENZI AS
EXCEPTION
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;
END importa_comanda_web;
END importa_comanda;
END PACK_IMPORT_COMENZI;
/