added SignalementForm, updated NoteFormMixin, various fixes

This commit is contained in:
Arthur Gerbaud
2016-08-24 18:17:59 +02:00
parent 6e9a76696e
commit 746c21e52b
13 changed files with 100 additions and 38 deletions

View File

@@ -2,7 +2,6 @@ from .models import Note
from utilisateurs.models import Professionnel from utilisateurs.models import Professionnel
from django import forms from django import forms
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
@@ -33,7 +32,8 @@ class SimpleNoteForm(forms.ModelForm):
class UserNoteForm(NoteForm): class UserNoteForm(NoteForm):
""" Form that sets 'created_by' with current user id. """ Form that sets 'created_by' with current user id.
This requires 'request' object at initialization
It requires 'request' object at initialization
""" """
class Meta(NoteForm.Meta): class Meta(NoteForm.Meta):
fields = ['sujet', 'text', 'created_date', 'created_time'] fields = ['sujet', 'text', 'created_date', 'created_time']

View File

@@ -1,5 +1,4 @@
from django.views.generic.edit import FormMixin, ProcessFormView from django.views.generic.edit import FormMixin
from django.shortcuts import redirect
from .forms import * from .forms import *
@@ -7,24 +6,37 @@ class NoteFormMixin(FormMixin):
form_class = None form_class = None
def get_form(self): forms = None
def get_form(self, prefix, form_class=None):
# 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() kwargs = self.get_form_kwargs()
return self.form_class( kwargs['prefix'] = prefix
if not form_class:
form_class = self.forms[prefix]
try:
form = form_class(
**kwargs
)
except TypeError: #Forms that requires request
form = form_class(
self.request, self.request,
**kwargs **kwargs
) )
return form
def post(self, request, **kwargs): def post(self, request, **kwargs):
form = self.get_form() for prefix in self.forms.keys():
form = self.get_form(prefix)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return self.form_valid(form) return self.form_valid(form)
return self.form_invalid(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(FormMixin, self).get_context_data(**kwargs)
context['note_form'] = self.get_form() for prefix in self.forms.keys():
context['%s_form' % prefix] = self.get_form(prefix)
return context return context

View File

@@ -49,11 +49,11 @@ class Note(models.Model):
def note_date(self): def note_date(self):
""" Default 'created_date' value. Child may override this method. """ """ Default 'created_date' value. Child may override this method. """
return timezone.now().date() return timezone.localtime(timezone.now()).date()
def note_time(self): def note_time(self):
""" Default 'created_time' value. Child may override this method. """ """ Default 'created_time' value. Child may override this method. """
return timezone.now().time() return timezone.localtime(timezone.now()).time()
def note_bg_colors(self): def note_bg_colors(self):
""" Returns (header background color, labels color). """ Returns (header background color, labels color).

View File

@@ -1,10 +1,40 @@
from .notes import * from .notes import *
from notes.forms import * from notes.forms import *
from sujets.models import Sujet, GENRE_CHOICES
from django.utils import timezone from django import forms
class AppelForm(UserNoteForm): class AppelForm(UserNoteForm):
class Meta(UserNoteForm.Meta): class Meta(UserNoteForm.Meta):
model = Appel model = Appel
fields = ['sujet', 'text', 'entrant', 'created_date', 'created_time'] fields = ['sujet', 'text', 'entrant', 'created_date', 'created_time']
class SignalementForm(UserNoteForm):
nom = forms.CharField(64, required=False)
prenom = forms.CharField(64, required=False)
age = forms.IntegerField(required=False)
genre = forms.ChoiceField(choices=GENRE_CHOICES)
class Meta(UserNoteForm.Meta):
model = Signalement
fields = ['text', 'source', 'created_date', 'created_time']
def clean(self):
super().clean()
if not self.cleaned_data['nom'] and not self.cleaned_data['prenom']:
self.add_error('nom', '')
self.add_error('prenom', '')
raise forms.ValidationError("Entrez au moins un nom ou prénom")
def save(self, commit=True):
sujet = Sujet.objects.create(
nom=self.cleaned_data['nom'],
prenom=self.cleaned_data['prenom'],
genre=self.cleaned_data['genre'],
age=self.cleaned_data['age']
)
instance = super().save(commit=False)
instance.sujet = sujet
if commit:
instance.save()
return instance

View File

@@ -11,10 +11,10 @@ class Appel(Note):
class Signalement(Note): class Signalement(Note):
source = models.CharField('Source', max_length=128) source = models.ForeignKey("utilisateurs.Organisme")
def note_labels(self): return [self.source] def note_labels(self): return [self.source, self.created_by]
def note_bg_colors(self): return ('warning', 'alert') def note_bg_colors(self): return ('warning', 'info')

View File

@@ -1,4 +1,3 @@
<div class="panel panel-primary"> <div class="panel panel-primary">
<div class="panel-heading"> <div class="panel-heading">
<h4 class="panel-title">Enregistrer un appel</h4> <h4 class="panel-title">Enregistrer un appel</h4>

View File

@@ -1,4 +1,5 @@
{% load bootstrap3 %} {% load bootstrap3 %}
{{ form.media.js }}{{ form.media.css }}
<form action="" method="POST">{% csrf_token %} <form action="" method="POST">{% csrf_token %}
{% with "inline" as layout %} {% with "inline" as layout %}
<div class="form-group form-{{layout}} well col-md-10 col-md-offset-2"> <div class="form-group form-{{layout}} well col-md-10 col-md-offset-2">

View File

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

View File

@@ -1,9 +1,14 @@
{% load bootstrap3 %} {% load bootstrap3 %}
<li class="dropdown app-menu"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Sujets<b class="caret"></b></a> <li class="app-menu">
<a href="{% url 'sujets:liste' %}">Liste des sujets
<span class="pull-right">{% bootstrap_icon "list" %}</span></a>
</li>
{% if user.is_superuser %}{% load bootstrap3 %}
<li class="dropdown app-menu">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
Administration <b class="caret"></b>
</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="{% url 'sujets:liste' %}">{% bootstrap_icon "list" %} Liste complète</a></li>
{% if user.is_superuser %}{% load bootstrap3 %}
<li class="dropdown-header">Administration</li>
<li><a href="{% url 'sujets:create' %}">{% bootstrap_icon "plus" %} Nouveau sujet</a></li> <li><a href="{% url 'sujets:create' %}">{% bootstrap_icon "plus" %} Nouveau sujet</a></li>
<li><a href="{% url 'admin:app_list' app_label='sujets' %}"> <li><a href="{% url 'admin:app_list' app_label='sujets' %}">
{% bootstrap_icon "wrench" %} Gérer les sujets</a></li> {% bootstrap_icon "wrench" %} Gérer les sujets</a></li>

View File

@@ -1,5 +1,6 @@
from django.shortcuts import render, reverse from django.shortcuts import render, reverse
from django.views import generic from django.views import generic
from django.utils import timezone
from sujets.models import Sujet from sujets.models import Sujet
from .forms import * from .forms import *
@@ -22,13 +23,16 @@ class IndexView(NoteFormMixin, generic.TemplateView):
header = "Suivi" header = "Suivi"
header_small = "Tableau de bord" header_small = "Tableau de bord"
#NoteFormMixin #NoteFormMixin
form_class = AppelForm forms = {
'appel': AppelForm,
'signalement': SignalementForm,
}
success_url = "/suivi/" success_url = "/suivi/"
#FormView #FormView
template_name = "suivi/index.html" template_name = "suivi/index.html"
def get_initial(self): def get_initial(self):
return {'created_date': timezone.now().date(), return {'created_date': timezone.localtime(timezone.now()).date(),
'created_time': timezone.now().time()} 'created_time': timezone.localtime(timezone.now()).time()}
@@ -40,7 +44,9 @@ class SuiviSujetView(NoteFormMixin, generic.DetailView):
header = "{{sujet}}" header = "{{sujet}}"
header_small = "suivi" header_small = "suivi"
#NoteFormMixin #NoteFormMixin
form_class = AutoNoteForm forms = {
'note': AutoNoteForm,
}
def get_success_url(self): def get_success_url(self):
return reverse('suivi:details', kwargs={'pk': self.get_object().pk}) return reverse('suivi:details', kwargs={'pk': self.get_object().pk})
def get_form_kwargs(self): def get_form_kwargs(self):

View File

@@ -53,6 +53,13 @@ RESSOURCES_CHOICES = (
# - Personne # - Personne
# - Sujet # - Sujet
HOMME = 'M'
FEMME = 'Mme'
GENRE_CHOICES = (
(HOMME, 'Homme'),
(FEMME, 'Femme'),
)
class Personne(models.Model): class Personne(models.Model):
""" Modèle de base d'une personne """ Modèle de base d'une personne
- genre - genre
@@ -60,12 +67,6 @@ class Personne(models.Model):
- prénom - prénom
""" """
HOMME = 'M'
FEMME = 'Mme'
GENRE_CHOICES = (
(HOMME, 'Homme'),
(FEMME, 'Femme'),
)
genre = models.CharField(max_length=3, genre = models.CharField(max_length=3,
choices=GENRE_CHOICES, choices=GENRE_CHOICES,
default=HOMME) default=HOMME)

View File

@@ -18,3 +18,7 @@ class MaraudeurAdmin(admin.ModelAdmin):
@admin.register(ReferentMaraude) @admin.register(ReferentMaraude)
class ReferentMaraudeAdmin(admin.ModelAdmin): class ReferentMaraudeAdmin(admin.ModelAdmin):
fields = ['maraudeur'] fields = ['maraudeur']
@admin.register(Organisme)
class OrganismeAdmin(admin.ModelAdmin):
pass

View File

@@ -31,6 +31,8 @@ class Organisme(models.Model):
class Meta: class Meta:
verbose_name = "Organisme" verbose_name = "Organisme"
def __str__(self):
return self.nom
class Professionnel(User): class Professionnel(User):
""" Professionnel d'un organisme """ """ Professionnel d'un organisme """