-- ============================================================================= -- SP_CREEAZA_COMANDA_PROTOTIP — Săpt 3 prototype -- ============================================================================= -- Creează o comandă minimă de service auto: insert NOM_LUCRARI (parent) + -- DEV_ORDL (child) într-o singură tranzacție. -- -- Scope: PROTOTYPE ONLY. Nu înlocuiește pack_auto.dev_adauga_lucrare. Nu -- agreghează norme, nu actualizează DEV_MASINICLIENTI (kmint/ore), nu setează -- inspector/asigurator, nu generează PROC_TVAV prin pack_contafin. -- -- Nrord: generat din SEQ_NR_LUCRARE (nefolosită în producție) cu prefix 'P' + -- id_firma — garantat unic, ușor de identificat pentru cleanup. -- -- Autor: oracle-agent, team service-auto-sapt3 (2026-04-11) -- ============================================================================= CREATE OR REPLACE PROCEDURE MARIUSM_AUTO.SP_CREEAZA_COMANDA_PROTOTIP( p_tip IN NUMBER, -- FK DEV_TIP_DEVIZ.ID_TIP p_id_masiniclient IN NUMBER, -- FK DEV_MASINICLIENTI.ID_MASINICLIENT p_solicitari IN VARCHAR2, -- text liber, stored as CLOB p_id_firma IN NUMBER, -- multi-tenant marker (prototype only) p_id_ordl OUT NUMBER, -- new DEV_ORDL.ID_ORDL (from trigger) p_nrord OUT VARCHAR2 -- generated order number (echo) ) AS v_id_lucrare NUMBER; v_seq NUMBER; v_exists NUMBER; v_now DATE := SYSDATE; BEGIN -- 1. Generate nrord (atomic via sequence) v_seq := MARIUSM_AUTO.SEQ_NR_LUCRARE.NEXTVAL; p_nrord := 'P' || LPAD(p_id_firma, 2, '0') || '-' || v_seq; -- 2. Duplicate guard (paritate cu pack_auto — should never fire) SELECT COUNT(*) INTO v_exists FROM MARIUSM_AUTO.NOM_LUCRARI WHERE sters = 0 AND nrord = p_nrord; IF v_exists > 0 THEN RAISE_APPLICATION_ERROR(-20001, 'Mai exista o comanda cu numarul ' || p_nrord); END IF; -- 3. Parent INSERT — TRG_NOM_LUCRARI_BEFOINS allocates id_lucrare INSERT INTO MARIUSM_AUTO.NOM_LUCRARI (nrord, id_mod) VALUES (p_nrord, 1200) RETURNING id_lucrare INTO v_id_lucrare; -- 4. Child INSERT — minimal columns only (NOT NULL ones + client link) -- id_util_ad=0 for prototype (no real session context) INSERT INTO MARIUSM_AUTO.DEV_ORDL ( an, luna, id_lucrare, datai, dataoraad, id_util_ad, id_masiniclient, id_tip, solicitari_client ) VALUES ( EXTRACT(YEAR FROM v_now), EXTRACT(MONTH FROM v_now), v_id_lucrare, v_now, v_now, 0, p_id_masiniclient, p_tip, p_solicitari ) RETURNING id_ordl INTO p_id_ordl; END SP_CREEAZA_COMANDA_PROTOTIP; /