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 .models import *
from .models import Lieu, Rencontre, Maraude, Planning
from .notes import Observation
# Basic registration
admin.site.register(Lieu)

View File

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

View File

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

View File

@@ -1,14 +1,13 @@
from django.db import models
from notes.models import Note
# Extends 'notes' module
class Observation(Note):
""" Note dans le cadre d'une rencontre """
rencontre = models.ForeignKey('maraudes.Rencontre',
rencontre = models.ForeignKey(
'maraudes.Rencontre',
models.CASCADE,
related_name="observations")
@@ -21,7 +20,7 @@ class Observation(Note):
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):
@@ -37,7 +36,9 @@ class Appel(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):
return [self.source, self.created_by]

View File

@@ -93,7 +93,9 @@
</ul>
</div>
<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">
{% include "notes/form_appel_inner.html" with form=appel_form %}
</div>

View File

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

View File

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

View File

@@ -6,7 +6,10 @@
{% bootstrap_field form.created_time size=sz form_group_class=grp_cls layout=layout %}
{% endwith %}
</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 />
{% bootstrap_field form.sujet 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 website import urls as website_urls
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include(website_urls)),
path('admin/', admin.site.urls),
path('', include(website_urls)),
]

View File

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