ajout filtre json ; systeme de template dans .py a part
[restcoda.git] / fournisseur.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 #
5 # Classe pour un fournisseur
6 # (export de la vue auf_v_acces_fournisseur)
7
8 from objet import Objet, ObjetInconnu
9 from utils import dict_fetchone
10
11 class fournisseur(Objet):
12 """objet fournisseur CODA"""
13
14 accept_like_filters = [ 'code', 'nom', 'createur', 'nom_complet', 'categorie', 'adresse_pays' ]
15
16 def _get_index(self):
17 """renvoie une liste de fournisseurs"""
18 # connexion a la base de données
19 cursor = self.cursor()
20 # finition sur le where : si aucune categorie d'adresse n'est demandee, on envoie celle par defaut
21 if not 'categorie' in self.filters:
22 if self.sqlwhere != '':
23 self.sqlwhere += ' and (adresse_defaut = 1) '
24 else:
25 self.sqlwhere = ' (adresse_defaut = 1) '
26 if self.sqlwhere != '':
27 self.sqlwhere = ' where ' + self.sqlwhere
28 request = "select top %d * from auf_v_acces_fournisseurs %s order by date_creation desc" % ( self.sqllimit, self.sqlwhere )
29 cursor.execute( request )
30 items = []
31 while 1:
32 item = dict_fetchone( cursor )
33 if item == None: break
34 items.append(item)
35 index = {}
36 index['fournisseurs'] = items
37 index['nombre_fournisseurs'] = len(items)
38 index['limite_fournisseurs'] = self.sqllimit,
39 index['filtres'] = self.filters
40 index['requete_sql'] = request
41 return index
42
43 def _get_fournisseur(self,code):
44 """renvoie un fournisseur"""
45 # note : renvoie aussi la liste des adresses et pas seulement la premiere iteration trouvée
46 cursor = self.cursor()
47 request = "select * from auf_v_acces_fournisseurs where (code = '%s') order by adresse_defaut desc" % code
48 cursor.execute( request )
49 # le premier resultat est normalement l'adresse par defaut
50 fournisseur = dict_fetchone(cursor)
51 if fournisseur == None:
52 raise ObjetInconnu('fournisseur')
53 autres_adresses = []
54 while 1:
55 # les resultats suivant contiennent les autres adresses
56 adr = dict_fetchone( cursor )
57 if adr == None: break
58 adr_extraite = { 'categorie': adr['categorie'] ,
59 'adresse1': adr['adresse1'],
60 'adresse2': adr['adresse2'],
61 'adresse3': adr['adresse3'],
62 'adresse4': adr['adresse4'],
63 'adresse5': adr['adresse5'],
64 'adresse6': adr['adresse6'],
65 'adresse_code_postal': adr['adresse_code_postal'],
66 'adresse_pays': adr['adresse_pays'],
67 'adresse_telephone': adr['adresse_telephone'],
68 'adresse_telecopie': adr['adresse_telecopie'],
69 }
70 autres_adresses.append(adr_extraite)
71 fournisseur['autres_adresses'] = autres_adresses
72 fournisseur['requete_sql'] = request
73 return fournisseur
74
75 def index(self):
76 """renvoie une liste de fournisseurs formatée"""
77 template = self.template('fournisseur-index') # préparation du modèle
78 index = self._get_index( ) # extraction des documents concernés
79 output = template.render( index ) # formattage via le modèle
80 return self.outputformat, output
81
82 def show(self):
83 """renvoie un fournisseur formaté"""
84 code = self.environ['wsgiorg.routing_args'][1]['id'].upper()
85 template = self.template( 'fournisseur' )
86 fournisseur = self._get_fournisseur( code )
87 output = template.render( fournisseur )
88 return self.outputformat, output
89