Aggiunta tab Menzioni nel profilo persona
This commit is contained in:
@@ -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),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user