ajout filtre json ; systeme de template dans .py a part
[restcoda.git] / budget.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 #
5 # Classe pour un budget (projet-poste)
6 # (export de la table auf_budget)
7
8 from objet import Objet, ObjetInconnu
9 from utils import dict_fetchone
10 from datetime import datetime
11
12 class budget(Objet):
13 """objet budget CODA"""
14 accept_like_filters = [ 'projet_poste', 'projet', 'poste', 'annee', 'implantation' ]
15 def __init__( self, environ ):
16 super(budget, self).__init__(environ)
17 # si aucune annee n'est precisee, on prend celle en cours
18 if not 'annee' in self.filters:
19 annee = datetime.now().year
20 self.filters['annee'] = ['%d' % annee]
21 if self.sqlwhere != '':
22 self.sqlwhere += ' and (annee = %d) ' % annee
23 else:
24 self.sqlwhere = ' (annee = %d) ' % annee
25
26 def _get_index(self):
27 """renvoie une liste de projet-poste """
28 # connexion a la base de données
29 cursor = self.cursor()
30 request = "select top %d * from auf_budget where %s order by projet_poste" % ( self.sqllimit, self.sqlwhere )
31 cursor.execute( request )
32 items = []
33 while 1:
34 item = dict_fetchone( cursor )
35 if item == None: break
36 items.append(item)
37 index = {}
38 index['budgets'] = items
39 index['date_interrogation'] = datetime.today()
40 index['nombre_budgets'] = len(items)
41 index['limite_budgets'] = self.sqllimit,
42 index['filtres'] = self.filters
43 index['requete_sql'] = request
44 return index
45
46 def _get_budget( self, projet_poste ):
47 """renvoie un projet-poste"""
48 # note : renvoie aussi la liste des adresses et pas seulement la premiere iteration trouvée
49 cursor = self.cursor()
50 request = "select top 1 * from auf_budget where (projet_poste = '%s') and %s " % (projet_poste[:6],self.sqlwhere)
51 cursor.execute( request )
52 budget = dict_fetchone(cursor)
53 if budget == None:
54 raise ObjetInconnu('budget')
55 budget['date_interrogation'] = datetime.today()
56 budget['requete_sql'] = request
57 return budget
58
59 def index(self):
60 """renvoie une liste de projets-postes formatée"""
61 template = self.template('budget-index') # préparation du modèle
62 index = self._get_index( ) # extraction des documents concernés
63 output = template.render( index ) # formattage via le modèle
64 return self.outputformat, output
65
66 def show(self):
67 """renvoie un fournisseur formaté"""
68 projet_poste = self.environ['wsgiorg.routing_args'][1]['id'].upper()
69 template = self.template( 'budget' )
70 budget = self._get_budget( projet_poste )
71 output = template.render( budget )
72 return self.outputformat, output
73