- 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
91 lines
2.7 KiB
Python
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',)
|
|
|