from django import forms from django.contrib.auth.models import User from django.utils import timezone from .models import Conversazione, Obiettivo, AggiornamentoObiettivo, CommentoConversazione, Documento, Tag, Appuntamento class ConversazioneForm(forms.ModelForm): data = forms.DateTimeField( label='Data e ora', initial=timezone.now, 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', ) tags = forms.ModelMultipleChoiceField( queryset=Tag.objects.all(), widget=forms.CheckboxSelectMultiple, required=False, label='Tag progetto', ) class Meta: model = Conversazione 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...'}), } labels = { 'titolo': 'Titolo', 'contenuto': 'Contenuto', } class ObiettivoForm(forms.ModelForm): assegnato_a = forms.ModelMultipleChoiceField( queryset=User.objects.filter(is_active=True).order_by('first_name', 'username'), widget=forms.CheckboxSelectMultiple, required=False, label='Assegnato a', ) class Meta: model = Obiettivo fields = ['titolo', 'descrizione', 'tipo', 'assegnato_a', 'stato', 'data_scadenza'] widgets = { 'titolo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Titolo obiettivo'}), 'descrizione': forms.Textarea(attrs={'class': 'form-control', 'rows': 4, 'placeholder': 'Descrizione (opzionale)'}), 'tipo': forms.Select(attrs={'class': 'form-select'}), 'stato': forms.Select(attrs={'class': 'form-select'}), 'data_scadenza': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), } class AggiornamentoObiettivoForm(forms.ModelForm): class Meta: model = AggiornamentoObiettivo fields = ['testo'] widgets = { 'testo': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Scrivi un aggiornamento...'}), } labels = { 'testo': 'Aggiornamento', } class CommentoConversazioneForm(forms.ModelForm): class Meta: model = CommentoConversazione fields = ['testo'] widgets = { 'testo': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Scrivi un commento...'}), } labels = { 'testo': 'Commento', } class DocumentoForm(forms.ModelForm): class Meta: model = Documento fields = ['titolo', 'descrizione', 'file', 'conversazione', 'obiettivo'] widgets = { 'titolo': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Titolo del documento'}), 'descrizione': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Descrizione (opzionale)'}), 'file': forms.ClearableFileInput(attrs={'class': 'form-control', 'accept': '.pdf'}), 'conversazione': forms.Select(attrs={'class': 'form-select'}), 'obiettivo': forms.Select(attrs={'class': 'form-select'}), } labels = { 'file': 'File PDF', '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)'}), }