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 django import forms
from django.utils import timezone
from django_select2.forms import Select2Widget
from django.forms import Textarea
@@ -33,7 +32,8 @@ class SimpleNoteForm(forms.ModelForm):
class UserNoteForm(NoteForm):
""" 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):
fields = ['sujet', 'text', 'created_date', 'created_time']

View File

@@ -1,5 +1,4 @@
from django.views.generic.edit import FormMixin, ProcessFormView
from django.shortcuts import redirect
from django.views.generic.edit import FormMixin
from .forms import *
@@ -7,24 +6,37 @@ class NoteFormMixin(FormMixin):
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
# has SingleObjectMixin set with Sujet model ??
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,
**kwargs
)
return form
def post(self, request, **kwargs):
form = self.get_form()
if form.is_valid():
form.save()
return self.form_valid(form)
for prefix in self.forms.keys():
form = self.get_form(prefix)
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.get_form()
context = super(FormMixin, self).get_context_data(**kwargs)
for prefix in self.forms.keys():
context['%s_form' % prefix] = self.get_form(prefix)
return context

View File

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

View File

@@ -1,10 +1,40 @@
from .notes import *
from notes.forms import *
from django.utils import timezone
from sujets.models import Sujet, GENRE_CHOICES
from django import forms
class AppelForm(UserNoteForm):
class Meta(UserNoteForm.Meta):
model = Appel
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):
source = models.CharField('Source', max_length=128)
source = models.ForeignKey("utilisateurs.Organisme")
def note_labels(self): return [self.source]
def note_bg_colors(self): return ('warning', 'alert')
def note_labels(self): return [self.source, self.created_by]
def note_bg_colors(self): return ('warning', 'info')

View File

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

View File

@@ -1,4 +1,5 @@
{% load bootstrap3 %}
{{ form.media.js }}{{ form.media.css }}
<form action="" method="POST">{% csrf_token %}
{% with "inline" as layout %}
<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">
{% include "suivi/appel_form.html" %}
<div class="col-md-6">
{% 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>

View File

@@ -1,9 +1,14 @@
{% 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">
<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 'admin:app_list' app_label='sujets' %}">
{% bootstrap_icon "wrench" %} Gérer les sujets</a></li>

View File

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

View File

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

View File

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

View File

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