Tag progetto, @menzioni, appuntamenti da conversazioni

- Modello Tag con nome e colore, M2M su Conversazione
- Modello Appuntamento con luogo, note, partecipanti, link a Conversazione
- @menzioni nei commenti e aggiornamenti: @username → link al profilo
- Autocomplete JS per @menzioni nelle textarea
- Auto-data conversazioni (default=now)
- CRUD completo appuntamenti con permessi autore
- Appuntamenti in agenda, dashboard, dettaglio conversazione
- Crea riunione direttamente da una conversazione (pre-compila titolo e partecipanti)
- Admin: Tag, Appuntamento registrati
This commit is contained in:
automationkriz
2026-04-07 14:28:47 +00:00
parent 006bb24215
commit 09f51b1227
19 changed files with 828 additions and 12 deletions

View File

@@ -0,0 +1,59 @@
# Generated by Django 5.2.12 on 2026-04-07 14:27
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('diario', '0005_commento_conversazione'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Tag',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(max_length=50, unique=True)),
('colore', models.CharField(default='#4361ee', max_length=7)),
],
options={
'verbose_name': 'Tag',
'verbose_name_plural': 'Tag',
'ordering': ['nome'],
},
),
migrations.AlterField(
model_name='conversazione',
name='data',
field=models.DateTimeField(default=django.utils.timezone.now),
),
migrations.CreateModel(
name='Appuntamento',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('titolo', models.CharField(max_length=200)),
('data_ora', models.DateTimeField()),
('luogo', models.CharField(blank=True, max_length=200)),
('note', models.TextField(blank=True)),
('data_creazione', models.DateTimeField(auto_now_add=True)),
('conversazione', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='appuntamenti', to='diario.conversazione')),
('creato_da', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='appuntamenti_creati', to=settings.AUTH_USER_MODEL)),
('partecipanti', models.ManyToManyField(blank=True, related_name='appuntamenti', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'Appuntamento',
'verbose_name_plural': 'Appuntamenti',
'ordering': ['data_ora'],
},
),
migrations.AddField(
model_name='conversazione',
name='tags',
field=models.ManyToManyField(blank=True, related_name='conversazioni', to='diario.tag'),
),
]