[FEAT] invite: recipient data (nome/cognome/email/piva) pre-compila form registrazione + invite_url->register.html

This commit is contained in:
DevEnv nis2-agile 2026-03-10 11:57:19 +01:00
parent 67560e1758
commit 7bb92b1971
3 changed files with 28 additions and 9 deletions

View File

@ -358,6 +358,9 @@ class AuthController extends BaseController
$inv = $result['invite'];
$metadata = !empty($inv['metadata']) ? json_decode($inv['metadata'], true) : [];
$recipient = $metadata['recipient'] ?? null;
$this->jsonSuccess([
'valid' => true,
'plan' => $inv['plan'],
@ -368,6 +371,7 @@ class AuthController extends BaseController
'label' => $inv['label'],
'restrict_vat' => $inv['restrict_vat'] ? true : false,
'restrict_email' => $inv['restrict_email'] ? true : false,
'recipient' => $recipient, // dati pre-compilazione form (null se non presenti)
], 'Invito valido');
}
}

View File

@ -73,6 +73,15 @@ class InviteController extends BaseController
$restrictVat = preg_replace('/[^0-9]/', '', $body['restrict_vat'] ?? '');
$restrictEmail = filter_var($body['restrict_email'] ?? '', FILTER_VALIDATE_EMAIL) ?: null;
$notes = trim($body['notes'] ?? '') ?: null;
// Dati destinatario (pre-compilano il form di registrazione)
$recipient = [];
if (!empty($body['recipient_first_name'])) $recipient['first_name'] = substr(trim($body['recipient_first_name']), 0, 100);
if (!empty($body['recipient_last_name'])) $recipient['last_name'] = substr(trim($body['recipient_last_name']), 0, 100);
if (!empty($body['recipient_email'])) $recipient['email'] = filter_var(trim($body['recipient_email']), FILTER_VALIDATE_EMAIL) ?: null;
if (!empty($body['recipient_company'])) $recipient['company'] = substr(trim($body['recipient_company']), 0, 255);
if (!empty($body['recipient_vat'])) $recipient['vat'] = preg_replace('/[^0-9]/', '', $body['recipient_vat']);
$metadata = !empty($recipient) ? json_encode(['recipient' => $recipient]) : null;
$maxUsersPerOrg = isset($body['max_users_per_org']) ? max(1, min(9999, (int)$body['max_users_per_org'])) : null;
$priceEur = isset($body['price_eur']) ? round((float)$body['price_eur'], 2) : null;
$resellerName = substr(trim($body['reseller_name'] ?? ''), 0, 128) ?: null;
@ -90,13 +99,13 @@ class InviteController extends BaseController
(token_prefix, token_hash, plan, duration_months, label, notes,
max_uses, max_users_per_org, price_eur, reseller_name,
expires_at, channel, issued_to, issued_by,
restrict_vat, restrict_email)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',
restrict_vat, restrict_email, metadata)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',
[
$prefix, $tokenHash, $plan, $durationMonths,
$label, $notes, $maxUses, $maxUsersPerOrg, $priceEur, $resellerName,
$expiresAt, $channel, $issuedTo, $issuedBy,
$restrictVat ?: null, $restrictEmail,
$restrictVat ?: null, $restrictEmail, $metadata,
]
);
$inviteId = (int) Database::lastInsertId();
@ -114,7 +123,8 @@ class InviteController extends BaseController
'channel' => $channel,
'issued_to' => $issuedTo,
'label' => $label,
'invite_url' => APP_URL . '/onboarding.html?invite=' . urlencode($rawToken),
'invite_url' => APP_URL . '/register.html?invite=' . urlencode($rawToken),
'recipient' => !empty($recipient) ? $recipient : null,
'provision_hint' => 'POST /api/services/provision con invite_token: "' . $rawToken . '"',
];

View File

@ -412,15 +412,20 @@
inviteValid = true;
inviteToken = val;
statusEl.className = 'lookup-status ok';
statusEl.innerHTML = '<i class="fas fa-check-circle"></i> Codice valido — accesso B2B confermato';
const label = data.data?.label ? ` — ${data.data.label}` : '';
statusEl.innerHTML = `<i class="fas fa-check-circle"></i> Codice valido${label} — accesso B2B confermato`;
// Pre-fill role if provided
if (data.role && document.getElementById('card-' + data.role)) {
selectRole(data.role);
}
// Pre-fill name/email from invite
if (data.nome) document.getElementById('firstname').value = data.nome;
if (data.cognome) document.getElementById('lastname').value = data.cognome;
if (data.email) document.getElementById('email').value = data.email;
// Pre-fill dai dati destinatario nell'invite (recipient)
const r = data.data?.recipient;
if (r) {
if (r.first_name) document.getElementById('firstname').value = r.first_name;
if (r.last_name) document.getElementById('lastname').value = r.last_name;
if (r.email) document.getElementById('email').value = r.email;
if (r.vat) { document.getElementById('piva').value = r.vat; lookupPiva(r.vat); }
}
} else {
inviteValid = false;
inviteToken = null;