objet budget
authorThomas NOEL <thomas@new-dev.(none)>
Fri, 11 Jul 2008 14:19:21 +0000 (10:19 -0400)
committerThomas NOEL <thomas.noel@auf.org>
Fri, 11 Jul 2008 14:19:21 +0000 (10:19 -0400)
budget.py [new file with mode: 0644]
modeles/budget-index.html [new file with mode: 0644]
modeles/budget.html [new file with mode: 0644]
modeles/document.html
rest.py

diff --git a/budget.py b/budget.py
new file mode 100644 (file)
index 0000000..baa3fdf
--- /dev/null
+++ b/budget.py
@@ -0,0 +1,73 @@
+#!/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
+
diff --git a/modeles/budget-index.html b/modeles/budget-index.html
new file mode 100644 (file)
index 0000000..a1d7e14
--- /dev/null
@@ -0,0 +1,49 @@
+<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 }}&nbsp;€</td>
+  <td align="right">{{ b.reel }}&nbsp;€</td>
+  <td align="right">{{ b.engage }}&nbsp;€</td>
+  <td align="right">{{ b.solde }}&nbsp;€</td>
+</tr>
+{% endfor %}
+</table>
+</div>
+
+<!-- {{requete_sql}} -->
+</body>
+</html>
+
diff --git a/modeles/budget.html b/modeles/budget.html
new file mode 100644 (file)
index 0000000..508d4c8
--- /dev/null
@@ -0,0 +1,44 @@
+<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 }}&nbsp;€</td>
+  <td>{{ reel }}&nbsp;€</td>
+  <td>{{ engage }}&nbsp;€</td>
+  <td>{{ solde }}&nbsp;€</td>
+</tr>
+</table>
+</div>
+
+</div>
+
+<!-- {{requete_sql}} -->
+</body>
+</html>
+
index 0a04ff9..018cec1 100644 (file)
@@ -128,14 +128,14 @@ Budget (le {{budget.date_interrogation}})
   <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 }}&nbsp;€</td>
   <td>{{ budget.reel }}&nbsp;€</td>
diff --git a/rest.py b/rest.py
index 7e0edc0..668115f 100644 (file)
--- a/rest.py
+++ b/rest.py
@@ -45,11 +45,13 @@ mapper.resource('dem','dem')
 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"""