@extends('layouts.app') @section('content') @php use App\Enums\OptionState; use App\Enums\PriceType; use App\Enums\PriceTypeLoyer; use App\Enums\PriceTypeTravaux; use App\Enums\ProductType; use App\Enums\SurfaceType; use App\Enums\Fiscalite as FiscaliteEnum; use App\Helpers\CdnHelper; @endphp @php $activeTab = $active_tab ?? 'en_cours'; @endphp

Mes options

Gérez vos options en cours ici : renouvelez, confirmez ou annulez vos options

Filtres
@csrf
@if($options && $options->count() > 0)
@foreach($options as $option) @php $lot = $option->product; $program = $lot ? $lot->program : null; $client = $option->client; $state = $option->state; // Déterminer le libellé selon l'état $libelle_html = ''; $expiree = false; // Utiliser l'état réel (le contrôleur a déjà créé l'état EXPIRED si nécessaire) if ($state === OptionState::EXPIRED) { $libelle_html = 'Option déchue le ' . date_fr_hour_without_seconds($option->date_end ?? $option->updated_at, true); $expiree = true; } elseif ($state === OptionState::VALIDATED || $state === OptionState::CREATED) { if ($option->date_end) { $libelle_html = 'Expire le ' . date_fr_hour_without_seconds($option->date_end, true); } else { $libelle_html = 'En attente'; } } elseif ($state === OptionState::CONFIRMED) { $libelle_html = 'Confirmée le ' . date_fr_hour_without_seconds($option->updated_at, true); } elseif ($state === OptionState::CANCELED) { $libelle_html = 'Annulée le ' . date_fr_hour_without_seconds($option->updated_at, true); } elseif ($state === OptionState::REFUSED) { $libelle_html = 'Refusée le ' . date_fr_hour_without_seconds($option->updated_at, true); } // Récupérer les prix depuis l'option (copiés lors de la création) $lotPrices = $option->prices; // Surface du lot = Surface habitable (même logique que le BO via Product::getSurfaceAttribute()) $surfaceHabitable = $lot ? (float) ($lot->surface ?? 0) : 0; @endphp @if($lot && $program) @endif @endforeach
Programme @if($sort === 'programme') @else @endif Lot Client Statut @if($sort === 'statut') @else @endif Rang Date de l'option @if($sort === 'created_at') @else @endif Date d'échéance @if($sort === 'date_end') @else @endif Actions
@if($program->slug) {{ $program->name }} @else {{ $program->name }} @endif {{ $lot->number ?? '-' }} @if($client) {{ $client->firstname ?? '' }} {{ $client->lastname ?? '' }} @else - @endif @if($expiree) Option déchue @else {{ $state->label() }} @endif @php $optionRang = $option->getRang(); @endphp @if($optionRang) Rang {{ $optionRang }} @else - @endif {{ $option->created_at->format('d/m/Y H:i') }} @if($state === OptionState::CANCELED || $state === OptionState::WAITING) - @else {{ $option->date_end ? $option->date_end->format('d/m/Y H:i') : '-' }} @endif @if($activeTab === 'archivees') {{-- Onglet archivées : aucune action métier, consultation uniquement --}} @else @php // Vérifier si l'option peut être gérée (VALIDATED ou CANCELED avec possibilité de renouvellement) $canManage = false; $canRenew = false; $canConfirm = false; $canCancel = false; $canRenewAsNewOption = false; // Pour CANCELED ou EXPIRED avec renouvellement possible $canProlonger = false; // Pour VALIDATED uniquement if ($state === OptionState::VALIDATED) { $canManage = true; // Seule l'option de rang 1 peut être confirmée $optionRang = $option->getRang(); $canConfirm = ($optionRang === 1); $canCancel = true; // Une option en cours (VALIDATED) ne peut pas être renouvelée $canRenew = false; // Une option en cours (VALIDATED) peut être prolongée // Vérifier qu'il reste des prolongations et que la date de fin est dans moins de 24h $canProlonger = false; if (($option->extension_numbers ?? 0) > 0 && $option->date_end) { $now = \Carbon\Carbon::now(); $hoursUntilEnd = $now->diffInHours($option->date_end, false); // On ne peut prolonger que moins de 24h avant la fin $canProlonger = $hoursUntilEnd < 24 && $hoursUntilEnd >= 0; } // Récupérer la durée de l'option pour l'affichage $saleParameter = $option->getSaleParameter(); $optionDurationDays = $saleParameter ? $saleParameter->option_duration_day : null; } elseif ($state === OptionState::CANCELED) { // Pour CANCELED, afficher directement le bouton "Renouveler" si possible // Ne permettre le renouvellement que si renew_numbers > 0 if ($option->renew_numbers > 0) { // Charger le produit avec les relations nécessaires $lot->load('program.saleParameter'); $canCreateResult = $lot->canCreateOption($option->application_id, $option->client_id); if ($canCreateResult['can_create']) { $canRenewAsNewOption = true; } } } elseif ($state === OptionState::REFUSED) { // Pour REFUSED, afficher directement le bouton "Renouveler" si possible // Ne permettre le renouvellement que si renew_numbers > 0 if ($option->renew_numbers > 0) { // Charger le produit avec les relations nécessaires $lot->load('program.saleParameter'); $canCreateResult = $lot->canCreateOption($option->application_id, $option->client_id); if ($canCreateResult['can_create']) { $canRenewAsNewOption = true; } } } elseif ($state === OptionState::EXPIRED) { // Pour EXPIRED, vérifier si on peut créer une nouvelle option (renouvellement) // Ne permettre le renouvellement que si renew_numbers > 0 if ($option->renew_numbers > 0) { $lot->load('program.saleParameter'); $canCreateResult = $lot->canCreateOption($option->application_id, $option->client_id); if ($canCreateResult['can_create']) { $canRenewAsNewOption = true; } } } @endphp @if($canManage) @elseif($canRenewAsNewOption) @else @endif @endif
@else
Aucune option trouvée

@if(request()->has('filter_statut') || request()->has('filter_nom') || request()->has('filter_programme') || request()->has('filter_date_debut')) Aucune option ne correspond aux critères de recherche. @elseif($activeTab === 'archivees') Aucune option archivée pour le moment. @else Vous n'avez encore aucune option en cours. Consultez les programmes et choisissez un lot pour poser votre première option. @endif

@if($activeTab !== 'archivees') Consultez les programmes @endif
@endif
@endsection