add note form to maraudes dashboard, minor cleanups

This commit is contained in:
artus
2018-10-15 20:45:56 +02:00
parent 456cdf3704
commit 3f153408e0
11 changed files with 55 additions and 37 deletions

View File

@@ -1,9 +1,8 @@
from django.contrib import admin from django.contrib import admin
from .models import * from .models import Lieu, Rencontre, Maraude, Planning
from .notes import Observation from .notes import Observation
# Basic registration # Basic registration
admin.site.register(Lieu) admin.site.register(Lieu)

View File

@@ -1,11 +1,12 @@
import calendar
from django import forms from django import forms
from django.utils.translation import gettext from django.utils.translation import gettext
from django.utils import timezone from django.utils import timezone
from django_select2.forms import Select2Widget from django_select2.forms import Select2Widget
from notes.forms import UserNoteForm, SimpleNoteForm from notes.forms import UserNoteForm, SimpleNoteForm
from notes.models import Sujet, GENRE_CHOICES from notes.models import Note, Sujet, GENRE_CHOICES
from .models import * from .models import Maraude, Rencontre
from .notes import * from .notes import Observation, Appel, Signalement
MONTHS = [ MONTHS = [
@@ -69,6 +70,12 @@ class MonthSelectForm(forms.Form):
self.fields['year'].initial = year self.fields['year'].initial = year
class NoteForm(UserNoteForm):
class Meta(UserNoteForm.Meta):
model = Note
fields = ['sujet', 'text']
class AppelForm(UserNoteForm): class AppelForm(UserNoteForm):
class Meta(UserNoteForm.Meta): class Meta(UserNoteForm.Meta):
model = Appel model = Appel

View File

@@ -128,9 +128,6 @@ class Maraude(models.Model):
class Meta: class Meta:
verbose_name = "Maraude" verbose_name = "Maraude"
ordering = ['date'] ordering = ['date']
permissions = (
('view_maraudes', "Accès à l'application 'maraudes'"),
)
def __str__(self): def __str__(self):
return '%(dayname)s %(day)i %(month)s' % { return '%(dayname)s %(day)i %(month)s' % {
@@ -141,9 +138,7 @@ class Maraude(models.Model):
def est_terminee(self): def est_terminee(self):
""" Indique si la maraude est considérée comme terminée """ """ Indique si la maraude est considérée comme terminée """
if self.heure_fin is not None: return self.heure_fin is not None
return True
return False
est_terminee.admin_order_field = 'date' est_terminee.admin_order_field = 'date'
est_terminee.boolean = True est_terminee.boolean = True
est_terminee.short_description = 'Terminée ?' est_terminee.short_description = 'Terminée ?'

View File

@@ -1,16 +1,15 @@
from django.db import models from django.db import models
from notes.models import Note from notes.models import Note
# Extends 'notes' module # Extends 'notes' module
class Observation(Note): class Observation(Note):
""" Note dans le cadre d'une rencontre """ """ Note dans le cadre d'une rencontre """
rencontre = models.ForeignKey('maraudes.Rencontre', rencontre = models.ForeignKey(
models.CASCADE, 'maraudes.Rencontre',
related_name="observations") models.CASCADE,
related_name="observations")
# Note attributes proxies # Note attributes proxies
def note_author(self): return self.rencontre.maraude.referent def note_author(self): return self.rencontre.maraude.referent
@@ -21,7 +20,7 @@ class Observation(Note):
def note_labels(self): return [self.rencontre.lieu, self.rencontre.heure_debut] def note_labels(self): return [self.rencontre.lieu, self.rencontre.heure_debut]
def note_bg_colors(self): return "info", "info" def note_bg_colors(self): return "info", "dark"
class Appel(Note): class Appel(Note):
@@ -37,7 +36,9 @@ class Appel(Note):
class Signalement(Note): class Signalement(Note):
source = models.ForeignKey("utilisateurs.Organisme", on_delete=models.CASCADE) source = models.ForeignKey(
"utilisateurs.Organisme",
on_delete=models.CASCADE)
def note_labels(self): def note_labels(self):
return [self.source, self.created_by] return [self.source, self.created_by]

View File

@@ -93,7 +93,9 @@
</ul> </ul>
</div> </div>
<div class="card-body tab-content"> <div class="card-body tab-content">
<div class="tab-pane fade" id="noteNote"><div class="card card-body">Note</div></div> <div class="tab-pane fade" id="noteNote" role="tabpanel">
{% include "notes/form_note_inner.html" with form=note_form %}
</div>
<div class="tab-pane fade show active" id="noteAppel" role="tabpanel"> <div class="tab-pane fade show active" id="noteAppel" role="tabpanel">
{% include "notes/form_appel_inner.html" with form=appel_form %} {% include "notes/form_appel_inner.html" with form=appel_form %}
</div> </div>

View File

@@ -1,16 +1,16 @@
# Maraudes URLconf # Maraudes URLconf
from django.conf.urls import url from django.urls import path
from . import views from . import views
app_name = "maraudes" app_name = "maraudes"
urlpatterns = [ urlpatterns = [
url(r'^$', views.IndexView.as_view(), name="index"), path('', views.IndexView.as_view(), name="index"),
url(r'^compte-rendu$', views.redirect_to_current_compterendu, name="cr-link"), path('compte-rendu', views.redirect_to_current_compterendu, name="cr-link"),
url(r'^planning/$', views.PlanningView.as_view(), name="planning"), path('planning/', views.PlanningView.as_view(), name="planning"),
url(r'^lieu/create/$', views.LieuCreateView.as_view(), name="lieu-create"), path('lieu/create/', views.LieuCreateView.as_view(), name="lieu-create"),
url(r'^(?P<pk>[0-9]+)/create/$', views.CompteRenduCreateView.as_view(), name="create"), path('<int:pk>/create/', views.CompteRenduCreateView.as_view(), name="create"),
url(r'^(?P<pk>[0-9]+)/finalize/$', views.FinalizeView.as_view(), name="finalize"), path('<int:pk>/finalize/', views.FinalizeView.as_view(), name="finalize"),
] ]

View File

@@ -17,7 +17,7 @@ from .notes import Signalement
from .forms import (RencontreForm, from .forms import (RencontreForm,
ObservationInlineFormSet, ObservationInlineFormSet,
MaraudeHiddenDateForm, MonthSelectForm, MaraudeHiddenDateForm, MonthSelectForm,
AppelForm, SignalementForm, NoteForm, AppelForm, SignalementForm,
SendMailForm) SendMailForm)
from notes.mixins import NoteFormMixin from notes.mixins import NoteFormMixin
@@ -64,6 +64,7 @@ class IndexView(NoteFormMixin, MaraudeurMixin, generic.TemplateView):
# NoteFormMixin # NoteFormMixin
forms = { forms = {
'note': NoteForm,
'appel': AppelForm, 'appel': AppelForm,
'signalement': SignalementForm, 'signalement': SignalementForm,
} }

View File

@@ -6,7 +6,10 @@
{% bootstrap_field form.created_time size=sz form_group_class=grp_cls layout=layout %} {% bootstrap_field form.created_time size=sz form_group_class=grp_cls layout=layout %}
{% endwith %} {% endwith %}
</div> </div>
{% bootstrap_field form.entrant size=sz%} <div class="custom-control custom-checkbox">
<input type="checkbox" name="entrant" class="custom-control-input" id="id_entrant">
<label class="custom-control-label" for="id_entrant">Appel entrant ?</label>
</div>
<hr /> <hr />
{% bootstrap_field form.sujet show_label=False %} {% bootstrap_field form.sujet show_label=False %}
{% bootstrap_field form.text show_label=False %} {% bootstrap_field form.text show_label=False %}

View File

@@ -0,0 +1,10 @@
{% load bootstrap4 %}
<form action="" method="POST">{% csrf_token %}
{% bootstrap_field form.sujet show_label=False %}
{% bootstrap_field form.text show_label=False %}
<div class="ml-auto">
{% bootstrap_button "Ajouter la note" button_type="submit" button_class="btn-primary btn-sm btn-block" %}
</div>
</form>
{{ form.media.js }}{{ form.media.css }}

View File

@@ -1,8 +1,8 @@
from django.conf.urls import url, include from django.urls import path, include
from django.contrib import admin from django.contrib import admin
from website import urls as website_urls from website import urls as website_urls
urlpatterns = [ urlpatterns = [
url(r'^admin/', admin.site.urls), path('admin/', admin.site.urls),
url(r'^', include(website_urls)), path('', include(website_urls)),
] ]

View File

@@ -15,7 +15,8 @@ else:
try: try:
assert(isinstance(settings.MARAUDEURS.get('organisme'), dict)) assert(isinstance(settings.MARAUDEURS.get('organisme'), dict))
except: except:
raise ImproperlyConfigured("'organisme' key of MARAUDEURS settings is not a dict !") raise ImproperlyConfigured(
"'organisme' key of MARAUDEURS settings is not a dict !")
def get_email_suffix(organisme): def get_email_suffix(organisme):
@@ -25,7 +26,6 @@ def get_email_suffix(organisme):
return organisme.email.split("@")[1] return organisme.email.split("@")[1]
class Organisme(models.Model): class Organisme(models.Model):
""" Organisme : Association, Entreprise, Service public, ...""" """ Organisme : Association, Entreprise, Service public, ..."""
@@ -43,10 +43,10 @@ class Organisme(models.Model):
class Professionnel(User): class Professionnel(User):
""" Professionnel d'un organisme """ """ Professionnel d'un organisme """
organisme = models.ForeignKey(Organisme, organisme = models.ForeignKey(
models.CASCADE, Organisme,
related_name="professionnels", on_delete=models.CASCADE,
) related_name="professionnels")
def make_username(self): def make_username(self):
""" Build the username for this Professionel instance. Must be overriden.""" """ Build the username for this Professionel instance. Must be overriden."""