Initial commit: Diario Conversazioni Olimpic Nastri
- Django 5.2 + PostgreSQL + Gunicorn - Conversazioni, Obiettivi, Documenti PDF, Persone - Commenti e aggiornamenti con modifica/eliminazione - Agenda, ricerca live, giorni rimanenti scadenze - Bootstrap 5 + HTMX + toast notifications - Deploy: Nginx + Gunicorn + SSL
This commit is contained in:
70
templates/diario/documenti/dettaglio.html
Normal file
70
templates/diario/documenti/dettaglio.html
Normal file
@@ -0,0 +1,70 @@
|
||||
{% extends "diario/base.html" %}
|
||||
{% block title %}{{ doc.titolo }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 fade-in">
|
||||
|
||||
<div class="d-flex align-items-center mb-4 gap-3">
|
||||
<a href="{% url 'documenti_lista' %}" class="btn btn-icon btn-outline-secondary">
|
||||
<i class="bi bi-arrow-left" style="font-size:.85rem;"></i>
|
||||
</a>
|
||||
<h5 class="mb-0 fw-bold flex-grow-1">{{ doc.titolo }}</h5>
|
||||
{% if can_edit %}
|
||||
<a href="{% url 'documento_elimina' doc.pk %}" class="btn btn-sm btn-outline-danger">
|
||||
<i class="bi bi-trash me-1"></i>Elimina
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="card p-4 mb-4">
|
||||
<div class="d-flex align-items-center gap-3 mb-3">
|
||||
<div class="d-flex align-items-center justify-content-center rounded-3" style="width:52px;height:52px;background:#fef2f2;">
|
||||
<i class="bi bi-file-earmark-pdf" style="font-size:1.6rem;color:#ef4444;"></i>
|
||||
</div>
|
||||
<div>
|
||||
<div class="fw-semibold">{{ doc.filename }}</div>
|
||||
<small class="text-muted">Caricato il {{ doc.data_caricamento|date:"d/m/Y \a\l\l\e H:i" }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a href="{{ doc.file.url }}" target="_blank" class="btn btn-primary mb-3" hx-boost="false">
|
||||
<i class="bi bi-download me-2"></i>Scarica PDF
|
||||
</a>
|
||||
|
||||
{% if doc.descrizione %}
|
||||
<hr class="soft my-3">
|
||||
<p class="mb-0" style="white-space:pre-wrap;line-height:1.7;">{{ doc.descrizione }}</p>
|
||||
{% endif %}
|
||||
|
||||
<hr class="soft my-3">
|
||||
<div class="row g-3">
|
||||
<div class="col-sm-4">
|
||||
<small class="text-muted d-block mb-1">Caricato da</small>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<span class="avatar" style="width:22px;height:22px;font-size:.58rem;">{{ doc.caricato_da.username|slice:":2"|upper }}</span>
|
||||
<span class="small">{{ doc.caricato_da.get_full_name|default:doc.caricato_da.username }}</span>
|
||||
</div>
|
||||
</div>
|
||||
{% if doc.conversazione %}
|
||||
<div class="col-sm-4">
|
||||
<small class="text-muted d-block mb-1">Conversazione</small>
|
||||
<a href="{% url 'conversazione_dettaglio' doc.conversazione.pk %}" class="small text-decoration-none" style="color:var(--accent);">
|
||||
{{ doc.conversazione.titolo }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if doc.obiettivo %}
|
||||
<div class="col-sm-4">
|
||||
<small class="text-muted d-block mb-1">Obiettivo</small>
|
||||
<a href="{% url 'obiettivo_dettaglio' doc.obiettivo.pk %}" class="small text-decoration-none" style="color:var(--accent);">
|
||||
{{ doc.obiettivo.titolo }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
53
templates/diario/documenti/form.html
Normal file
53
templates/diario/documenti/form.html
Normal file
@@ -0,0 +1,53 @@
|
||||
{% extends "diario/base.html" %}
|
||||
{% block title %}{{ titolo_pagina }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 fade-in">
|
||||
<div class="d-flex align-items-center mb-4">
|
||||
<a href="{% url 'documenti_lista' %}" class="btn btn-sm btn-outline-secondary me-3">
|
||||
<i class="bi bi-arrow-left"></i>
|
||||
</a>
|
||||
<h4 class="mb-0">{{ titolo_pagina }}</h4>
|
||||
</div>
|
||||
|
||||
<div class="card p-4">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-semibold">{{ form.titolo.label }}</label>
|
||||
{{ form.titolo }}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-semibold">{{ form.descrizione.label }}</label>
|
||||
{{ form.descrizione }}
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label fw-semibold">{{ form.file.label }}</label>
|
||||
{{ form.file }}
|
||||
<div class="form-text">Solo file PDF, massimo 10 MB.</div>
|
||||
{% if form.file.errors %}
|
||||
<div class="text-danger small mt-1">{{ form.file.errors.0 }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="row g-3 mb-4">
|
||||
<div class="col-sm-6">
|
||||
<label class="form-label fw-semibold">{{ form.conversazione.label }}</label>
|
||||
{{ form.conversazione }}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<label class="form-label fw-semibold">{{ form.obiettivo.label }}</label>
|
||||
{{ form.obiettivo }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-upload me-1"></i>Carica
|
||||
</button>
|
||||
<a href="{% url 'documenti_lista' %}" class="btn btn-outline-secondary">Annulla</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
65
templates/diario/documenti/lista.html
Normal file
65
templates/diario/documenti/lista.html
Normal file
@@ -0,0 +1,65 @@
|
||||
{% extends "diario/base.html" %}
|
||||
{% block title %}Documenti{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="d-flex justify-content-between align-items-center mb-4 fade-in">
|
||||
<p class="section-title mb-0">Documenti</p>
|
||||
<a href="{% url 'documento_nuovo' %}" class="btn btn-primary btn-sm px-3">
|
||||
<i class="bi bi-upload me-1"></i>Carica documento
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="row g-3">
|
||||
{% for doc in documenti %}
|
||||
<div class="col-12 col-md-6 col-xl-4 fade-in">
|
||||
<div class="card h-100 p-3">
|
||||
<div class="d-flex align-items-start gap-3">
|
||||
<div class="flex-shrink-0">
|
||||
<div class="d-flex align-items-center justify-content-center rounded-3" style="width:42px;height:42px;background:#fef2f2;">
|
||||
<i class="bi bi-file-earmark-pdf" style="font-size:1.3rem;color:#ef4444;"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-grow-1 min-w-0">
|
||||
<a href="{% url 'documento_dettaglio' doc.pk %}" class="text-decoration-none text-dark fw-semibold d-block text-truncate">
|
||||
{{ doc.titolo }}
|
||||
</a>
|
||||
{% if doc.descrizione %}
|
||||
<p class="text-muted small mb-1 mt-1">{{ doc.descrizione|truncatewords:15 }}</p>
|
||||
{% endif %}
|
||||
<div class="d-flex align-items-center gap-2 flex-wrap mt-2">
|
||||
<div class="d-flex align-items-center gap-1">
|
||||
<span class="avatar" style="width:18px;height:18px;font-size:.5rem;">{{ doc.caricato_da.username|slice:":2"|upper }}</span>
|
||||
<small class="text-muted">{{ doc.caricato_da.get_full_name|default:doc.caricato_da.username }}</small>
|
||||
</div>
|
||||
<small class="text-muted">{{ doc.data_caricamento|date:"d/m/Y" }}</small>
|
||||
</div>
|
||||
{% if doc.conversazione %}
|
||||
<div class="mt-1">
|
||||
<a href="{% url 'conversazione_dettaglio' doc.conversazione.pk %}" class="small text-decoration-none" style="color:var(--accent);">
|
||||
<i class="bi bi-link-45deg me-1"></i>{{ doc.conversazione.titolo|truncatewords:5 }}
|
||||
</a>
|
||||
</div>
|
||||
{% elif doc.obiettivo %}
|
||||
<div class="mt-1">
|
||||
<a href="{% url 'obiettivo_dettaglio' doc.obiettivo.pk %}" class="small text-decoration-none" style="color:var(--accent);">
|
||||
<i class="bi bi-link-45deg me-1"></i>{{ doc.obiettivo.titolo|truncatewords:5 }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% empty %}
|
||||
<div class="col-12">
|
||||
<div class="empty-state">
|
||||
<i class="bi bi-file-earmark-pdf"></i>
|
||||
<p>Nessun documento caricato.</p>
|
||||
<a href="{% url 'documento_nuovo' %}" class="btn btn-primary btn-sm px-3">
|
||||
<i class="bi bi-upload me-1"></i>Carica il primo
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user