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