Files
roa2web-service-auto/docs/service-auto/SP_CREEAZA_COMANDA_PROTOTIP.sql
Claude Agent 32aca55c78 feat(service-auto): săpt 3-phase2 — toate ipotezele confirmate + modul funcțional
Backend:
- service_auto module complet: router, service, schemas, 5 teste suites (22/22 passed)
- 5 endpoints: GET /ping, /firme, /tip-deviz, /masini, POST /comenzi
- SP_CREEAZA_COMANDA_PROTOTIP creat în MARIUSM_AUTO (VALID, 5.9ms)
- oracle_pool.py: session_callback backward-compat patch
- ROA_WEB user: grants SP-only confirmate (H3), mariusm_test pool switchat
- pyproject.toml: integration pytest marker înregistrat

Frontend:
- ComandaNoua.vue: date reale din Oracle (firme/tip-deviz/masini), nu hardcodate
- src/modules/service-auto/services/api.js: axios service cu Bearer token
- src/router/index.js: rută /service-auto/comanda-noua

Docs:
- decision-log.md: verdict MERGE, toate 6 ipoteze CONFIRMED
- learnings.md: 7 patterns reutilizabile
- grants-audit.md: arhitectura multi-tenant + proxy auth analysis + V_NOM_FIRME loop
- template-modul-oracle.md: rețetă completă pentru module Oracle noi
- TODO-phase2.md: 7 items concrete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 09:37:09 +00:00

69 lines
2.6 KiB
MySQL

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