-- =============================================================================
-- 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;
/
