Aggiunta tab Menzioni nel profilo persona

This commit is contained in:
automationkriz
2026-04-08 12:07:43 +00:00
parent b14471ebd7
commit 84cdd3493c
2 changed files with 68 additions and 0 deletions

View File

@@ -527,11 +527,24 @@ def persona_dettaglio(request, pk):
caricato_da=persona caricato_da=persona
).select_related('conversazione', 'obiettivo').order_by('-data_caricamento')[:20] ).select_related('conversazione', 'obiettivo').order_by('-data_caricamento')[:20]
# Menzioni: commenti e aggiornamenti dove @username appare nel testo
mention_pattern = f'@{persona.username}'
menzioni_commenti = CommentoConversazione.objects.filter(
testo__icontains=mention_pattern
).select_related('autore', 'conversazione').order_by('-data')[:20]
menzioni_aggiornamenti = AggiornamentoObiettivo.objects.filter(
testo__icontains=mention_pattern
).select_related('autore', 'obiettivo').order_by('-data')[:20]
return render(request, 'diario/persone/dettaglio.html', { return render(request, 'diario/persone/dettaglio.html', {
'persona': persona, 'persona': persona,
'conversazioni': conversazioni, 'conversazioni': conversazioni,
'obiettivi': obiettivi, 'obiettivi': obiettivi,
'documenti': documenti, 'documenti': documenti,
'menzioni_commenti': menzioni_commenti,
'menzioni_aggiornamenti': menzioni_aggiornamenti,
'totale_menzioni': len(menzioni_commenti) + len(menzioni_aggiornamenti),
}) })

View File

@@ -1,4 +1,5 @@
{% extends "diario/base.html" %} {% extends "diario/base.html" %}
{% load custom_filters %}
{% block title %}{{ persona.get_full_name|default:persona.username }}{% endblock %} {% block title %}{{ persona.get_full_name|default:persona.username }}{% endblock %}
{% block content %} {% block content %}
@@ -33,6 +34,11 @@
<i class="bi bi-file-pdf me-1"></i>Documenti <span class="badge bg-secondary bg-opacity-25 text-dark ms-1">{{ documenti|length }}</span> <i class="bi bi-file-pdf me-1"></i>Documenti <span class="badge bg-secondary bg-opacity-25 text-dark ms-1">{{ documenti|length }}</span>
</button> </button>
</li> </li>
<li class="nav-item">
<button class="nav-link btn-sm" data-bs-toggle="pill" data-bs-target="#tab-menzioni">
<i class="bi bi-at me-1"></i>Menzioni <span class="badge bg-primary bg-opacity-25 text-primary ms-1">{{ totale_menzioni }}</span>
</button>
</li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
@@ -97,6 +103,55 @@
<div class="empty-state"><i class="bi bi-file-earmark-pdf"></i><p>Nessun documento.</p></div> <div class="empty-state"><i class="bi bi-file-earmark-pdf"></i><p>Nessun documento.</p></div>
{% endfor %} {% endfor %}
</div> </div>
<!-- Menzioni -->
<div class="tab-pane fade" id="tab-menzioni">
{% for c in menzioni_commenti %}
<div class="card mb-2 p-3 fade-in">
<div class="d-flex align-items-start gap-2">
<i class="bi bi-at" style="font-size:1.1rem;color:var(--accent);"></i>
<div class="flex-grow-1">
<div class="d-flex justify-content-between align-items-center mb-1">
<small class="text-muted">
<span class="fw-semibold text-dark">{{ c.autore.get_full_name|default:c.autore.username }}</span>
ha taggato in un commento
</small>
<small class="text-muted">{{ c.data|date:"d/m/Y H:i" }}</small>
</div>
<a href="{% url 'conversazione_dettaglio' c.conversazione.pk %}" class="text-decoration-none text-primary small fw-semibold d-block mb-1">
<i class="bi bi-chat-quote me-1"></i>{{ c.conversazione.titolo }}
</a>
<p class="mb-0 small text-muted" style="white-space:pre-wrap;line-height:1.5;">{{ c.testo|render_mentions|truncatewords:30 }}</p>
</div>
</div>
</div>
{% endfor %}
{% for a in menzioni_aggiornamenti %}
<div class="card mb-2 p-3 fade-in">
<div class="d-flex align-items-start gap-2">
<i class="bi bi-at" style="font-size:1.1rem;color:#f97316;"></i>
<div class="flex-grow-1">
<div class="d-flex justify-content-between align-items-center mb-1">
<small class="text-muted">
<span class="fw-semibold text-dark">{{ a.autore.get_full_name|default:a.autore.username }}</span>
ha taggato in un aggiornamento
</small>
<small class="text-muted">{{ a.data|date:"d/m/Y H:i" }}</small>
</div>
<a href="{% url 'obiettivo_dettaglio' a.obiettivo.pk %}" class="text-decoration-none text-primary small fw-semibold d-block mb-1">
<i class="bi bi-bullseye me-1"></i>{{ a.obiettivo.titolo }}
</a>
<p class="mb-0 small text-muted" style="white-space:pre-wrap;line-height:1.5;">{{ a.testo|render_mentions|truncatewords:30 }}</p>
</div>
</div>
</div>
{% endfor %}
{% if not menzioni_commenti and not menzioni_aggiornamenti %}
<div class="empty-state"><i class="bi bi-at"></i><p>Nessuna menzione trovata.</p></div>
{% endif %}
</div>
</div> </div>
</div> </div>