des outils pour gérer nos listes (début)
authorWilly MANGA <willy.manga@auf.org>
Wed, 5 Oct 2016 16:41:53 +0000 (17:41 +0100)
committerWilly MANGA <willy.manga@auf.org>
Wed, 5 Oct 2016 16:41:53 +0000 (17:41 +0100)
38 files changed:
projets_django/bacgl_utils2/bacgl/__init__.py [new file with mode: 0644]
projets_django/bacgl_utils2/bacgl/settings.py [new file with mode: 0644]
projets_django/bacgl_utils2/bacgl/urls.py [new file with mode: 0644]
projets_django/bacgl_utils2/bacgl/wsgi.py [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/__init__.py [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/admin.py [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/forms.py [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/models.py [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/static/listes2/css/base.css [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/adel.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/admin/base_site.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/base.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/base0.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/index.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/infoabonne.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/infolistes.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/infousager.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes/index.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/adel.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/base.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/base.html.orig [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/base0.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/entree.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/index.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/infoabonne.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/infoadel.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/infolistes.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/infousager.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/insertion.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/insertion_resultat.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/pied.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/recherche.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/listes2/recherche_resultats.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/templates/pied.html [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/tests.py [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/urls.py [new file with mode: 0644]
projets_django/bacgl_utils2/listes2/views.py [new file with mode: 0644]
projets_django/bacgl_utils2/manage.py [new file with mode: 0755]

diff --git a/projets_django/bacgl_utils2/bacgl/__init__.py b/projets_django/bacgl_utils2/bacgl/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/projets_django/bacgl_utils2/bacgl/settings.py b/projets_django/bacgl_utils2/bacgl/settings.py
new file mode 100644 (file)
index 0000000..66f6725
--- /dev/null
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+
+"""
+Django settings for bacgl project.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.7/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/1.7/ref/settings/
+"""
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+import os
+BASE_DIR = os.path.dirname(os.path.dirname(__file__))
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = '*$b!n7_zf$_82u@z$+cdtbe!4dd1v#xq2x+8fo9g4ct4m^9lrd'
+
+# SECURITY WARNING: don't run with debug turned on in production!
+DEBUG = True
+
+TEMPLATE_DEBUG = True
+TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
+
+ALLOWED_HOSTS = []
+
+
+# Application definition
+
+INSTALLED_APPS = (
+    'listes2',
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+)
+
+MIDDLEWARE_CLASSES = (
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+)
+
+ROOT_URLCONF = 'bacgl.urls'
+
+WSGI_APPLICATION = 'bacgl.wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'USER':'ma3mo16',
+        'PASSWORD':'5y$8@d⁼ZcYf5ùPfç4Gj4bN)T',
+        'HOST':'sql.cm.auf.org',
+        'NAME': 'bacgl_utils2',
+    }
+}
+
+# Internationalization
+# https://docs.djangoproject.com/en/1.7/topics/i18n/
+
+LANGUAGE_CODE = 'fr-fr'
+
+TIME_ZONE = 'Africa/Douala'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/1.7/howto/static-files/
+
+STATIC_URL = '/static/'
+STATIC_ROOT = '/srv/projets/bacgl/static/'
diff --git a/projets_django/bacgl_utils2/bacgl/urls.py b/projets_django/bacgl_utils2/bacgl/urls.py
new file mode 100644 (file)
index 0000000..e1d9e6b
--- /dev/null
@@ -0,0 +1,13 @@
+from django.conf.urls import patterns, include, url
+from django.contrib import admin
+
+urlpatterns = patterns('',
+    # Examples:
+    # url(r'^$', 'bacgl.views.home', name='home'),
+    # url(r'^blog/', include('blog.urls')),
+
+    url(r'^cnfy/', include('cnfy.urls', namespace="cnfy")),
+    url(r'^listes2/', include('listes2.urls')),
+#    url(r'^listes/', include('listes.urls')),
+    url(r'^admin/', include(admin.site.urls)),
+)
diff --git a/projets_django/bacgl_utils2/bacgl/wsgi.py b/projets_django/bacgl_utils2/bacgl/wsgi.py
new file mode 100644 (file)
index 0000000..91ad864
--- /dev/null
@@ -0,0 +1,16 @@
+"""
+WSGI config for bacgl project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
+"""
+
+import os,sys
+
+sys.path.append('/home/willy/bacgl/')
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bacgl.settings")
+
+from django.core.wsgi import get_wsgi_application
+application = get_wsgi_application()
diff --git a/projets_django/bacgl_utils2/listes2/__init__.py b/projets_django/bacgl_utils2/listes2/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/projets_django/bacgl_utils2/listes2/admin.py b/projets_django/bacgl_utils2/listes2/admin.py
new file mode 100644 (file)
index 0000000..a158d90
--- /dev/null
@@ -0,0 +1,18 @@
+from django.contrib import admin
+from listes2.models import Usager,Adel,Listes,Abonnement
+from listes2.models import Pays,Specialite,Etablissement,Scolarite
+
+class AbonnementAdmin(admin.ModelAdmin):
+    list_display = ['liste','abonne']
+
+class AdelAdmin(admin.ModelAdmin):
+    list_display = ['proprietaire','adresse']
+
+admin.site.register(Usager)
+admin.site.register(Adel,AdelAdmin)
+admin.site.register(Listes)
+admin.site.register(Abonnement,AbonnementAdmin)
+admin.site.register(Pays)
+admin.site.register(Specialite)
+admin.site.register(Etablissement)
+admin.site.register(Scolarite)
diff --git a/projets_django/bacgl_utils2/listes2/forms.py b/projets_django/bacgl_utils2/listes2/forms.py
new file mode 100644 (file)
index 0000000..ffbb879
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+from django import forms
+
+
+class RechercheForm(forms.Form):
+    terme = forms.CharField(label='Adel ou nom à chercher',
+            max_length=200)
+
+class InsertionForm(forms.Form):
+    SEXE = (
+            ("H","Homme"),
+            ("F", "Femme"),
+            ("N/A", "Non Applicable"),
+            )
+
+    nom = forms.CharField(max_length=200)
+    genre = forms.ChoiceField(choices=SEXE,
+    help_text="Choisir 'Non applicable' si personne morale\
+            <br />ou si indécis",
+            )
+    adel = forms.EmailField(label='Adresse électronique')
+    liste = forms.CharField(label='Liste de diffusion à abonner',
+            max_length=15,
+            )
diff --git a/projets_django/bacgl_utils2/listes2/models.py b/projets_django/bacgl_utils2/listes2/models.py
new file mode 100644 (file)
index 0000000..d4664ca
--- /dev/null
@@ -0,0 +1,131 @@
+# -*- coding:utf-8 -*-
+
+from django.db import models
+
+# Create your models here.
+class Pays(models.Model):
+
+    PAYS = (
+            ("bi","Burundi"),
+            ("bw","Botswana"),
+            ("cm","Cameroun"),
+            ("cf","Centrafrique"),
+            ("cd","Congo"),
+            ("cd","RDC"),
+            ("ga","Gabon"),
+            ("mw","Malawi"),
+            ("rw","Rwanda"),
+            ("td","Tchad"),
+            ("tz","Tanzanie"),
+            ("ao","Angola"),
+            )
+
+    nom = models.CharField(max_length=20,unique=True)
+
+    class Meta:
+        verbose_name_plural = 'Pays'
+
+    def __unicode__(self):
+        return  self.nom
+
+
+class Specialite(models.Model):
+    intitule = models.CharField(max_length=150,unique=True)
+
+    class Meta:
+        ordering = ['intitule']
+
+    def __unicode__(self):
+        return self.intitule
+
+
+class Usager(models.Model):
+
+    SEXE = (
+            ("H","Homme"),
+            ("F", "Femme"),
+            ("N/A", "Non Applicable"),
+            )
+
+    nom = models.CharField(max_length=250)
+    genre = models.CharField(max_length=5,choices=SEXE)
+    paysOrigine = models.ForeignKey(Pays)
+#    etablissement = models.manyToManyField(Etablissement,blank=True)
+    specialite = models.ForeignKey(Specialite,blank=True)
+    commentaire = models.TextField(blank=True)
+    telephone = models.TextField(blank=True)
+
+
+    def __unicode__(self):
+        return self.nom
+
+class Etablissement(models.Model):
+    nom = models.CharField(max_length=250, unique=True)
+    adresse = models.TextField(blank=True)
+    pays = models.ForeignKey(Pays)
+
+    def __unicode__(self):
+        return  self.nom
+
+
+class Scolarite(models.Model):
+    """
+    Regrouper le moment où un usager X s'inscrit à une
+    université Y
+    """
+    usager = models.ForeignKey(Usager)
+    etablissement = models.ForeignKey(Etablissement)
+    periode = models.DateField(blank=True)
+
+    class Meta:
+        unique_together = (("usager","etablissement"))
+
+    def __unicode__(self):
+        return u"%s" % self.etablissement
+
+
+class Adel(models.Model):
+    proprietaire = models.ForeignKey(Usager)
+    date_insertion = models.DateField(auto_now_add=True)
+    adresse = models.EmailField(unique=True)
+
+    class Meta:
+        verbose_name_plural = 'Adresses electroniques'
+
+    def __unicode__(self):
+        return self.adresse
+
+class Listes(models.Model):
+    nom = models.CharField(max_length=150)
+    description = models.TextField(blank=True)
+    adresse = models.EmailField(default='@listes.cm.auf.org')
+    date_creation = models.DateField(auto_now_add=True)
+#    abonnes = models.ManyToManyField(Adel, verbose_name="liste abonnés")
+    gestionnaire = models.CharField(max_length=200)
+    gestionnaire2 = models.CharField(max_length=200,blank=True)
+
+    class Meta:
+        verbose_name_plural = 'Listes'
+
+    def __unicode__(self):
+        return self.nom
+
+
+class Abonnement(models.Model):
+    """
+    L'ensemble des listes et des adresses électroniques
+    qui y sont inscrites
+    """
+
+    liste = models.ForeignKey(Listes)
+    abonne = models.ForeignKey(Adel)
+    date_inscription = models.DateTimeField(auto_now_add=True)
+#FIXME comprendre pourquoi ça ne marche pas
+#    date_suppression = models.DateTimeField(blank=True,null=True)
+
+    class Meta:
+        unique_together = (("liste","abonne"))
+
+
+    def __unicode__(self):
+        return u"%s" % self.abonne
diff --git a/projets_django/bacgl_utils2/listes2/static/listes2/css/base.css b/projets_django/bacgl_utils2/listes2/static/listes2/css/base.css
new file mode 100644 (file)
index 0000000..995183e
--- /dev/null
@@ -0,0 +1,847 @@
+/*
+    DJANGO Admin styles
+*/
+
+body {
+    margin: 0;
+    padding: 0;
+    font-size: 12px;
+    font-family: "Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
+    color: #333;
+    background: #fff;
+}
+
+/* LINKS */
+
+a:link, a:visited {
+    color: #5b80b2;
+    text-decoration: none;
+}
+
+a:hover {
+    color: #036;
+}
+
+a img {
+    border: none;
+}
+
+a.section:link, a.section:visited {
+    color: #fff;
+    text-decoration: none;
+}
+
+/* GLOBAL DEFAULTS */
+
+p, ol, ul, dl {
+    margin: .2em 0 .8em 0;
+}
+
+p {
+    padding: 0;
+    line-height: 140%;
+}
+
+h1,h2,h3,h4,h5 {
+    font-weight: bold;
+}
+
+h1 {
+    font-size: 18px;
+    color: #666;
+    padding: 0 6px 0 0;
+    margin: 0 0 .2em 0;
+}
+
+h2 {
+    font-size: 16px;
+    margin: 1em 0 .5em 0;
+}
+
+h2.subhead {
+    font-weight: normal;
+    margin-top: 0;
+}
+
+h3 {
+    font-size: 14px;
+    margin: .8em 0 .3em 0;
+    color: #666;
+    font-weight: bold;
+}
+
+h4 {
+    font-size: 12px;
+    margin: 1em 0 .8em 0;
+    padding-bottom: 3px;
+}
+
+h5 {
+    font-size: 10px;
+    margin: 1.5em 0 .5em 0;
+    color: #666;
+    text-transform: uppercase;
+    letter-spacing: 1px;
+}
+
+ul li {
+    list-style-type: square;
+    padding: 1px 0;
+}
+
+ul.plainlist {
+    margin-left: 0 !important;
+}
+
+ul.plainlist li {
+    list-style-type: none;
+}
+
+li ul {
+    margin-bottom: 0;
+}
+
+li, dt, dd {
+    font-size: 11px;
+    line-height: 14px;
+}
+
+dt {
+    font-weight: bold;
+    margin-top: 4px;
+}
+
+dd {
+    margin-left: 0;
+}
+
+form {
+    margin: 0;
+    padding: 0;
+}
+
+fieldset {
+    margin: 0;
+    padding: 0;
+}
+
+blockquote {
+    font-size: 11px;
+    color: #777;
+    margin-left: 2px;
+    padding-left: 10px;
+    border-left: 5px solid #ddd;
+}
+
+code, pre {
+    font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
+    background: inherit;
+    color: #666;
+    font-size: 11px;
+}
+
+pre.literal-block {
+    margin: 10px;
+    background: #eee;
+    padding: 6px 8px;
+}
+
+code strong {
+    color: #930;
+}
+
+hr {
+    clear: both;
+    color: #eee;
+    background-color: #eee;
+    height: 1px;
+    border: none;
+    margin: 0;
+    padding: 0;
+    font-size: 1px;
+    line-height: 1px;
+}
+
+/* TEXT STYLES & MODIFIERS */
+
+.small {
+    font-size: 11px;
+}
+
+.tiny {
+    font-size: 10px;
+}
+
+p.tiny {
+    margin-top: -2px;
+}
+
+.mini {
+    font-size: 9px;
+}
+
+p.mini {
+    margin-top: -3px;
+}
+
+.help, p.help {
+    font-size: 10px !important;
+    color: #999;
+}
+
+img.help-tooltip {
+    cursor: help;
+}
+
+p img, h1 img, h2 img, h3 img, h4 img, td img {
+    vertical-align: middle;
+}
+
+.quiet, a.quiet:link, a.quiet:visited {
+    color: #999 !important;
+    font-weight: normal !important;
+}
+
+.quiet strong {
+    font-weight: bold !important;
+}
+
+.float-right {
+    float: right;
+}
+
+.float-left {
+    float: left;
+}
+
+.clear {
+    clear: both;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-right {
+    text-align: right;
+}
+
+.example {
+    margin: 10px 0;
+    padding: 5px 10px;
+    background: #efefef;
+}
+
+.nowrap {
+    white-space: nowrap;
+}
+
+/* TABLES */
+
+table {
+    border-collapse: collapse;
+    border-color: #ccc;
+}
+
+td, th {
+    font-size: 11px;
+    line-height: 13px;
+    border-bottom: 1px solid #eee;
+    vertical-align: top;
+    padding: 5px;
+    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+}
+
+th {
+    text-align: left;
+    font-size: 12px;
+    font-weight: bold;
+}
+
+thead th,
+tfoot td {
+    color: #666;
+    padding: 2px 5px;
+    font-size: 11px;
+    background: #e1e1e1 url(../img/nav-bg.gif) top left repeat-x;
+    border-left: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+
+tfoot td {
+    border-bottom: none;
+    border-top: 1px solid #ddd;
+}
+
+thead th:first-child,
+tfoot td:first-child {
+    border-left: none !important;
+}
+
+thead th.optional {
+    font-weight: normal !important;
+}
+
+fieldset table {
+    border-right: 1px solid #eee;
+}
+
+tr.row-label td {
+    font-size: 9px;
+    padding-top: 2px;
+    padding-bottom: 0;
+    border-bottom: none;
+    color: #666;
+    margin-top: -1px;
+}
+
+tr.alt {
+    background: #f6f6f6;
+}
+
+.row1 {
+    background: #EDF3FE;
+}
+
+.row2 {
+    background: #fff;
+}
+
+/* SORTABLE TABLES */
+
+thead th {
+    padding: 2px 5px;
+    line-height: normal;
+}
+
+thead th a:link, thead th a:visited {
+    color: #666;
+}
+
+thead th.sorted {
+    background: #c5c5c5 url(../img/nav-bg-selected.gif) top left repeat-x;
+}
+
+thead th.sorted .text {
+    padding-right: 42px;
+}
+
+table thead th .text span {
+    padding: 2px 5px;
+    display:block;
+}
+
+table thead th .text a {
+    display: block;
+    cursor: pointer;
+    padding: 2px 5px;
+}
+
+table thead th.sortable:hover {
+    background: #fff url(../img/nav-bg-reverse.gif) 0 -5px repeat-x;
+}
+
+thead th.sorted a.sortremove {
+    visibility: hidden;
+}
+
+table thead th.sorted:hover a.sortremove {
+    visibility: visible;
+}
+
+table thead th.sorted .sortoptions {
+    display: block;
+    padding: 4px 5px 0 5px;
+    float: right;
+    text-align: right;
+}
+
+table thead th.sorted .sortpriority {
+    font-size: .8em;
+    min-width: 12px;
+    text-align: center;
+    vertical-align: top;
+}
+
+table thead th.sorted .sortoptions a {
+    width: 14px;
+    height: 12px;
+    display: inline-block;
+}
+
+table thead th.sorted .sortoptions a.sortremove {
+    background: url(../img/sorting-icons.gif) -4px -5px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.sortremove:hover {
+    background: url(../img/sorting-icons.gif) -4px -27px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.ascending {
+    background: url(../img/sorting-icons.gif) -5px -50px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.ascending:hover {
+    background: url(../img/sorting-icons.gif) -5px -72px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.descending {
+    background: url(../img/sorting-icons.gif) -5px -94px no-repeat;
+}
+
+table thead th.sorted .sortoptions a.descending:hover {
+    background: url(../img/sorting-icons.gif) -5px -115px no-repeat;
+}
+
+/* ORDERABLE TABLES */
+
+table.orderable tbody tr td:hover {
+    cursor: move;
+}
+
+table.orderable tbody tr td:first-child {
+    padding-left: 14px;
+    background-image: url(../img/nav-bg-grabber.gif);
+    background-repeat: repeat-y;
+}
+
+table.orderable-initalized .order-cell, body>tr>td.order-cell {
+    display: none;
+}
+
+/* FORM DEFAULTS */
+
+input, textarea, select, .form-row p {
+    margin: 2px 0;
+    padding: 2px 3px;
+    vertical-align: middle;
+    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+    font-weight: normal;
+    font-size: 11px;
+}
+
+textarea {
+    vertical-align: top !important;
+}
+
+input[type=text], input[type=password], input[type=email], input[type=url], input[type=number],
+textarea, select, .vTextField {
+    border: 1px solid #ccc;
+}
+
+/* FORM BUTTONS */
+
+.button, input[type=submit], input[type=button], .submit-row input {
+    background: #fff url(../img/nav-bg.gif) bottom repeat-x;
+    padding: 3px 5px;
+    color: black;
+    border: 1px solid #bbb;
+    border-color: #ddd #aaa #aaa #ddd;
+}
+
+.button:active, input[type=submit]:active, input[type=button]:active {
+    background-image: url(../img/nav-bg-reverse.gif);
+    background-position: top;
+}
+
+.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
+    background-image: url(../img/nav-bg.gif);
+    background-position: bottom;
+    opacity: 0.4;
+}
+
+.button.default, input[type=submit].default, .submit-row input.default {
+    border: 2px solid #5b80b2;
+    background: #7CA0C7 url(../img/default-bg.gif) bottom repeat-x;
+    font-weight: bold;
+    color: #fff;
+    float: right;
+}
+
+.button.default:active, input[type=submit].default:active {
+    background-image: url(../img/default-bg-reverse.gif);
+    background-position: top;
+}
+
+.button[disabled].default, input[type=submit][disabled].default, input[type=button][disabled].default {
+    background-image: url(../img/default-bg.gif);
+    background-position: bottom;
+    opacity: 0.4;
+}
+
+
+/* MODULES */
+
+.module {
+    border: 1px solid #ccc;
+    margin-bottom: 5px;
+    background: #fff;
+}
+
+.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
+    padding-left: 10px;
+    padding-right: 10px;
+}
+
+.module blockquote {
+    margin-left: 12px;
+}
+
+.module ul, .module ol {
+    margin-left: 1.5em;
+}
+
+.module h3 {
+    margin-top: .6em;
+}
+
+.module h2, .module caption, .inline-group h2 {
+    margin: 0;
+    padding: 2px 5px 3px 5px;
+    font-size: 11px;
+    text-align: left;
+    font-weight: bold;
+    background: #7CA0C7 url(../img/default-bg.gif) top left repeat-x;
+    color: #fff;
+}
+
+.module table {
+    border-collapse: collapse;
+}
+
+/* MESSAGES & ERRORS */
+
+ul.messagelist {
+    padding: 0;
+    margin: 0;
+}
+
+ul.messagelist li {
+    font-size: 12px;
+    font-weight: bold;
+    display: block;
+    padding: 5px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border-bottom: 1px solid #ddd;
+    color: #666;
+    background: #dfd url(../img/icon_success.gif) 5px .3em no-repeat;
+}
+
+ul.messagelist li.warning {
+    background: #ffc url(../img/icon_alert.gif) 5px .3em no-repeat;
+}
+
+ul.messagelist li.error {
+    background: #ffefef url(../img/icon_error.gif) 5px .3em no-repeat;
+}
+
+.errornote {
+    font-size: 12px !important;
+    font-weight: bold;
+    display: block;
+    padding: 5px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border: 1px solid #c22;
+    color: #c11;
+    background: #ffefef url(../img/icon_error.gif) 5px .38em no-repeat;
+}
+
+.errornote, ul.errorlist {
+    border-radius: 1px;
+}
+
+ul.errorlist {
+    margin: 0 0 4px !important;
+    padding: 0 !important;
+    color: #fff;
+    background: #c11;
+}
+
+ul.errorlist li {
+    font-size: 12px !important;
+    display: block;
+    padding: 5px 5px 4px 7px;
+    margin: 3px 0 0 0;
+}
+
+ul.errorlist li:first-child {
+    margin-top: 0;
+}
+
+ul.errorlist li a {
+    color: #fff;
+    text-decoration: underline;
+}
+
+td ul.errorlist {
+    margin: 0 !important;
+    padding: 0 !important;
+}
+
+td ul.errorlist li {
+    margin: 0 !important;
+}
+
+.errors, .form-row.errors {
+    background: #ffefef;
+}
+
+.form-row.errors {
+    border: 1px solid #c22;
+    margin: -1px;
+}
+
+.errors input, .errors select, .errors textarea {
+    border: 1px solid #c11;
+}
+
+div.system-message {
+    background: #ffc;
+    margin: 10px;
+    padding: 6px 8px;
+    font-size: .8em;
+}
+
+div.system-message p.system-message-title {
+    padding: 4px 5px 4px 25px;
+    margin: 0;
+    color: #c11;
+    background: #ffefef url(../img/icon_error.gif) 5px .3em no-repeat;
+}
+
+.description {
+    font-size: 12px;
+    padding: 5px 0 0 12px;
+}
+
+/* BREADCRUMBS */
+
+div.breadcrumbs {
+    background: #fff url(../img/nav-bg-reverse.gif) 0 -10px repeat-x;
+    padding: 2px 8px 3px 8px;
+    font-size: 11px;
+    color: #999;
+    border-top: 1px solid #fff;
+    border-bottom: 1px solid #ddd;
+    text-align: left;
+}
+
+/* ACTION ICONS */
+
+.addlink {
+    padding-left: 12px;
+    background: url(../img/icon_addlink.gif) 0 .2em no-repeat;
+}
+
+.changelink {
+    padding-left: 12px;
+    background: url(../img/icon_changelink.gif) 0 .2em no-repeat;
+}
+
+.deletelink {
+    padding-left: 12px;
+    background: url(../img/icon_deletelink.gif) 0 .25em no-repeat;
+}
+
+a.deletelink:link, a.deletelink:visited {
+    color: #CC3434;
+}
+
+a.deletelink:hover {
+    color: #993333;
+}
+
+/* OBJECT TOOLS */
+
+.object-tools {
+    font-size: 10px;
+    font-weight: bold;
+    font-family: Arial,Helvetica,sans-serif;
+    padding-left: 0;
+    float: right;
+    position: relative;
+    margin-top: -2.4em;
+    margin-bottom: -2em;
+}
+
+.form-row .object-tools {
+    margin-top: 5px;
+    margin-bottom: 5px;
+    float: none;
+    height: 2em;
+    padding-left: 3.5em;
+}
+
+.object-tools li {
+    display: block;
+    float: left;
+    margin-left: 5px;
+    height: 16px;
+}
+
+.object-tools a {
+    border-radius: 15px;
+}
+
+.object-tools a:link, .object-tools a:visited {
+    display: block;
+    float: left;
+    color: #fff;
+    padding: .2em 10px;
+    background: #999;
+}
+
+.object-tools a:hover, .object-tools li:hover a {
+    background-color: #5b80b2;
+}
+
+.object-tools a.viewsitelink, .object-tools a.golink {
+    background: #999 url(../img/tooltag-arrowright.png) 95% center no-repeat;
+    padding-right: 26px;
+}
+
+.object-tools a.addlink {
+    background: #999 url(../img/tooltag-add.png) 95% center no-repeat;
+    padding-right: 26px;
+}
+
+/* OBJECT HISTORY */
+
+table#change-history {
+    width: 100%;
+}
+
+table#change-history tbody th {
+    width: 16em;
+}
+
+/* PAGE STRUCTURE */
+
+#container {
+    position: relative;
+    width: 100%;
+    min-width: 760px;
+    padding: 0;
+}
+
+#content {
+    margin: 10px 15px;
+}
+
+#content-main {
+    float: left;
+    width: 100%;
+}
+
+#content-related {
+    float: right;
+    width: 18em;
+    position: relative;
+    margin-right: -19em;
+}
+
+#footer {
+    clear: both;
+    padding: 10px;
+}
+
+/* COLUMN TYPES */
+
+.colMS {
+    margin-right: 20em !important;
+}
+
+.colSM {
+    margin-left: 20em !important;
+}
+
+.colSM #content-related {
+    float: left;
+    margin-right: 0;
+    margin-left: -19em;
+}
+
+.colSM #content-main {
+    float: right;
+}
+
+.popup .colM {
+    width: 95%;
+}
+
+.subcol {
+    float: left;
+    width: 46%;
+    margin-right: 15px;
+}
+
+.dashboard #content {
+    width: 500px;
+}
+
+/* HEADER */
+
+#header {
+    width: 100%;
+    background: #417690;
+    color: #ffc;
+    overflow: hidden;
+}
+
+#header a:link, #header a:visited {
+    color: #fff;
+}
+
+#header a:hover {
+    text-decoration: underline;
+}
+
+#branding {
+    float: left;
+}
+#branding h1 {
+    padding: 0 10px;
+    font-size: 18px;
+    margin: 8px 0;
+    font-weight: normal;
+}
+
+#branding h1, #branding h1 a:link, #branding h1 a:visited {
+    color: #f4f379;
+}
+
+#branding h2 {
+    padding: 0 10px;
+    font-size: 14px;
+    margin: -8px 0 8px 0;
+    font-weight: normal;
+    color: #ffc;
+}
+
+#branding a:hover {
+    text-decoration: none;
+}
+
+#user-tools {
+    float: right;
+    padding: 1.2em 10px;
+    font-size: 11px;
+    text-align: right;
+}
+
+/* SIDEBAR */
+
+#content-related h3 {
+    font-size: 12px;
+    color: #666;
+    margin-bottom: 3px;
+}
+
+#content-related h4 {
+    font-size: 11px;
+}
+
+#content-related .module h2 {
+    background: #eee url(../img/nav-bg.gif) bottom left repeat-x;
+    color: #666;
+}
diff --git a/projets_django/bacgl_utils2/listes2/templates/adel.html b/projets_django/bacgl_utils2/listes2/templates/adel.html
new file mode 100644 (file)
index 0000000..8d53b83
--- /dev/null
@@ -0,0 +1,17 @@
+{% extends "base.html" %}
+
+
+{% block content %}
+
+<h3>Informations sur l'adresse {{adel.adresse}}</h3>
+
+<ul>
+  <li>Nom : {{ad.nom}}</li>
+  <li>Genre : {{ad.genre}}</li>
+  <li>Pays d'origine : {{ad.paysOrigine}}</li>
+  <li>Etablissement : {{ad.etablissement}}</li>
+  <li>Spécialité : {{ad.specialite}}</li>
+  <li>Téléphone : {{ad.telephone}}</li>
+</ul>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/admin/base_site.html b/projets_django/bacgl_utils2/listes2/templates/admin/base_site.html
new file mode 100644 (file)
index 0000000..16f1d8f
--- /dev/null
@@ -0,0 +1,9 @@
+{% extends "admin/base.html" %}
+
+{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
+
+{% block branding %}
+<h1 id="site-name"><a href="{% url 'admin:index' %}">Gestion de listes du bureau</a></h1>
+{% endblock %}
+
+{% block nav-global %}{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/base.html b/projets_django/bacgl_utils2/listes2/templates/base.html
new file mode 100644 (file)
index 0000000..941e490
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+        <title>{% block title %} BACGL - Gestion des listes {% endblock %}</title>
+  <link rel="stylesheet"  type="text/css" href="{{ STATIC_URL }}css/base.css">
+
+  <body>
+          <div id="side">
+                  {% block sidebar %}
+
+                  <ul>
+                          {% if not user.is_authenticated %}
+                                 <li><a href="/connexion">Ouvrir une session</a></li>
+                          {% else %}
+                                 Bienvenue {{ user.username }}
+                                 <li><a href="/accueil">Accueil</li>
+                                  {% if user.is_staff %}
+                                         <li><a href="/admin" target="_blank">Interface d'administration</li>
+                                         <li><a href="/recherche/">Formulaire recherche</li>
+                                  {% endif %}
+                          <li>
+                                   <a href="/deconnexion">Se déconnecter</a> <br />
+                            {% endif %}
+                        </ul>
+
+               {% endblock %}
+                </div>
+
+          <div id="content">
+                  {% block content %}{% endblock %}
+          </div>
+          {% block piedDePage %}
+
+          <hr>
+           <a href="/listes2/">Accueil</a> |<a
+              href="/listes2/infoabonne/">Adresses inscrites</a> | 
+            <a href="/listes2/infousager/">Usagers repertoriés</a> | <a href="/admin/">Administration</a>
+        
+         {% endblock %}
+  </body>
+
+</html>
diff --git a/projets_django/bacgl_utils2/listes2/templates/base0.html b/projets_django/bacgl_utils2/listes2/templates/base0.html
new file mode 100644 (file)
index 0000000..fea2e64
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+        <title>{% block title %} BACGL - Gestion des listes {% endblock %}</title>
+  <link rel="stylesheet"  type="text/css" href="{{ STATIC_URL }}css/base.css">
+
+  <body>
+          <div id="side">
+                  {% block sidebar %}
+
+                  <ul>
+                          {% if not user.is_authenticated %}
+                          <li><a href="/connexion">Ouvrir une sessions</a></li>
+                          {% else %}
+                          Bienvenue {{ user.username }}
+                          <li><a href="/accueil">Accueil</li>
+                                  {% if user.is_staff %}
+                          <li><a href="/admin" target="_blank">Interface d'administration</li>
+                          <li><a href="/recherche/">Validation - recherche de code</li>
+                                  {% endif %}
+                          <li>
+                            <a href="/deconnexion">Se déconnecter</a> <br />
+                            {% endif %}
+                      <li><a href="/saisie/bilan/">Bilan des saisies</a></li>
+                        </ul>
+
+                        {% endblock %}
+                </div>
+
+          <div id="content">
+                  {% block content %}{% endblock %}
+          </div>
+  </body>
+</html>
diff --git a/projets_django/bacgl_utils2/listes2/templates/index.html b/projets_django/bacgl_utils2/listes2/templates/index.html
new file mode 100644 (file)
index 0000000..a73fd88
--- /dev/null
@@ -0,0 +1,35 @@
+{% extends "base.html" %}
+
+{% block content %}
+{% if listes_dispo %}
+
+<h3>Listes existantes</h3>
+  <ul>
+    {% for liste in listes_dispo %}
+    <li><a href="/listes2/infoliste/{{liste.id}}">{{liste.nom }}</a></li>
+    {% endfor %}
+ </ul>
+
+    {% else %}
+
+      <p>Pas de listes trouvées !.</p>
+
+{% endif %}
+
+{% if etab_dispo %}
+
+<h3>Etablissements recensés</h3>
+  <ul>
+    {% for etab in etab_dispo %}
+      <li>{{etab }}</li>
+    {% endfor %}
+ </ul>
+
+    {% else %}
+
+      <p>Pas d'établissements trouvés !</p>
+
+{% endif %}
+Consultez <a href="/listes2/infoabonne/">les adresses électroniques</a>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/infoabonne.html b/projets_django/bacgl_utils2/listes2/templates/infoabonne.html
new file mode 100644 (file)
index 0000000..46cdfb8
--- /dev/null
@@ -0,0 +1,14 @@
+{% extends "base.html" %}
+
+
+{% block content %}
+
+<h3>Adresses présentes</h3>
+Total: {{ab|length}}
+<ul>
+{% for a in ab %}
+<li><a href="/listes/adel/{{a.id}}">{{a}}</a></li> 
+{% endfor %}
+</ul>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/infolistes.html b/projets_django/bacgl_utils2/listes2/templates/infolistes.html
new file mode 100644 (file)
index 0000000..b27a8c6
--- /dev/null
@@ -0,0 +1,24 @@
+{% extends "base.html" %}
+
+
+{% block content %}
+yello :)
+
+Liste à traiter : {{listes_id}}
+<h3>Liste {{liste.nom}}</h3>
+<p>Description: {{liste.description}}.<br>
+Nombre d'abonnés : {{listing|length}}<br>
+Les abonné(e)s à la liste sont : </p>
+<ul>
+{% for liste in listing %}
+<li>{{liste}}</li> 
+{% endfor %}
+</ul>
+
+<hr />
+<ul>
+{% for liste in listing2 %}
+<li>{{liste}}</li> 
+{% endfor %}
+</ul>
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/infousager.html b/projets_django/bacgl_utils2/listes2/templates/infousager.html
new file mode 100644 (file)
index 0000000..ffcec37
--- /dev/null
@@ -0,0 +1,33 @@
+{% extends "base.html" %}
+
+
+{% block content %}
+
+<h3>Usagers repertoriés</h3>
+ <table border="1">
+        <tr>
+                <td>Nom</td>
+                <td>Genre</td>
+                <td>Pays d'origine</td>
+                <td>Spécialité</td>
+                <td>Telephone</td>
+                <td>Adresse(s) électronique(s)</td>
+        </tr>
+        {% for k,v in info_us3.iteritems %}
+        <tr>
+                <td>
+        {{k.nom}}
+                </td>
+                <td>{{k.genre}}</td>
+                <td>{{k.paysOrigine}}</td>
+                <td>{{k.specialite}}</td>
+                <td>{{k.telephone}}</td>
+
+                <td>
+        {{v}}
+                </td>
+        </tr>
+        {% endfor %}
+ </table>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes/index.html b/projets_django/bacgl_utils2/listes2/templates/listes/index.html
new file mode 100644 (file)
index 0000000..5b6db98
--- /dev/null
@@ -0,0 +1,15 @@
+oui, c'est moi :)
+nessssssssssssssssssssaaaaaaaaaaaaaaaaaaaaaaaaa :P
+{% if listes_dispo %}
+
+  <ul>
+    {% for liste in listes_dispo %}
+      <li>{{etab_dispo.etablissement }}</li>
+    {% endfor %}
+ </ul>
+
+    {% else %}
+
+      <p>Pas d'établissements trouvés !.</p>
+
+{% endif %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/adel.html b/projets_django/bacgl_utils2/listes2/templates/listes2/adel.html
new file mode 100644 (file)
index 0000000..83f9ce3
--- /dev/null
@@ -0,0 +1,17 @@
+{% extends "listes2/base.html" %}
+
+
+{% block content %}
+
+<h3>Informations sur l'adresse {{adel.adresse}}</h3>
+
+<ul>
+  <li>Nom : {{ad.nom}}</li>
+  <li>Genre : {{ad.genre}}</li>
+  <li>Pays d'origine : {{ad.paysOrigine}}</li>
+  <li>Etablissement : {{ad.etablissement}}</li>
+  <li>Spécialité : {{ad.specialite}}</li>
+  <li>Téléphone : {{ad.telephone}}</li>
+</ul>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/base.html b/projets_django/bacgl_utils2/listes2/templates/listes2/base.html
new file mode 100644 (file)
index 0000000..118aa52
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+
+{% load staticfiles %}
+<html>
+        <title>{% block title %} BACGL - Gestion des listes (v2) {% endblock %}</title>
+  <link rel="stylesheet"  type="text/css" href="{% static 'listes2/css/base.css' %}">
+
+  <body>
+          <div id="side">
+                  {% block sidebar %}
+
+                  <ul>
+                          {% if not user.is_authenticated %}
+                                 <li><a href="/listes2/login">Ouvrir une session</a></li>
+                          {% else %}
+                                 Bienvenue {{ user.username }}
+                                 <li><a href="/listes2/">Accueil</li>
+                                  {% if user.is_staff %}
+                                         <li><a href="/admin" target="_blank">Interface d'administration</li>
+                                         <li><a href="/listes2/recherche/">Formulaire recherche</li>
+                                         <li><a href="/listes2/insertion/">Formulaire d'insertion</li>
+                                  {% endif %}
+                          <li>
+                                 {% comment %}
+                                   <a href="/listesdeconnexion/">Se déconnecter</a> <br />
+                                 {% endcomment %}
+                                 <a href="{% url 'sortie' %}">Se déconnecter</a> <br />
+                            {% endif %}
+                        </ul>
+
+               {% endblock %}
+                </div>
+
+          <div id="content">
+                  {% block content %}{% endblock %}
+          </div>
+          {% block piedDePage %}
+
+          <hr>
+           <a href="/listes2/">Accueil</a> |<a
+              href="/listes2/infoabonne/">Adresses inscrites</a> | 
+            <a href="/listes2/infousager/">Usagers repertoriés</a> 
+            | <a href="/listes2/recherche/">Effectuez une recherche</a> | <a href="/admin/">Administration</a>
+        
+         {% endblock %}
+  </body>
+
+</html>
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/base.html.orig b/projets_django/bacgl_utils2/listes2/templates/listes2/base.html.orig
new file mode 100644 (file)
index 0000000..95c8748
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+
+{% load staticfiles %}
+<html>
+        <title>{% block title %} BACGL - Gestion des listes {% endblock %}</title>
+  <link rel="stylesheet"  type="text/css" href="{{ STATIC_URL }}css/base.css">
+
+  <body>
+          <div id="side">
+                  {% block sidebar %}
+
+                  <ul>
+                          {% if not user.is_authenticated %}
+                                 <li><a href="/connexion">Ouvrir une session</a></li>
+                          {% else %}
+                                 Bienvenue {{ user.username }}
+                                 <li><a href="/accueil">Accueil</li>
+                                  {% if user.is_staff %}
+                                         <li><a href="/admin" target="_blank">Interface d'administration</li>
+                                         <li><a href="/recherche/">Formulaire recherche</li>
+                                  {% endif %}
+                          <li>
+                                   <a href="/deconnexion">Se déconnecter</a> <br />
+                            {% endif %}
+                        </ul>
+
+               {% endblock %}
+                </div>
+
+          <div id="content">
+                  {% block content %}{% endblock %}
+          </div>
+          {% block piedDePage %}
+
+          <hr>
+           <a href="/listes2/">Accueil</a> |<a
+              href="/listes2/infoabonne/">Adresses inscrites</a> | 
+            <a href="/listes2/infousager/">Usagers repertoriés</a> | <a href="/admin/">Administration</a>
+        
+         {% endblock %}
+  </body>
+
+</html>
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/base0.html b/projets_django/bacgl_utils2/listes2/templates/listes2/base0.html
new file mode 100644 (file)
index 0000000..fea2e64
--- /dev/null
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html>
+        <title>{% block title %} BACGL - Gestion des listes {% endblock %}</title>
+  <link rel="stylesheet"  type="text/css" href="{{ STATIC_URL }}css/base.css">
+
+  <body>
+          <div id="side">
+                  {% block sidebar %}
+
+                  <ul>
+                          {% if not user.is_authenticated %}
+                          <li><a href="/connexion">Ouvrir une sessions</a></li>
+                          {% else %}
+                          Bienvenue {{ user.username }}
+                          <li><a href="/accueil">Accueil</li>
+                                  {% if user.is_staff %}
+                          <li><a href="/admin" target="_blank">Interface d'administration</li>
+                          <li><a href="/recherche/">Validation - recherche de code</li>
+                                  {% endif %}
+                          <li>
+                            <a href="/deconnexion">Se déconnecter</a> <br />
+                            {% endif %}
+                      <li><a href="/saisie/bilan/">Bilan des saisies</a></li>
+                        </ul>
+
+                        {% endblock %}
+                </div>
+
+          <div id="content">
+                  {% block content %}{% endblock %}
+          </div>
+  </body>
+</html>
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/entree.html b/projets_django/bacgl_utils2/listes2/templates/listes2/entree.html
new file mode 100644 (file)
index 0000000..a604831
--- /dev/null
@@ -0,0 +1,21 @@
+{% extends "listes2/base.html" %}
+
+{% block content %}
+<div align="center">
+       <h3> Connexion à l'interface de gestion des listes</h3>
+       <table>
+               {% comment %}
+  <form action="/listes2/login/verification" method="post">
+               {% endcomment %}
+               <form action="{% url 'entreeVerification' %}" method="post">
+         {% csrf_token %}
+         <tr><th><label for"id_identifiant">Identifiant:</label></th><td><input id="id_identifiant" maxlength="40" name="identifiant" type="text" /></td></tr>
+         <tr><th><label for"id_password">Mot de passe:</label></th><td><input id="id_password" maxlength="90" name="password" type="password" /></td></tr>
+         <tr><td></td>
+                 <td><input value="Connexion" type="submit" /></td>
+         </tr>
+  </form>
+       </table> ;)
+</div>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/index.html b/projets_django/bacgl_utils2/listes2/templates/listes2/index.html
new file mode 100644 (file)
index 0000000..b03ce33
--- /dev/null
@@ -0,0 +1,66 @@
+{% extends "listes2/base.html" %}
+
+{% block content %}
+
+<h1><a name="debutdepage">Aperçu gestion des listes du bureau</a></h1>
+<p>Il s'agit des listes concernant les usagers académiques</p>
+
+<h3> Récapitulatif</h3>
+<table border="1">
+       <tr><th>Element</th><th>Nombre</th></tr>
+       <tr><td>Listes de diffusion</td><td>{{ listes_dispo | length }}</td></tr>
+       <tr><td>Etablissements</td><td>{{ etab_dispo | length }}</td></tr>
+       <tr><td>Adresses électroniques repertoriées</td><td>{{ adel_dispo | length }}</td></tr>
+</table>
+
+{% if derniers_inscrits %}
+<h3> Les 10 derniers inscrits </h3>
+<ul>
+    {% for inscrit in derniers_inscrits %}
+    <li><em>{{inscrit.abonne}}</em> pour la liste
+        {{inscrit.liste}} le {{inscrit.date_inscription}}</li>
+    {% endfor %}
+</ul>
+
+{% endif %}
+
+{% if listes_dispo %}
+
+<h3>Listes existantes</h3>
+  <ul>
+    {% for liste in listes_dispo %}
+    <li><a href="{% url 'infoListes' liste.id %}">{{liste.nom }}</a></li>
+    {% endfor %}
+ </ul>
+ ;)
+
+    {% else %}
+
+      <p>Pas de listes trouvées !.</p>
+
+{% endif %}
+
+{% if etab_dispo %}
+
+<h3>Etablissements recensés</h3>
+  <ul>
+    {% for etab in etab_dispo %}
+      <li>{{etab }}</li>
+    {% endfor %}
+ </ul>
+
+    {% else %}
+
+      <p>Pas d'établissements trouvés !</p>
+
+{% endif %}
+
+<h3>Adresses électroniques</h3>
+
+<p>Nous dénombrons {{ adel_dispo |length }} adresses électroniques enregistrées.<br />
+Les <a href="{% url 'infoAbonne' %}">consulter</a>
+
+<br />
+<br />
+<a href="#debutdepage">Début de la page</a>
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/infoabonne.html b/projets_django/bacgl_utils2/listes2/templates/listes2/infoabonne.html
new file mode 100644 (file)
index 0000000..212e206
--- /dev/null
@@ -0,0 +1,31 @@
+{% extends "listes2/base.html" %}
+
+
+{% block content %}
+
+<h3>Adresses présentes</h3>
+Total: {{ab|length}}
+
+<ul>
+ {% for adel in adel_p %}
+ <li><a href="{% url 'infoadel' adel.id %}"{{adel.id}}">{{adel}}</a></li> 
+ {% endfor %}
+
+</ul>
+
+<div class="pagination">
+       <span class="step-link">
+               {% if adel_p.has_previous %}
+               <a href="?page= {{ adel_p.previous_page_number }}">précédent</a>
+               {% endif %}
+               <span class="current">
+                       Page {{ adel_p.number }} de {{adel_p.paginator.num_pages }}
+               </span>
+
+               {% if adel_p.has_next %}
+               <a href="?page={{ adel_p.next_page_number }}">suivant</a>
+               {% endif %}
+       </span>
+</div>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/infoadel.html b/projets_django/bacgl_utils2/listes2/templates/listes2/infoadel.html
new file mode 100644 (file)
index 0000000..2446e16
--- /dev/null
@@ -0,0 +1,13 @@
+{% extends "listes2/base.html" %}
+
+{% block content %}
+<p>Adresse électronique: {{ adel.adresse }} <br />
+Propriétaire : {{proprio.nom}} <br />
+Pays d'origine : {{proprio.paysOrigine }} <br />
+Spécialité : {{proprio.specialite }} <br />
+Téléphone : {{proprio.telephone }} <br />
+.
+</p>
+
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/infolistes.html b/projets_django/bacgl_utils2/listes2/templates/listes2/infolistes.html
new file mode 100644 (file)
index 0000000..1d2efae
--- /dev/null
@@ -0,0 +1,21 @@
+{% extends "listes2/base.html" %}
+
+
+{% block content %}
+yello :)
+
+Liste à traiter : {{listes_id}}
+<h3>Liste {{liste.nom}}</h3>
+<p>Description: {{liste.description}}.<br>
+Nombre d'abonnés : {{listing|length}}<br>
+Les abonné(e)s à la liste sont : </p>
+<ul>
+{% for email in listing2 %}
+{% comment %}
+<li><a href="{% url 'listes2::infoadel' liste.id %}">{{liste}}</a></li> 
+{% endcomment %}
+<li><a href="{% url 'infoadel' email.id %}">{{email}}</a></li> 
+{% endfor %}
+</ul>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/infousager.html b/projets_django/bacgl_utils2/listes2/templates/listes2/infousager.html
new file mode 100644 (file)
index 0000000..8db8b51
--- /dev/null
@@ -0,0 +1,51 @@
+{% extends "listes2/base.html" %}
+
+
+{% block content %}
+
+<h3>Usagers repertoriés</h3>
+
+<p>Nombre total d'usagers : {{ us | length  }}</p>
+
+ <table border="1">
+        <tr>
+                <th>Nom</th>
+                <th>Genre</td>
+                <th>Pays d'origine</th>
+                <th>Spécialité</th>
+                <th>Telephone</th>
+                <th>Adresse(s) électronique(s)</th>
+        </tr>
+        {% for k in usager_paginator %}
+        <tr>
+                <td>
+        {{k.nom}}
+                </td>
+                <td>{{k.genre}}</td>
+                <td>{{k.paysOrigine}}</td>
+                <td>{{k.specialite}}</td>
+                <td>{{k.telephone}}</td>
+
+                <td>
+        {{k.adel_set.all}}
+                </td>
+        </tr>
+        {% endfor %}
+ </table>
+
+<div class="pagination">
+       <span class="step-link">
+               {% if usager_paginator.has_previous %}
+               <a href="?page= {{ usager_paginator.previous_page_number }}">précédent</a>
+               {% endif %}
+               <span class="current">
+                       Page {{ usager_paginator.number }} de {{usager_paginator.paginator.num_pages }}
+               </span>
+
+               {% if usager_paginator.has_next %}
+               <a href="?page={{ usager_paginator.next_page_number }}">suivant</a>
+               {% endif %}
+       </span>
+</div>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/insertion.html b/projets_django/bacgl_utils2/listes2/templates/listes2/insertion.html
new file mode 100644 (file)
index 0000000..973e799
--- /dev/null
@@ -0,0 +1,26 @@
+{% extends  "listes2/base.html" %}
+
+{% block content %}
+
+{% if user.is_authenticated %}
+Dernière insertion : {{nom}} <br />
+{% comment %}
+<form action="{% url 'listes2:insertionTraitement' nouvelInscrit %}" method="get">
+  <form action="/listes2/insertion/traitement/" method="get">
+  {% endcomment %}
+<form action="{% url 'insertionTraitement' %}" method="post">
+
+  <table>
+  {%  csrf_token %}
+   {{ form.as_table }}
+
+   <tr>
+     <td></td>
+     <td><input type="submit" value="Ajouter" /></td>
+   </tr>
+  </table>
+</form>
+{% else %}
+<p>Il faut disposer d'un compte pour effectuer des ajouts</p>
+{% endif %}
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/insertion_resultat.html b/projets_django/bacgl_utils2/listes2/templates/listes2/insertion_resultat.html
new file mode 100644 (file)
index 0000000..0e02fef
--- /dev/null
@@ -0,0 +1,15 @@
+{% extends "listes2/base.html" %}
+
+{% block content %}
+
+<p> Le terme recherché était : {{ terme }} </p>
+{{ message }}
+<form action="{% url 'insertionTraitement' %}" method="get">
+</form>
+  <table>
+  {%  csrf_token %}
+   {{ form.as_table }}
+<br />
+<p>Effectuez une nouvelle <a href="/listes2/insertion/">insertion </p>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/pied.html b/projets_django/bacgl_utils2/listes2/templates/listes2/pied.html
new file mode 100644 (file)
index 0000000..952682e
--- /dev/null
@@ -0,0 +1,8 @@
+{% extends "base.html" %}
+
+{% block piedDePage %}
+<hr>
+
+<a href="/">Accueil</a>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/recherche.html b/projets_django/bacgl_utils2/listes2/templates/listes2/recherche.html
new file mode 100644 (file)
index 0000000..1221fa9
--- /dev/null
@@ -0,0 +1,22 @@
+{% extends  "listes2/base.html" %}
+
+{% block content %}
+
+Dernière recherche : {{nom}} <br />
+{% comment %}
+<form action="{% url 'listes2:rechercheTraitement' critere_recherche %}" method="get">
+  <form action="/listes2/recherche/traitement/" method="get">
+  {% endcomment %}
+<form action="{% url 'rechercheTraitement' %}" method="get">
+
+  <table>
+  {%  csrf_token %}
+   {{ form }}
+
+   <tr>
+     <td></td>
+     <td><input type="submit" value="Rechercher" /></td>
+   </tr>
+  </table>
+</form>
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/listes2/recherche_resultats.html b/projets_django/bacgl_utils2/listes2/templates/listes2/recherche_resultats.html
new file mode 100644 (file)
index 0000000..96f692d
--- /dev/null
@@ -0,0 +1,31 @@
+{% extends "listes2/base.html" %}
+
+{% block content %}
+
+<p> Le terme recherché était : {{ terme }} </p>
+
+{% if resultat %}
+<p> {{resultat.count }} nom(s) ou adel(s) correspond(ent) à la requête. </p>
+<table border="1">
+  <tr>
+    <th>NOM</th>
+    <th>Pays d'origine</th>
+    <th>Adresse</th>
+  </tr>
+  {% for l in resultat %}
+  <tr>
+         <td> {{l.nom}} </td>
+         <td>{{l.paysOrigine }}</td>
+         <td> {{l.adel_set.all}} </td>
+  </tr>
+  {% endfor %}
+</table>
+
+ {% else %}
+ <strong> {{message}} </strong>
+
+{% endif %}
+<br />
+<p>Effectuez une nouvelle <a href="/listes2/recherche/">recherche </p>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/templates/pied.html b/projets_django/bacgl_utils2/listes2/templates/pied.html
new file mode 100644 (file)
index 0000000..952682e
--- /dev/null
@@ -0,0 +1,8 @@
+{% extends "base.html" %}
+
+{% block piedDePage %}
+<hr>
+
+<a href="/">Accueil</a>
+
+{% endblock %}
diff --git a/projets_django/bacgl_utils2/listes2/tests.py b/projets_django/bacgl_utils2/listes2/tests.py
new file mode 100644 (file)
index 0000000..7ce503c
--- /dev/null
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/projets_django/bacgl_utils2/listes2/urls.py b/projets_django/bacgl_utils2/listes2/urls.py
new file mode 100644 (file)
index 0000000..7c72747
--- /dev/null
@@ -0,0 +1,21 @@
+from django.conf.urls import patterns, url
+
+from listes2 import views
+
+urlpatterns = patterns('',
+        url(r'^$', views.index, name='index'),
+#        url(r'^adel/(?P<Adel_id>\d+)$', views.adresseE, name='adresseE'),
+        url(r'^login/$', views.entree,name='entree'),
+        url(r'^login/verification/$', views.entreeVerification,name='entreeVerification'),
+        url(r'^deconnexion/$', views.sortie,name='sortie'),
+        url(r'^infousager/$', views.infoUsager,name='infoUsager'),
+        url(r'^infoabonne/$', views.infoAbonne,
+            name='infoAbonne'),
+        url(r'^infoliste/(?P<Listes_id>\d+)/$', views.infoListes, name='infoListes'),
+        url(r'^infoadel/(?P<adel_id>\d+)/$', views.infoAdel, name='infoadel'),
+        url(r'^recherche/$', views.recherche, name='recherche'),
+        url(r'^recherche/traitement/$', views.rechercheTraitement, name='rechercheTraitement'),
+        url(r'^insertion/$', views.insertion, name='insertion'),
+        url(r'^insertion/traitement/$', views.insertionTraitement,
+            name='insertionTraitement'),
+        )
diff --git a/projets_django/bacgl_utils2/listes2/views.py b/projets_django/bacgl_utils2/listes2/views.py
new file mode 100644 (file)
index 0000000..de1b0ae
--- /dev/null
@@ -0,0 +1,238 @@
+# -*- coding:utf-8 -*-
+
+from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
+from django.contrib.auth import authenticate,login,logout
+from django.contrib.auth.models import User
+from django.db.models import Q
+from django.shortcuts import render,render_to_response
+from django.template import RequestContext
+from django.http import HttpResponse,HttpResponseRedirect,\
+        HttpResponseForbidden
+
+from listes2.forms import RechercheForm,InsertionForm
+from listes2.models import Listes,Usager,Abonnement,Adel,Etablissement
+from listes2.models import Scolarite,Specialite,Pays
+
+
+def index(request):
+    """"
+    Page d'accueil du site
+    """
+
+    etab_dispo = []
+    listes_dispo = Listes.objects.order_by('nom')
+    adel_dispo = Adel.objects.all()
+    derniers_inscrits = Abonnement.objects.order_by('-date_inscription')[:10]
+
+
+    for etab in Etablissement.objects.all().order_by('nom'):
+        #ne pas considérer les cellules vides
+        if etab.nom == '' :
+            pass
+        else : etab_dispo.append(etab.nom)
+
+    contexte = {'etab_dispo': etab_dispo,
+            'listes_dispo': listes_dispo,
+            'adel_dispo': adel_dispo,
+            'derniers_inscrits': derniers_inscrits,
+            }
+
+    return render(request,'listes2/index.html',contexte)
+
+def entree(request):
+    return render(request,'listes2/entree.html')
+
+def sortie(request):
+    logout(request)
+    return HttpResponseRedirect('/listes2/')
+
+
+def entreeVerification(request):
+    
+    if request.method == 'POST':
+        usern = request.POST['identifiant']
+        passwd = request.POST['password']
+        user = authenticate(username=usern, password = passwd)
+        if user is not None:
+            if user.is_active:
+                login(request,user)
+                return HttpResponseRedirect('/listes2/insertion/')
+            else :
+                # compte désactivé
+                return HttpResponseForbidden('/listes2/insertion/')
+
+    return HttpResponseRedirect('/listes2/')
+
+
+def infoListes(request,Listes_id):
+    """
+    Toutes les infos sur chaque liste:
+    Nom de la liste,description,abonnés
+    """
+
+    liste = Listes.objects.get(pk=Listes_id)
+
+    li =\
+    Abonnement.objects.filter(liste__id=Listes_id).order_by('abonne__adresse')
+    #avec xx_set c'est plus simple !
+    li2 = liste.abonnement_set.all()
+
+    contexte = {'listes_id':Listes_id,
+            'listing':li,
+            'listing2':li2,
+            'liste': liste,
+            }
+    return render(request,'listes2/infolistes.html',contexte)
+
+def infoAbonne(request):
+    """
+    Disposer des infos sur les différentes adresses 
+    électroniques
+    """
+
+    ab = Adel.objects.all().order_by('adresse')
+    paginator_adel = Paginator(ab,25)
+    page = request.GET.get('page')
+    try:
+        adel_p = paginator_adel.page(page)
+    except PageNotAnInteger:
+        adel_p = paginator_adel.page(1)
+    except EmptyPage:
+        adel_p = paginator_adel.page(paginator.num_pages)
+
+    contexte = {
+            'ab': ab,
+            'adel_p': adel_p,
+            }
+
+    return render(request,'listes2/infoabonne.html',contexte)
+
+
+def infoUsager(request):
+    """
+    Informations sur tous les usagers inscrits
+    """
+
+    info_us3 = {}
+
+    us = Usager.objects.all().order_by('nom','genre')
+    #récupérons les adresses électroniques de chacun
+    for i in us:
+        phrase = "%s|%s|%s|%s|%s|%s" % (i.nom,i.genre,i.paysOrigine,
+                i.specialite,
+                i.telephone,
+                Adel.objects.filter(proprietaire__id=i.id)).order_by('adresse')
+        info_us3[i] = i.adel_set.all()
+
+    #Pagination
+    paginator_usager = Paginator(us,20)
+    page = request.GET.get('page')
+    try:
+        usager_paginator = paginator_usager.page(page)
+    except PageNotAnInteger:
+        usager_paginator = paginator_usager.page(1)
+    except EmptyPage:
+        usager_paginator = paginator_usager(paginator.num_pages)
+
+    contexte = {'us':us, 
+            'info_us3': info_us3,
+            'usager_paginator': usager_paginator,
+            }
+
+    return render(request,'listes2/infousager.html', contexte)
+
+def infoAdel(request,adel_id):
+    """
+    Les infos qu'on peut tirer de chaque adresse électronique
+    """
+
+    adel = Adel.objects.get(pk=adel_id)
+    proprio = Usager.objects.get(adel__id=adel_id)
+
+    contexte = {'adel': adel,
+            'proprio':proprio,
+            }
+
+    return render(request,'listes2/infoadel.html',contexte)
+
+def recherche(request):
+    """
+    Nous permet de retrouver une adresse électronique ou un nom
+    """
+
+    form = RechercheForm()
+    contexte = {'form': form, }
+
+    return render(request,'listes2/recherche.html',contexte)
+
+def rechercheTraitement(request):
+    contexte = {}
+    if request.method == 'GET':
+        form = RechercheForm(request.GET)
+        if form.is_valid():
+            terme = form.cleaned_data['terme']
+            resultat = Usager.objects.filter(\
+                    #TODO trouver comment se séparer des lignes en plus
+#                    Q(nom__contains=terme) | Q(adel__adresse__contains=terme)
+                     adel__adresse__contains=terme
+                    )
+            contexte = {'resultat' : resultat,
+                    'terme': terme,
+                    }
+    else :
+        form = RechercheForm()
+        return render(request,'listes2/recherche.html')
+    if len(contexte) == 0 :
+        contexte['message'] = 'Aucun nom ou adresse trouvé'
+
+    return render(request,'listes2/recherche_resultats.html',contexte)
+
+def insertion(request):
+    """
+    Inscription des personnes et éventuellement
+    avec leur adel et la liste de diffusion
+    """
+
+    form = InsertionForm()
+
+    return render(request,'listes2/insertion.html',{'form':form})
+
+def insertionTraitement(request):
+
+    contexte = {}
+    if request.method == 'POST':
+        form = InsertionForm(request.POST)
+        if form.is_valid():
+            n = form.cleaned_data['nom']
+            g = form.cleaned_data['genre']
+            a = form.cleaned_data['adel']
+            liste_prefix = form.cleaned_data['liste']
+
+            #Et maintenant les enregistrements dans le système
+            #par défaut on va fixé la spécialité à 'ND'
+            spec = Specialite.objects.get(intitule='ND')
+            pays = Pays.objects.get(nom='ND')
+            u = Usager(nom=n,genre=g,
+                    paysOrigine= pays,
+                    specialite= spec,
+                    )
+            u.save(force_insert=True)
+
+            #TODO considerer l'erreur IntegrityError
+            #Puis l'adresse électronique
+            adel = Adel(proprietaire= u, adresse = a)
+            adel.save(force_insert=True)
+
+            #et enfin dans l'abonnement à la liste
+            li = Listes.objects.get(nom=liste_prefix)
+            list_abo = Abonnement(liste=li, abonne= adel)
+            list_abo.save(force_insert=True)
+
+            return HttpResponseRedirect('/listes2/insertion/')
+
+    else : 
+        form = InsertionForm()
+
+    contexte['message'] = 'rien'
+
+    return render(request,'listes2/insertion_resultat.html',contexte)
diff --git a/projets_django/bacgl_utils2/manage.py b/projets_django/bacgl_utils2/manage.py
new file mode 100755 (executable)
index 0000000..0ee9acf
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bacgl.settings")
+
+    from django.core.management import execute_from_command_line
+
+    execute_from_command_line(sys.argv)