improved NoteFormMixin, added Appel model and form in 'suivi'
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
13
suivi/notes.py
Normal 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")
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<div class="col-md-6 col-md-offset-6">
|
||||||
|
{% include "suivi/appel_form.html" %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
8
sujets/forms.py
Normal 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']
|
||||||
6
sujets/templates/sujets/menu_sujet.html
Normal file
6
sujets/templates/sujets/menu_sujet.html
Normal 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 %}
|
||||||
Reference in New Issue
Block a user