Files
diario_coversazioni/diario/admin.py
automationkriz 09f51b1227 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
2026-04-07 14:28:47 +00:00

91 lines
2.7 KiB
Python

from django.contrib import admin
from .models import Conversazione, Obiettivo, AggiornamentoObiettivo, CommentoConversazione, Documento, Tag, Appuntamento
class AggiornamentoInline(admin.TabularInline):
model = AggiornamentoObiettivo
extra = 0
readonly_fields = ('data',)
class CommentoConversazioneInline(admin.TabularInline):
model = CommentoConversazione
extra = 0
readonly_fields = ('data',)
class DocumentoInline(admin.TabularInline):
model = Documento
extra = 0
readonly_fields = ('data_caricamento',)
fk_name = 'conversazione'
class DocumentoObiettivoInline(admin.TabularInline):
model = Documento
extra = 0
readonly_fields = ('data_caricamento',)
fk_name = 'obiettivo'
@admin.register(Conversazione)
class ConversazioneAdmin(admin.ModelAdmin):
list_display = ('titolo', 'data', 'registrato_da')
list_filter = ('data', 'registrato_da', 'tags')
search_fields = ('titolo', 'contenuto')
filter_horizontal = ('partecipanti', 'tags')
readonly_fields = ('data',)
inlines = [CommentoConversazioneInline, DocumentoInline]
@admin.register(Obiettivo)
class ObiettivoAdmin(admin.ModelAdmin):
list_display = ('titolo', 'tipo', 'stato', 'data_scadenza', 'creato_da')
list_filter = ('tipo', 'stato', 'assegnato_a')
search_fields = ('titolo', 'descrizione')
readonly_fields = ('data_creazione',)
inlines = [AggiornamentoInline, DocumentoObiettivoInline]
@admin.register(AggiornamentoObiettivo)
class AggiornamentoObiettivoAdmin(admin.ModelAdmin):
list_display = ('obiettivo', 'autore', 'data')
list_filter = ('autore', 'data')
readonly_fields = ('data',)
@admin.register(CommentoConversazione)
class CommentoConversazioneAdmin(admin.ModelAdmin):
list_display = ('conversazione', 'autore', 'data')
list_filter = ('autore', 'data')
readonly_fields = ('data',)
@admin.register(Documento)
class DocumentoAdmin(admin.ModelAdmin):
list_display = ('titolo', 'caricato_da', 'data_caricamento', 'conversazione', 'obiettivo')
list_filter = ('caricato_da', 'data_caricamento')
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',)