From: Olivier Larchevêque Date: Tue, 10 May 2011 20:08:51 +0000 (-0400) Subject: poste PDF X-Git-Tag: DAE+RH~311^2~36 X-Git-Url: http://git.auf.org/?p=auf_rh_dae.git;a=commitdiff_plain;h=5b1edfa04aa4c74aac67aeac7f64f4e00e9bae36;ds=sidebyside poste PDF --- diff --git a/buildout.cfg b/buildout.cfg index cb00740..4882a7e 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -22,6 +22,10 @@ eggs = django-reversion simplejson django-ajax-selects + reportlab + html5lib + pyPDF + pisa [versions] django-admin-tools = 0.4.0 @@ -32,6 +36,10 @@ auf.django.auth = 0.5.2dev django-reversion = 1.3.3 auf.django.workflow = 0.9dev django-ajax-selects = 1.1.4 +reportlab = 2.5 +html5lib = 0.90 +pyPDF = 1.13 +pisa = 3.0.33 [django] recipe = auf.recipe.django diff --git a/project/dae/templates/dae/embauche_consulter.html b/project/dae/templates/dae/embauche_consulter.html index 0e1c089..d30fe10 100644 --- a/project/dae/templates/dae/embauche_consulter.html +++ b/project/dae/templates/dae/embauche_consulter.html @@ -11,7 +11,8 @@ {% block main %}

Demandes d'autorisation d'engagement de personnel

-Modifier +PDF +Modifier

SECTION 1 - POSTE

diff --git a/project/dae/templates/dae/poste_consulter.html b/project/dae/templates/dae/poste_consulter.html index 6312405..5e01b74 100644 --- a/project/dae/templates/dae/poste_consulter.html +++ b/project/dae/templates/dae/poste_consulter.html @@ -14,7 +14,8 @@ Demande d'autorisation d'embauche {% block main %}

Demande d'autorisation de création de poste

-Modifier +PDF +Modifier
{% include "dae/poste_resume.html" %} diff --git a/project/dae/templates/dae/poste_pdf.html b/project/dae/templates/dae/poste_pdf.html new file mode 100644 index 0000000..9da8f03 --- /dev/null +++ b/project/dae/templates/dae/poste_pdf.html @@ -0,0 +1,37 @@ + + + + + + + + + + +

Demande d'autorisation de création de poste

+
+ + {% include "dae/poste_resume.html" %} + +
+

Validation

+ + +
+ +
+

Signatures

+ +

____________________________________________________________

+

____________________________________________________________

+

____________________________________________________________

+
+ + + diff --git a/project/dae/templates/dae/poste_resume.html b/project/dae/templates/dae/poste_resume.html index 8edebc8..770bcbe 100644 --- a/project/dae/templates/dae/poste_resume.html +++ b/project/dae/templates/dae/poste_resume.html @@ -48,15 +48,14 @@ Durée {% if not poste.date_fin %}indéterminée{% endif %} {% if poste.date_fin %} - du {{ poste.date_debut }} - au {{ poste.date_fin }} + du {{ poste.date_debut }} au {{ poste.date_fin }} {% else %} à partir du {{ poste.date_debut }} {% endif %} Régime travail - {{ poste.regime_travail }}% + {{ poste.regime_travail }}% Nombre d'heure par semaine diff --git a/project/dae/views.py b/project/dae/views.py index b534850..1f881ea 100644 --- a/project/dae/views.py +++ b/project/dae/views.py @@ -1,6 +1,8 @@ # -*- encoding: utf-8 -*- +import os import datetime +import StringIO from collections import defaultdict from datetime import date from simplejson import dumps @@ -9,10 +11,13 @@ import warnings from django.core.urlresolvers import reverse from django.http import Http404, HttpResponse, HttpResponseGone from django.shortcuts import redirect, render_to_response, get_object_or_404 -from django.template import RequestContext +from django.template import Context, RequestContext +from django.template.loader import get_template from django.contrib import messages +from django.conf import settings from reversion.models import Version +import ho.pisa as pisa from project.dae import models as dae from project.rh_v1 import models as rh @@ -23,6 +28,28 @@ from decorators import dae_groupe_requis, \ employe_dans_ma_region_ou_service from forms import * +pisa.showLogging() + +def reponse_pdf(template_src, context_dict): + """ + Générer une réponse HTTP avec un PDF + """ + css = "" + for f in ('css/pdf.css', 'css/dae.css'): + css_file = os.path.join(settings.MEDIA_ROOT, f) + css += open(css_file, 'r').read() + context_dict['css'] = css + + template = get_template(template_src) + context = Context(context_dict) + html = template.render(context) + result = StringIO.StringIO() + pdf = pisa.pisaDocument(html, result, encoding='UTF-8') + if not pdf.err: + return HttpResponse(result.getvalue(), mimetype='application/pdf') + return HttpResponse("impossible de générer le pdf! %s" % html) + + @dae_groupe_requis def index(request): return render_to_response('dae/index.html', {}, RequestContext(request)) @@ -43,7 +70,16 @@ def poste_consulter(request, key): validationForm = PosteWorkflowForm(instance=poste, request=request) vars = {'poste' : poste, 'validationForm' : validationForm, } - return render_to_response('dae/poste_consulter.html', vars, RequestContext(request)) + + + mode = request.GET.get('mode', None) + if mode is None: + return render_to_response('dae/poste_consulter.html', vars, RequestContext(request)) + if mode == 'pdf': + return reponse_pdf('dae/poste_pdf.html', vars) + if mode == 'vpdf': + return render_to_response('dae/poste_pdf.html', vars, RequestContext(request)) + @dae_groupe_requis @poste_dans_ma_region_ou_service diff --git a/project/media/css/dae.css b/project/media/css/dae.css index f7beb02..32e7406 100644 --- a/project/media/css/dae.css +++ b/project/media/css/dae.css @@ -5,7 +5,7 @@ .clear {display: block; clear: both;} .note {text-decoration: underline; font-style: italic; margin-left: 12px;} .info {font-size:13px; font-style: italic;} -.noborder {border:none; margin:0; padding; 0} +.noborder {border:none; margin:0; padding: 0;} tr.noborder td {border:none; padding-left: 0;} .supprimer {text-decoration: none; color: blue; font-size: 12px; margin-left: 6px; cursor: pointer;} th ul.errorlist {float: right;} @@ -13,4 +13,4 @@ th ul.errorlist {float: right;} .droite { float:right; text-align:right; } h2.section {width:100%; background-color: #D0E8F8; text-align: center; color: #5F5F5F; margin: 50px 0px 26px 0px; border-bottom: 3px solid #BBD8EC; padding: 4px;} .montant {text-align: right;} -.bouton-modifier {border:1px #BBD8EC solid; font-size: 14px; font-weight: bold; margin: 12px 0; padding: 4px 8px; color: #BBD8EC;} +.bouton-action {border:1px #BBD8EC solid; font-size: 14px; font-weight: bold; margin: 12px 0; padding: 4px 8px; color: #BBD8EC; margin-left: 6px;} diff --git a/project/media/css/pdf.css b/project/media/css/pdf.css new file mode 100644 index 0000000..749a98b --- /dev/null +++ b/project/media/css/pdf.css @@ -0,0 +1,35 @@ +p, ul { margin: 6px 0;} + +body { margin:0; padding:0; background:#fff; color:#454545; font:0.8em verdana, arial, helvetica, sans-serif; } + +h1 { margin:10px 0 0 0; padding:0; color:#d15517; font-size:200%;font-weight:bold; } +h2 { margin:10px 0 0 0; padding:0; color:#5f5f5f; font-size:190%; } +h3 { margin:10px 0 0 0; padding:0; color:#5f5f5f; font-size:170%; } +h4 { margin:10px 0 0 0; padding:0; color:#5f5f5f; font-size:150%; } +h5 { margin:10px 0 0 0; padding:0; background:inherit; color:#5f5f5f; font-size:130%; } + +li {margin-left: 1em; line-height:1.4em; } +p {line-height:1.4em; text-align: justify; } + +a:link, a:visited { color:#0643bb; text-decoration:none; } +a:active { color:#990000; text-decoration:none; } +a:hover { color:#d15517; text-decoration:none; } +a img { border:none; } + +strong {font-weight: bold;} + +form { margin:8px 17px 0 0; padding:0px; } +fieldset {border: none; } +label {font-weight: bold;} + +table { margin:10px 0px; border-collapse:collapse; padding:5px; } +table th, table td{ font-size: 14px; border-top:1px solid #d0e8f8; border-left:1px solid #d0e8f8; padding: 5px; } +table { border-bottom:1px solid #d0e8f8; border-right:1px solid #d0e8f8; } +th { height:28px; border-top:2px solid #d0e8f8; padding:0 10px; background-color:#F8FBFD; font-size:14px; text-align:left; font-weight: bold;} +td { vertical-align: top; } +table h1, table h2, table h3, table h4, table h5 {font-size: 120%; } + +.cell-nombre { padding-right:0px; text-align:right; } +.row1, .even {} +.row2, .odd { background-color:#EFEFEF; } +.signature {margin: 36px 0px;}