exemple integrare
This commit is contained in:
@@ -69,6 +69,50 @@ def _payload_json_compact(account_id: int) -> str:
|
|||||||
return json.dumps(_payload_prezentari_dict(account_id), separators=(",", ":"), ensure_ascii=False)
|
return json.dumps(_payload_prezentari_dict(account_id), separators=(",", ":"), ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
|
def _exemplu_cerere_dict() -> dict:
|
||||||
|
"""Cerere exemplu completa: ambele forme de prestatie + campuri optionale uzuale."""
|
||||||
|
return {
|
||||||
|
"prezentari": [
|
||||||
|
{
|
||||||
|
"vin": "WVWZZZ1JZXW000001",
|
||||||
|
"nr_inmatriculare": "B123ABC",
|
||||||
|
"data_prestatie": "2026-06-22",
|
||||||
|
"odometru_final": "150000",
|
||||||
|
"odometru_initial": "149500",
|
||||||
|
"prestatii": [
|
||||||
|
{"cod_prestatie": "OE-1"},
|
||||||
|
{"cod_op_service": "SF01", "denumire": "Schimb filtru ulei"},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rar_env": "test",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _exemplu_raspuns_dict() -> dict:
|
||||||
|
"""Raspuns exemplu in forma implicita `minim`: 6 chei fixe per rezultat."""
|
||||||
|
return {
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"index": 0,
|
||||||
|
"submission_id": 123,
|
||||||
|
"vehicul": "B123ABC",
|
||||||
|
"status": "queued",
|
||||||
|
"motiv": None,
|
||||||
|
"id_prezentare": None,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def exemplu_json() -> dict:
|
||||||
|
"""Perechea cerere/raspuns JSON formatata pentru cardul din pagina Integrare."""
|
||||||
|
return {
|
||||||
|
"cerere": json.dumps(_exemplu_cerere_dict(), indent=2, ensure_ascii=False),
|
||||||
|
"raspuns": json.dumps(_exemplu_raspuns_dict(), indent=2, ensure_ascii=False),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def _snippet_curl_prezentari(base_url: str, account_id: int) -> str:
|
def _snippet_curl_prezentari(base_url: str, account_id: int) -> str:
|
||||||
payload = _payload_json_str(account_id)
|
payload = _payload_json_str(account_id)
|
||||||
return f"""curl -X POST "{base_url}/v1/prezentari" \\
|
return f"""curl -X POST "{base_url}/v1/prezentari" \\
|
||||||
|
|||||||
@@ -516,7 +516,7 @@ def _render_integrare(request: Request, conn, account_id: int) -> str:
|
|||||||
configurate pe cont), preia base_url real si genereaza snippet-uri multi-limbaj.
|
configurate pe cont), preia base_url real si genereaza snippet-uri multi-limbaj.
|
||||||
"""
|
"""
|
||||||
from ..mapping import account_or_default
|
from ..mapping import account_or_default
|
||||||
from .integrare_examples import exemple as _exemple
|
from .integrare_examples import exemple as _exemple, exemplu_json as _exemplu_json
|
||||||
|
|
||||||
acct = account_or_default(account_id)
|
acct = account_or_default(account_id)
|
||||||
row_creds = conn.execute(
|
row_creds = conn.execute(
|
||||||
@@ -538,6 +538,7 @@ def _render_integrare(request: Request, conn, account_id: int) -> str:
|
|||||||
"account_id": acct,
|
"account_id": acct,
|
||||||
"base_url": base_url,
|
"base_url": base_url,
|
||||||
"exemple": ex,
|
"exemple": ex,
|
||||||
|
"exemplu_json": _exemplu_json(),
|
||||||
"are_cheie": are_cheie,
|
"are_cheie": are_cheie,
|
||||||
"are_creds": are_creds,
|
"are_creds": are_creds,
|
||||||
"csrf_token": csrf_token,
|
"csrf_token": csrf_token,
|
||||||
|
|||||||
@@ -216,6 +216,41 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{# Card: exemplu cerere + raspuns JSON pentru POST /v1/prezentari #}
|
||||||
|
<div class="card" style="margin-bottom:16px;">
|
||||||
|
<h3 style="margin:0 0 6px; font-size:15px;">Cerere si raspuns JSON</h3>
|
||||||
|
<p class="muted" style="font-size:12px; margin:0 0 12px;">
|
||||||
|
<code>POST /v1/prezentari</code> — o prezentare cu doua operatii: una cu cod RAR direct
|
||||||
|
(<code>cod_prestatie</code>), una cu cod intern + denumire (mapata automat de gateway).
|
||||||
|
</p>
|
||||||
|
<div style="display:flex; flex-wrap:wrap; gap:12px;">
|
||||||
|
<div style="flex:1 1 320px; min-width:0;">
|
||||||
|
<p style="font-size:12.5px; margin:0 0 4px;"><strong>Cerere</strong></p>
|
||||||
|
<div style="position:relative;">
|
||||||
|
<button class="btn-copiaza" aria-label="Copiaza exemplu cerere JSON" style="position:absolute; top:8px; right:8px; font-size:12px; padding:4px 10px; background:var(--line); color:var(--ink); border:1px solid var(--line); border-radius:4px; cursor:pointer;">Copiaza</button>
|
||||||
|
<pre style="background:var(--bg); border:1px solid var(--line); border-radius:6px; padding:16px; overflow-x:auto; margin:0;"><code style="font-size:12px; font-family:ui-monospace,monospace; color:var(--ink);">{{ exemplu_json["cerere"] | e }}</code></pre>
|
||||||
|
</div>
|
||||||
|
<div aria-live="polite" class="copiaza-feedback muted" style="font-size:12px; min-height:20px; margin-top:4px;"></div>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1 1 320px; min-width:0;">
|
||||||
|
<p style="font-size:12.5px; margin:0 0 4px;"><strong>Raspuns 200</strong> <span class="muted">(forma implicita <code>minim</code>)</span></p>
|
||||||
|
<div style="position:relative;">
|
||||||
|
<button class="btn-copiaza" aria-label="Copiaza exemplu raspuns JSON" style="position:absolute; top:8px; right:8px; font-size:12px; padding:4px 10px; background:var(--line); color:var(--ink); border:1px solid var(--line); border-radius:4px; cursor:pointer;">Copiaza</button>
|
||||||
|
<pre style="background:var(--bg); border:1px solid var(--line); border-radius:6px; padding:16px; overflow-x:auto; margin:0;"><code style="font-size:12px; font-family:ui-monospace,monospace; color:var(--ink);">{{ exemplu_json["raspuns"] | e }}</code></pre>
|
||||||
|
</div>
|
||||||
|
<div aria-live="polite" class="copiaza-feedback muted" style="font-size:12px; min-height:20px; margin-top:4px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ul class="muted" style="font-size:12px; margin:8px 0 0; padding-left:18px; line-height:1.6;">
|
||||||
|
<li>Obligatorii: <code>vin</code>, <code>nr_inmatriculare</code>, <code>data_prestatie</code> (YYYY-MM-DD), <code>odometru_final</code> (string), <code>prestatii</code> (min. 1).</li>
|
||||||
|
<li>Fiecare prestatie are <code>cod_prestatie</code> (cod RAR din <a href="/?tab=nomenclator">nomenclator</a>) SAU <code>cod_op_service</code> + <code>denumire</code> — gateway-ul le mapeaza la cod RAR.</li>
|
||||||
|
<li>Optionale: <code>odometru_initial</code>, <code>obs</code>; <code>rar_env</code> (<code>"test"</code> / <code>"prod"</code>) — absent = mediul implicit al contului.</li>
|
||||||
|
<li>Un rezultat per prezentare, in aceeasi ordine (<code>index</code> = pozitia din cerere). <code>status</code>: <code>queued</code> (in coada), <code>needs_mapping</code> / <code>needs_data</code> / <code>error</code> (blocat — vezi <code>motiv</code>).</li>
|
||||||
|
<li><code>id_prezentare</code> e completat doar cand randul era DEJA trimis la RAR (duplicat detectat); altfel apare ulterior, in dashboard sau la <code>GET /v1/prezentari/{id}</code>.</li>
|
||||||
|
<li>Vrei detalii complete (erori pe camp, coduri nemapate, <code>held</code>)? Trimite <code>"raspuns": "complet"</code> in body.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
{# Card: De ce nu ajunge la RAR? (onestitate canal API) #}
|
{# Card: De ce nu ajunge la RAR? (onestitate canal API) #}
|
||||||
{# Un POST /v1/prezentari poate intoarce 200 dar randul sa NU plece la RAR. #}
|
{# Un POST /v1/prezentari poate intoarce 200 dar randul sa NU plece la RAR. #}
|
||||||
<div class="card" style="margin-bottom:16px;">
|
<div class="card" style="margin-bottom:16px;">
|
||||||
|
|||||||
Reference in New Issue
Block a user