{% extends '@Commercial/commercial/layout.html.twig' %} {% set project = view.project %} {% set month_names = {1:'janv.',2:'févr.',3:'mars',4:'avr.',5:'mai',6:'juin',7:'juil.',8:'août',9:'sept.',10:'oct.',11:'nov.',12:'déc.'} %} {% block commercial_title %}Rentabilité {{ project.titre }}{% endblock %} {% block javascripts %}{{ parent() }}{% endblock %} {% block commercial_content %}

{{ project.titre }}

{{ project.type }}
{% if project.client %}{{ project.client.nom }} ·{% endif %} Démarré le {{ project.startDate|date('d') }} {{ month_names[project.startDate|date('n')] }} {{ project.startDate|date('Y') }}{% if project.deadline %} · Deadline : {{ project.deadline|date('d') }} {{ month_names[project.deadline|date('n')] }} {{ project.deadline|date('Y') }}{% endif %}

Gains facturés {{ view.gains_period|number_format(0, ',', ' ') }} € Sur {{ view.document_count }} facture{{ view.document_count > 1 ? 's' : '' }}
Dépenses fournisseurs {{ view.supplier_expenses|number_format(0, ',', ' ') }} € {{ view.allocation_count }} dépenses ventilées
Coûts salariaux {{ view.salary_expenses|number_format(0, ',', ' ') }} € {{ view.salary_allocation_count }} imputation{{ view.salary_allocation_count > 1 ? 's' : '' }}
Indemnités km {{ view.mileage_expenses|number_format(0, ',', ' ') }} € {{ view.mileage_count }} déplacement{{ view.mileage_count > 1 ? 's' : '' }}
Marge nette {{ view.margin_period|number_format(0, ',', ' ') }} € Gains − dépenses − km − salaires
Taux de marge {{ view.margin_rate_period|number_format(1, ',', ' ') }}% Objectif : 60%

Évolution gains vs dépenses

Cumul mensuel sur la durée du projet

Dépenses fournisseurs allouées

{{ view.allocation_count }} lignes
Ajouter
{% for allocation in view.allocations %}{% set expense = allocation.expense %}{% else %}{% endfor %}
DateFournisseurLibelléCatégorieMontant HTQuote-partAllouéStatut
{{ expense.dateDepense|date('d') }} {{ month_names[expense.dateDepense|date('n')] }} {{ expense.dateDepense|date('Y') }}{{ expense.fournisseur.nom|default('—') }}{{ expense.numeroDocument }}{{ expense.categorie.nom|default('Sans catégorie') }}{{ expense.montanHt|number_format(2, ',', ' ') }} €{{ (allocation.allocatedPercent ?: (expense.montanHt > 0 ? allocation.allocatedAmount / expense.montanHt * 100 : 0))|number_format(0, ',', ' ') }}%{{ allocation.allocatedAmount|number_format(2, ',', ' ') }} €{{ expense.status == 'draft' ? 'Brouillon' : (expense.status == 'paid' ? 'Payée' : 'Validée') }}
Aucune dépense ventilée sur cette période.
Total dépenses allouées{{ view.supplier_expenses|number_format(2, ',', ' ') }} €{{ view.supplier_expenses|number_format(2, ',', ' ') }} €

Indemnités kilométriques

{{ view.mileage_count }} déplacements
Ajouter
{% for mileage in view.mileages %}{% else %}{% endfor %}
DateCollaborateurMotifKmTaux/kmMontantStatut
{{ mileage.tripDate|date('d') }} {{ month_names[mileage.tripDate|date('n')] }} {{ mileage.tripDate|date('Y') }}{{ mileage.employee ? mileage.employee.prenom|slice(0,1) ~ '. ' ~ mileage.employee.nom : '—' }}{{ mileage.purpose }}{{ mileage.kilometers|number_format(0, ',', ' ') }}{{ mileage.ratePerKm|number_format(2, ',', ' ') }} €{{ mileage.amount|number_format(2, ',', ' ') }} €{{ view.mileage_status_labels[mileage.status]|default(mileage.status) }}
Aucune indemnité sur cette période.
Total indemnités km{{ view.mileages|reduce((carry, item) => carry + item.kilometers, 0)|number_format(0, ',', ' ') }} km{{ view.mileage_expenses|number_format(2, ',', ' ') }} €

Coûts salariaux alloués

{{ view.salary_allocation_count }} imputations
{% for row in view.salary_period_rows %}{% else %}{% endfor %}
PériodeCoût agrégé
{{ month_names[row.month|slice(5, 2)|number_format(0)]|capitalize }} {{ row.month|slice(0, 4) }}{{ row.amount|number_format(2, ',', ' ') }} €
Aucun coût salarial imputé sur cette période.
Total coûts salariaux{{ view.salary_expenses|number_format(2, ',', ' ') }} €

Facturation

{{ view.document_count }} factures
Nouvelle facture
{% for document in view.documents %}{% else %}{% endfor %}
N° factureDateLibelléMontant HTTTCStatut
{{ document.number ?: 'Brouillon' }}{{ document.issueDate ? document.issueDate|date('d/m/Y') : '—' }}{{ document.lines|first ? (document.lines|first).label : 'Facture projet' }}{{ document.subtotalHt|number_format(2, ',', ' ') }} €{{ document.totalTtc|number_format(2, ',', ' ') }} €{{ view.billing_status_labels[document.status]|default(document.status) }}
Aucune facture associée au projet.
Total facturation{{ view.billing_total_ht|number_format(2, ',', ' ') }} €{{ view.billing_total_ttc|number_format(2, ',', ' ') }} €
{% endblock %}