<div class="dashboard-content-suivi">
{% set currentUser = app.user %}
{% if is_granted('ROLE_SUPERADMIN') %}
{% set selectedUserId = app.request.query.get('selectedUser', currentUser.id) %}
{% set selectedUser = currentUser.entreprise.utilisateurs|filter(user => user.id == selectedUserId)|first %}
{% else %}
{% set selectedUser = app.user %}
{% endif %}
{% set unreadCount = selectedUser.infosSuivis|filter(info => not info.lu)|length %}
<div class="head-suivi">
<h3 class="text-gold">
Notifications
{% if unreadCount > 0 %}
<span class="notification-badge">{{ unreadCount }}</span>
{% endif %}
</h3>
{% if is_granted('ROLE_SUPERADMIN') %}
<form method="GET" action="{{ path(app.request.attributes.get('_route')) }}">
<select name="selectedUser" onchange="this.form.submit()">
{% for user in app.user.entreprise.utilisateurs %}
{% set unreadCount = user.infosSuivis|filter(info => not info.lu)|length %}
<option value="{{ user.id }}" {% if user.id == selectedUserId %}selected{% endif %}>
{{ user.nom }} {{ user.prenom }}{% if unreadCount > 0 %} ({{ unreadCount }}){% endif %}
</option>
{% endfor %}
</select>
</form>
{% endif %}
</div>
<div class="body-suivi">
{% if selectedUser %}
{% set unreadInfos = selectedUser.infosSuivis|filter(info => not info.lu)|sort((a, b) => a.date < b.date) %}
{% set readInfos = selectedUser.infosSuivis|filter(info => info.lu)|sort((a, b) => a.date < b.date) %}
{% for infoSuivi in unreadInfos %}
{% set infoClass = 'info' %}
{% if infoSuivi.type == 'visite' %}
{% set infoClass = infoClass ~ ' info-visite' %}
{% elseif infoSuivi.type == 'client' %}
{% set infoClass = infoClass ~ ' info-client' %}
{% elseif infoSuivi.type == 'rappel' %}
{% set infoClass = infoClass ~ ' info-rappel' %}
{% elseif infoSuivi.type == 'suppr' %}
{% set infoClass = infoClass ~ ' info-suppr' %}
{% endif %}
<div class="info {{ infoClass }}">
<div class="info-head">
<div class="info-badges">
{% if infoSuivi.type == 'visite' %}
<small><i class="fa fa-info-circle" aria-hidden="true"></i>{{ infoSuivi.type }}</small>
{% elseif infoSuivi.type == 'client' %}
<small><i class="fa fa-user" aria-hidden="true"></i>{{ infoSuivi.type }}</small>
{% elseif infoSuivi.type == 'rappel' %}
<small><i class="fa fa-bell" aria-hidden="true"></i>{{ infoSuivi.type }}</small>
{% elseif infoSuivi.type == 'suppr' %}
<small><i class="fa fa-trash" aria-hidden="true"></i>suppression</small>
{% endif %}
<span class="info-time">{{ infoSuivi.date|date('H:i - d/m/Y') }}</span>
</div>
<div class="info-new"><i class="fa fa-bell" aria-hidden="true"></i></div>
</div>
<div class="info-body">
<p>
{% set prospectsString = '' %}
{% for prospect in infoSuivi.prospects %}
{% set prospectsString = prospectsString ~ '<a class="info-user" href="' ~ absolute_url(path('admin_app_prospect_edit', {id: prospect.id})) ~ '">' ~ prospect ~ '</a>' ~ (loop.last ? '' : ', ') %}
{% endfor %}
{% if infoSuivi.historique %}
{% set userHistorique = '<a class="info-user" href="' ~ absolute_url(path('admin_app_historique_show', {id: infoSuivi.historique.id})) ~ '">visité</a>' %}
{% else %}
{% set userHistorique = 'visité' %}
{% endif %}
{% if infoSuivi.auteur %}
{% set userLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_utilisateur_edit', {id: infoSuivi.auteur.id})) ~ '">' ~ infoSuivi.auteur.getNom() ~ ' ' ~ infoSuivi.auteur.getPrenom() ~ '</a>' %}
{% else %}
{% set userLink = 'un utilisateur inconnu' %}
{% endif %}
{% if infoSuivi.connectedUser %}
{% set connectedUserLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_utilisateur_edit', {id: infoSuivi.connectedUser.id})) ~ '">' ~ infoSuivi.connectedUser.getNom() ~ ' ' ~ infoSuivi.connectedUser.getPrenom() ~ '</a>' %}
{% else %}
{% set connectedUserLink = 'un utilisateur inconnu' %}
{% endif %}
{% set description = infoSuivi.description %}
{# Remplacer les placeholders standards #}
{% set description = description|replace({'[prospect]': prospectsString, '[user]': connectedUserLink, '[connectedUser]': connectedUserLink, '[visite]': userHistorique}) %}
{# Gérer les placeholders spéciaux pour les demandes de suppression #}
{% if infoSuivi.type == 'suppr' %}
{# Lien vers le listing des demandes de suppression #}
{% set demandeSuppressionLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_programme_suppresion_demande_list')) ~ '">demande de suppression</a>' %}
{% set description = description|replace({'[demande de suppression]': demandeSuppressionLink}) %}
{# Gérer le placeholder simple [programme] #}
{% if infoSuivi.programme %}
{% set programmeNom = infoSuivi.programme.nom ?: 'Programme sans nom' %}
{% set programmeLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_programme_edit', {id: infoSuivi.programme.id})) ~ '">' ~ programmeNom ~ '</a>' %}
{% set description = description|replace({'[programme]': programmeLink}) %}
{% endif %}
{# Parser et remplacer le placeholder du programme [programme:id:nom] (pour compatibilité) #}
{% if '[programme:' in description %}
{% set matches = description|split('[programme:') %}
{% if matches|length > 1 %}
{% set programmeInfo = matches[1]|split(']')[0] %}
{% set programmeInfoParts = programmeInfo|split(':') %}
{% if programmeInfoParts|length >= 2 %}
{% set programmeId = programmeInfoParts[0] %}
{% set programmeNom = programmeInfoParts[1] %}
{% set programmeLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_programme_edit', {id: programmeId})) ~ '">' ~ programmeNom ~ '</a>' %}
{% set description = description|replace({('[programme:' ~ programmeInfo ~ ']'): programmeLink}) %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{{ description|raw }}
</p>
{% if selectedUser == app.user %}
<span class="info-vu" data-id="{{ infoSuivi.id }}">
<i class="fa fa-check" aria-hidden="true"></i>
<i class="fa fa-spinner fa-spin" style="display:none;" aria-hidden="true"></i>
Marquer comme vu</span>
{% endif %}
</div>
</div>
{% endfor %}
{% for infoSuivi in readInfos %}
{% set infoClass = 'info' %}
{% if infoSuivi.type == 'visite' %}
{% set infoClass = infoClass ~ ' info-visite' %}
{% elseif infoSuivi.type == 'client' %}
{% set infoClass = infoClass ~ ' info-client' %}
{% elseif infoSuivi.type == 'rappel' %}
{% set infoClass = infoClass ~ ' info-rappel' %}
{% elseif infoSuivi.type == 'suppr' %}
{% set infoClass = infoClass ~ ' info-suppr' %}
{% endif %}
<div class="info {{ infoClass }} read">
<div class="info-head">
<div class="info-badges">
{% if infoSuivi.type == 'visite' %}
<small><i class="fa fa-info-circle" aria-hidden="true"></i>{{ infoSuivi.type }}</small>
{% elseif infoSuivi.type == 'client' %}
<small><i class="fa fa-user" aria-hidden="true"></i>{{ infoSuivi.type }}</small>
{% elseif infoSuivi.type == 'rappel' %}
<small><i class="fa fa-bell" aria-hidden="true"></i>{{ infoSuivi.type }}</small>
{% elseif infoSuivi.type == 'suppr' %}
<small><i class="fa fa-trash" aria-hidden="true"></i>suppression</small>
{% endif %}
<span class="info-time">{{ infoSuivi.date|date('H:i - d/m/Y') }}</span>
</div>
<div class="info-new"></div>
</div>
<div class="info-body">
<p>
{% set prospectsString = '' %}
{% for prospect in infoSuivi.prospects %}
{% set prospectsString = prospectsString ~ '<a class="info-user" href="' ~ absolute_url(path('admin_app_prospect_edit', {id: prospect.id})) ~ '">' ~ prospect ~ '</a>' ~ (loop.last ? '' : ', ') %}
{% endfor %}
{% if infoSuivi.historique %}
{% set userHistorique = '<a class="info-user" href="' ~ absolute_url(path('admin_app_historique_show', {id: infoSuivi.historique.id})) ~ '">visité</a>' %}
{% else %}
{% set userHistorique = 'visité' %}
{% endif %}
{% if infoSuivi.auteur %}
{% set userLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_utilisateur_edit', {id: infoSuivi.auteur.id})) ~ '">' ~ infoSuivi.auteur.getNom() ~ ' ' ~ infoSuivi.auteur.getPrenom() ~ '</a>' %}
{% else %}
{% set userLink = 'un utilisateur inconnu' %}
{% endif %}
{% if infoSuivi.connectedUser %}
{% set connectedUserLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_utilisateur_edit', {id: infoSuivi.connectedUser.id})) ~ '">' ~ infoSuivi.connectedUser.getNom() ~ ' ' ~ infoSuivi.connectedUser.getPrenom() ~ '</a>' %}
{% else %}
{% set connectedUserLink = 'un utilisateur inconnu' %}
{% endif %}
{% set description = infoSuivi.description %}
{# Remplacer les placeholders standards #}
{% set description = description|replace({'[prospect]': prospectsString, '[user]': connectedUserLink, '[connectedUser]': connectedUserLink, '[visite]': userHistorique}) %}
{# Gérer les placeholders spéciaux pour les demandes de suppression #}
{% if infoSuivi.type == 'suppr' %}
{# Lien vers le listing des demandes de suppression #}
{% set demandeSuppressionLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_programme_suppresion_demande_list')) ~ '">demande de suppression</a>' %}
{% set description = description|replace({'[demande de suppression]': demandeSuppressionLink}) %}
{# Parser et remplacer le placeholder du programme [programme:id:nom] #}
{% if '[programme:' in description %}
{% set matches = description|split('[programme:') %}
{% if matches|length > 1 %}
{% set programmeInfo = matches[1]|split(']')[0] %}
{% set programmeInfoParts = programmeInfo|split(':') %}
{% if programmeInfoParts|length >= 2 %}
{% set programmeId = programmeInfoParts[0] %}
{% set programmeNom = programmeInfoParts[1] %}
{% set programmeLink = '<a class="info-user" href="' ~ absolute_url(path('admin_app_programme_edit', {id: programmeId})) ~ '">' ~ programmeNom ~ '</a>' %}
{% set description = description|replace({('[programme:' ~ programmeInfo ~ ']'): programmeLink}) %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{{ description|raw }}
</p>
{% if selectedUser == app.user %}
<span class="info-vu" data-id="{{ infoSuivi.id }}">Marquer comme vu</span>
{% endif %}
</div>
</div>
{% endfor %}
{% endif %}
{% if unreadInfos|length == 0 and readInfos|length == 0 %}
<div class="no-notification">
<p>Aucune notification pour le moment.</p>
</div>
{% endif %}
<script>
$(document).ready(function() {
$('.info-vu').click(function() {
var $this = $(this);
var $infoElement = $(this).closest('.info');
var infoId = $(this).data('id');
$this.find('.fa-check').hide();
$this.find('.fa-spinner').show();
$.ajax({
url: '{{ path('ajax_info_suivi_lu', { 'id': '__id__' })|replace({'__id__': '__id__'}) }}'.replace('__id__', infoId),
method: 'POST',
success: function() {
$this.find('.fa-spinner').hide();
$this.find('.fa-check').show();
$infoElement.addClass("read");
$infoElement.find('.info-new').remove();
$infoElement.detach();
var inserted = false;
$('.info.read').each(function() {
var $current = $(this);
if ($infoElement.find('.info-time').text() > $current.find('.info-time').text()) {
$infoElement.insertBefore($current);
inserted = true;
return false;
}
});
if (!inserted) {
$('.dashboard-content-suivi .body-suivi').append($infoElement);
}
var $badge = $('.notification-badge');
var count = parseInt($badge.text()) - 1;
if (count > 0) {
$badge.text(count);
} else {
$badge.remove();
$('.notifs-chip').remove();
}
}
});
});
});
</script>
</div>
</div>