It is already out for signature with = escapeHtml($pending['contract_signature_sent_to_name']) ?> (= escapeHtml(contractSignatureState($pending)['when']) ?>). Sending it now withdraws that request= !empty($pending['contract_signature_client_signed_at']) ? ', signature and all' : '' ?>.
It was signed by both on = escapeHtml(date('M j, Y', strtotime(max($signed['contract_signature_client_signed_at'], $signed['contract_signature_agent_signed_at'])))) ?>. Sending it starts a new signing - that copy is kept.
Nothing fills in = escapeHtml(implode(', ', array_map(function ($word) { return "[$word]"; }, $unfilled))) ?> - it goes out as written. Edit the contract first to fill it in.
Who signs for = escapeHtml($contract['client_name']) ?>
$row) {
$has_email = filter_var((string) $row['contact_email'], FILTER_VALIDATE_EMAIL); ?>
= $has_email ? '' : ' disabled' ?>>
= escapeHtml($row['contact_name'] . ($row['contact_title'] ? ' - ' . $row['contact_title'] : '') . ($has_email ? ' (' . $row['contact_email'] . ')' : ' - no email')) ?>
>Someone else - below
A note for them
They read it and sign it from the link in the email, or in the client portal - drawn or typed.
You countersign after; they get the PDF signed by both= $draft_start !== '' ? ', and the contract becomes active from ' . escapeHtml($draft_start) : '' ?>.
Changing the contract while it is out withdraws the request.