@extends('layouts.app')
@section('content')
@php
use App\Enums\TaskType;
use App\Enums\TaskState;
use App\Enums\Civilite;
use App\Enums\Country;
use App\Enums\SituationMatrimoniale;
use App\Enums\RegimeMatrimonial;
use App\Enums\DocumentTypeReservation;
use App\Enums\ContratTypeProgram;
use App\Enums\Fiscalite as FiscaliteEnum;
use App\Enums\DocumentStatus;
use App\Enums\SurfaceType;
use App\Enums\PriceType;
use App\Enums\PriceTypeLoyer;
use App\Enums\PriceTypeTravaux;
use App\Enums\BuyingCompanyType;
use App\Enums\ProductType;
use App\Enums\PrestationProgram;
use App\Simulator\Calculators\Malraux\MalrauxCore;
@endphp
@elseif($fiscaliteEnum === FiscaliteEnum::MALRAUX) {{-- Malraux --}}
@php
// Récupérer tous les prix nécessaires
$prixImmoTTC = $lotPrices->where('type', 'prix_immo_ttc')->first()?->value ?? 0;
// Le prix foncier utilise d'abord le prix stocké (prix_foncier_ttc ou prix_foncier_ht), sinon calcule automatiquement
// S'assurer que les prix et annexes sont chargés avant d'appeler getPrixFoncier()
if (!$lot->relationLoaded('prices')) {
$lot->load('prices');
}
if (!$lot->relationLoaded('annexes')) {
$lot->load('annexes');
}
if (!$lot->relationLoaded('annexes.prices')) {
$lot->load('annexes.prices');
}
$prixFoncierCalcul = $lot->getPrixFoncier();
// Récupérer les prix des annexes depuis les annexes elles-mêmes
// Les prix des annexes sont stockés dans les annexes, pas dans les prix du lot
$prixParkingTTC = 0;
foreach ($parkingAnnexes as $parking) {
$prixParkingTTC += $parking->prices->where('type', 'prix_ttc')->first()?->value ?? 0;
}
$prixGarageTTC = 0;
foreach ($garageAnnexes as $garage) {
$prixGarageTTC += $garage->prices->where('type', 'prix_ttc')->first()?->value ?? 0;
}
$prixCaveTTC = 0;
foreach ($caveAnnexes as $cave) {
$prixCaveTTC += $cave->prices->where('type', 'prix_ttc')->first()?->value ?? 0;
}
// Prix vente TTC = prix_ttc du lot
$prixVenteTTC = $lotPrices->where('type', PriceType::PRIX_TTC->value)->first()?->value ?? 0;
// Pour Malraux, utiliser loyer_mensuel_ttc pour Loyer marché
$loyerMarche = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value ?? 0;
// Calcul des frais de notaire selon Simulation_Lib.php
// Pour Malraux VIR : utiliser prix_immo_ttc avec taux-normal (correspond aux PDFs : 19 889 €)
// Pour Malraux ASL : prix_foncier (ligne 2091 Simulation_Lib.php)
// Cas ASL : frais sur le seul foncier (comme Simulation_Lib.php ligne 2091)
if ($program && isset($program->contrat_type) && $program->contrat_type === ContratTypeProgram::ASL && $prixFoncierCalcul > 0) {
$montantPourNotaire = $prixFoncierCalcul;
$typeCalculNotaire = 'taux-reduit';
} else {
// Cas VIR : frais sur prix_immo_ttc avec taux-normal (correspond aux PDFs)
// Le calcul donne exactement 19 889 € pour prix_immo_ttc = 302 746 €
$montantPourNotaire = $prixImmoTTC;
$typeCalculNotaire = 'taux-normal';
}
// Total des travaux (éligibles + non éligibles)
$montantTravauxCommTTC = $lotPrices->where('type', PriceTypeTravaux::PRIX_TRAVAUX_ELIGIBLE->value)->first()?->value ?? 0;
$montantTravauxPrivTTC = $lotPrices->where('type', PriceTypeTravaux::PRIX_TRAVAUX_NON_ELIGIBLE->value)->first()?->value ?? 0;
$prixTravauxTotal = $montantTravauxCommTTC + $montantTravauxPrivTTC;
$fraisNotaireFinal = 0;
if ($montantPourNotaire > 0) {
$fraisNotaireFinal = MalrauxCore::calculFraisNotaire($montantPourNotaire, $typeCalculNotaire, $lot, true);
}
$depotGarantie = $lotPrices->where('type', 'montant_depot_garantie')->first()?->value ?? 0;
$fraisMiseCopro = $lotPrices->where('type', 'frais_mise_en_copro')->first()?->value ?? 0;
if ($fraisMiseCopro == 0) {
$fraisMiseCopro = $lotPrices->where('type', 'frais_mise_copro')->first()?->value ?? 0;
}
@endphp
@endif
@php
// S'assurer que les prix sont chargés avant d'appeler getPrixFoncier()
if (!$lot->relationLoaded('prices')) {
$lot->load('prices');
}
$prixFoncierCalcul = $lot->getPrixFoncier();
@endphp
@if($prixFoncierCalcul > 0)
@if($workflowData && $workflowData['workflow'])
@php
// Récupérer toutes les tâches non-catégories dans l'ordre
// Utiliser $workflowData['tasks'] qui contient toutes les tâches dans l'ordre
$allNonCategoryTasks = collect($workflowData['tasks'] ?? [])
->filter(function ($task) {
return $task->type && !$task->type->isCategory();
})
->values();
@endphp
Progression
@foreach($allNonCategoryTasks as $index => $task)
@php
$taskReservation = $taskReservations->get($task->id);
$taskState = $taskReservation ? $taskReservation->state : null;
$isCompleted = $taskState === TaskState::TERMINEE;
$isInProgress = $taskState === TaskState::EN_COURS || ($currentTask && $currentTask->id === $task->id);
$isFuture = !$isCompleted && !$isInProgress;
// Vérifier si la tâche précédente est terminée pour afficher la ligne active
$previousTaskCompleted = false;
if ($index > 0) {
$previousTask = $allNonCategoryTasks->get($index - 1);
$previousTaskReservation = $taskReservations->get($previousTask->id);
$previousTaskState = $previousTaskReservation ? $previousTaskReservation->state : null;
$previousTaskCompleted = $previousTaskState === TaskState::TERMINEE;
}
// Déterminer si c'est la dernière tâche
$isLast = $index === $allNonCategoryTasks->count() - 1;
// La ligne est active si cette tâche ou la précédente est terminée/en cours
$lineActive = $isCompleted || $isInProgress || $previousTaskCompleted;
@endphp
{{ $reservation->signed_by_clients_at->format('d/m/Y à H:i:s') }}
@endif
@endforeach
@if($currentTask)
@php
// Trouver la tâche en cours dans toutes les tâches
$currentTaskFound = false;
if ($currentTask && isset($workflowData['tasks'])) {
foreach ($workflowData['tasks'] as $task) {
if ($currentTask->id === $task->id) {
$currentTaskFound = true;
break;
}
}
}
@endphp
@if($currentTaskFound)
@endif
@if($needSignature && !$hasSignatureId)
@php
\Illuminate\Support\Facades\Log::info('Reservation show - Affichage: En attente prestataire de signature');
@endphp
En attente prestataire de signature
@elseif($needSignature && $hasSignatureId)
@php
\Illuminate\Support\Facades\Log::info('Reservation show - Affichage: En attente de signature');
@endphp
En attente de signature
@else
@php
\Illuminate\Support\Facades\Log::info('Reservation show - Affichage: Bouton Envoyer en signature électronique');
@endphp
@endif
Votre client a reçu un lien YouSign le {{ $dateEnvoi->format('d/m/Y à H:i') }} par mail pour signature électronique de son contrat de réservation. Bonne signature !