added SignalementForm, updated NoteFormMixin, various fixes
This commit is contained in:
@@ -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']
|
||||
|
||||
@@ -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()
|
||||
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
|
||||
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">Enregistrer un appel</h4>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
|
||||
@@ -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>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{% url 'sujets:liste' %}">{% bootstrap_icon "list" %} Liste complète</a></li>
|
||||
<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-header">Administration</li>
|
||||
<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: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>
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 """
|
||||
|
||||
Reference in New Issue
Block a user