Ajout du type de champ "place" (Lieu) pour les relevés
- FieldType::Place = 'place' dans l'enum
- _field.blade.php : composant lieu-picker réutilisé pour la saisie
- Validation : integer + exists:lieux,id dans Store/UpdateReleveRequest
- buildData() : stocke {id, nom_long} dans le JSONB (évite les requêtes à l'affichage)
- releves/show.blade.php : affiche nom_long pour les champs de type place
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,4 +10,5 @@ enum FieldType: string
|
|||||||
case Select = 'select';
|
case Select = 'select';
|
||||||
case Textarea = 'textarea';
|
case Textarea = 'textarea';
|
||||||
case Number = 'number';
|
case Number = 'number';
|
||||||
|
case Place = 'place';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
|||||||
use App\Enums\FieldType;
|
use App\Enums\FieldType;
|
||||||
use App\Http\Requests\StoreReleveRequest;
|
use App\Http\Requests\StoreReleveRequest;
|
||||||
use App\Http\Requests\UpdateReleveRequest;
|
use App\Http\Requests\UpdateReleveRequest;
|
||||||
|
use App\Models\Lieu;
|
||||||
use App\Models\Releve;
|
use App\Models\Releve;
|
||||||
use App\Models\Source;
|
use App\Models\Source;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
@@ -108,6 +109,10 @@ class ReleveController extends Controller
|
|||||||
'valeur' => $value['valeur'] ?? null,
|
'valeur' => $value['valeur'] ?? null,
|
||||||
'calendrier' => $value['calendrier'] ?? 'gregorien',
|
'calendrier' => $value['calendrier'] ?? 'gregorien',
|
||||||
],
|
],
|
||||||
|
FieldType::Place => $value ? (function () use ($value) {
|
||||||
|
$lieu = Lieu::find((int) $value, ['id', 'nom_long']);
|
||||||
|
return $lieu ? ['id' => $lieu->id, 'nom_long' => $lieu->nom_long] : null;
|
||||||
|
})() : null,
|
||||||
default => $value === '' ? null : $value,
|
default => $value === '' ? null : $value,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,10 @@ class StoreReleveRequest extends FormRequest
|
|||||||
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'in:' . implode(',', $options)];
|
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'in:' . implode(',', $options)];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FieldType::Place:
|
||||||
|
$rules[$base] = [$field->required ? 'required' : 'nullable', 'integer', 'exists:lieux,id'];
|
||||||
|
break;
|
||||||
|
|
||||||
default: // text, textarea
|
default: // text, textarea
|
||||||
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000'];
|
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000'];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ class UpdateReleveRequest extends FormRequest
|
|||||||
$options = $field->options ?? [];
|
$options = $field->options ?? [];
|
||||||
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'in:' . implode(',', $options)];
|
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'in:' . implode(',', $options)];
|
||||||
break;
|
break;
|
||||||
|
case FieldType::Place:
|
||||||
|
$rules[$base] = [$field->required ? 'required' : 'nullable', 'integer', 'exists:lieux,id'];
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000'];
|
$rules[$base] = [$field->required ? 'required' : 'nullable', 'string', 'max:2000'];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
$name = "data[{$field->name}]";
|
$name = "data[{$field->name}]";
|
||||||
$inputId = "field_{$field->name}";
|
$inputId = "field_{$field->name}";
|
||||||
$oldValue = old("data.{$field->name}", $value);
|
$oldValue = old("data.{$field->name}", $value);
|
||||||
|
|
||||||
|
// Pour le type place : $value est soit null, soit ['id'=>…,'nom_long'=>…]
|
||||||
|
$placeId = $field->type === FieldType::Place ? ($value['id'] ?? null) : null;
|
||||||
|
$placeNomLong = $field->type === FieldType::Place ? ($value['nom_long'] ?? '') : '';
|
||||||
@endphp
|
@endphp
|
||||||
|
|
||||||
<div class="space-y-1">
|
<div class="space-y-1">
|
||||||
@@ -94,6 +98,17 @@
|
|||||||
@enderror
|
@enderror
|
||||||
@break
|
@break
|
||||||
|
|
||||||
|
@case(FieldType::Place)
|
||||||
|
<x-lieu-picker
|
||||||
|
:name="$name"
|
||||||
|
:value="$placeId"
|
||||||
|
:display-value="$placeNomLong"
|
||||||
|
:required="$field->required"
|
||||||
|
label=""
|
||||||
|
placeholder="Rechercher un lieu…"
|
||||||
|
/>
|
||||||
|
@break
|
||||||
|
|
||||||
@endswitch
|
@endswitch
|
||||||
|
|
||||||
@error("data.{$field->name}")
|
@error("data.{$field->name}")
|
||||||
|
|||||||
@@ -42,6 +42,8 @@
|
|||||||
<dd class="col-span-2 text-gray-900 dark:text-white">
|
<dd class="col-span-2 text-gray-900 dark:text-white">
|
||||||
@if($val === null || $val === '')
|
@if($val === null || $val === '')
|
||||||
<span class="text-gray-400 dark:text-gray-500">—</span>
|
<span class="text-gray-400 dark:text-gray-500">—</span>
|
||||||
|
@elseif(is_array($val) && isset($val['nom_long']))
|
||||||
|
{{ $val['nom_long'] }}
|
||||||
@elseif(is_array($val))
|
@elseif(is_array($val))
|
||||||
{{ $val['valeur'] ?? '—' }}
|
{{ $val['valeur'] ?? '—' }}
|
||||||
@if(!empty($val['calendrier']) && $val['calendrier'] !== 'gregorien')
|
@if(!empty($val['calendrier']) && $val['calendrier'] !== 'gregorien')
|
||||||
|
|||||||
Reference in New Issue
Block a user