added set of Note forms, fixed new note on 'suivi:details' view
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from django import forms
|
||||
from django.forms import inlineformset_factory
|
||||
from notes.forms import NoteForm
|
||||
from notes.forms import SimpleNoteForm
|
||||
# Models
|
||||
from .models import Maraude, Rencontre
|
||||
from .notes import Observation, Signalement
|
||||
@@ -24,15 +24,9 @@ class RencontreForm(forms.ModelForm):
|
||||
fields = ['lieu', 'heure_debut', 'duree']
|
||||
|
||||
|
||||
class SignalementForm(NoteForm):
|
||||
|
||||
class Meta:
|
||||
model = Signalement
|
||||
fields = ['source', 'created_date', 'created_time', 'sujet', 'text']
|
||||
|
||||
|
||||
ObservationInlineFormSet = inlineformset_factory( Rencontre, Observation,
|
||||
form=NoteForm,
|
||||
form=SimpleNoteForm,
|
||||
extra = 1,
|
||||
)
|
||||
|
||||
@@ -44,7 +38,7 @@ RencontreInlineFormSet = inlineformset_factory(
|
||||
|
||||
ObservationInlineFormSetNoExtra = inlineformset_factory(
|
||||
Rencontre, Observation,
|
||||
form = NoteForm,
|
||||
form = SimpleNoteForm,
|
||||
extra = 0
|
||||
)
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ from django import forms
|
||||
from django.forms import inlineformset_factory, modelformset_factory, modelform_factory
|
||||
from django.forms.extras import widgets
|
||||
from django_select2.forms import Select2Widget
|
||||
from .forms import ( RencontreForm, RencontreInlineFormSet, SignalementForm,
|
||||
from .forms import ( RencontreForm, RencontreInlineFormSet,
|
||||
ObservationInlineFormSet, ObservationInlineFormSetNoExtra,
|
||||
MaraudeAutoDateForm, MonthSelectForm, )
|
||||
|
||||
|
||||
@@ -1,66 +1,87 @@
|
||||
from .models import Note
|
||||
from utilisateurs.models import Professionnel
|
||||
|
||||
from django import forms
|
||||
from django.utils import timezone
|
||||
from django_select2.forms import Select2Widget
|
||||
from django.forms import Textarea
|
||||
|
||||
class NoteForm(forms.ModelForm):
|
||||
|
||||
|
||||
class NoteForm(forms.ModelForm):
|
||||
""" Generic Note form """
|
||||
class Meta:
|
||||
model = Note
|
||||
fields = ['sujet', 'text']
|
||||
fields = ['sujet', 'text', 'created_by', 'created_date', 'created_time']
|
||||
widgets = {
|
||||
'sujet': Select2Widget(),
|
||||
'text': Textarea(attrs={'rows':4}),
|
||||
}
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# Get data for extra fields of Note
|
||||
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class UserNoteForm(forms.ModelForm):
|
||||
class SimpleNoteForm(forms.ModelForm):
|
||||
""" Simple note with only 'sujet' and 'text' fields.
|
||||
|
||||
class Meta:
|
||||
model = Note
|
||||
Usefull with children of 'Note' that defines all 'note_*'
|
||||
special methods.
|
||||
"""
|
||||
class Meta(NoteForm.Meta):
|
||||
fields = ['sujet', 'text']
|
||||
|
||||
|
||||
|
||||
class UserNoteForm(NoteForm):
|
||||
""" Form that sets 'created_by' with current user id.
|
||||
This requires 'request' object at initialization
|
||||
"""
|
||||
class Meta(NoteForm.Meta):
|
||||
fields = ['sujet', 'text', 'created_date', 'created_time']
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__(self, request, **kwargs):
|
||||
args = []
|
||||
if request.POST:
|
||||
args += (request.POST, request.FILES)
|
||||
super().__init__(*args, **kwargs)
|
||||
try:
|
||||
self.author = Professionnel.objects.get(pk=request.user.pk)
|
||||
except Professionnel.DoesNotExist:
|
||||
msg = "%s should not have been initiated with '%s' user" % (self, request.user)
|
||||
raise RuntimeError(msg)
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = super().save(commit=False)
|
||||
instance.created_by = None #TODO: Get user with needed Class
|
||||
instance.created_by = self.author
|
||||
if commit:
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
class NoteAutoDateForm(UserNoteForm):
|
||||
class UserAutoDateNoteForm(UserNoteForm):
|
||||
""" Form that automatically sets 'date' and 'time' to save time """
|
||||
|
||||
class Meta(UserNoteForm.Meta):
|
||||
model = Note
|
||||
fields = ['text']
|
||||
widgets = {
|
||||
'text': Textarea(attrs={'rows':4, 'placeholder': "Texte"}),
|
||||
}
|
||||
|
||||
def __init__(self, request, **kwargs):
|
||||
self.sujet = kwargs.pop('sujet')
|
||||
self.pk = kwargs.pop('pk')
|
||||
self.user = request.user
|
||||
args = []
|
||||
if request.POST:
|
||||
args = (request.POST, request.FILES)
|
||||
super().__init__(*args)
|
||||
fields = ['sujet', 'text']
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = super().save(commit=False)
|
||||
instance.sujet = self.sujet
|
||||
instance.created_date = timezone.now().date()
|
||||
instance.created_time = timezone.now().time()
|
||||
if commit:
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
class AutoNoteForm(UserAutoDateNoteForm):
|
||||
class Meta(UserAutoDateNoteForm.Meta):
|
||||
fields = ['text']
|
||||
|
||||
def __init__(self, request, **kwargs):
|
||||
self.sujet = kwargs.pop('sujet')
|
||||
super().__init__(request, **kwargs)
|
||||
|
||||
def save(self, commit=True):
|
||||
print('Saving : ', self, 'with', self.sujet)
|
||||
inst = super().save(commit=False)
|
||||
inst.sujet = self.sujet
|
||||
if commit:
|
||||
inst.save()
|
||||
return inst
|
||||
|
||||
@@ -1,33 +1,32 @@
|
||||
from django.views.generic.edit import FormMixin, ProcessFormView
|
||||
from django.shortcuts import redirect
|
||||
|
||||
from .forms import NoteAutoDateForm
|
||||
from .forms import *
|
||||
|
||||
class NoteFormMixin(object):
|
||||
class SujetNoteFormMixin(object):
|
||||
|
||||
form = None
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.form_class = NoteAutoDateForm
|
||||
form_class = AutoNoteForm
|
||||
|
||||
def get_form(self, request, **kwargs):
|
||||
# Should add test to ensure this instance class is
|
||||
# has SingleObjectMixin set with Sujet model ??
|
||||
return self.form_class(
|
||||
self.request,
|
||||
sujet=self.get_object()
|
||||
)
|
||||
|
||||
def dispatch(self, request, **kwargs):
|
||||
self.form = self.get_form(request, **kwargs)
|
||||
self.form = self.get_form(request)
|
||||
return super().dispatch(request, **kwargs)
|
||||
|
||||
def post(self, request, **kwargs):
|
||||
print('post:', self.form)
|
||||
if self.form.is_valid():
|
||||
self.form.save()
|
||||
return redirect(self.get_success_url())
|
||||
return self.get(request, **kwargs)
|
||||
|
||||
def get_form(self, request, **kwargs):
|
||||
kwargs['sujet'] = self.get_object()
|
||||
return NoteAutoDateForm(
|
||||
request,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['note_form'] = self.form
|
||||
return context
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import render, reverse
|
||||
|
||||
from django.views import generic
|
||||
from website import decorators as website
|
||||
@@ -25,10 +25,10 @@ class IndexView(generic.TemplateView):
|
||||
template_name = "suivi/index.html"
|
||||
|
||||
|
||||
from notes.mixins import NoteFormMixin
|
||||
from notes.mixins import SujetNoteFormMixin
|
||||
|
||||
@webpage
|
||||
class SuiviSujetView(NoteFormMixin, generic.DetailView):
|
||||
class SuiviSujetView(SujetNoteFormMixin, generic.DetailView):
|
||||
class PageInfo:
|
||||
title = "Sujet - {{sujet}}"
|
||||
header = "{{sujet}}"
|
||||
@@ -39,7 +39,9 @@ class SuiviSujetView(NoteFormMixin, generic.DetailView):
|
||||
context_object_name = "sujet"
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.app_menu.insert(0, "sujets/menu_sujet.html")
|
||||
self.insert_menu("sujets/menu_sujet.html")
|
||||
def get_success_url(self):
|
||||
return reverse('suivi:details', kwargs={'pk': self.get_object().pk})
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
context = super().get_context_data(*args, **kwargs)
|
||||
context['notes'] = self.object.notes.by_date(reverse=True)
|
||||
|
||||
Reference in New Issue
Block a user