@extends('layouts.app') @section('content') @php use App\Enums\PriceType; use App\Enums\PriceTypeLoyer; use App\Enums\PriceTypeTravaux; use App\Enums\ProductState; use App\Enums\ProductType; use App\Enums\FloorType; use App\Enums\SurfaceType; use App\Enums\Fiscalite as FiscaliteEnum; use App\Enums\DocumentTypeLot; use App\Enums\ContratTypeProgram; use App\Enums\PrestationProgram; use App\Enums\MarketingTagType; use App\Services\AppContext; use App\Simulator\Calculators\Malraux\MalrauxCore; @endphp
@if($program)
@if($firstImage) {{ strtolower($program->name) }} @endif

{{ ucwords(strtolower($program->name)) }}

    @foreach($program->marketingTags->filter(fn($t) => $t->type && $t->type->value !== MarketingTagType::NON_DEFINI->value) as $tag)
  • @endforeach @if($dateLivraisonValue)
  • @endif
  • {{ ucwords(strtolower($program->city)) }}
  • {{ $fiscaliteLibelle }}
    @if($quoteTravaux)
  • Quote/travaux : {{ $quoteTravaux }} %
  • @endif @if(isset($commission) && $commission)
  • @php $commissionValue = $commission->value_ttc ?? $commission->value_ht ?? 0; // Déterminer si HT : si value_ttc n'existe pas mais value_ht existe $isHT = empty($commission->value_ttc) && !empty($commission->value_ht); @endphp
    Commission : {{ number_format($commissionValue, 2, ',', ' ') }} %@if($isHT) HT@endif
  • @endif @if(!empty($operations_commerciales)) @foreach($operations_commerciales as $operation_commerciale => $value)
  • {{ $operation_commerciale }}
  • @endforeach @endif
@endif
@if($program)
@php $programFiscalites = $programFiscalites ?? collect(); $hasMultipleFiscalites = $programFiscalites->count() > 1; $fiscaliteIdMapping = [ 'residence_principale' => 1, 'malraux' => 8, 'monument_historique' => 9, 'deficit_foncier' => 10, 'denormandie' => 11, 'lmnp_neuf' => 7, 'lmnp_ancien' => 7, 'lmnp_services_avec_tva' => 13, 'lmnp_services_sans_tva' => 14, ]; $fiscalitesForTabs = $hasMultipleFiscalites ? $programFiscalites : collect([$fiscaliteEnum])->filter(); @endphp @if($hasMultipleFiscalites)
@endif
@foreach($fiscalitesForTabs as $paneFiscaliteEnum) @php $fiscaliteEnum = $paneFiscaliteEnum; $fiscaliteValue = $fiscaliteEnum?->value; $fiscaliteId = $fiscaliteValue && isset($fiscaliteIdMapping[$fiscaliteValue]) ? $fiscaliteIdMapping[$fiscaliteValue] : null; $isActivePane = !$hasMultipleFiscalites || ($paneFiscaliteEnum && $paneFiscaliteEnum->value === ($program->fiscalites->pluck('type')->filter()->first(fn ($f) => $f->value === request('fiscalite'))?->value ?? ($fiscalitesForTabs->first()?->value))); $isResidencePrincipaleFiscalite = $fiscaliteEnum === FiscaliteEnum::RESIDENCE_PRINCIPALE; $isMalrauxFiscalite = $fiscaliteEnum === FiscaliteEnum::MALRAUX; $isDenormandieFiscalite = $fiscaliteEnum === FiscaliteEnum::DENORMANDIE; $isDenormandieOptimiseDfFiscalite = $fiscaliteEnum === FiscaliteEnum::DENORMANDIE_OPTIMISE_AU_DF; $isDeficitFoncierFiscalite = $fiscaliteEnum === FiscaliteEnum::DEFICIT_FONCIER; $isMonumentHistoriqueFiscalite = $fiscaliteEnum === FiscaliteEnum::MONUMENT_HISTORIQUE; $isJeanBrunNeufFiscalite = $fiscaliteEnum === FiscaliteEnum::JEAN_BRUN_NEUF; $isJeanBrunAncienFiscalite = $fiscaliteEnum === FiscaliteEnum::JEAN_BRUN_ANCIEN; $isLliFiscalite = $fiscaliteEnum === FiscaliteEnum::LLI; $isLmnpServicesFiscalite = $fiscaliteEnum === FiscaliteEnum::LMNP_SEVICES_AVEC_TVA || $fiscaliteEnum === FiscaliteEnum::LMNP_SEVICES_SANS_TVA; $isLmnpAncienFiscalite = $fiscaliteEnum === FiscaliteEnum::LMNP_ANCIEN; $lotsForFiscalite = $program->lots ->filter(function ($lot) use ($fiscaliteEnum) { $lotFiscalites = $lot->fiscalites ?? collect(); if ($lotFiscalites->isEmpty()) { return false; } return $lotFiscalites->contains(function ($lotFiscalite) use ($fiscaliteEnum) { $lotFiscaliteEnum = $lotFiscalite->type instanceof FiscaliteEnum ? $lotFiscalite->type : FiscaliteEnum::tryFrom((string) $lotFiscalite->type); return $lotFiscaliteEnum?->value === $fiscaliteEnum?->value; }); }) ->values(); $showTva55Column = $lotsForFiscalite->contains(function ($lot) { $tabs = $lot->calcul_prix_vente_total_onglets_par_fiscalites(); $tva55Tab = collect($tabs)->first(function ($tab) { return ($tab['pane_id'] ?? '') === 'prix-vente-tva-5-5' || ($tab['tab_label'] ?? '') === 'TVA 5.5'; }); if ($tva55Tab === null) { return false; } return ((float) ($tva55Tab['result']['total'] ?? 0)) > 0; }); @endphp
{{ $lotsForFiscalite->count() }} Lots{{ !empty($types) ? ' du ' . $types[array_key_first($types)] . ' au ' . $types[array_key_last($types)] : '' }}
@if( $isResidencePrincipaleFiscalite || $isMalrauxFiscalite || $isDenormandieFiscalite || $isDenormandieOptimiseDfFiscalite || $isDeficitFoncierFiscalite || $isMonumentHistoriqueFiscalite || $isJeanBrunNeufFiscalite || $isJeanBrunAncienFiscalite || $isLliFiscalite || $isLmnpServicesFiscalite || $isLmnpAncienFiscalite ) @if($isDenormandieFiscalite || $isDenormandieOptimiseDfFiscalite || $isJeanBrunNeufFiscalite || $isJeanBrunAncienFiscalite) @elseif($isLmnpServicesFiscalite) @else @endif @if($isLmnpServicesFiscalite) @endif @if($isMalrauxFiscalite || $isDeficitFoncierFiscalite || $isDenormandieOptimiseDfFiscalite || $isMonumentHistoriqueFiscalite || $isJeanBrunAncienFiscalite) @endif @elseif($fiscaliteEnum === FiscaliteEnum::LMNP_NEUF) {{-- LMNP Neuf --}} @endif @if($showTva55Column) @endif @php // Variables pour suivre quelles colonnes ont des données $col_loyer_mensuel_dispositif_fiscal = $col_loyer_mensuel_denormandie_ttc = $col_loyer_mensuel_ttc = $col_loyer_mensuel_ht = $col_loyer_mensuel = false; $col_loyer_annuel_ttc = $col_loyer_annuel_ht = false; $col_prix_immobilier_ttc = $col_prix_immobilier_ht = false; $col_prix_mobilier_ttc = $col_prix_mobilier_ht = false; $col_prix_parking_ttc = $col_prix_parking_ht = false; $col_prix_garage_ttc = $col_prix_garage_ht = false; $col_prix_cave_ht = $col_prix_cave_ttc = false; $col_prix_vente_ttc = $col_prix_vente_total = false; $col_montant_travaux_comm_ttc = $col_montant_travaux_priv_ttc = $col_prix_travaux_total = false; $col_prix_foncier = $col_subvention_anah = $col_rentabilite_locative = false; // Compter le nombre de colonnes dans le thead pour le colspan $colCount = 6; // Lot, Type, Niveau, Surface, Extérieur, Annexe if($showTva55Column) { $colCount += 1; } if( $isResidencePrincipaleFiscalite || $isMalrauxFiscalite || $isDenormandieFiscalite || $isDenormandieOptimiseDfFiscalite || $isDeficitFoncierFiscalite || $isMonumentHistoriqueFiscalite || $isJeanBrunNeufFiscalite || $isJeanBrunAncienFiscalite || $isLliFiscalite || $isLmnpServicesFiscalite || $isLmnpAncienFiscalite ) { $colCount += 4; // Loyer + Prix immo TTC + Prix annexe + Prix de vente total if($isLmnpServicesFiscalite) { $colCount += 1; // Prix immo HT } if($isMalrauxFiscalite || $isDeficitFoncierFiscalite || $isDenormandieOptimiseDfFiscalite || $isMonumentHistoriqueFiscalite || $isJeanBrunAncienFiscalite) { $colCount += 3; // Foncier + travaux éligibles + travaux non-éligibles } } elseif($fiscaliteEnum === FiscaliteEnum::LMNP_NEUF) { $colCount += 8; // Loyer Annuel HT, Prix Immo HT, Prix Mobilier HT, Prix Parking HT, Prix Garage HT, Loyer Marché, Prix Vente Total HT, Rentabilité Locative } $colCount += 3; // Offres, Statut, Actions @endphp @forelse($lotsForFiscalite as $lot) @php $lotPrices = $lot->prices; $lotSurfaces = $lot->surfaces; $lotStates = $lot->states; $lotAnnexes = $lot->annexes; $lotOrientations = $lot->orientations; // Surface du lot = Surface habitable (même logique que le BO via Product::getSurfaceAttribute()) $surfaceHabitable = (float) ($lot->surface ?? 0); // Les balcons, terrasses et jardins sont des annexes, pas des surfaces $balconAnnexes = $lotAnnexes->filter(function($annexe) { return $annexe->type && $annexe->type->value === ProductType::BALCON->value; }); $balconAnnexe = $balconAnnexes->first(); $terrasseAnnexe = $lotAnnexes->filter(function($annexe) { return $annexe->type && $annexe->type->value === ProductType::TERRASSE->value; })->first(); $jardinAnnexe = $lotAnnexes->filter(function($annexe) { return $annexe->type && $annexe->type->value === ProductType::JARDIN->value; })->first(); // Récupérer les surfaces des annexes (si elles ont des surfaces) // Pour les balcons, additionner toutes les surfaces des annexes de type Balcon // Les annexes utilisent le type de surface ANNEXE, pas HABITABLE $surfaceBalcon = 0; foreach ($balconAnnexes as $balcon) { $surfaceAnnexe = $balcon->surfaces->where('type', SurfaceType::ANNEXE->value)->first()?->value ?? 0; $surfaceAnnexeHabitable = $balcon->surfaces->where('type', SurfaceType::HABITABLE->value)->first()?->value ?? 0; $surfaceBalcon += $surfaceAnnexe > 0 ? $surfaceAnnexe : $surfaceAnnexeHabitable; } $surfaceTerrasse = 0; if ($terrasseAnnexe) { $surfaceAnnexe = $terrasseAnnexe->surfaces->where('type', SurfaceType::ANNEXE->value)->first()?->value ?? 0; $surfaceAnnexeHabitable = $terrasseAnnexe->surfaces->where('type', SurfaceType::HABITABLE->value)->first()?->value ?? 0; $surfaceTerrasse = $surfaceAnnexe > 0 ? $surfaceAnnexe : $surfaceAnnexeHabitable; } $surfaceJardin = 0; if ($jardinAnnexe) { $surfaceAnnexe = $jardinAnnexe->surfaces->where('type', SurfaceType::ANNEXE->value)->first()?->value ?? 0; $surfaceAnnexeHabitable = $jardinAnnexe->surfaces->where('type', SurfaceType::HABITABLE->value)->first()?->value ?? 0; $surfaceJardin = $surfaceAnnexe > 0 ? $surfaceAnnexe : $surfaceAnnexeHabitable; } $hasExterieur = ($surfaceBalcon > 0 || $surfaceTerrasse > 0 || $surfaceJardin > 0 || $balconAnnexes->isNotEmpty() || $terrasseAnnexe || $jardinAnnexe); // Annexes - Les annexes sont des Product avec category='annexe' et product_id=lot->id // Le type est dans l'attribut 'type' (casté en ProductType) $annexeTypes = [ProductType::PARKING->value, ProductType::GARAGE->value, ProductType::CAVE->value, ProductType::CELLIER->value]; $hasAnnexe = $lotAnnexes->filter(function($annexe) use ($annexeTypes) { return $annexe->type && in_array($annexe->type->value, $annexeTypes, true); })->isNotEmpty(); // Prix - Utiliser les types de prix comme chaînes de caractères (pas d'enums pour tous les types) $prixTTC = $lotPrices->where('type', PriceType::PRIX_TTC->value)->first()?->value ?? 0; $loyerMensuelDispositifFiscal = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_PLAFONNE_DISPOSITIF_FISCAL->value)->first()?->value ?? $lotPrices->where('type', 'loyer_mensuel_dispositif_fiscal')->first()?->value ?? 0; $loyerMensuelDenormandieTTC = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_DENORMANDIE_TTC->value)->first()?->value ?? 0; $loyerMensuelTTC = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value ?? 0; // Denormandie: source principale = loyer_mensuel_ttc. $loyerMensuelDenormandieDisplay = $loyerMensuelTTC > 0 ? $loyerMensuelTTC : ($loyerMensuelDenormandieTTC > 0 ? $loyerMensuelDenormandieTTC : $loyerMensuelDispositifFiscal); $prixImmobilierTTC = $lotPrices->where('type', 'prix_immo_ttc')->first()?->value ?? 0; $prixParkingTTC = $lotPrices->where('type', 'prix_parking_ttc')->first()?->value ?? 0; $prixGarageTTC = $lotPrices->where('type', 'prix_garage_ttc')->first()?->value ?? 0; $prixCaveTTC = $lotPrices->where('type', 'prix_cave_ttc')->first()?->value ?? 0; // Pour la fiscalité classique, utiliser prix_ttc (PriceType::PRIX_TTC) comme pour Malraux $prixVenteTTC = $lotPrices->where('type', PriceType::PRIX_TTC->value)->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', 'annexes.prices']); } $prixFoncier = $lot->getPrixFoncier(); $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; // Calculer le total des travaux (hors read_only) pour le prix vente total // S'assurer que les prix sont chargés avant d'appeler getTotalTravaux() if (!$lot->relationLoaded('prices')) { $lot->load('prices'); } $prixTravauxHorsReadOnly = $lot->getTotalTravaux(); // Prix travaux hors read_only $loyerMensuel = $lotPrices->where('type', 'loyer_mensuel')->first()?->value ?? 0; $loyerMensuelTTC = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value ?? 0; $loyerAnnuelHT = $lotPrices->where('type', 'loyer_annuel_ht')->first()?->value ?? 0; $loyerAnnuelTTC = $lotPrices->where('type', 'loyer_annuel_ttc')->first()?->value ?? 0; $prixImmobilierHT = $lotPrices->where('type', 'prix_immo_ht')->first()?->value ?? $lotPrices->where('type', 'prix_immobilier_ht')->first()?->value ?? 0; $prixMobilierHT = $lotPrices->where('type', 'prix_mobilier_ht')->first()?->value ?? 0; $prixMobilierTTC = $lotPrices->where('type', 'prix_mobilier_ttc')->first()?->value ?? 0; $prixParkingHT = $lotPrices->where('type', 'prix_parking_ht')->first()?->value ?? 0; $prixGarageHT = $lotPrices->where('type', 'prix_garage_ht')->first()?->value ?? 0; $prixCaveHT = $lotPrices->where('type', 'prix_cave_ht')->first()?->value ?? 0; $prixVenteHT = $lotPrices->where('type', 'prix_vente_ht')->first()?->value ?? 0; // Prix Vente Total = prix_ttc + prix_travaux (si pas en read_only) $prixVenteTotal = $prixTTC + $prixTravauxHorsReadOnly; $prixImmoTTCAffichage = $prixImmobilierTTC > 0 ? $prixImmobilierTTC : $prixTTC; $loyerSocialJeanBrun = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_SOCIAL_JEAN_BRUN->value)->first()?->value ?? 0; $loyerTresSocialJeanBrun = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_TRES_SOCIAL_JEAN_BRUN->value)->first()?->value ?? 0; $loyerMensuelMarcheHT = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_HT->value)->first()?->value ?? $lotPrices->where('type', 'loyer_mensuel_ht')->first()?->value ?? $loyerMensuel; $prixAnnexeTTC = $lotAnnexes ->filter(function ($annexe) use ($annexeTypes) { return $annexe->type && in_array($annexe->type->value, $annexeTypes, true); }) ->sum(function ($annexe) { return $annexe->prices->where('type', PriceType::PRIX_TTC->value)->first()?->value ?? 0; }); $prixVenteTotalSansTravaux = $lot->getTotalLotEtAnnexes(); $lotTabsPrixVente = $lot->calcul_prix_vente_total_onglets_par_fiscalites(); $fiscaliteTabPrixVente = collect($lotTabsPrixVente)->first(function ($tab) use ($fiscaliteEnum) { $fiscaliteValue = $tab['result']['fiscalite_utilisee']['value'] ?? null; return $fiscaliteValue === $fiscaliteEnum?->value; }) ?? (is_array($lotTabsPrixVente) && isset($lotTabsPrixVente[0]) ? $lotTabsPrixVente[0] : null); $prixVenteTotalAffichage = (float) ($fiscaliteTabPrixVente['result']['total'] ?? 0); if ($prixVenteTotalAffichage <= 0) { $prixVenteTotalAffichage = (float) $prixVenteTotalSansTravaux; } // State $state = $lotStates->first(); $stateValue = $state ? $state->type->value : null; $isVendu = ($stateValue === ProductState::VENDU->value); @endphp @php $lotDomIdSuffix = $lot->id . '_' . $fiscaliteId; @endphp @if( $isResidencePrincipaleFiscalite || $isMalrauxFiscalite || $isDenormandieFiscalite || $isDenormandieOptimiseDfFiscalite || $isDeficitFoncierFiscalite || $isMonumentHistoriqueFiscalite || $isJeanBrunNeufFiscalite || $isJeanBrunAncienFiscalite || $isLliFiscalite || $isLmnpServicesFiscalite || $isLmnpAncienFiscalite ) @if($isDenormandieFiscalite || $isDenormandieOptimiseDfFiscalite || $isJeanBrunNeufFiscalite || $isJeanBrunAncienFiscalite) @elseif($isLmnpServicesFiscalite) @else @endif @if($isLmnpServicesFiscalite) @endif @if($isMalrauxFiscalite || $isDeficitFoncierFiscalite || $isDenormandieOptimiseDfFiscalite || $isMonumentHistoriqueFiscalite || $isJeanBrunAncienFiscalite) @endif @elseif($fiscaliteEnum === FiscaliteEnum::LMNP_NEUF) {{-- LMNP Neuf --}} @php $prixVenteTotalHT = ($prixVenteHT + $prixGarageHT + $prixParkingHT); $rentabiliteLocative = ($loyerAnnuelHT > 0 && $prixVenteTotalHT > 0) ? round(($loyerAnnuelHT / $prixVenteTotalHT) * 100) : 0; @endphp @endif @if($showTva55Column) @php $lotTabs = $lot->calcul_prix_vente_total_onglets_par_fiscalites(); $tva55Tab = collect($lotTabs)->first(function ($tab) { return ($tab['pane_id'] ?? '') === 'prix-vente-tva-5-5' || ($tab['tab_label'] ?? '') === 'TVA 5.5'; }); $isTva55Eligible = $tva55Tab !== null && ((float) ($tva55Tab['result']['total'] ?? 0)) > 0; @endphp @endif @php $lotState = $lot->state; $availableRang = $lot->available_option_rang ?? null; $isRenewable = $lot->isOptionRenewable(Auth::user()->id); $isOptionable = $lot->isOptionable($currentApplication ?? null); $canManageOptions = Auth::user()->isRole('ROLE_COMMERCIALISATEUR'); // Récupérer la valeur brute du state pour une comparaison plus robuste $stateValue = null; if ($lotState) { $stateValue = $lotState->value; } else { $latestState = $lot->relationLoaded('states') && $lot->states->isNotEmpty() ? $lot->states->sortByDesc('created_at')->first() : $lot->states()->latest()->first(); if ($latestState) { $stateValue = $latestState->type->value ?? $latestState->getRawOriginal('type') ?? null; } } // Valeur par défaut si aucun state n'est trouvé $stateValue = $stateValue ?? 'non_defini'; @endphp {{-- Détails du lot (affichés au clic) --}} @empty @endforelse
Lot Type Niveau Surface Extérieur AnnexeLoyer plafonné selon dispositif fiscalLoyer mensuel marché HTLoyer mensuel marché TTCPrix Immo TTC ({{ $isLliFiscalite ? '10' : '20' }}%)Prix Immo HTPrix Foncier TTC Travaux éligibles Travaux non-éligiblesPrix annexe Prix de vente totalLoyer Annuel HT Prix Immo HT Prix Mobilier HT Prix Parking HT Prix Garage HT Loyer Marché Prix Vente Total HT Rentabilité LocativeTVA 5,5 %Offres
{{ $lot->number ?? '-' }} {{ $lot->type ? $lot->type->label() : '-' }} {{ $lot->floor ? $lot->floor->shortLabel() : '-' }} {{ $surfaceHabitable > 0 ? number_format($surfaceHabitable, 2, '.', ' ') . ' m²' : '-' }} {!! $hasExterieur ? '' : '' !!} {!! $hasAnnexe ? '' : '' !!}@if($loyerMensuelDenormandieDisplay > 0){{ number_format($loyerMensuelDenormandieDisplay, 0, ',', ' ') }} €@else-@endif@if($loyerMensuelMarcheHT > 0){{ number_format($loyerMensuelMarcheHT, 0, ',', ' ') }} €@else-@endif@if($loyerMensuelTTC > 0){{ number_format($loyerMensuelTTC, 0, ',', ' ') }} €@else-@endif@if($prixImmoTTCAffichage > 0){{ number_format($prixImmoTTCAffichage, 0, ',', ' ') }} €@else-@endif@if($prixImmobilierHT > 0){{ number_format($prixImmobilierHT, 0, ',', ' ') }} €@else-@endif@if($prixFoncier > 0){{ number_format($prixFoncier, 0, ',', ' ') }} €@else-@endif @if($montantTravauxCommTTC > 0){{ number_format($montantTravauxCommTTC, 0, ',', ' ') }} €@else-@endif @if($montantTravauxPrivTTC > 0){{ number_format($montantTravauxPrivTTC, 0, ',', ' ') }} €@else-@endif@if($hasAnnexe && $prixAnnexeTTC > 0){{ number_format($prixAnnexeTTC, 0, ',', ' ') }} €@else-@endif @if($prixVenteTotalAffichage > 0){{ number_format($prixVenteTotalAffichage, 0, ',', ' ') }} €@else-@endif@if($loyerAnnuelHT > 0){{ number_format($loyerAnnuelHT, 0, ',', ' ') }} €@endif @if($prixImmobilierHT > 0){{ number_format($prixImmobilierHT, 0, ',', ' ') }} €@endif @if($prixMobilierHT > 0){{ number_format($prixMobilierHT, 0, ',', ' ') }} €@endif @if($prixParkingHT > 0){{ number_format($prixParkingHT, 0, ',', ' ') }} €@endif @if($prixGarageHT > 0){{ number_format($prixGarageHT, 0, ',', ' ') }} €@endif @if($loyerMensuel > 0){{ number_format($loyerMensuel, 0, ',', ' ') }} €@endif @if($prixVenteTotalAffichage > 0){{ number_format($prixVenteTotalAffichage, 0, ',', ' ') }} €@else-@endif @if($rentabiliteLocative > 0){{ number_format($rentabiliteLocative, 0, ',', ' ') }} %@endif{!! $isTva55Eligible ? '' : '' !!} @if($stateValue === ProductState::VENDU->value) @elseif($stateValue === ProductState::ALLOTE->value) @elseif($stateValue === ProductState::RESERVE->value) @elseif($stateValue === ProductState::OPTION->value && !$isOptionable) @elseif($isRenewable) @php $displayRang = $availableRang ?? 1; @endphp @if($canManageOptions) @else @endif @elseif($isOptionable) @php $displayRang = $availableRang ?? 1; @endphp @if($canManageOptions) @else @endif @else @endif

Aucun lot ne correspond au filtre actuel.

@forelse($lotsForFiscalite as $lot) @php $lotDomIdSuffix = $lot->id . '_' . $fiscaliteId; $lotPrices = $lot->prices; $lotSurfaces = $lot->surfaces; $lotStates = $lot->states; $lotAnnexes = $lot->annexes; $surfaceHabitable = (float) ($lot->surface ?? 0); $prixTTC = $lotPrices->where('type', PriceType::PRIX_TTC->value)->first()?->value ?? 0; $state = $lotStates->first(); $stateValue = $state ? $state->type->value : null; $isVendu = ($stateValue === ProductState::VENDU->value); @endphp

Lot {{ $lot->number ?? '-' }}

{{ $lot->type ? $lot->type->label() : '-' }} | {{ $lot->floor ? $lot->floor->shortLabel() : '-' }} | {{ $surfaceHabitable > 0 ? number_format($surfaceHabitable, 2, '.', ' ') . ' m²' : '-' }}

Prix total

{{ $prixTTC > 0 ? number_format($prixTTC, 0, ',', ' ') . ' €' : '-' }}


@if($fiscaliteEnum === FiscaliteEnum::RESIDENCE_PRINCIPALE) {{-- Classique --}}
    @if($lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value > 0)
  • Loyer Mensuel TTC : {{ number_format($lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_parking_ttc')->first()?->value > 0)
  • Prix Parking TTC : {{ number_format($lotPrices->where('type', 'prix_parking_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_cave_ttc')->first()?->value > 0)
  • Prix Cave TTC : {{ number_format($lotPrices->where('type', 'prix_cave_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', PriceType::PRIX_TTC->value)->first()?->value > 0)
  • Prix Vente TTC : {{ number_format($lotPrices->where('type', PriceType::PRIX_TTC->value)->first()->value, 0, ',', ' ') }} €
  • @endif
@elseif($fiscaliteEnum === FiscaliteEnum::MALRAUX) {{-- Malraux --}}
    @php // 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', 'annexes.prices']); } $prixFoncierCalcul = $lot->getPrixFoncier(); @endphp @if($prixFoncierCalcul > 0)
  • Prix Foncier : {{ number_format($prixFoncierCalcul, 0, ',', ' ') }} €
  • @endif @php $prixTravauxTotal = ($lotPrices->where('type', PriceTypeTravaux::PRIX_TRAVAUX_ELIGIBLE->value)->first()?->value ?? 0) + ($lotPrices->where('type', PriceTypeTravaux::PRIX_TRAVAUX_NON_ELIGIBLE->value)->first()?->value ?? 0); @endphp @if($prixTravauxTotal > 0)
  • Travaux : {{ number_format($prixTravauxTotal, 0, ',', ' ') }} € {{ $prixTTC > 0 ? round($lot->quotePartTravaux()) : 0 }} %
  • @endif @if($lotPrices->where('type', 'prix_parking_ttc')->first()?->value > 0)
  • Prix Parking TTC : {{ number_format($lotPrices->where('type', 'prix_parking_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_garage_ttc')->first()?->value > 0)
  • Prix Garage TTC : {{ number_format($lotPrices->where('type', 'prix_garage_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_cave_ttc')->first()?->value > 0)
  • Prix Cave TTC : {{ number_format($lotPrices->where('type', 'prix_cave_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value > 0)
  • Loyer Marché : {{ number_format($lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()->value, 0, ',', ' ') }} €
  • @endif @php // Calculer le prix vente total = prix_ttc + prix_travaux (hors read_only) if (!$lot->relationLoaded('prices')) { $lot->load('prices'); } $prixTravauxHorsReadOnlyMobile = $lot->getTotalTravaux(); $prixVenteTotalMobile = $prixTTC + $prixTravauxHorsReadOnlyMobile; @endphp @if($prixVenteTotalMobile > 0)
  • Prix Vente Total : {{ number_format($prixVenteTotalMobile, 0, ',', ' ') }} €
  • @endif @if($lot->subvention_anah)
  • Subvention ANAH : {{ $lot->subvention_anah }}
  • @endif
@elseif($fiscaliteEnum === FiscaliteEnum::MONUMENT_HISTORIQUE) {{-- Monument Historique --}}
    @if($lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value > 0)
  • Loyer Mensuel TTC : {{ number_format($lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()->value, 0, ',', ' ') }} €
  • @endif @php // 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', 'annexes.prices']); } $prixFoncierCalcul = $lot->getPrixFoncier(); @endphp @if($prixFoncierCalcul > 0)
  • Prix Foncier : {{ number_format($prixFoncierCalcul, 0, ',', ' ') }} €
  • @endif @php $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; @endphp @if($montantTravauxCommTTC > 0)
  • Travaux Déductibles : {{ number_format($montantTravauxCommTTC, 0, ',', ' ') }} € {{ ($prixTTC - ($lotPrices->where('type', 'prix_parking_ttc')->first()?->value ?? 0)) > 0 ? round(($montantTravauxCommTTC / ($prixTTC - ($lotPrices->where('type', 'prix_parking_ttc')->first()?->value ?? 0))) * 100) : 0 }} %
  • @endif @if($montantTravauxPrivTTC > 0)
  • Travaux Non Déductibles : {{ number_format($montantTravauxPrivTTC, 0, ',', ' ') }} €
  • @endif @if($prixTravauxTotal > 0)
  • Travaux Total : {{ number_format($prixTravauxTotal, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_parking_ttc')->first()?->value > 0)
  • Prix Parking TTC : {{ number_format($lotPrices->where('type', 'prix_parking_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_garage_ttc')->first()?->value > 0)
  • Prix Garage TTC : {{ number_format($lotPrices->where('type', 'prix_garage_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_cave_ttc')->first()?->value > 0)
  • Prix Cave TTC : {{ number_format($lotPrices->where('type', 'prix_cave_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'loyer_mensuel')->first()?->value > 0)
  • Loyer Marché : {{ number_format($lotPrices->where('type', 'loyer_mensuel')->first()->value, 0, ',', ' ') }} €
  • @endif @php // Calculer le prix vente total = prix_ttc + prix_travaux (hors read_only) if (!$lot->relationLoaded('prices')) { $lot->load('prices'); } $prixTravauxHorsReadOnlyMobile2 = $lot->getTotalTravaux(); $prixVenteTotalMobile2 = $prixTTC + $prixTravauxHorsReadOnlyMobile2; @endphp @if($prixVenteTotalMobile2 > 0)
  • Prix Vente Total : {{ number_format($prixVenteTotalMobile2, 0, ',', ' ') }} €
  • @endif @if($lot->subvention_anah)
  • Subvention ANAH : {{ $lot->subvention_anah }}
  • @endif
@elseif($fiscaliteEnum === FiscaliteEnum::DEFICIT_FONCIER) {{-- Déficit Foncier --}}
    @php // 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', 'annexes.prices']); } $prixFoncierCalcul = $lot->getPrixFoncier(); // Calculer le prix cave TTC depuis les annexes $groupedAnnexesDeficitMobile = $lotAnnexes->groupBy(function($annexe) { try { return $annexe->type ? $annexe->type->value : 'unknown'; } catch (\Throwable $e) { return 'unknown'; } }); $caveAnnexesDeficitMobile = $groupedAnnexesDeficitMobile->get(ProductType::CAVE->value, collect()); $prixCaveTTCFromAnnexesMobile = 0; foreach ($caveAnnexesDeficitMobile as $cave) { $prixCaveTTCFromAnnexesMobile += $cave->prices->where('type', 'prix_ttc')->first()?->value ?? 0; } $prixCaveTTCMobile = $lotPrices->where('type', 'prix_cave_ttc')->first()?->value ?? 0; $prixCaveTTCFinalMobile = $prixCaveTTCFromAnnexesMobile > 0 ? $prixCaveTTCFromAnnexesMobile : $prixCaveTTCMobile; $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; // Loyer marché = loyer_mensuel ou loyer_mensuel_ttc $loyerMarche = $lotPrices->where('type', 'loyer_mensuel')->first()?->value ?? 0; if ($loyerMarche == 0) { $loyerMarche = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value ?? 0; } // Prix vente total $prixTravauxHorsReadOnlyMobile3 = $lot->getTotalTravaux(); $prixVenteTotalMobile3 = $prixTTC + $prixTravauxHorsReadOnlyMobile3; @endphp @if($prixFoncierCalcul > 0)
  • Prix Foncier : {{ number_format($prixFoncierCalcul, 0, ',', ' ') }} €
  • @endif @if($montantTravauxCommTTC > 0)
  • Travaux Déductibles : {{ number_format($montantTravauxCommTTC, 0, ',', ' ') }} € {{ ($prixTTC - ($lotPrices->where('type', 'prix_parking_ttc')->first()?->value ?? 0)) > 0 ? round(($montantTravauxCommTTC / ($prixTTC - ($lotPrices->where('type', 'prix_parking_ttc')->first()?->value ?? 0))) * 100) : 0 }} %
  • @endif @if($prixTravauxTotal > 0)
  • Travaux Total : {{ number_format($prixTravauxTotal, 0, ',', ' ') }} €
  • @endif @if($prixCaveTTCFinalMobile > 0)
  • Prix Cave TTC : {{ number_format($prixCaveTTCFinalMobile, 0, ',', ' ') }} €
  • @endif @if($loyerMarche > 0)
  • Loyer Marché : {{ number_format($loyerMarche, 0, ',', ' ') }} €
  • @endif @if($prixVenteTotalMobile3 > 0)
  • Prix Vente Total : {{ number_format($prixVenteTotalMobile3, 0, ',', ' ') }} €
  • @endif @if($lot->subvention_anah)
  • Subvention ANAH : {{ $lot->subvention_anah }}
  • @endif
@elseif($fiscaliteEnum === FiscaliteEnum::DENORMANDIE) {{-- Denormandie --}}
    @php $loyerMensuelDenormandieMobile = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_TTC->value)->first()?->value ?? 0; if ($loyerMensuelDenormandieMobile <= 0) { $loyerMensuelDenormandieMobile = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_DENORMANDIE_TTC->value)->first()?->value ?? 0; } if ($loyerMensuelDenormandieMobile <= 0) { $loyerMensuelDenormandieMobile = $lotPrices->where('type', PriceTypeLoyer::MENSUEL_PLAFONNE_DISPOSITIF_FISCAL->value)->first()?->value ?? $lotPrices->where('type', 'loyer_mensuel_dispositif_fiscal')->first()?->value ?? 0; } @endphp @if($loyerMensuelDenormandieMobile > 0)
  • Loyer Mensuel Denormandie : {{ number_format($loyerMensuelDenormandieMobile, 0, ',', ' ') }} €
  • @endif
  • Prix Immo TTC : {!! $lotPrices->where('type', 'prix_immo_ttc')->first()?->value > 0 ? '' . number_format($lotPrices->where('type', 'prix_immo_ttc')->first()->value, 0, ',', ' ') . ' €' : '-' !!}
  • Prix Parking TTC : {!! $lotPrices->where('type', 'prix_parking_ttc')->first()?->value > 0 ? '' . number_format($lotPrices->where('type', 'prix_parking_ttc')->first()->value, 0, ',', ' ') . ' €' : '-' !!}
  • @php // Denormandie: prix immo TTC + annexes TTC (sans travaux). $prixVenteTotalMobile4 = $lot->getTotalLotEtAnnexes(); @endphp @if($prixVenteTotalMobile4 > 0)
  • Prix Vente Total : {{ number_format($prixVenteTotalMobile4, 0, ',', ' ') }} €
  • @endif
@elseif($fiscaliteEnum === FiscaliteEnum::LMNP_SEVICES_AVEC_TVA || $fiscaliteEnum === FiscaliteEnum::LMNP_SEVICES_SANS_TVA) {{-- LMNP Services --}} @php $loyerAnnuelHT = $lotPrices->where('type', 'loyer_annuel_ht')->first()?->value ?? 0; $prixVenteHT = $lotPrices->where('type', 'prix_vente_ht')->first()?->value ?? 0; $prixGarageHT = $lotPrices->where('type', 'prix_garage_ht')->first()?->value ?? 0; $prixParkingHT = $lotPrices->where('type', 'prix_parking_ht')->first()?->value ?? 0; $prixVenteTotalHT = $prixVenteHT + $prixGarageHT + $prixParkingHT; $rentabiliteLocative = ($loyerAnnuelHT > 0 && $prixVenteTotalHT > 0) ? round(($loyerAnnuelHT / $prixVenteTotalHT) * 100) : 0; @endphp
    @if($loyerAnnuelHT > 0)
  • Loyer Annuel HT : {{ number_format($loyerAnnuelHT, 0, ',', ' ') }} €
  • @endif @php $prixImmoHtMobile = $lotPrices->where('type', 'prix_immo_ht')->first()?->value ?? $lotPrices->where('type', 'prix_immobilier_ht')->first()?->value ?? 0; @endphp @if($prixImmoHtMobile > 0)
  • Prix Immo HT : {{ number_format($prixImmoHtMobile, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_mobilier_ht')->first()?->value > 0)
  • Prix Mobilier HT : {{ number_format($lotPrices->where('type', 'prix_mobilier_ht')->first()->value, 0, ',', ' ') }} €
  • @endif @if($prixParkingHT > 0)
  • Prix Parking HT : {{ number_format($prixParkingHT, 0, ',', ' ') }} €
  • @endif @if($prixGarageHT > 0)
  • Prix Garage HT : {{ number_format($prixGarageHT, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'loyer_mensuel')->first()?->value > 0)
  • Loyer Marché : {{ number_format($lotPrices->where('type', 'loyer_mensuel')->first()->value, 0, ',', ' ') }} €
  • @endif @if($prixVenteTotalHT > 0)
  • Prix Vente Total HT : {{ number_format($prixVenteTotalHT, 0, ',', ' ') }} €
  • @endif @if($rentabiliteLocative > 0)
  • Rentabilité Locative : {{ number_format($rentabiliteLocative, 0, ',', ' ') }} %
  • @endif
@elseif($fiscaliteEnum === FiscaliteEnum::LMNP_SEVICES_SANS_TVA) {{-- LMNP Services sans TVA --}} @php $prixVenteTTC = $lotPrices->where('type', PriceType::PRIX_TTC->value)->first()?->value ?? 0; $prixGarageTTC = $lotPrices->where('type', 'prix_garage_ttc')->first()?->value ?? 0; $prixParkingTTC = $lotPrices->where('type', 'prix_parking_ttc')->first()?->value ?? 0; $prixVenteTotalTTC = $prixVenteTTC + $prixGarageTTC + $prixParkingTTC; @endphp
    @if($lotPrices->where('type', 'loyer_annuel_ttc')->first()?->value > 0)
  • Loyer Annuel TTC : {{ number_format($lotPrices->where('type', 'loyer_annuel_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_immo_ttc')->first()?->value > 0)
  • Prix Immo TTC : {{ number_format($lotPrices->where('type', 'prix_immo_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_mobilier_ttc')->first()?->value > 0)
  • Prix Mobilier TTC : {{ number_format($lotPrices->where('type', 'prix_mobilier_ttc')->first()->value, 0, ',', ' ') }} €
  • @endif @if($prixParkingTTC > 0)
  • Prix Parking TTC : {{ number_format($prixParkingTTC, 0, ',', ' ') }} €
  • @endif @if($prixGarageTTC > 0)
  • Prix Garage TTC : {{ number_format($prixGarageTTC, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'loyer_mensuel')->first()?->value > 0)
  • Loyer Marché : {{ number_format($lotPrices->where('type', 'loyer_mensuel')->first()->value, 0, ',', ' ') }} €
  • @endif @if($prixVenteTotalTTC > 0)
  • Prix Vente Total TTC : {{ number_format($prixVenteTotalTTC, 0, ',', ' ') }} €
  • @endif
@elseif($fiscaliteEnum === FiscaliteEnum::LMNP_NEUF || $fiscaliteEnum === FiscaliteEnum::LMNP_ANCIEN) {{-- LMNP Neuf/Ancien --}} @php $loyerAnnuelHT = $lotPrices->where('type', 'loyer_annuel_ht')->first()?->value ?? 0; $prixVenteHT = $lotPrices->where('type', 'prix_vente_ht')->first()?->value ?? 0; $prixGarageHT = $lotPrices->where('type', 'prix_garage_ht')->first()?->value ?? 0; $prixParkingHT = $lotPrices->where('type', 'prix_parking_ht')->first()?->value ?? 0; $prixVenteTotalHT = $prixVenteHT + $prixGarageHT + $prixParkingHT; $rentabiliteLocative = ($loyerAnnuelHT > 0 && $prixVenteTotalHT > 0) ? round(($loyerAnnuelHT / $prixVenteTotalHT) * 100) : 0; @endphp
    @if($loyerAnnuelHT > 0)
  • Loyer Annuel HT : {{ number_format($loyerAnnuelHT, 0, ',', ' ') }} €
  • @endif @php $prixImmoHtMobile = $lotPrices->where('type', 'prix_immo_ht')->first()?->value ?? $lotPrices->where('type', 'prix_immobilier_ht')->first()?->value ?? 0; @endphp @if($prixImmoHtMobile > 0)
  • Prix Immo HT : {{ number_format($prixImmoHtMobile, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'prix_mobilier_ht')->first()?->value > 0)
  • Prix Mobilier HT : {{ number_format($lotPrices->where('type', 'prix_mobilier_ht')->first()->value, 0, ',', ' ') }} €
  • @endif @if($prixParkingHT > 0)
  • Prix Parking HT : {{ number_format($prixParkingHT, 0, ',', ' ') }} €
  • @endif @if($prixGarageHT > 0)
  • Prix Garage HT : {{ number_format($prixGarageHT, 0, ',', ' ') }} €
  • @endif @if($lotPrices->where('type', 'loyer_mensuel')->first()?->value > 0)
  • Loyer Marché : {{ number_format($lotPrices->where('type', 'loyer_mensuel')->first()->value, 0, ',', ' ') }} €
  • @endif @if($prixVenteTotalHT > 0)
  • Prix Vente Total HT : {{ number_format($prixVenteTotalHT, 0, ',', ' ') }} €
  • @endif @if($rentabiliteLocative > 0)
  • Rentabilité Locative : {{ number_format($rentabiliteLocative, 0, ',', ' ') }} %
  • @endif
@endif
@php $lotState = $lot->state; $availableRang = $lot->available_option_rang ?? null; $isRenewable = $lot->isOptionRenewable(Auth::user()->id); $isOptionable = $lot->isOptionable($currentApplication ?? null); $canManageOptions = Auth::user()->isRole('ROLE_COMMERCIALISATEUR'); // Récupérer la valeur brute du state pour une comparaison plus robuste $stateValue = null; if ($lotState) { $stateValue = $lotState->value; } else { $latestState = $lot->relationLoaded('states') && $lot->states->isNotEmpty() ? $lot->states->sortByDesc('created_at')->first() : $lot->states()->latest()->first(); if ($latestState) { $stateValue = $latestState->type->value ?? $latestState->getRawOriginal('type') ?? null; } } // Valeur par défaut si aucun state n'est trouvé $stateValue = $stateValue ?? 'non_defini'; @endphp
@if($stateValue === ProductState::VENDU->value) @elseif($stateValue === ProductState::ALLOTE->value) @elseif($stateValue === ProductState::RESERVE->value) @elseif($stateValue === ProductState::OPTION->value && !$isOptionable) @elseif($isRenewable) @php $displayRang = $availableRang ?? 1; @endphp @if($canManageOptions) @else @endif @elseif($isOptionable) @php $displayRang = $availableRang ?? 1; @endphp @if($canManageOptions) @else @endif @else @endif
@empty

Aucun lot ne correspond au filtre actuel.

@endforelse
@endforeach
@if($hasLotSimulatorsFeature && $fiscaliteEnum && in_array($fiscaliteEnum, [FiscaliteEnum::RESIDENCE_PRINCIPALE, FiscaliteEnum::MALRAUX, FiscaliteEnum::MONUMENT_HISTORIQUE, FiscaliteEnum::DEFICIT_FONCIER, FiscaliteEnum::DENORMANDIE, FiscaliteEnum::LMNP_NEUF, FiscaliteEnum::LMNP_ANCIEN, FiscaliteEnum::LMNP_SEVICES_AVEC_TVA, FiscaliteEnum::LMNP_SEVICES_SANS_TVA])) @endif @endif {{-- Modal de pose d'option --}} {{-- Modal de pose d'option --}} {{-- Modal de retour de pose d'option --}} {{-- Modal de retour de pose d'option --}} @endsection @push('scripts') @endpush