import CrmTaskCreation from '@/components/crm-task-creation'; import type { TaskCreationContext } from '@/lib/crm-task-creation'; import { Link } from '@inertiajs/react'; import { useCrmRecordEdit } from '@/lib/crm-record-edit'; import CrmEditComparison from '@/components/crm-edit-comparison'; import { Management, Field, button, control } from '../management/shared'; import { leadStates, taskStates } from './types'; import type { Lead, Owner, Task } from './types'; function TaskRow({ task, leadId }: { task: Task; leadId: string }) { const edit = useCrmRecordEdit({ id: task.id, kind: 'task', version: task.version_no, values: { status: task.status }, }); const form = edit.form; return (
{ e.preventDefault(); if (task.can_update === false) return; edit.submit(`/management/crm/leads/${leadId}/tasks/${task.id}`); }} >

{task.title}

{task.due_at ? new Intl.DateTimeFormat('pt-MZ', { dateStyle: 'medium', timeStyle: 'short', timeZone: 'Africa/Maputo', }).format(new Date(task.due_at)) + ' (Maputo)' : 'Sem prazo'}{' '} · Responsável #{task.assignee_user_id}

{task.can_update !== false ? ( <> taskStates[value] ?? value} /> ) : (

Dossier associado encerrado; tarefa disponível para consulta.

)} ); } export default function LeadDetail({ lead, contacts, owners, nextAction, taskCreation, }: { lead: Lead; contacts: { id: string; full_name: string; email: string | null; phone: string | null; }[]; owners: Owner[]; nextAction?: { future_tasks: number }; taskCreation: TaskCreationContext; }) { const edit = useCrmRecordEdit({ id: lead.id, kind: 'lead', version: lead.version_no, blankAfterSave: ['qualification_reason'], values: { status: lead.status, owner_user_id: String(lead.owner_user_id ?? ''), qualification_reason: '', }, }); const review = edit.form; return ( Voltar aos leads

{lead.investor && ( {lead.investor.legal_name} )}

{leadStates[lead.status]} ·{' '} {lead.owner?.name ?? 'Sem responsável'}

Origem inicial: {lead.first_source ?? 'Não registada'}

{lead.interest_request_id && ( Consultar pedido de origem )}
{contacts.map((contact) => (

{contact.full_name} · {contact.email ?? '—'} ·{' '} {contact.phone ?? '—'}

))}
{nextAction && (

{nextAction.future_tasks === 1 ? '1 tarefa disponível com prazo futuro.' : `${nextAction.future_tasks} tarefas disponíveis com prazo futuro.`}

{nextAction.future_tasks === 0 && ['new', 'qualified'].includes(lead.status) && (

Registe uma próxima acção com prazo futuro antes de qualificar o acompanhamento ou concluir a sua última tarefa. Tarefas num dossier encerrado ficam no histórico e não contam como próxima acção.

)} Registar próxima acção
)}
{ e.preventDefault(); edit.submit(`/management/crm/leads/${lead.id}`); }} >

Qualificação e atribuição