improved NoteFormMixin, added Appel model and form in 'suivi'
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
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.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
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