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:
@@ -1,7 +1,7 @@
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils import timezone
|
||||
from .models import Conversazione, Obiettivo, AggiornamentoObiettivo, CommentoConversazione, Documento
|
||||
from .models import Conversazione, Obiettivo, AggiornamentoObiettivo, CommentoConversazione, Documento, Tag, Appuntamento
|
||||
|
||||
|
||||
class ConversazioneForm(forms.ModelForm):
|
||||
@@ -20,10 +20,16 @@ class ConversazioneForm(forms.ModelForm):
|
||||
required=False,
|
||||
label='Partecipanti',
|
||||
)
|
||||
tags = forms.ModelMultipleChoiceField(
|
||||
queryset=Tag.objects.all(),
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False,
|
||||
label='Tag progetto',
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Conversazione
|
||||
fields = ['titolo', 'data', 'contenuto', 'partecipanti']
|
||||
fields = ['titolo', 'data', 'contenuto', 'partecipanti', 'tags']
|
||||
widgets = {
|
||||
'titolo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Titolo della conversazione'}),
|
||||
'contenuto': forms.Textarea(attrs={'class': 'form-control', 'rows': 6, 'placeholder': 'Descrivi cosa è stato discusso...'}),
|
||||
@@ -94,3 +100,29 @@ class DocumentoForm(forms.ModelForm):
|
||||
'conversazione': 'Collegato a conversazione (opzionale)',
|
||||
'obiettivo': 'Collegato a obiettivo (opzionale)',
|
||||
}
|
||||
|
||||
|
||||
class AppuntamentoForm(forms.ModelForm):
|
||||
data_ora = forms.DateTimeField(
|
||||
label='Data e ora',
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={'class': 'form-control', 'type': 'datetime-local'},
|
||||
format='%Y-%m-%dT%H:%M',
|
||||
),
|
||||
input_formats=['%Y-%m-%dT%H:%M'],
|
||||
)
|
||||
partecipanti = forms.ModelMultipleChoiceField(
|
||||
queryset=User.objects.filter(is_active=True).order_by('first_name', 'username'),
|
||||
widget=forms.CheckboxSelectMultiple,
|
||||
required=False,
|
||||
label='Partecipanti',
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Appuntamento
|
||||
fields = ['titolo', 'data_ora', 'luogo', 'note', 'partecipanti']
|
||||
widgets = {
|
||||
'titolo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Titolo appuntamento/riunione'}),
|
||||
'luogo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Luogo (opzionale)'}),
|
||||
'note': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Note (opzionale)'}),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user