Réparé le tri des chercheurs par nom, établissement ou pays en conjugaison avec
authorEric Mc Sween <eric.mcsween@gmail.com>
Thu, 9 Dec 2010 20:25:25 +0000 (15:25 -0500)
committerEric Mc Sween <eric.mcsween@gmail.com>
Thu, 9 Dec 2010 20:25:25 +0000 (15:25 -0500)
la recherche textuelle.

auf_savoirs_en_partage/chercheurs/models.py
auf_savoirs_en_partage/chercheurs/views.py
auf_savoirs_en_partage/savoirs/models.py
auf_savoirs_en_partage/scripts/sphinx.conf.py.in
auf_savoirs_en_partage/templates/savoirs/evenement_ajout.html

index 957d1da..a4ec95d 100644 (file)
@@ -64,12 +64,24 @@ class ChercheurQuerySet(SEPQuerySet):
     def filter_expert(self):
         return self.exclude(expertises=None)
 
+    def order_by_nom(self, direction=''):
+        return self.order_by(direction + 'personne__nom', direction + 'personne__prenom', '-date_modification')
+
+    def order_by_etablissement(self, direction=''):
+        return self.extra(select=dict(nom_etablissement='IFNULL(ref_etablissement.nom, chercheurs_chercheur.etablissement_autre_nom)'),
+                                      order_by=[direction + 'nom_etablissement', '-date_modification'])
+
+    def order_by_pays(self, direction=''):
+        return self.extra(select=dict(
+            pays_etablissement='''(SELECT nom FROM ref_pays 
+                                   WHERE ref_pays.code = IFNULL(ref_etablissement.pays, chercheurs_chercheur.etablissement_autre_pays))'''
+        ), order_by=[direction + 'pays_etablissement', '-date_modification'])
+
 class ChercheurSphinxQuerySet(SEPSphinxQuerySet):
 
     def __init__(self, model=None):
         return SEPSphinxQuerySet.__init__(self, model=model, index='savoirsenpartage_chercheurs',
-                                          weights=dict(nom=2, prenom=2))
-
+                                          weights=dict(nom=2, prenom=2)) 
     def filter_region(self, region):
         return self.filter(region_id=region.id)
 
@@ -87,6 +99,15 @@ class ChercheurSphinxQuerySet(SEPSphinxQuerySet):
     def filter_statut(self, statut):
         return self.filter(statut=self.STATUT_CODES[statut])
 
+    def order_by_nom(self, direction=''):
+        return self.order_by(direction + 'nom_complet', '-date_modification')
+
+    def order_by_etablissement(self, direction=''):
+        return self.order_by(direction + 'etablissement_attr', '-date_modification')
+
+    def order_by_pays(self, direction=''):
+        return self.order_by(direction + 'pays_attr', '-date_modification')
+
 class ChercheurManager(SEPManager):
 
     def get_query_set(self):
@@ -114,6 +135,15 @@ class ChercheurManager(SEPManager):
     def filter_expert(self):
         return self.get_query_set().filter_expert()
 
+    def order_by_nom(self, direction=''):
+        return self.get_query_set().order_by_nom(self, direction=direction)
+
+    def order_by_etablissement(self, direction=''):
+        return self.get_query_set().order_by_etablissement(self, direction=direction)
+
+    def order_by_pays(self, direction=''):
+        return self.get_query_set().order_by_pays(self, direction=direction)
+
 STATUT_CHOICES = (('enseignant', 'Enseignant-chercheur dans un établissement'), ('etudiant', 'Étudiant-chercheur doctorant'), ('independant', 'Chercheur indépendant docteur'))
 class Chercheur(models.Model):
     id = models.AutoField(primary_key=True, db_column='id')
index 0fabd3c..85fa6d9 100644 (file)
@@ -128,14 +128,11 @@ def index(request):
     else:
         direction = ''
     if sort == 'nom':
-        chercheurs = chercheurs.order_by(direction + 'personne__nom', 'personne__prenom', '-date_modification')
+        chercheurs = chercheurs.order_by_nom(direction)
     elif sort == 'etablissement':
-        chercheurs = chercheurs.extra(select=dict(nom_etablissement='IFNULL(ref_etablissement.nom, chercheurs_chercheur.etablissement_autre_nom)'),
-                                      order_by=[direction + 'nom_etablissement', '-date_modification'])
+        chercheurs = chercheurs.order_by_etablissement(direction)
     elif sort == 'pays':
-        chercheurs = chercheurs.extra(select=dict(
-            pays_etablissement='(SELECT nom FROM ref_pays WHERE ref_pays.code = IFNULL(ref_etablissement.pays, chercheurs_chercheur.etablissement_autre_pays))' 
-        ), order_by=[direction + 'pays_etablissement', '-date_modification'])
+        chercheurs = chercheurs.order_by_pays(direction)
     else:
         chercheurs = chercheurs.order_by('-date_modification')
 
index f99f293..77f26b7 100644 (file)
@@ -322,8 +322,8 @@ class Evenement(models.Model):
         """Sauvegarde l'objet dans django et le synchronise avec caldav s'il a été
         approuvé"""
         self.clean()
-        self.update_vevent()
         super(Evenement, self).save(*args, **kwargs)
+        self.update_vevent()
 
     # methodes de commnunications avec CALDAV
     def as_ical(self,):
index 1823a1f..76c2c56 100644 (file)
@@ -33,7 +33,8 @@ def multiline(s):
     """Place un marqueur de continuation avant chaque saut de ligne."""
     return s.replace("\n", "\\\n")
 
-def emit_source(name, sql_query, sql_query_info=None, sql_attr_multi=None, sql_attr_uint=None):
+def emit_source(name, sql_query, sql_query_info=None, sql_attr_multi=None, sql_attr_uint=None,
+                sql_attr_str2ordinal=None):
     print '''
 source %%(name)s
 {
@@ -59,6 +60,10 @@ source %%(name)s
         for attr in sql_attr_uint:
             print '    sql_attr_uint = ' + attr
     
+    if sql_attr_str2ordinal:
+        for attr in sql_attr_str2ordinal:
+            print '    sql_attr_str2ordinal = ' + attr
+
     print '}'
 
 def emit_index(name):
@@ -150,6 +155,7 @@ emit_source('savoirsenpartage_chercheurs',
             '''SELECT c.id AS id,
                       p.nom AS nom,
                       p.prenom AS prenom,
+                      CONCAT(p.nom, ' ', p.prenom) AS nom_complet,
                       c.theme_recherche AS theme_recherche,
                       c.groupe_recherche AS groupe_recherche,
                       c.mots_cles AS mots_cles,
@@ -158,7 +164,9 @@ emit_source('savoirsenpartage_chercheurs',
                       c.expert_oif_details AS expert_oif_details,
                       c.membre_instance_auf_details AS membre_instance_auf_details,
                       IFNULL(et.nom, etablissement_autre_nom) AS etablissement,
+                      IFNULL(et.nom, etablissement_autre_nom) AS etablissement_attr,
                       pays.nom AS pays,
+                      pays.nom AS pays_attr,
                       pays.id AS pays_id,
                       r.nom AS region,
                       r.id AS region_id,
@@ -180,7 +188,7 @@ emit_source('savoirsenpartage_chercheurs',
                FROM chercheurs_chercheur c
                INNER JOIN chercheurs_personne p ON c.personne = p.id
                LEFT JOIN ref_etablissement et ON et.id = c.etablissement
-               LEFT JOIN ref_pays pays ON pays.id = IFNULL(et.pays, c.etablissement_autre_pays)
+               LEFT JOIN ref_pays pays ON pays.code = IFNULL(et.pays, c.etablissement_autre_pays)
                LEFT JOIN ref_region r ON pays.region = r.id
                LEFT JOIN discipline d ON d.id_discipline = c.discipline
                LEFT JOIN chercheurs_publication pub ON pub.chercheur_id = c.id
@@ -191,7 +199,8 @@ emit_source('savoirsenpartage_chercheurs',
                GROUP BY c.id''',
             sql_query_info='SELECT * from chercheurs_chercheur WHERE id=$id',
             sql_attr_multi=['groupe_ids'],
-            sql_attr_uint=['pays_id', 'region_id', 'nord_sud', 'date_modification', 'statut', 'expert'])
+            sql_attr_uint=['pays_id', 'region_id', 'nord_sud', 'date_modification', 'statut', 'expert'],
+            sql_attr_str2ordinal=['nom_complet', 'etablissement_attr', 'pays_attr'])
                       
 emit_source('savoirsenpartage_sites',
             '''SELECT s.id AS id,
index 5d58176..008c254 100644 (file)
@@ -20,7 +20,7 @@
 </style>
 
 <h1>Soumettre un évènement</h1>
-<form method="POST">
+<form method="POST" enctype="multipart/form-data">
     <table class="form">
         {% include "render_form.html" %}
         <tr><td></td><td><input type="submit" value="Ajouter" /></td></tr>