--- /dev/null
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+#
+# Classe pour un budget (projet-poste)
+# (export de la table auf_budget)
+
+from objet import Objet, ObjetInconnu
+from utils import dict_fetchone
+from datetime import datetime
+
+class budget(Objet):
+ """objet budget CODA"""
+ accept_like_filters = [ 'projet_poste', 'projet', 'poste', 'annee', 'implantation' ]
+ def __init__( self, environ ):
+ super(budget, self).__init__(environ)
+ # si aucune annee n'est precisee, on prend celle en cours
+ if not 'annee' in self.filters:
+ annee = datetime.now().year
+ self.filters['annee'] = ['%d' % annee]
+ if self.sqlwhere != '':
+ self.sqlwhere += ' and (annee = %d) ' % annee
+ else:
+ self.sqlwhere = ' (annee = %d) ' % annee
+
+ def _get_index(self):
+ """renvoie une liste de projet-poste """
+ # connexion a la base de données
+ cursor = self.cursor()
+ request = "select top %d * from auf_budget where %s order by projet_poste" % ( self.sqllimit, self.sqlwhere )
+ cursor.execute( request )
+ items = []
+ while 1:
+ item = dict_fetchone( cursor )
+ if item == None: break
+ items.append(item)
+ index = {}
+ index['budgets'] = items
+ index['date_interrogation'] = datetime.today()
+ index['nombre_budgets'] = len(items)
+ index['limite_budgets'] = self.sqllimit,
+ index['filtres'] = self.filters
+ index['requete_sql'] = request
+ return index
+
+ def _get_budget( self, projet_poste ):
+ """renvoie un projet-poste"""
+ # note : renvoie aussi la liste des adresses et pas seulement la premiere iteration trouvée
+ cursor = self.cursor()
+ request = "select top 1 * from auf_budget where (projet_poste = '%s') and %s " % (projet_poste[:6],self.sqlwhere)
+ cursor.execute( request )
+ budget = dict_fetchone(cursor)
+ if budget == None:
+ raise ObjetInconnu('budget')
+ budget['date_interrogation'] = datetime.today()
+ budget['requete_sql'] = request
+ return budget
+
+ def index(self):
+ """renvoie une liste de projets-postes formatée"""
+ template = self.template('budget-index') # préparation du modèle
+ index = self._get_index( ) # extraction des documents concernés
+ output = template.render( index ) # formattage via le modèle
+ return self.outputformat, output
+
+ def show(self):
+ """renvoie un fournisseur formaté"""
+ projet_poste = self.environ['wsgiorg.routing_args'][1]['id'].upper()
+ template = self.template( 'budget' )
+ budget = self._get_budget( projet_poste )
+ output = template.render( budget )
+ return self.outputformat, output
+
--- /dev/null
+<html>
+<head>
+ <title>AUF CODA interrogation budgétaire</title>
+</head>
+<body>
+
+<div id="titre">
+<h2>Interrogation budgétaire</h2>
+<em>Filtres : </em>
+<ul>
+{% for f in filtres %}
+<li>{{ f }} : {% for d in filtres[f] %} {{ d }} {% if not loop.last %} ou {% endif %} {% endfor %}</li>
+{% endfor %}
+</ul>
+</div>
+
+<em>Budget au {{date_interrogation}}</em>
+
+
+<div id="budget">
+<table id="budget" border="1">
+<tr>
+ <th>Année</th>
+ <th>Implantation</th>
+ <th colspan="2">Projet poste</th>
+ <th>Budget</th>
+ <th>Réalisé</th>
+ <th>Engagé</th>
+ <th>Solde</th>
+</tr>
+{% for b in budgets %}
+<tr bgcolor="{% cycle '#c0c0c0', '#ffffff' %}">
+ <td>{{ b.annee }}</td>
+ <td><a href="./budget.html?implantation={{ b.implantation }}&annee={{ b.annee }}">{{ b.implantation }}</td>
+ <td><a href="./budget.html?projet_poste={{ b.projet_poste[:4] }}*&annee={{ b.annee }}">{{ b.projet}} ({{ b.projet_poste[:4] }})</a><br />{{ b.poste }} ({{ b.projet_poste[4:6] }})</td>
+ <td><a href="./budget/{{ b.projet_poste }}.html?annee={{ b.annee }}">{{ b.projet_poste }}</a></td>
+ <td align="right">{{ b.budget }} €</td>
+ <td align="right">{{ b.reel }} €</td>
+ <td align="right">{{ b.engage }} €</td>
+ <td align="right">{{ b.solde }} €</td>
+</tr>
+{% endfor %}
+</table>
+</div>
+
+<!-- {{requete_sql}} -->
+</body>
+</html>
+
--- /dev/null
+<html>
+<head>
+ <title>AUF CODA {{projet_poste}} {{annee}}</title>
+</head>
+<body>
+
+<div id="titre">
+<h2>Projet-poste {{projet_poste}} pour {{annee}}</h2>
+</div>
+
+<div id="budget">
+Budget (au {{date_interrogation}})
+{% if budget > 0 %}<br />
+<img src="http://chart.apis.google.com/chart?cht=p3&chtt={{ projet_poste }}%20({{ annee }})&chd=t:{{ reel / budget }},{{ engage / budget }},{{ solde / budget }}&chs=250x100&chl=Réalisé|Engagé|Solde" width="250" height="100" alt="camembert coulant de chez google">
+{% endif %}
+<table id="budget" border="1">
+<tr>
+ <th>Année</th>
+ <th>Implantation</th>
+ <th colspan="2">Projet poste</th>
+ <th>Budget</th>
+ <th>Réalisé</th>
+ <th>Engagé</th>
+ <th>Solde</th>
+</tr>
+<tr>
+ <td>{{ annee }}</td>
+ <td><a href="../budget.html?implantation={{ implantation }}&annee={{ annee }}">{{ implantation }}</td>
+ <td><a href="../budget.html?projet_poste={{ projet_poste[:4] }}*&annee={{ annee }}">{{ projet}} ({{ projet_poste[:4] }})</a><br />{{ poste }} ({{ projet_poste[4:6] }})</td>
+ <td><a href="../budget/{{ projet_poste }}.html?annee={{ annee }}">{{ projet_poste }}</a></td>
+ <td>{{ budget }} €</td>
+ <td>{{ reel }} €</td>
+ <td>{{ engage }} €</td>
+ <td>{{ solde }} €</td>
+</tr>
+</table>
+</div>
+
+</div>
+
+<!-- {{requete_sql}} -->
+</body>
+</html>
+
<th>Implantation</th>
<th colspan="2">Projet poste</th>
<th>Budget</th>
- <th>Réel</th>
+ <th>Réalisé</th>
<th>Engagé</th>
<th>Solde</th>
</tr>
<tr>
<td>{{ budget.annee }}</td>
- <td>{{ budget.implantation }}</td>
- <td>{{ budget.poste}}<br />{{ budget.projet }}</td>
+ <td><a href="../budget.html?implantation={{ budget.implantation }}&annee={{ budget.annee }}">{{ budget.implantation }}</td>
+ <td><a href="../budget.html?projet_poste={{ budget.projet_poste[:4] }}*&annee={{ budget.annee }}">{{ budget.projet}} ({{ budget.projet_poste[:4] }})</a><br />{{ budget.poste }} ({{ budget.projet_poste[4:6] }})</td>
<td><a href="../budget/{{ budget.projet_poste }}.html?annee={{ budget.annee }}">{{ budget.projet_poste }}</a></td>
<td>{{ budget.budget }} €</td>
<td>{{ budget.reel }} €</td>
mapper.resource('com','com')
mapper.resource('utilisateur','utilisateur')
mapper.resource('fournisseur','fournisseur')
+mapper.resource('budget','budget')
# objets disponibles
from document import demlog, comlog, demdep, comdep, dempub, compub, comare, comsre, comxre, dem, com
from utilisateur import utilisateur
from fournisseur import fournisseur
+from budget import budget
def dispatcher(environ, start_response):
"""dispatch vers la bonne methode du bon objet, et retour WSGI"""