| @@ -109,6 +109,7 @@ def main(global_config, **settings): | |||||
| # HTML Routes - Staff | # HTML Routes - Staff | ||||
| config.add_route('Live', '/Live') | config.add_route('Live', '/Live') | ||||
| config.add_route('list_expenses', '/Staff/compta') | |||||
| config.add_route('list_task', '/Staff') | config.add_route('list_task', '/Staff') | ||||
| config.add_route('handle_pole', '/Staff/poles{sep:/*}{pole_id:(\d+)?}') | config.add_route('handle_pole', '/Staff/poles{sep:/*}{pole_id:(\d+)?}') | ||||
| config.add_route('handle_task', '/Staff/tasks{sep:/*}{task_id:(\d+)?}') | config.add_route('handle_task', '/Staff/tasks{sep:/*}{task_id:(\d+)?}') | ||||
| @@ -0,0 +1,81 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| <%inherit file="jm2l:templates/layout.mako"/> | |||||
| <%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | |||||
| <%namespace name="h" file="jm2l:templates/helpers.mako"/> | |||||
| <%def name="jsAddOn()"> | |||||
| <script src="/js/jm2l.js"></script> | |||||
| <script src="/vendor/ckeditor/ckeditor.js"></script> | |||||
| <script src="/vendor/select2/js/select2.js"></script> | |||||
| </%def> | |||||
| <%def name="cssAddOn()"> | |||||
| <link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload.css"> | |||||
| <link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui.css"> | |||||
| <link rel="stylesheet" href="/css/jm2l.css" /> | |||||
| <link rel="stylesheet" href="/vendor/select2/css/select2.css" type="text/css" media="screen" /> | |||||
| <!-- CSS adjustments for browsers with JavaScript disabled --> | |||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-noscript.css"></noscript> | |||||
| <noscript><link rel="stylesheet" href="/vendor/fileupload/css/jquery.fileupload-ui-noscript.css"></noscript> | |||||
| </%def> | |||||
| <div class="row-fluid"> | |||||
| <div class="span10 offset1"> | |||||
| <h3>Liste des justificatifs</h3> | |||||
| <table class="table table-striped table-bordered table-hover"> | |||||
| <thead> | |||||
| <tr> | |||||
| <th colspan="3" style="text-align:center;"> | |||||
| Liste des Frais | |||||
| </th> | |||||
| </tr> | |||||
| <tr> | |||||
| <th style="text-align:center;"> | |||||
| Nom | |||||
| </th> | |||||
| <th style="text-align:center;"> | |||||
| Justificatif | |||||
| </th> | |||||
| <th style="text-align:center;"> | |||||
| RIB | |||||
| </th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| % if len(found)==0: | |||||
| <tr> | |||||
| <td colspan="3" style="text-align:center;"> | |||||
| <i>Aucun justificatif trouvé</i> | |||||
| </td> | |||||
| </tr> | |||||
| % endif | |||||
| % for item, one_dic in found.iteritems(): | |||||
| <tr> | |||||
| <td> | |||||
| <a href="/user/${item}"> | |||||
| <span class="name">${one_dic["User"]["prenom"]} ${one_dic["User"]["nom"]}</span> | |||||
| </a> | |||||
| </td> | |||||
| % if one_dic.has_key("Justif"): | |||||
| <td style="text-align:center;"> | |||||
| ${h.uploader("Justif", one_dic["User"]["uid"], "Justif")} | |||||
| </td> | |||||
| % else: | |||||
| <td><i>Rien</i></td> | |||||
| % endif | |||||
| </tr> | |||||
| <tr> | |||||
| % if one_dic.has_key("RIB"): | |||||
| <td style="text-align:center;"> | |||||
| ${h.uploader("RIB", one_dic["User"]["uid"], "RIB")} | |||||
| </td> | |||||
| % else: | |||||
| <td><i>Rien</i></td> | |||||
| % endif | |||||
| </tr> | |||||
| % endfor | |||||
| </tbody> | |||||
| </table> | |||||
| </div> | |||||
| </div> | |||||
| @@ -134,6 +134,7 @@ ${helpers.uploader_js()} | |||||
| <li><a href="/ListSalles">Gérer les salles</a></li> | <li><a href="/ListSalles">Gérer les salles</a></li> | ||||
| <li><a href="/entities">Gérer les entités</a></li> | <li><a href="/entities">Gérer les entités</a></li> | ||||
| <li><a href="/ListOrga">Participations à l'orga</a></li> | <li><a href="/ListOrga">Participations à l'orga</a></li> | ||||
| <li><a href="/Staff/compta">Comptabilité</a></li> | |||||
| <li role="separator" class="divider"></li> | <li role="separator" class="divider"></li> | ||||
| % endif | % endif | ||||
| <li><a href="/MesJM2L">Mon profil</a></li> | <li><a href="/MesJM2L">Mon profil</a></li> | ||||
| @@ -25,7 +25,8 @@ import unicodedata | |||||
| import datetime | import datetime | ||||
| import re | import re | ||||
| import shutil | import shutil | ||||
| import glob | |||||
| CurrentYear = 2015 | CurrentYear = 2015 | ||||
| ## =-=- Here, We keep some usefull function -=-= | ## =-=- Here, We keep some usefull function -=-= | ||||
| @@ -459,6 +460,57 @@ def list_view(request): | |||||
| DicTask[grp] = tasks | DicTask[grp] = tasks | ||||
| return {'tasks': DicTask } | return {'tasks': DicTask } | ||||
| @view_config(route_name='list_expenses', renderer='jm2l:templates/Staff/compta.mako') | |||||
| def expenses(request): | |||||
| if request.user is None: | |||||
| # Don't answer to users that aren't logged | |||||
| raise HTTPForbidden(u'Vous devez vous identifier pour obtenir une réponse.') | |||||
| if not request.user.Staff: | |||||
| # Don't answer to users that aren't logged | |||||
| raise HTTPForbidden(u'Vous n\'avez pas l\'autorité suffisante pour effectuer cette action.') | |||||
| output = [] | |||||
| dic_out = {} | |||||
| for name in glob.glob('jm2l/upload/images/users/*/RIB/*'): | |||||
| tab_path = name.split('/') | |||||
| if tab_path[6]=='thumbnails' or tab_path[6].endswith('.type'): | |||||
| continue | |||||
| if dic_out.get(tab_path[4]) is None: | |||||
| dic_out[tab_path[4]] = {} | |||||
| if dic_out[tab_path[4]].get('RIB') is None: | |||||
| dic_out[tab_path[4]]['RIB'] = {'files':[], 'thumb':[]} | |||||
| u = User.by_slug(tab_path[4]) | |||||
| dic_out[tab_path[4]]['User'] = { | |||||
| 'uid':u.uid, | |||||
| 'nom':u.nom, | |||||
| 'prenom':u.prenom, | |||||
| 'slug':u.slug | |||||
| } | |||||
| dic_out[tab_path[4]]['RIB']['files'].append( name ) | |||||
| dic_out[tab_path[4]]['RIB']['thumb'].append( name + ".jpg" ) | |||||
| for name in glob.glob('jm2l/upload/images/users/*/Justif/*'): | |||||
| tab_path = name.split('/') | |||||
| if tab_path[6]=='thumbnails' or tab_path[6].endswith('.type'): | |||||
| continue | |||||
| if dic_out.get(tab_path[4]) is None: | |||||
| dic_out[tab_path[4]] = {} | |||||
| if dic_out[tab_path[4]].get('Justif') is None: | |||||
| dic_out[tab_path[4]]['Justif'] = {'files':[], 'thumb':[]} | |||||
| u = User.by_slug(tab_path[4]) | |||||
| dic_out[tab_path[4]]['User'] = { | |||||
| 'uid':u.uid, | |||||
| 'nom':u.nom, | |||||
| 'prenom':u.prenom, | |||||
| 'slug':u.slug | |||||
| } | |||||
| dic_out[tab_path[4]]['Justif']['files'].append( name ) | |||||
| dic_out[tab_path[4]]['Justif']['thumb'].append( name + ".jpg" ) | |||||
| return dict(found=dic_out) | |||||
| @view_config(route_name='handle_task', renderer='jm2l:templates/Staff/tasks.mako') | @view_config(route_name='handle_task', renderer='jm2l:templates/Staff/tasks.mako') | ||||
| def tasks(request): | def tasks(request): | ||||
| if request.user is None: | if request.user is None: | ||||