Typographie.

darcs-hash:20060219000118-68412-2a40af702ab413bdba443be66a148ae23afb8aae.gz
This commit is contained in:
glondu 2006-02-19 01:01:18 +01:00
parent fe603296b4
commit b52b0eb7a0

View file

@ -8,11 +8,12 @@ Inspir
Licence : GNU General Public Licence, version 2
"""
import sys, time, tempfile, os, commands, string, random, syslog
import sys, time, tempfile, os, commands, string, random
sys.path.append('/usr/scripts/impression')
sys.path.append('/usr/scripts/gestion')
from config import impression
from ldap_crans import crans_ldap
from syslog import openlog, syslog, LOG_DEBUG
duree_vie_pdf=3600
@ -41,60 +42,60 @@ class test:
################################################################################
class fichier_impression :
nom_job=''
nbr_pages=1
nb_copie=1
taille="A4"
recto_verso=False
transparent=False
couleur=True
cout=0.0
portrait=True
user=""
user_ldap=None # sera une instance de l'utilisateur dans la base ldap.
imprime=-1 #-2 impression en suspend, -1 mise dans la file
# d'attente, 0 devis, time pour l'heure, -3 déja
# imprimé ou devis fait depuis trops longtemps : le
# pdf n'est plus disponible
nom_fichier_pdf="" # chemin et nom du pdf
nom_fichier_desc="" # chemin et nom du fichier contenant les
# options de l'utilisateur
list_messages=[] # liste d'erreur et de remarque
list_messages_importants=[]
list_messages_admin=[] # liste d'erreur réservé au administrateur
erreur_critique=False # True si une erreur empêchant
# l'impression est apparue
code=None # code pour le digicode
modif_epoch=0.0 # moment de création du job ou devis. exprimé
# en epoch (float) : nombre de seconde depuis
# la référence du temps unix (+-=1970)
job_id=None # champs pour de futures améliorations
class fichier_impression:
nom_job = ''
nbr_pages = 1
nb_copie = 1
taille = "A4"
recto_verso = False
transparent = False
couleur = True
cout = 0.0
portrait = True
user = ""
user_ldap = None # sera une instance de l'utilisateur dans la base ldap.
imprime = -1 #-2 impression en suspend, -1 mise dans la file
# d'attente, 0 devis, time pour l'heure, -3 déja
# imprimé ou devis fait depuis trops longtemps : le
# pdf n'est plus disponible
nom_fichier_pdf = "" # chemin et nom du pdf
nom_fichier_desc = "" # chemin et nom du fichier contenant les
# options de l'utilisateur
list_messages = [] # liste d'erreur et de remarque
list_messages_importants = []
list_messages_admin = [] # liste d'erreur réservé au administrateur
erreur_critique = False # True si une erreur empêchant
# l'impression est apparue
code = None # code pour le digicode
modif_epoch = 0.0 # moment de création du job ou devis. exprimé
# en epoch (float) : nombre de seconde depuis
# la référence du temps unix (+-=1970)
job_id = None # champs pour de futures améliorations
def actualise_cout(self):
# Calcul du cout de l'impression :
retour = cout(self)
# Met le prix dans cout s'il n'y a pas d'erreur
if type(retour) is float :
if type(retour) is float:
self.cout = retour
self.list_messages_importants.append('cout')
else:
self.erreur_critique = True
self.list_messages_importants.append('erreur_critique')
self.list_messages_admin.append('erreur_cout')
syslog.openlog("impression")
syslog.syslog(retour)
openlog("impression")
syslog(retour)
# Repond vrai si le solde est assez élevé.
def test_cout(self):
if self.user_ldap == None:
self.user_ldap = utilisateur(self.user, False)
return not (self.cout > (self.user_ldap.solde() -
impression.decouvert)) # /!\ decouvert est négatif.
# /!\ decouvert est négatif.
return not (self.cout > (self.user_ldap.solde() - impression.decouvert))
def fait_payer(self):
self.user_ldap = utilisateur(self.user,True)
self.user_ldap = utilisateur(self.user, True)
self.user_ldap.solde(-self.cout, self.nom_job)
self.user_ldap.save()
return not (self.cout > (self.user_ldap.solde() - impression.decouvert))
@ -107,7 +108,7 @@ class fichier_impression :
for i in range(1000):
# On génère un code
code = rand.randint(100000,999999)
code = rand.randint(100000, 999999)
# Si le code est libre, on sort de la boucle
if not os.path.exists("/var/impression/codes/%d" % code):
break
@ -129,7 +130,7 @@ class fichier_impression :
codefichier = open("/var/impression/codes/%d" % code, 'w')
codefichier.write("Utilisateur %s\n" % self.user)
codefichier.close()
self.code=code
self.code = code
self.list_messages_importants.append('code')
def impression(self):
@ -137,28 +138,28 @@ class fichier_impression :
# Création de la liste d'options
# pour le nombre de copies
options ='-# %d' % self.nb_copie
options = '-# %d' % self.nb_copie
# Pour spécifier l'imprimante
options +=' -P laserjet'
options += ' -P laserjet'
# Pour spécifier le bac sortie
options += ' -o OutputBin=Left'
# Pour spécifier la version du language postscript utilisé par pdftops
options +=' -o pdf-level3'
options += ' -o pdf-level3'
# Pour donner le titre de l'impression
options +=" -T '%s'" % self.nom_job
options += " -T '%s'" % self.nom_job
# Pour donner le login de l'adherent
options +=' -U %s' % self.user
options += ' -U %s' % self.user
# Pour demander une page de garde
#options += ' -o job-sheets=crans' #page de garde de type standard
options += " -o job-billing=%.2f" % self.cout
if self.transparent :
if self.transparent:
options += ' -o InputSlot=Tray1 -o Media=Transparency'
if self.taille == 'A4':
options += ' -o job-sheets=crans -o pdf-paper=571x817 -o PageSize=A4'
@ -180,8 +181,8 @@ class fichier_impression :
(status,rep) = commands.getstatusoutput("lpr %s %s" % (options, self.nom_fichier_pdf))
if status != 0:
print "<p>status:%d rep: %s</p>" % (status, rep)
syslog.openlog("impression")
syslog.syslog("lpr status:%d | rep: %s" % (status, rep))
openlog("impression")
syslog("lpr status:%d | rep: %s" % (status, rep))
def corrige(self):
# Trouve le nombre de pages
@ -205,7 +206,7 @@ class fichier_impression :
self.recto_verso = False
def affiche_messages_html(self):
body=""
body = ""
"""
if self.imprime:
@ -218,18 +219,18 @@ class fichier_impression :
body=body % {'taille' : self.taille, 'code' : self.code, 'solde' : self.user_ldap.solde(), 'cout' : self.cout , 'adresse_imprimante' : impression.From_imprimante}
"""
body=string.join(self.list_messages_importants)
body = string.join(self.list_messages_importants)
return "<p>%s</p>" % body
def enregistre_pdf(self, f_value, f_nom, dossier):
syslog.openlog("impression")
try :
openlog("impression")
try:
(fd_fichier_desc, self.nom_fichier_desc) = tempfile.mkstemp(suffix='.desc', prefix='job', dir=dossier)
os.close(fd_fichier_desc)
except Exception , inst:
raise ErreurImpression("class :erreur dans creation de desc %s : %s" % (self.nom_fichier_desc,str(inst)))
except Exception, inst:
raise ErreurImpression("class :erreur dans creation de desc %s : %s" % (self.nom_fichier_desc, str(inst)))
self.nom_fichier_pdf = self.nom_fichier_desc.replace('.desc', '.pdf')
try :
try:
fd_fichier_pdf = open(self.nom_fichier_pdf, 'w')
fd_fichier_pdf.write(f_value)
fd_fichier_pdf.close()
@ -241,7 +242,7 @@ class fichier_impression :
self.modif_epoch = time.time()
def sauve_desc(self):
try :
try:
file_obj_desc = open(self.nom_fichier_desc,'w')
for key in ("erreur_critique", "nom_job", "nbr_pages",
"nb_copie","taille", "recto_verso",
@ -255,7 +256,7 @@ class fichier_impression :
raise ErreurImpression("class : erreur dans enregistrement du .desc %s : %s" % (self.nom_fichier_desc,str(inst)))
def read_desc(self):
try :
try:
file_obj_desc = open(self.nom_fichier_desc, 'r')
ligne = file_obj_desc.readline()[0:-1]
while ligne != "":
@ -290,8 +291,8 @@ class fichier_impression :
if not os.path.exists(self.nom_fichier_pdf):
if self.imprime != -3:
self.imprime = -4
syslog.openlog("impression")
syslog.syslog("class : %s a disparu" % self.nom_fichier_pdf)
openlog("impression")
syslog("class : %s a disparu" % self.nom_fichier_pdf)
def __repr__(self):
@ -313,23 +314,23 @@ class fichier_impression :
self.code = "%s#" % self.code
for key in ("nbr_pages", "nb_copie", "taille", "code"):
corps+='<TR><td>%s</td><td>%s</td></TR>\n' % (key,
corps += '<TR><td>%s</td><td>%s</td></TR>\n' % (key,
str(getattr(self,key)))
self.code = self.code[:-1]
corps+="</TABLE>\n</td>\n<td>\n<TABLE BORDER=2 RULES=ROWS CELLPADDDING=0>\n"
corps += "</TABLE>\n</td>\n<td>\n<TABLE BORDER=2 RULES=ROWS CELLPADDDING=0>\n"
for key in ("couleur", "transparent",
"portrait", "recto_verso"):
if getattr(self, key):
corps += '<TR><td>%s</td></TR>\n' % dict_normale[key]
else:
corps += '<TR><td>%s</td></TR>\n' % dict_contraire[key]
corps+="</TABLE>\n</td><td><U>"
corps += "</TABLE>\n</td><td><U>"
if self.erreur_critique:
corps += "erreur de comptage"
else:
corps += "%s euros" % self.cout
corps+="</U></td></TR>\n</TABLE>"
corps += "</U></td></TR>\n</TABLE>"
return corps
################################################################################
@ -359,8 +360,8 @@ def utilisateur(user, rw):
if len(res) != 1 :
raise ErreurImpression("class : adherent %s introuvable\n" % user)
adherent = res[0]
syslog.openlog("impression")
syslog.syslog(syslog.LOG_DEBUG,"class : Adherent %s (aid=%s) recupere.\n" % (user, adherent.id()))
openlog("impression")
syslog(LOG_DEBUG,"class : Adherent %s (aid=%s) recupere.\n" % (user, adherent.id()))
return adherent
################################################################################