Informations Générales
Numéro de devis
Devis #{{ $devis->id }}
Date de demande
{{ $devis->devis_requested_at ? $devis->devis_requested_at->tz(config('app.timezone'))->format('d/m/Y à H:i') : 'Date non disponible' }}
Statut
{{ $devis->status === 'traite' ? 'Traité' : ($devis->status === 'en_attente' ? 'En attente' : ucfirst(str_replace('_', ' ', $devis->status))) }}
@php
$answers = [];
$organizedAnswers = [];
if ($devis->form_data) {
$formData = is_string($devis->form_data) ? json_decode($devis->form_data, true) : $devis->form_data;
if (is_array($formData)) {
// Format 1: answers formatées directement (nouveau format)
if (isset($formData['answers']) && is_array($formData['answers']) && !empty($formData['answers'])) {
$previousAnswer = null;
foreach ($formData['answers'] as $formattedAnswer) {
if (isset($formattedAnswer['field_title']) && isset($formattedAnswer['value'])) {
$cleanTitle = preg_replace('/\{\{field:[^}]+\}\}/', '', $formattedAnswer['field_title']);
$cleanTitle = preg_replace('/\*+/', '', $cleanTitle);
$cleanTitle = preg_replace('/^[,\s]+/', '', $cleanTitle);
$cleanTitle = trim($cleanTitle);
// Si c'est une question "Pour quel montant", ajouter le contexte
if (stripos($cleanTitle, 'pour quel montant') !== false && $previousAnswer) {
$prevTitle = preg_replace('/\{\{field:[^}]+\}\}/', '', $previousAnswer['field_title'] ?? '');
$prevTitle = preg_replace('/\*+/', '', $prevTitle);
$prevTitle = preg_replace('/^[,\s]+/', '', $prevTitle);
$prevTitle = trim($prevTitle);
if ($prevTitle && (stripos($prevTitle, 'souhaitez-vous') !== false || stripos($prevTitle, 'assurer') !== false)) {
$cleanTitle = $prevTitle . ' - ' . $cleanTitle;
}
}
$answers[] = [
'field_title' => $cleanTitle ?: $formattedAnswer['field_title'],
'value' => $formattedAnswer['value'],
'field_type' => $formattedAnswer['field_type'] ?? null
];
$previousAnswer = $formattedAnswer;
}
}
}
// Format 2: raw_data avec form_response
elseif (isset($formData['raw_data'])) {
$rawData = $formData['raw_data'];
$formResponse = $rawData['form_response'] ?? null;
if ($formResponse && isset($formResponse['answers']) && is_array($formResponse['answers'])) {
$rawAnswers = $formResponse['answers'];
$fields = $formResponse['definition']['fields'] ?? [];
$fieldsMap = [];
foreach ($fields as $field) {
if (isset($field['id'])) {
$fieldsMap[$field['id']] = $field['title'] ?? '';
}
}
$previousFieldTitle = null;
foreach ($rawAnswers as $rawAnswer) {
$fieldId = $rawAnswer['field']['id'] ?? null;
$fieldTitle = $fieldsMap[$fieldId] ?? 'Question';
$fieldTitle = preg_replace('/\{\{field:[^}]+\}\}/', '', $fieldTitle);
$fieldTitle = preg_replace('/\*+/', '', $fieldTitle);
$fieldTitle = preg_replace('/^[,\s]+/', '', $fieldTitle);
$fieldTitle = trim($fieldTitle);
if (stripos($fieldTitle, 'pour quel montant') !== false && $previousFieldTitle) {
if (stripos($previousFieldTitle, 'souhaitez-vous') !== false || stripos($previousFieldTitle, 'assurer') !== false) {
$fieldTitle = $previousFieldTitle . ' - ' . $fieldTitle;
}
}
$value = null;
if (isset($rawAnswer['email'])) {
$value = $rawAnswer['email'];
} elseif (isset($rawAnswer['text'])) {
$value = $rawAnswer['text'];
} elseif (isset($rawAnswer['phone_number'])) {
$value = $rawAnswer['phone_number'];
} elseif (isset($rawAnswer['date'])) {
try {
$value = \Carbon\Carbon::parse($rawAnswer['date'])->format('d/m/Y');
} catch (\Exception $e) {
$value = $rawAnswer['date'];
}
} elseif (isset($rawAnswer['choice'])) {
$value = $rawAnswer['choice']['label'] ?? ($rawAnswer['choice']['ref'] ?? null);
} elseif (isset($rawAnswer['boolean'])) {
$value = $rawAnswer['boolean'] ? 'Oui' : 'Non';
} elseif (isset($rawAnswer['number'])) {
$value = (string)$rawAnswer['number'];
}
if ($value !== null) {
$answers[] = [
'field_title' => $fieldTitle,
'value' => $value,
'field_type' => $rawAnswer['type'] ?? null
];
}
$previousFieldTitle = $fieldTitle;
}
}
}
}
}
// Organiser les réponses par catégories
$categories = [
'Véhicule' => ['marque', 'cylindrée', 'modèle', 'mise en circulation', 'propriétaire', 'véhicule', 'souhaitez'],
'Informations personnelles' => ['date de naissance', 'naissance', 'prénom', 'nom'],
'Adresse' => ['rue', 'code postal', 'ville', 'adresse', 'logement', 'numéro'],
'Situation' => ['locataire', 'propriétaire', 'hébergé', 'situation familiale', 'marié', 'célibataire', 'concubin', 'pacsé', 'divorcé', 'veuf', 'occupez'],
'Permis' => ['permis', 'obtention', 'titulaire'],
'Assurance' => ['bonus-malus', 'bonus malus', 'durée d\'assurance', 'sinistre', 'assureur', 'couverture', 'niveau', 'coefficient'],
'Options' => ['assistance', 'accessoire', 'équipement', 'montant', 'souhaitez-vous'],
'Autres' => []
];
$organizedAnswers = [];
foreach ($answers as $answer) {
$cleanTitle = $answer['field_title'] ?? '';
$title = strtolower($cleanTitle);
$categorized = false;
foreach ($categories as $category => $keywords) {
foreach ($keywords as $keyword) {
if (stripos($title, $keyword) !== false) {
if (!isset($organizedAnswers[$category])) {
$organizedAnswers[$category] = [];
}
$organizedAnswers[$category][] = $answer;
$categorized = true;
break 2;
}
}
}
if (!$categorized) {
if (!isset($organizedAnswers['Autres'])) {
$organizedAnswers['Autres'] = [];
}
$organizedAnswers['Autres'][] = $answer;
}
}
@endphp
@if(!empty($answers))
@foreach($organizedAnswers as $category => $categoryAnswers)
@if(!empty($categoryAnswers))
{{ $category }}
@foreach($categoryAnswers as $answer)
{{ $answer['field_title'] ?? 'Question' }}
@if(is_array($answer['value']))
@if(isset($answer['value']['label']))
{{ $answer['value']['label'] }}
@else
{{ json_encode($answer['value'], JSON_UNESCAPED_UNICODE) }}
@endif
@else
{{ $answer['value'] ?? 'N/A' }}
@endif
@endforeach
@endif
@endforeach
@else
Aucune donnée de formulaire disponible pour ce devis.
@endif