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 import forms
|
||||||
from django.forms import inlineformset_factory
|
from django.forms import inlineformset_factory
|
||||||
from notes.forms import NoteForm
|
from notes.forms import SimpleNoteForm
|
||||||
# Models
|
# Models
|
||||||
from .models import Maraude, Rencontre
|
from .models import Maraude, Rencontre
|
||||||
from .notes import Observation, Signalement
|
from .notes import Observation, Signalement
|
||||||
@@ -24,15 +24,9 @@ class RencontreForm(forms.ModelForm):
|
|||||||
fields = ['lieu', 'heure_debut', 'duree']
|
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,
|
ObservationInlineFormSet = inlineformset_factory( Rencontre, Observation,
|
||||||
form=NoteForm,
|
form=SimpleNoteForm,
|
||||||
extra = 1,
|
extra = 1,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -44,7 +38,7 @@ RencontreInlineFormSet = inlineformset_factory(
|
|||||||
|
|
||||||
ObservationInlineFormSetNoExtra = inlineformset_factory(
|
ObservationInlineFormSetNoExtra = inlineformset_factory(
|
||||||
Rencontre, Observation,
|
Rencontre, Observation,
|
||||||
form = NoteForm,
|
form = SimpleNoteForm,
|
||||||
extra = 0
|
extra = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from django import forms
|
|||||||
from django.forms import inlineformset_factory, modelformset_factory, modelform_factory
|
from django.forms import inlineformset_factory, modelformset_factory, modelform_factory
|
||||||
from django.forms.extras import widgets
|
from django.forms.extras import widgets
|
||||||
from django_select2.forms import Select2Widget
|
from django_select2.forms import Select2Widget
|
||||||
from .forms import ( RencontreForm, RencontreInlineFormSet, SignalementForm,
|
from .forms import ( RencontreForm, RencontreInlineFormSet,
|
||||||
ObservationInlineFormSet, ObservationInlineFormSetNoExtra,
|
ObservationInlineFormSet, ObservationInlineFormSetNoExtra,
|
||||||
MaraudeAutoDateForm, MonthSelectForm, )
|
MaraudeAutoDateForm, MonthSelectForm, )
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,87 @@
|
|||||||
from .models import Note
|
from .models import Note
|
||||||
|
from utilisateurs.models import Professionnel
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django_select2.forms import Select2Widget
|
from django_select2.forms import Select2Widget
|
||||||
from django.forms import Textarea
|
from django.forms import Textarea
|
||||||
|
|
||||||
class NoteForm(forms.ModelForm):
|
|
||||||
|
|
||||||
|
|
||||||
|
class NoteForm(forms.ModelForm):
|
||||||
|
""" Generic Note form """
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Note
|
model = Note
|
||||||
fields = ['sujet', 'text']
|
fields = ['sujet', 'text', 'created_by', 'created_date', 'created_time']
|
||||||
widgets = {
|
widgets = {
|
||||||
'sujet': Select2Widget(),
|
'sujet': Select2Widget(),
|
||||||
'text': Textarea(attrs={'rows':4}),
|
'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:
|
Usefull with children of 'Note' that defines all 'note_*'
|
||||||
model = 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']
|
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)
|
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):
|
def save(self, commit=True):
|
||||||
instance = super().save(commit=False)
|
instance = super().save(commit=False)
|
||||||
instance.created_by = None #TODO: Get user with needed Class
|
instance.created_by = self.author
|
||||||
if commit:
|
if commit:
|
||||||
instance.save()
|
instance.save()
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
class NoteAutoDateForm(UserNoteForm):
|
class UserAutoDateNoteForm(UserNoteForm):
|
||||||
|
""" Form that automatically sets 'date' and 'time' to save time """
|
||||||
|
|
||||||
class Meta(UserNoteForm.Meta):
|
class Meta(UserNoteForm.Meta):
|
||||||
model = Note
|
fields = ['sujet', 'text']
|
||||||
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)
|
|
||||||
|
|
||||||
def save(self, commit=True):
|
def save(self, commit=True):
|
||||||
instance = super().save(commit=False)
|
instance = super().save(commit=False)
|
||||||
instance.sujet = self.sujet
|
|
||||||
instance.created_date = timezone.now().date()
|
instance.created_date = timezone.now().date()
|
||||||
instance.created_time = timezone.now().time()
|
instance.created_time = timezone.now().time()
|
||||||
if commit:
|
if commit:
|
||||||
instance.save()
|
instance.save()
|
||||||
return instance
|
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
|
form_class = AutoNoteForm
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.form_class = NoteAutoDateForm
|
|
||||||
|
|
||||||
|
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):
|
def dispatch(self, request, **kwargs):
|
||||||
self.form = self.get_form(request, **kwargs)
|
self.form = self.get_form(request)
|
||||||
return super().dispatch(request, **kwargs)
|
return super().dispatch(request, **kwargs)
|
||||||
|
|
||||||
def post(self, request, **kwargs):
|
def post(self, request, **kwargs):
|
||||||
print('post:', self.form)
|
|
||||||
if self.form.is_valid():
|
if self.form.is_valid():
|
||||||
self.form.save()
|
self.form.save()
|
||||||
|
return redirect(self.get_success_url())
|
||||||
return self.get(request, **kwargs)
|
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):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
context['note_form'] = self.form
|
context['note_form'] = self.form
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from django.shortcuts import render
|
from django.shortcuts import render, reverse
|
||||||
|
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
from website import decorators as website
|
from website import decorators as website
|
||||||
@@ -25,10 +25,10 @@ class IndexView(generic.TemplateView):
|
|||||||
template_name = "suivi/index.html"
|
template_name = "suivi/index.html"
|
||||||
|
|
||||||
|
|
||||||
from notes.mixins import NoteFormMixin
|
from notes.mixins import SujetNoteFormMixin
|
||||||
|
|
||||||
@webpage
|
@webpage
|
||||||
class SuiviSujetView(NoteFormMixin, generic.DetailView):
|
class SuiviSujetView(SujetNoteFormMixin, generic.DetailView):
|
||||||
class PageInfo:
|
class PageInfo:
|
||||||
title = "Sujet - {{sujet}}"
|
title = "Sujet - {{sujet}}"
|
||||||
header = "{{sujet}}"
|
header = "{{sujet}}"
|
||||||
@@ -39,7 +39,9 @@ class SuiviSujetView(NoteFormMixin, generic.DetailView):
|
|||||||
context_object_name = "sujet"
|
context_object_name = "sujet"
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*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):
|
def get_context_data(self, *args, **kwargs):
|
||||||
context = super().get_context_data(*args, **kwargs)
|
context = super().get_context_data(*args, **kwargs)
|
||||||
context['notes'] = self.object.notes.by_date(reverse=True)
|
context['notes'] = self.object.notes.by_date(reverse=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user