Commit 21d29a48 authored by Nicolas G.'s avatar Nicolas G.

Ajout de l'application `lieu` afin de gérer à part les lieux des

rencontres et ainsi les reprendre en cas de besoin.
parent d1a87e9a
......@@ -57,6 +57,7 @@ INSTALLED_APPS = (
# 'django.contrib.gis',
'ponctu',
'antispam',
'lieux',
'django_summernote',
)
......
......@@ -36,7 +36,7 @@ class FormEmailTextArea(forms.ModelForm):
class VilleAdmin(LeafletGeoAdmin, SummernoteModelAdmin):
fields = ('code', 'nom', 'message', 'description', 'email',
'champGeo', 'zoom',
'lieu',
('numday', 'numweek', 'debut', 'fin', 'limite'),
'autorise_inscription'
)
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.1 on 2016-10-16 09:34
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('lieux', '0001_separation_lieux_table_specifique'),
('fj', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='ville',
name='champGeo',
),
migrations.RemoveField(
model_name='ville',
name='zoom',
),
migrations.AddField(
model_name='ville',
name='lieu',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='lieux.Lieu'),
),
]
......@@ -20,8 +20,7 @@
from django.db import models
# Create your models here.
from djgeojson.fields import PointField
from lieux.models import Lieu
from django.core.exceptions import ValidationError
......@@ -60,9 +59,8 @@ class Ville(models.Model):
description = models.TextField(
verbose_name=_("Message plus court"), help_text=_("Apparaît sur le résumé."),
)
email = models.TextField(verbose_name=_("Message sur le courriel de confirmation d'inscription"),default=_("Bonjour #PRENOM #NOM.\n\nVotre inscription a bien été prise en compte (pour #NB) :\n- Ville : #VILLE\n- Date : #DATE\n- Adresse IP : #IP\n\nPour annuler votre inscription, vous pouvez cliquer sur le lien suivant : \n#URL_DEL"), help_text=_("Les mots-clés suivants peuvent être utilisés :<br>#NOM : Nom de l'inscrit<br>#PRENOM : prénom de l'inscrit<br>#ASSO : Association<br>#VILLE : nom complet de la ville<br>#DATE : date de la rencontre<br>#NB : nombre d'inscrit<br>#IP : adresse IP de l'inscrit<br>#URL_DEL : adresse de désinscription"))
champGeo = PointField(verbose_name=_("Lieu"), help_text=_("Cliquer sur le marqueur puis cliquer sur la carte pour indiquer le lieu de l'évènement."))
zoom = models.FloatField(verbose_name=_("Zoom de la carte"), null=False, default=13, validators=[MinValueValidator(0), MaxValueValidator(19)])
lieu = models.ForeignKey(Lieu, null=True)
email = models.TextField(verbose_name=_("Message sur le courriel de confirmation d'inscription"),default=_("Bonjour #PRENOM #NOM.\n\nVotre inscription a bien été prise en compte (pour #NB) :\n- Ville : #VILLE\n- Date : #DATE\n- Cette rencontre aura lieu à #LIEU\n- Adresse IP : #IP\n\nPour annuler votre inscription, vous pouvez cliquer sur le lien suivant : \n#URL_DEL"), help_text=_("Les mots-clés suivants peuvent être utilisés :<br>#NOM : Nom de l'inscrit<br>#PRENOM : prénom de l'inscrit<br>#ASSO : Association<br>#VILLE : nom complet de la ville<br>#LIEU : Nom du lieu de la rencontre<br>#DATE : date de la rencontre<br>#NB : nombre d'inscrit<br>#IP : adresse IP de l'inscrit<br>#URL_DEL : adresse de désinscription"))
numday = models.IntegerField(verbose_name=_("Jour de la semaine"),null=False, choices=JOURS)
numweek = models.IntegerField(verbose_name=_("nième semaine du mois"),null=False, validators=[pas_de_zero, pas_plus_de_cinq])
debut = models.TimeField(verbose_name=_("Heure de début"), null=True, blank=True)
......
......@@ -25,8 +25,8 @@
function map_init_basic (map, options) {
// On récupère des variables en base
var position = {{ ville|geojsonfeature:":champGeo"|safe }};
var zoom = {{ ville.zoom|floatformat:0 }};
var position = {{ ville.lieu|geojsonfeature:":champGeo"|safe }};
var zoom = {{ ville.lieu.zoom|floatformat:0 }};
// On préparer la carte avec le pointeur
var layer = L.geoJson(position);
......@@ -52,6 +52,7 @@ function map_init_basic (map, options) {
{% leaflet_map "map" callback="window.map_init_basic" %}
<div class="lieu">{{ ville.lieu.adresse|safe }}</div>
{% if ville.debut != None and ville.fin != None %}
<p class="heure">{% trans "De" %} {{ ville.debut }} {% trans "à" %} {{ ville.fin }}</p>
{% elif ville.debut != None and ville.fin == None %}
......
......@@ -135,6 +135,7 @@ def inscription(request, code):
corps = corps.replace(u"#NB",str(form.cleaned_data['nb']))
corps = corps.replace(u"#ASSO",form.cleaned_data['asso'])
corps = corps.replace(u"#VILLE",ville.nom)
corps = corps.replace(u"#LIEU",ville.lieu.nom)
corps = corps.replace(u"#DATE",humain)
corps = corps.replace(u"#IP",adresse_ip + " " + v6)
corps = corps.replace(u"#URL_DEL",'http://' + url_fj + '/del/' +unique)
......
# Copyright (C) 2016 Nicolas Grandjean <nicolas@microniko.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.contrib import admin
# Register your models here.
from leaflet.admin import LeafletGeoAdmin
from django_summernote.admin import SummernoteModelAdmin
from lieux.models import Lieu
class LieuAdmin(LeafletGeoAdmin, SummernoteModelAdmin):
save_as = True
save_on_top = True
admin.site.register(Lieu, LieuAdmin)
# -*- coding: utf-8 -*-
# Generated by Django 1.10.1 on 2016-10-16 09:34
from __future__ import unicode_literals
import django.core.validators
from django.db import migrations, models
import djgeojson.fields
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Lieu',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nom', models.CharField(max_length=30, unique=True, verbose_name='Nom')),
('adresse', models.TextField(help_text="Indiquer l'adresse du lieu.", verbose_name='Adresse')),
('champGeo', djgeojson.fields.PointField(help_text="Cliquer sur le marqueur puis cliquer sur la carte pour indiquer le lieu de l'évènement.", verbose_name='Lieu')),
('zoom', models.FloatField(default=13, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(19)], verbose_name='Zoom de la carte')),
],
options={
'verbose_name_plural': 'Lieux',
'verbose_name': 'Lieu',
},
),
]
# Copyright (C) 2016 Nicolas Grandjean <nicolas@microniko.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db import models
# Create your models here.
from djgeojson.fields import PointField
from django.utils.translation import gettext_lazy as _
from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator
class Lieu(models.Model):
""" Les lieux des évènements """
nom = models.CharField(verbose_name=_("Nom"), max_length=30, unique=True, null=False, help_text=_("Ce champ apparaît sur la page d'accueil (récapitulatif) et dans le courriel envoyé lors d'une inscription."))
adresse = models.TextField(
verbose_name=_("Adresse"), help_text=_("Indiquer les informations complètes du lieu (nom, adresse) du lieu."),
)
champGeo = PointField(verbose_name=_("Lieu"), help_text=_("Cliquer sur le marqueur puis cliquer sur la carte pour indiquer le lieu de l'évènement."))
zoom = models.FloatField(verbose_name=_("Zoom de la carte"), null=False, default=13, validators=[MinValueValidator(0), MaxValueValidator(19)])
def __str__ (self):
return self.nom
class Meta:
verbose_name="Lieu"
verbose_name_plural="Lieux"
from django.test import TestCase
# Create your tests here.
from django.shortcuts import render
# Create your views here.
......@@ -38,7 +38,7 @@ class FormEmailTextArea(forms.ModelForm):
class RencontreAdmin(LeafletGeoAdmin, SummernoteModelAdmin):
fields = ('code', 'nom', 'message', 'description', 'email',
'champGeo', 'zoom',
'lieu',
('date', 'debut', 'fin', 'limite'),
'autorise_inscription'
)
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.1 on 2016-10-16 09:34
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('lieux', '0001_separation_lieux_table_specifique'),
('ponctu', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='rencontre',
name='champGeo',
),
migrations.RemoveField(
model_name='rencontre',
name='zoom',
),
migrations.AddField(
model_name='rencontre',
name='lieu',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='lieux.Lieu'),
),
]
......@@ -19,9 +19,7 @@
from django.db import models
# Create your models here.
# Create your models here.
from djgeojson.fields import PointField
from lieux.models import Lieu
from django.core.exceptions import ValidationError
from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator
......@@ -46,9 +44,8 @@ class Rencontre(models.Model):
description = models.TextField(
verbose_name=_("Message plus court"), help_text=("Apparaît sur le résumé."),
)
email = models.TextField(verbose_name=_("Message sur le courriel de confirmation d'inscription"),default=_("Bonjour #PRENOM #NOM.\n\nVotre inscription (pour #NB) a bien été prise en compte :\n- Rencontre : #RENCONTRE\n- Date : #DATE\n- Adresse IP : #IP\n\nPour annuler votre inscription, vous pouvez cliquer sur le lien suivant : \n#URL_DEL"), help_text=_("Les mots-clés suivants peuvent être utilisés :<br>#NOM : Nom de l'inscrit<br>#PRENOM : prénom de l'inscrit<br>#ASSO : Association<br>#RENCONTRE : nom complet de la rencontre<br>#DATE : date de la rencontre<br>#NB : nombre d'inscrit<br>#IP : adresse IP de l'inscrit<br>#URL_DEL : adresse de désinscription"))
champGeo = PointField(verbose_name=_("Lieu"), null=True, help_text=_("Cliquer sur le marqueur puis cliquer sur la carte pour indiquer le lieu de l'évènement."))
zoom = models.FloatField(verbose_name=_("Zoom de la carte"), null=False, default=13, validators=[MinValueValidator(0), MaxValueValidator(19)])
email = models.TextField(verbose_name=_("Message sur le courriel de confirmation d'inscription"),default=_("Bonjour #PRENOM #NOM.\n\nVotre inscription (pour #NB) a bien été prise en compte :\n- Rencontre : #RENCONTRE\n- Date : #DATE\n- Lieu : #LIEU\n- Adresse IP : #IP\n\nPour annuler votre inscription, vous pouvez cliquer sur le lien suivant : \n#URL_DEL"), help_text=_("Les mots-clés suivants peuvent être utilisés :<br>#NOM : Nom de l'inscrit<br>#PRENOM : prénom de l'inscrit<br>#ASSO : Association<br>#RENCONTRE : nom complet de la rencontre<br>#DATE : date de la rencontre<br>#LIEU : Nom du lieu de la rencontre<br>#NB : nombre d'inscrit<br>#IP : adresse IP de l'inscrit<br>#URL_DEL : adresse de désinscription"))
lieu = models.ForeignKey(Lieu, null=True)
date = models.DateField(verbose_name=_("Date"),help_text=_('Saisissez donc la date !'), null=False)
debut = models.TimeField(verbose_name=_("Heure de début"), null=True, blank=True)
fin = models.TimeField(verbose_name=_("Heure de fin"), null=True, blank=True)
......
......@@ -25,8 +25,8 @@
function map_init_basic (map, options) {
// On récupère des variables en base
var position = {{ rencontre|geojsonfeature:":champGeo"|safe }};
var zoom = {{ rencontre.zoom|floatformat:0 }};
var position = {{ rencontre.lieu|geojsonfeature:":champGeo"|safe }};
var zoom = {{ rencontre.lieu.zoom|floatformat:0 }};
// On préparer la carte avec le pointeur
var layer = L.geoJson(position);
......@@ -53,6 +53,7 @@ function map_init_basic (map, options) {
<div class="lieu">{{ rencontre.lieu.adresse|safe }}</div>
{% if rencontre.debut != None and rencontre.fin != None %}
<p class="heure">{% trans "De" %} {{ rencontre.debut }} {% trans "à" %} {{ rencontre.fin }}</p>
{% elif rencontre.debut != None and rencontre.fin == None %}
......
......@@ -110,6 +110,7 @@ def inscription(request, code):
corps = corps.replace(u"#NB",str(form.cleaned_data['nb']))
corps = corps.replace(u"#RENCONTRE",rencontre.nom)
corps = corps.replace(u"#DATE",date)
corps = corps.replace(u"#LIEU",rencontre.lieu.nom)
corps = corps.replace(u"#IP",adresse_ip + " " + v6)
corps = corps.replace(u"#URL_DEL",'http://' + url_fj + '/r/del/' +unique)
send_mail(
......
......@@ -200,3 +200,9 @@ font-family: sans-serif;
p.heure {
font-weight: bold;
}
div.lieu {
border: 1px white solid;
padding-left: 5px;
margin-right: 15px;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment