feat(5.12): modal editare + cont obligatoriu la import; design.md + PRD 5.13 revizuit (/autoplan)
5.12 (livrat): editare in modal a randurilor de preview, cont obligatoriu inainte de import, formular editare extras (_form_editare, _editare_preview_modal), plus suita de teste aferenta (preview edit/compact, mapare op, form editare, signup, admin panel). Design + planificare: - docs/design.md: sistem de design (tokeni, breakpoints, scara control, componente, a11y). - docs/prd/prd-5.12-* si prd-5.13-* (5.13 cu raport /autoplan: CEO+Design+Eng, audit trail). Curatare: sterse PNG-urile de test/mockup temporare din radacina. Nota: implementarea CSS 5.13 (responsive compact + sistem butoane) NU e inca facuta — planul revizuit cere refactorul testelor fragile din test_web_responsive.py INAINTE de CSS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -69,6 +69,16 @@ async def signup_post(
|
||||
name=name, cui=cui, email=email,
|
||||
), status_code=422)
|
||||
|
||||
# CUI obligatoriu la signup (US-001, PRD 5.12)
|
||||
cui_norm = cui.strip().upper() if cui else ""
|
||||
if not cui_norm:
|
||||
return _TMPL.TemplateResponse(request, "signup.html", _ctx(
|
||||
request,
|
||||
csrf_token=get_csrf_token(request),
|
||||
error="CUI-ul firmei este obligatoriu.",
|
||||
name=name, cui=cui, email=email,
|
||||
), status_code=422)
|
||||
|
||||
# Bootstrap admin: count_admins se citeste INAUNTRUL tranzactiei BEGIN IMMEDIATE,
|
||||
# astfel lock-ul RESERVED serializeaza scriitorii si al doilea signup vede count==1.
|
||||
conn = get_connection()
|
||||
@@ -76,10 +86,43 @@ async def signup_post(
|
||||
conn.execute("BEGIN IMMEDIATE")
|
||||
try:
|
||||
is_first = count_admins(conn) == 0
|
||||
account_id = create_account(conn, name, cui.strip() or None, active=False)
|
||||
account_id = create_account(conn, name, cui=cui_norm, email=email, active=False)
|
||||
user_id = create_user(conn, account_id, email, parola, is_admin=is_first)
|
||||
api_key = create_api_key(conn, account_id)
|
||||
conn.execute("COMMIT")
|
||||
except ValueError as exc:
|
||||
conn.execute("ROLLBACK")
|
||||
exc_msg = str(exc)
|
||||
# Ordinea conteaza: verifica EMAIL inainte de CUI (ambele contin 'deja folosit').
|
||||
# create_user ridica exact "email deja folosit"; create_account ridica "CUI X e deja folosit".
|
||||
if "email deja folosit" in exc_msg:
|
||||
# Email duplicat -> mesaj specific emailului (T3, D#14-email)
|
||||
error_msg = (
|
||||
"Acest email este deja folosit. "
|
||||
"Daca ai deja cont, autentifica-te."
|
||||
)
|
||||
elif "deja folosit" in exc_msg or "IntegrityError" in exc_msg:
|
||||
# CUI duplicat -> mesaj prietenos, NU mesajul tehnic cu 'activate --account' (T3, D#14)
|
||||
settings = get_settings()
|
||||
if settings.support_email:
|
||||
error_msg = (
|
||||
f"Aceasta firma (CUI {cui_norm}) e deja inregistrata. "
|
||||
f"Cere accesul de la administratorul contului sau contacteaza suportul: "
|
||||
f"{settings.support_email}"
|
||||
)
|
||||
else:
|
||||
error_msg = (
|
||||
f"Aceasta firma (CUI {cui_norm}) e deja inregistrata. "
|
||||
f"Cere accesul de la administratorul contului."
|
||||
)
|
||||
else:
|
||||
error_msg = exc_msg
|
||||
return _TMPL.TemplateResponse(request, "signup.html", _ctx(
|
||||
request,
|
||||
csrf_token=get_csrf_token(request),
|
||||
error=error_msg,
|
||||
name=name, cui=cui, email=email,
|
||||
), status_code=422)
|
||||
except Exception as exc:
|
||||
conn.execute("ROLLBACK")
|
||||
return _TMPL.TemplateResponse(request, "signup.html", _ctx(
|
||||
|
||||
Reference in New Issue
Block a user