improved NoteFormMixin, added Appel model and form in 'suivi'

This commit is contained in:
Arthur Gerbaud
2016-08-17 17:39:24 +02:00
parent d940bc5b1c
commit 9812aa858c
11 changed files with 76 additions and 50 deletions

View File

@@ -1,9 +1,9 @@
from django import forms from django import forms
from django.forms import inlineformset_factory from django.forms import inlineformset_factory
from notes.forms import SimpleNoteForm from notes.forms import *
# Models # Models
from .models import Maraude, Rencontre from .models import *
from .notes import Observation, Signalement from .notes import *
class MaraudeAutoDateForm(forms.ModelForm): class MaraudeAutoDateForm(forms.ModelForm):

View File

@@ -10,8 +10,8 @@ class Observation(Note):
objects = managers.ObservationManager() objects = managers.ObservationManager()
rencontre = models.ForeignKey( 'maraudes.Rencontre', rencontre = models.ForeignKey( 'maraudes.Rencontre',
related_name="observations", models.CASCADE,
on_delete=models.CASCADE related_name="observations"
) )
# Note attributes proxies # Note attributes proxies
@@ -28,3 +28,6 @@ class Signalement(Note):
def note_labels(self): return [self.source] def note_labels(self): return [self.source]
def note_bg_colors(self): return ('warning', 'alert') def note_bg_colors(self): return ('warning', 'alert')

View File

@@ -56,7 +56,7 @@ class IndexView(DerniereMaraudeMixin, generic.TemplateView):
title = "Maraude - Tableau de bord" title = "Maraude - Tableau de bord"
header = "La Maraude" header = "La Maraude"
header_small = "Tableau de bord" header_small = "Tableau de bord"
# TemplateView
template_name = "maraudes/index.html" template_name = "maraudes/index.html"
def get_context_data(self, *args, **kwargs): def get_context_data(self, *args, **kwargs):

View File

@@ -39,10 +39,7 @@ class UserNoteForm(NoteForm):
fields = ['sujet', 'text', 'created_date', 'created_time'] fields = ['sujet', 'text', 'created_date', 'created_time']
def __init__(self, request, **kwargs): def __init__(self, request, **kwargs):
args = [] super().__init__(**kwargs)
if request.POST:
args += (request.POST, request.FILES)
super().__init__(*args, **kwargs)
try: try:
self.author = Professionnel.objects.get(pk=request.user.pk) self.author = Professionnel.objects.get(pk=request.user.pk)
except Professionnel.DoesNotExist: except Professionnel.DoesNotExist:
@@ -50,28 +47,15 @@ class UserNoteForm(NoteForm):
raise RuntimeError(msg) raise RuntimeError(msg)
def save(self, commit=True): def save(self, commit=True):
print('save UserNote', self)
instance = super().save(commit=False) instance = super().save(commit=False)
instance.created_by = self.author instance.created_by = self.author
if commit: if commit:
instance.save() instance.save()
return instance return instance
class UserAutoDateNoteForm(UserNoteForm): class AutoNoteForm(UserNoteForm):
""" Form that automatically sets 'date' and 'time' to save time """
class Meta(UserNoteForm.Meta): class Meta(UserNoteForm.Meta):
fields = ['sujet', 'text']
def save(self, commit=True):
instance = super().save(commit=False)
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'] fields = ['text']
def __init__(self, request, **kwargs): def __init__(self, request, **kwargs):

View File

@@ -3,30 +3,28 @@ from django.shortcuts import redirect
from .forms import * from .forms import *
class SujetNoteFormMixin(object): class NoteFormMixin(FormMixin):
form_class = AutoNoteForm form_class = None
def get_form(self, request, **kwargs): def get_form(self):
# Should add test to ensure this instance class is # Should add test to ensure this instance class is
# has SingleObjectMixin set with Sujet model ?? # has SingleObjectMixin set with Sujet model ??
kwargs = self.get_form_kwargs()
return self.form_class( return self.form_class(
self.request, self.request,
sujet=self.get_object() **kwargs
) )
def dispatch(self, request, **kwargs):
self.form = self.get_form(request)
return super().dispatch(request, **kwargs)
def post(self, request, **kwargs): def post(self, request, **kwargs):
if self.form.is_valid(): form = self.get_form()
self.form.save() if form.is_valid():
return redirect(self.get_success_url()) form.save()
return self.get(request, **kwargs) return self.form_valid(form)
return self.form_invalid(form)
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.get_form()
return context return context

View File

@@ -23,7 +23,7 @@ class Note(models.Model):
related_name="notes", related_name="notes",
on_delete=models.CASCADE on_delete=models.CASCADE
) )
text = models.TextField() text = models.TextField("Texte")
created_by = models.ForeignKey( created_by = models.ForeignKey(
'utilisateurs.Professionnel', 'utilisateurs.Professionnel',
blank=True, blank=True,

13
suivi/notes.py Normal file
View File

@@ -0,0 +1,13 @@
from django.db import models
from notes.models import Note
class Appel(Note):
entrant = models.BooleanField( "Appel entrant ?")
def save(self, **kwargs):
print('save', self)
return super().save(**kwargs)
def note_labels(self): return ["Reçu" if self.entrant else "Émis", self.created_by]
def note_bg_colors(self): return ("warning", "info")

View File

@@ -1,3 +1,5 @@
<div class="col-md-6 col-md-offset-6">
{% include "suivi/appel_form.html" %}
</div>

View File

@@ -1,12 +1,12 @@
from django.shortcuts import render, reverse from django.shortcuts import render, reverse
from django.views import generic from django.views import generic
from website import decorators as website
from sujets.models import Sujet from sujets.models import Sujet
from .forms import *
from notes.mixins import NoteFormMixin
from notes.forms import AutoNoteForm
# Create your views here. # Create your views here.
from website import decorators as website
webpage = website.webpage( webpage = website.webpage(
ajax=False, ajax=False,
permissions=['sujets.view_sujets'], permissions=['sujets.view_sujets'],
@@ -16,23 +16,37 @@ webpage = website.webpage(
@webpage @webpage
class IndexView(generic.TemplateView): class IndexView(NoteFormMixin, generic.TemplateView):
class PageInfo: class PageInfo:
title = "Suivi des bénéficiaires" title = "Suivi des bénéficiaires"
header = "Suivi" header = "Suivi"
header_small = "Tableau de bord" header_small = "Tableau de bord"
#TemplateView #NoteFormMixin
form_class = AppelForm
success_url = "/suivi/"
#FormView
template_name = "suivi/index.html" template_name = "suivi/index.html"
def get_initial(self):
return {'created_date': timezone.now().date(),
'created_time': timezone.now().time()}
from notes.mixins import SujetNoteFormMixin
@webpage @webpage
class SuiviSujetView(SujetNoteFormMixin, generic.DetailView): class SuiviSujetView(NoteFormMixin, generic.DetailView):
class PageInfo: class PageInfo:
title = "Sujet - {{sujet}}" title = "Sujet - {{sujet}}"
header = "{{sujet}}" header = "{{sujet}}"
header_small = "suivi" header_small = "suivi"
#NoteFormMixin
form_class = AutoNoteForm
def get_success_url(self):
return reverse('suivi:details', kwargs={'pk': self.get_object().pk})
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['sujet'] = self.get_object()
return kwargs
#DetailView #DetailView
model = Sujet model = Sujet
template_name = "suivi/details.html" template_name = "suivi/details.html"
@@ -40,8 +54,6 @@ class SuiviSujetView(SujetNoteFormMixin, generic.DetailView):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.insert_menu("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)

8
sujets/forms.py Normal file
View File

@@ -0,0 +1,8 @@
from django.forms import ModelForm
from .models import Sujet
class SujetCreateForm(ModelForm):
class Meta:
model = Sujet
fields = ['nom', 'surnom', 'prenom', 'genre', 'premiere_rencontre']

View File

@@ -0,0 +1,6 @@
{% if user.is_superuser %}{% load bootstrap3 %}
<li class="dropdown app-menu"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Sujet<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="{% url 'admin:notes_note_changelist' %}?sujet__personne_ptr__exact={{sujet.pk}}">{% bootstrap_icon "wrench" %} Éditer les notes</a></li>
</ul>
{% endif %}