{# templates/entreprise/rapports/index.html.twig #} {% extends 'entreprise/entreprise_base.html.twig' %} {% block title %}Rapport Financier - {{ app.user.entreprise.raisonSociale }}{% endblock %} {% set currency = app.user.entreprise.devise ? app.user.entreprise.devise.symbole : 'F.CFA' %} {# --- CORRECTION : Récupération intelligente des données --- #} {# On regarde d'abord si le formulaire a des données (soumission), sinon on prend la date du jour #} {% set annee_filtree = filtreForm.vars.data.annee %} {% set mois_filtre = filtreForm.vars.data.mois %} {# Si les données sont vides (cas du GET initial), on force l'affichage de la date actuelle #} {% if annee_filtree is empty %}{% set annee_filtree = "now"|date("Y") %}{% endif %} {% if mois_filtre is empty %}{% set mois_filtre = "now"|date("n") %}{% endif %} {# Récupération des IDs pour l'affichage dynamique #} {% set immeuble_id = filtreForm.immeubleId.vars.value %} {% set appartement_id = filtreForm.appartementId.vars.value %} {% block body %}
{# 1. ZONE DE CONTRÔLE (Hors Impression) #}
{# --- EN-TÊTE HARMONISÉ --- #}

Analyse financière et exports officiels.

{% if rapport_genere %}
Exporter Excel
{% endif %}
{# --- FILTRE COMPACT --- #}
Analyse personnalisée Sélectionnez la période et le périmètre
{{ form_start(filtreForm, {'attr': {'class': 'row gx-1 gy-2 align-items-end'}}) }}
{{ form_widget(filtreForm.annee, {'attr': {'class': 'filter-field field-annee'}}) }}
{{ form_widget(filtreForm.mois, {'attr': {'class': 'filter-field field-mois'}}) }}
{{ form_widget(filtreForm.immeubleId, {'attr': {'class': 'filter-field js-filter-immeuble', 'placeholder': 'Tous les lots'}}) }}
{{ form_widget(filtreForm.appartementId, {'attr': {'class': 'filter-field js-filter-appartement', 'placeholder': 'Tous les appartements'}}) }}
{{ form_end(filtreForm) }}
{# 2. LE RAPPORT (Cadre A4) #} {% if rapport_genere %}
{# Entête du Rapport #}

{{ app.user.entreprise.raisonSociale }}

{{ app.user.entreprise.situationGeographique }}

Période : {{ mois_filtre ? mois_filtre|date_mois : 'Année complète' }} {{ annee_filtree }} {% if immeuble_id %} {% for choice in filtreForm.immeubleId.vars.choices %} {% if choice.value == immeuble_id %} Immeuble/Lot : {{ choice.label }} {% endif %} {% endfor %} {% endif %} {% if appartement_id %} {% for choice in filtreForm.appartementId.vars.choices %} {% if choice.value == appartement_id %} Appartement : {{ choice.label }} {% endif %} {% endfor %} {% endif %}
Document Officiel

RAPPORT FINANCIER

Édité le {{ "now"|date("d/m/Y") }}

{# --- BLOC I : RECETTES (LOYERS) --- #}
I. État des Recettes (Paiements)
{% set totalDuGlobal = 0 %} {% set totalPayeGlobal = 0 %} {% for paiement in paiements_table %} {% set totalDuGlobal = totalDuGlobal + (paiement.totalDu|default(0)) %} {% set totalPayeGlobal = totalPayeGlobal + (paiement.montantPaye|default(0)) %} {% else %} {% endfor %}
Bien / Emplacement Locataire Total Facturé (Dû) Montant Perçu
{{ paiement.immeuble_titre }} - {{ paiement.appartement_titre }} {{ paiement.locataire_nom }} {{ (paiement.totalDu|default(0)) |format_money}} {{ (paiement.montantPaye|default(0)) |format_money}}
Aucun flux de loyer enregistré
TOTAL RECETTES DE LA PÉRIODE {{ totalDuGlobal |format_money}} {{ totalPayeGlobal |format_money}}
{# --- BLOC II : DÉPENSES (INTERVENTIONS) --- #}
II. État des Dépenses (Interventions)
{% set totalDepensesGlobal = 0 %} {% for depense in depenses_table %} {% set totalDepensesGlobal = totalDepensesGlobal + (depense.montant|default(0)) %} {% else %} {% endfor %}
Date Bien & Description Cout de l'intervention
{{ depense.dates | date('d/m/Y') }} {{ depense.immeuble_titre }} ({{ depense.appartement_titre }})
{{ depense.description }}
{{ (depense.montant|default(0)) |format_money}}
Aucune intervention ou charge sur cette période
Total Dépenses {{ totalDepensesGlobal |format_money}}
{# --- BLOC III : SYNTHÈSE (TABLEAU DE BORD) --- #}
III. Synthèse Financière (Résultat Net)
Total Loyers Dus {{ totalDuGlobal |format_money}}
Total Recettes (Encaissements) {{ totalPayeGlobal |format_money}}
Taux de Recouvrement {% if totalDuGlobal > 0 %} {{ ((totalPayeGlobal / totalDuGlobal) * 100) | number_format(1) }} % {% else %} 0.0 % {% endif %}
Total Dépenses {{ totalDepensesGlobal |format_money}}
Bénéfice Net (Cash-flow) {{ (totalPayeGlobal - totalDepensesGlobal) |format_money}}
{# Footer du document A4 #}
Document généré via la plateforme {{ app.user.entreprise.raisonSociale }} le {{ "now"|date("d/m/Y à H:i") }}
Confidentiel
{% else %}

Aucun rapport affiché. Utilisez les filtres ci-dessus pour générer une analyse.

{% endif %}
{% endblock %} {% block javascripts %} {{ parent() }} {% endblock %}