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

@@ -1,5 +1,5 @@
from django.contrib import admin
from .models import Conversazione, Obiettivo, AggiornamentoObiettivo, CommentoConversazione, Documento
from .models import Conversazione, Obiettivo, AggiornamentoObiettivo, CommentoConversazione, Documento, Tag, Appuntamento
class AggiornamentoInline(admin.TabularInline):
@@ -31,9 +31,9 @@ class DocumentoObiettivoInline(admin.TabularInline):
@admin.register(Conversazione)
class ConversazioneAdmin(admin.ModelAdmin):
list_display = ('titolo', 'data', 'registrato_da')
list_filter = ('data', 'registrato_da')
list_filter = ('data', 'registrato_da', 'tags')
search_fields = ('titolo', 'contenuto')
filter_horizontal = ('partecipanti',)
filter_horizontal = ('partecipanti', 'tags')
readonly_fields = ('data',)
inlines = [CommentoConversazioneInline, DocumentoInline]
@@ -68,3 +68,23 @@ class DocumentoAdmin(admin.ModelAdmin):
search_fields = ('titolo', 'descrizione')
readonly_fields = ('data_caricamento',)
@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
list_display = ('nome', 'colore')
search_fields = ('nome',)
class AppuntamentoPartecipantiInline(admin.TabularInline):
model = Appuntamento.partecipanti.through
extra = 0
@admin.register(Appuntamento)
class AppuntamentoAdmin(admin.ModelAdmin):
list_display = ('titolo', 'data_ora', 'luogo', 'creato_da', 'conversazione')
list_filter = ('data_ora', 'creato_da')
search_fields = ('titolo', 'note', 'luogo')
filter_horizontal = ('partecipanti',)
readonly_fields = ('data_creazione',)