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.forms import inlineformset_factory
from notes.forms import SimpleNoteForm
from notes.forms import *
# Models
from .models import Maraude, Rencontre
from .notes import Observation, Signalement
from .models import *
from .notes import *
class MaraudeAutoDateForm(forms.ModelForm):

View File

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

View File

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

View File

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

View File

@@ -3,30 +3,28 @@ from django.shortcuts import redirect
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
# has SingleObjectMixin set with Sujet model ??
kwargs = self.get_form_kwargs()
return self.form_class(
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):
if self.form.is_valid():
self.form.save()
return redirect(self.get_success_url())
return self.get(request, **kwargs)
form = self.get_form()
if form.is_valid():
form.save()
return self.form_valid(form)
return self.form_invalid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['note_form'] = self.form
context['note_form'] = self.get_form()
return context

View File

@@ -23,7 +23,7 @@ class Note(models.Model):
related_name="notes",
on_delete=models.CASCADE
)
text = models.TextField()
text = models.TextField("Texte")
created_by = models.ForeignKey(
'utilisateurs.Professionnel',
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.views import generic
from website import decorators as website
from sujets.models import Sujet
from .forms import *
from notes.mixins import NoteFormMixin
from notes.forms import AutoNoteForm
# Create your views here.
from website import decorators as website
webpage = website.webpage(
ajax=False,
permissions=['sujets.view_sujets'],
@@ -16,23 +16,37 @@ webpage = website.webpage(
@webpage
class IndexView(generic.TemplateView):
class IndexView(NoteFormMixin, generic.TemplateView):
class PageInfo:
title = "Suivi des bénéficiaires"
header = "Suivi"
header_small = "Tableau de bord"
#TemplateView
#NoteFormMixin
form_class = AppelForm
success_url = "/suivi/"
#FormView
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
class SuiviSujetView(SujetNoteFormMixin, generic.DetailView):
class SuiviSujetView(NoteFormMixin, generic.DetailView):
class PageInfo:
title = "Sujet - {{sujet}}"
header = "{{sujet}}"
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
model = Sujet
template_name = "suivi/details.html"
@@ -40,8 +54,6 @@ class SuiviSujetView(SujetNoteFormMixin, generic.DetailView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
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)

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 %}