add note form to maraudes dashboard, minor cleanups
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ?'
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
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',
|
||||
models.CASCADE,
|
||||
related_name="observations")
|
||||
rencontre = models.ForeignKey(
|
||||
'maraudes.Rencontre',
|
||||
models.CASCADE,
|
||||
related_name="observations")
|
||||
|
||||
# Note attributes proxies
|
||||
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_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]
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"),
|
||||
]
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
10
notes/templates/notes/form_note_inner.html
Normal file
10
notes/templates/notes/form_note_inner.html
Normal 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 }}
|
||||
|
||||
6
urls.py
6
urls.py
@@ -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)),
|
||||
]
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user