diff --git a/maraudes/notes.py b/maraudes/notes.py index 9da364f..573d3ce 100644 --- a/maraudes/notes.py +++ b/maraudes/notes.py @@ -20,15 +20,19 @@ class Observation(Note): def __str__(self): return "%s" % self.sujet - def get_date(self): + def note_date(self): """ Enforce value of created_date """ return self.rencontre.date - def get_labels(self): + def note_time(self): + """ Enforce value of created_time """ + return self.rencontre.heure_debut + + def note_labels(self): return [self.rencontre.lieu, self.rencontre.heure_debut] - def get_bg_colors(self): - return ("success", "info") + def note_bg_colors(self): + return ("info", "info") diff --git a/maraudes/templates/compte_rendu/compterendu.html b/maraudes/templates/compte_rendu/compterendu.html index 69638e0..0ab9b5f 100644 --- a/maraudes/templates/compte_rendu/compterendu.html +++ b/maraudes/templates/compte_rendu/compterendu.html @@ -1,29 +1,16 @@ +{% load notes %}
-

Compte-Rendu

-
-
-

Maraudeurs: {{ maraude.binome.first_name }}, {{ maraude.referent.first_name }}

- {% if maraude.est_terminee %}

Terminée à {{ maraude.heure_fin}}

-

{{maraude.rencontre_count}} rencontres

- {% else %} - - {% endif %} +
+

{{ maraude.binome }} & {{ maraude.referent }} + Rencontres : {{ maraude.rencontre_count}}

-{% for rencontre, observations in maraude %} - - - - - - {% for observation in observations %} - - + {% for note in notes %} + {% inline_table note header="sujet" %} {% endfor %} -{% endfor %} -
{{ rencontre.lieu }}{{ rencontre.heure_debut }}Durée: {{ rencontre.duree }}min
{{ observation.sujet }} {{ observation.note }}
- {% if user.is_superuser and maraude.est_terminee %} diff --git a/maraudes/templates/compte_rendu/compterendu_update.html b/maraudes/templates/compte_rendu/compterendu_update.html index 74bc6b6..0d3f6e9 100644 --- a/maraudes/templates/compte_rendu/compterendu_update.html +++ b/maraudes/templates/compte_rendu/compterendu_update.html @@ -1,20 +1,23 @@ - {% load bootstrap3 %}
- {% csrf_token %} - {{ base_formset.management_form }} +{% csrf_token %} +{{ base_formset.management_form }} +
+
+ + {% bootstrap_button "Enregistrer et quitter" button_type="submit" button_class="btn-primary btn-sm" icon="ok-circle" %} +
+
{% for form, inline_formset in forms %}
-
- {% bootstrap_field form.DELETE field_class="col-md-1"%} - - {% bootstrap_button "Enregistrer et quitter" button_type="submit" button_class="btn-primary btn-sm" icon="ok-circle" %} -
{% include "compte_rendu/compterendu_form.html" %}
+
{% endfor %} diff --git a/maraudes/templates/maraudes/details.html b/maraudes/templates/maraudes/details.html index 77b0a94..1c38e6b 100644 --- a/maraudes/templates/maraudes/details.html +++ b/maraudes/templates/maraudes/details.html @@ -1,6 +1,9 @@ +
{% if maraude.est_terminee %} {% include "compte_rendu/compterendu.html" with maraude=compte_rendu %} {% else %} {% if user.is_superuser %}Écrire le compte-rendu {% else %}

Le compte-rendu n'a pas encore été écrit

{% endif %} {% endif %} +
+{% include 'maraudes/panel_dernieres_maraudes.html' %} diff --git a/maraudes/templates/maraudes/index.html b/maraudes/templates/maraudes/index.html index e0e6a9f..12a1407 100644 --- a/maraudes/templates/maraudes/index.html +++ b/maraudes/templates/maraudes/index.html @@ -15,21 +15,7 @@
- {% if dernieres_maraudes %}
-
-
-

Dernières maraudes - Aller à la liste

-
-
- {% for maraude in dernieres_maraudes %} - - {{ maraude }} {{maraude.binome}} & {{maraude.referent}} - - {% endfor %} -
-
-
{% endif %} +{% include 'maraudes/panel_dernieres_maraudes.html' %} {% if user.is_superuser %}
diff --git a/maraudes/templates/maraudes/panel_dernieres_maraudes.html b/maraudes/templates/maraudes/panel_dernieres_maraudes.html new file mode 100644 index 0000000..fa62a11 --- /dev/null +++ b/maraudes/templates/maraudes/panel_dernieres_maraudes.html @@ -0,0 +1,16 @@ +{% if dernieres_maraudes %} +
+
+
+

Dernières maraudes + Aller à la liste

+
+
+ {% for maraude in dernieres_maraudes %} + + {{ maraude }} {{maraude.binome}} & {{maraude.referent}} + + {% endfor %} +
+
+
{% endif %} diff --git a/maraudes/views.py b/maraudes/views.py index e13a2f1..44442e7 100644 --- a/maraudes/views.py +++ b/maraudes/views.py @@ -12,6 +12,7 @@ from .models import ( Maraude, Maraudeur, Rencontre, Lieu, Planning, ) from .compte_rendu import CompteRendu +from notes.models import Note # Forms from django import forms from django.forms import inlineformset_factory, modelformset_factory, modelform_factory @@ -29,11 +30,7 @@ class MaraudesView(views.WebsiteProtectedMixin): permissions = ['maraudes.view_maraudes'] -class IndexView(MaraudesView, generic.TemplateView): - header = "La Maraude" - header_small = "Tableau de bord" - - template_name = "maraudes/index.html" +class DerniereMaraudeMixin(object): count = 5 @cached_property def dernieres_maraudes(self): @@ -49,9 +46,16 @@ class IndexView(MaraudesView, generic.TemplateView): context['dernieres_maraudes'] = self.dernieres_maraudes return context +class IndexView(MaraudesView, DerniereMaraudeMixin, generic.TemplateView): + header = "La Maraude" + header_small = "Tableau de bord" + + template_name = "maraudes/index.html" + + ## MARAUDES -class MaraudeDetailsView(MaraudesView, generic.DetailView): +class MaraudeDetailsView(MaraudesView, DerniereMaraudeMixin, generic.DetailView): model = Maraude context_object_name = "maraude" template_name = "maraudes/details.html" @@ -62,6 +66,11 @@ class MaraudeDetailsView(MaraudesView, generic.DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + context['notes'] = Note.objects.get_queryset().filter( + created_date=self.object.date + ).order_by( + 'created_time' + ) context['compte_rendu'] = CompteRendu.objects.get(pk=self.object.pk) return context diff --git a/notes/managers.py b/notes/managers.py new file mode 100644 index 0000000..88c1c24 --- /dev/null +++ b/notes/managers.py @@ -0,0 +1,9 @@ +from django.db.models import Manager + +class NoteManager(Manager): + + def by_date(self): + return self.get_queryset().order_by('created_date') + + def by_time(self): + return self.get_queryset().order_by('created_time') diff --git a/notes/models.py b/notes/models.py index 45af202..1bfc61c 100644 --- a/notes/models.py +++ b/notes/models.py @@ -1,6 +1,8 @@ from django.db import models from django.utils.html import format_html +from . import managers + class Note(models.Model): """ Note relative à un sujet. @@ -13,6 +15,8 @@ class Note(models.Model): """ + objects = managers.NoteManager() + sujet = models.ForeignKey( 'sujets.Sujet', related_name="notes", @@ -25,11 +29,12 @@ class Note(models.Model): null=True ) created_date = models.DateField('Crée le', blank=True, null=True) - + created_time = models.TimeField('Heure', blank=True, null=True) def save(self, *args, **kwargs): - if not self.created_date: # Retrieve from child class instance - self.created_date = self.cast().get_date() + child_instance = self.cast() + self.created_date = child_instance.note_date() + self.created_time = child_instance.note_time() return super().save(*args, **kwargs) def _get_child_class_and_instance(self): @@ -68,7 +73,7 @@ class Note(models.Model): setattr(self, private_name, # Call *child instance* method - getattr(self.cast(), 'get_%s' % name)() + getattr(self.cast(), 'note_%s' % name)() ) return getattr(self, private_name) return getter diff --git a/notes/templates/notes/table_inline.html b/notes/templates/notes/table_inline.html index 7520bc9..87790c8 100644 --- a/notes/templates/notes/table_inline.html +++ b/notes/templates/notes/table_inline.html @@ -3,7 +3,7 @@ {{header}} {{small}} {% for label in labels %} - {{label}} + {{label}} {% endfor %} diff --git a/notes/templatetags/notes.py b/notes/templatetags/notes.py index a6a48e9..eb63476 100644 --- a/notes/templatetags/notes.py +++ b/notes/templatetags/notes.py @@ -5,10 +5,21 @@ from django import template register = template.Library() @register.inclusion_tag("notes/table_inline.html") -def inline_table(note): +def inline_table(note, header=None): bg_color, bg_label_color = note.bg_colors + + if not header: + header = "date" + if not header in ['sujet', 'date']: + raise ValueError('header must be "sujet" or "date"') + + if header == "date": + header_field = "created_date" + elif header == "sujet": + header_field = "sujet" + return { - 'header': note.created_date, + 'header': getattr(note, header_field), 'small': note.child_class.__qualname__, 'bg_color': bg_color or "default", 'bg_label_color': bg_label_color or "info", diff --git a/suivi/templates/suivi/sujet_suivi.html b/suivi/templates/suivi/sujet_suivi.html index e0bb206..c70a2dc 100644 --- a/suivi/templates/suivi/sujet_suivi.html +++ b/suivi/templates/suivi/sujet_suivi.html @@ -1,8 +1,13 @@ {% load notes %}
+
+

Notes + Total : {{ notes.count }}

+
{% for note in notes %} {% inline_table note %} {% endfor %}
+