[class_impression] ajout de la nouvelle imprimante canon, depreciation de l'ancienne
Ignore-this: 633db6e93c34ebc923ddcc0a404037c8 darcs-hash:20090514155246-bd074-1d60f71adf54f4a7ba56d2f281a4208ec6b54d6b.gz
This commit is contained in:
parent
3c617a5eb8
commit
35cc9fa3d3
1 changed files with 192 additions and 74 deletions
|
@ -14,6 +14,8 @@ 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
|
from syslog import openlog, syslog, LOG_DEBUG
|
||||||
|
from gen_code import NoCodeError, new_code
|
||||||
|
|
||||||
|
|
||||||
duree_vie_pdf=3600
|
duree_vie_pdf=3600
|
||||||
|
|
||||||
|
@ -39,7 +41,7 @@ class test:
|
||||||
return (40.+modif)
|
return (40.+modif)
|
||||||
def save(self):
|
def save(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
class fichier_impression:
|
class fichier_impression:
|
||||||
|
@ -53,7 +55,8 @@ class fichier_impression:
|
||||||
couleur = True
|
couleur = True
|
||||||
cout = 0.0
|
cout = 0.0
|
||||||
portrait = True
|
portrait = True
|
||||||
agrafe=0 #-1 : agrafe diagonale, 0 : pas d'agrafe, 1 : 1 agrafe parallele, 2: 2 agrafes, 3: 3 agrafes, 6: 6 agrafes(stitching)
|
livret = False
|
||||||
|
agrafe= "None" # TopLeft, Top, TopRight, Left, Right, BottomLeft, BottomRight
|
||||||
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
|
||||||
|
@ -75,12 +78,12 @@ class fichier_impression:
|
||||||
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):
|
||||||
""" Actualise le champ cout
|
""" Actualise le champ cout
|
||||||
Leve l'erreur ErreurImpression si le calcul du cout ne c'est pas bien passe """
|
Leve l'erreur ErreurImpression si le calcul du cout ne c'est pas bien passe """
|
||||||
# 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
|
||||||
|
@ -91,15 +94,13 @@ class fichier_impression:
|
||||||
self.list_messages_admin.append('erreur_cout')
|
self.list_messages_admin.append('erreur_cout')
|
||||||
raise ErreurImpression(retour)
|
raise ErreurImpression(retour)
|
||||||
|
|
||||||
|
|
||||||
def test_cout(self):
|
def test_cout(self):
|
||||||
""" Repond vrai si le solde est assez élevé. """
|
""" Repond vrai si le solde est assez élevé. """
|
||||||
if self.user_ldap == None:
|
if self.user_ldap == None:
|
||||||
self.user_ldap = utilisateur(self.user, False)
|
self.user_ldap = utilisateur(self.user, False)
|
||||||
# /!\ decouvert est négatif.
|
# /!\ decouvert est négatif.
|
||||||
return not (self.cout > (self.user_ldap.solde() - impression.decouvert))
|
return not (self.cout > (self.user_ldap.solde() - impression.decouvert))
|
||||||
|
|
||||||
|
|
||||||
def fait_payer(self):
|
def fait_payer(self):
|
||||||
""" Retire au solde de l'adherent la valeur de cout """
|
""" Retire au solde de l'adherent la valeur de cout """
|
||||||
self.user_ldap = utilisateur(self.user, True)
|
self.user_ldap = utilisateur(self.user, True)
|
||||||
|
@ -107,22 +108,13 @@ class fichier_impression:
|
||||||
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))
|
||||||
|
|
||||||
|
|
||||||
def gen_code(self):
|
def gen_code(self):
|
||||||
""" Genere le code et l'enregistre dans /var/impression/codes pour radius """
|
""" Genere le code et l'enregistre dans /var/impression/codes pour radius """
|
||||||
# Génération du code et écriture du code
|
try:
|
||||||
rand=random.Random()
|
self.code = new_code("Utilisateur %s\n" % self.user)
|
||||||
# Graine automatique avec le temps
|
self.list_messages_importants.append('code')
|
||||||
rand.seed()
|
|
||||||
|
except NoCodeError:
|
||||||
for i in range(1000):
|
|
||||||
# On génère un code
|
|
||||||
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
|
|
||||||
|
|
||||||
else:
|
|
||||||
# Pas de code disponible
|
# Pas de code disponible
|
||||||
print ("ERROR: Il n'y a pas de code disponible" )
|
print ("ERROR: Il n'y a pas de code disponible" )
|
||||||
sys.stderr.write ("ERROR: Il n'y a pas de code disponible" )
|
sys.stderr.write ("ERROR: Il n'y a pas de code disponible" )
|
||||||
|
@ -135,31 +127,20 @@ class fichier_impression:
|
||||||
sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n")
|
sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n")
|
||||||
return
|
return
|
||||||
|
|
||||||
# On enregistre le fichier avec le code pour numéro
|
def impression_canon(self)
|
||||||
codefichier = open("/var/impression/codes/%d" % code, 'w')
|
|
||||||
codefichier.write("Utilisateur %s\n" % self.user)
|
|
||||||
codefichier.close()
|
|
||||||
self.code = code
|
|
||||||
self.list_messages_importants.append('code')
|
|
||||||
|
|
||||||
|
|
||||||
def impression(self):
|
|
||||||
""" Envoie l'impression a l'imprimante avec les parametres actuels """
|
""" Envoie l'impression a l'imprimante avec les parametres actuels """
|
||||||
# Envoi du fichier à CUPS
|
# Envoi du fichier à CUPS
|
||||||
options =''
|
options =''
|
||||||
# Création de la liste d'options
|
# Création de la liste d'options
|
||||||
# pour le nombre de copies et specifie non assemblee
|
# pour le nombre de copies et specifie non assemblee
|
||||||
#options += '-# %d -o Collate=True' % self.nb_copies
|
#options += '-# %d -o Collate=True' % self.nb_copies
|
||||||
|
|
||||||
# Pour spécifier l'imprimante
|
|
||||||
options += ' -P laserjet'
|
|
||||||
|
|
||||||
# Pour spécifier le bac sortie
|
# Pour spécifier l'imprimante
|
||||||
options += ' -o OutputBin=Left'
|
options += ' -P canon_irc3580'
|
||||||
|
|
||||||
# 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.replace("\"","\\\"")
|
options += " -T \"%s\"" % self.nom_job.replace("\"","\\\"")
|
||||||
|
|
||||||
|
@ -170,10 +151,78 @@ class fichier_impression:
|
||||||
#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
|
||||||
#options += ' -o job-sheets=none'
|
#options += ' -o job-sheets=none'
|
||||||
|
|
||||||
|
#Indique la présence d'un bac de sortie avec agrafeuse
|
||||||
|
# options += " -o Option20=MBMStaplerStacker -o OutputBin=StackerDown"
|
||||||
|
|
||||||
|
options += ' -o StapleLocation=%s' % self.agrafe
|
||||||
|
|
||||||
|
if self.transparent:
|
||||||
|
options += ' -o InputSlot=SideDeck -o MediaType=OHP'
|
||||||
|
if self.taille == 'A4':
|
||||||
|
options += ' -o pdf-paper=571x817 -o PageSize=A4'
|
||||||
|
else:
|
||||||
|
options += ' -o pdf-expand -o pdf-paper=825x1166 -o PageSize=A3'
|
||||||
|
|
||||||
|
if self.portrait:
|
||||||
|
if self.recto_verso:
|
||||||
|
options += ' -o sides=two-sided-long-edge'
|
||||||
|
else:
|
||||||
|
options += ' -o sides=one-sided'
|
||||||
|
else:
|
||||||
|
if self.recto_verso:
|
||||||
|
options += ' -o sides=two-sided-short-edge'
|
||||||
|
else:
|
||||||
|
options += ' -o sides=one-sided'
|
||||||
|
if self.couleur:
|
||||||
|
options += ' -o CNColorMode=color'
|
||||||
|
else:
|
||||||
|
options += ' -o CNColorMode=mono'
|
||||||
|
|
||||||
|
if self.livret:
|
||||||
|
options += ' -o CNSaddleStitch=True'
|
||||||
|
options += ' -o OutputBin=TrayC'
|
||||||
|
else:
|
||||||
|
options += ' -o OutputBin=TrayA'
|
||||||
|
|
||||||
|
(status,rep) = commands.getstatusoutput("lpr %s -# %d %s" % (options, self.nb_copies, self.nom_fichier_pdf))
|
||||||
|
if status != 0:
|
||||||
|
print "<p>status:%d rep: %s</p>" % (status, rep)
|
||||||
|
openlog("impression")
|
||||||
|
syslog("lpr status:%d | rep: %s" % (status, rep))
|
||||||
|
|
||||||
|
|
||||||
|
def impression_laserjet(self):
|
||||||
|
""" Envoie l'impression a l'imprimante avec les parametres actuels """
|
||||||
|
# Envoi du fichier à CUPS
|
||||||
|
options =''
|
||||||
|
# Création de la liste d'options
|
||||||
|
# pour le nombre de copies et specifie non assemblee
|
||||||
|
#options += '-# %d -o Collate=True' % self.nb_copies
|
||||||
|
|
||||||
|
# Pour spécifier l'imprimante
|
||||||
|
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'
|
||||||
|
|
||||||
|
# Pour donner le titre de l'impression
|
||||||
|
options += " -T \"%s\"" % self.nom_job.replace("\"","\\\"")
|
||||||
|
|
||||||
|
# Pour donner le login de l'adherent
|
||||||
|
options += ' -U \"%s\"' % self.user.replace("\"","\\\"")
|
||||||
|
|
||||||
|
# Pour demander une page de garde
|
||||||
|
#options += ' -o job-sheets=crans' #page de garde de type standard
|
||||||
|
#options += " -o job-billing=%.2f" % self.cout
|
||||||
|
#options += ' -o job-sheets=none'
|
||||||
|
|
||||||
#Indique la présence d'un bac de sortie avec agrafeuse
|
#Indique la présence d'un bac de sortie avec agrafeuse
|
||||||
options += " -o Option20=MBMStaplerStacker -o OutputBin=StackerDown"
|
options += " -o Option20=MBMStaplerStacker -o OutputBin=StackerDown"
|
||||||
|
|
||||||
if self.agrafe==-1:
|
if self.agrafe==-1:
|
||||||
options += ' -o StapleLocation=1diagonal'
|
options += ' -o StapleLocation=1diagonal'
|
||||||
elif self.agrafe==0:
|
elif self.agrafe==0:
|
||||||
|
@ -186,14 +235,14 @@ class fichier_impression:
|
||||||
options += ' -o StapleLocation=3parallel'
|
options += ' -o StapleLocation=3parallel'
|
||||||
elif self.agrafe==6:
|
elif self.agrafe==6:
|
||||||
options += ' -o StapleLocation=Stitching'
|
options += ' -o StapleLocation=Stitching'
|
||||||
|
|
||||||
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 pdf-paper=571x817 -o PageSize=A4'
|
options += ' -o pdf-paper=571x817 -o PageSize=A4'
|
||||||
else:
|
else:
|
||||||
options += ' -o pdf-expand -o pdf-paper=825x1166 -o InputSlot=Tray3 -o HPPaperPolicy=A3 -o PageSize=A3'
|
options += ' -o pdf-expand -o pdf-paper=825x1166 -o InputSlot=Tray3 -o HPPaperPolicy=A3 -o PageSize=A3'
|
||||||
|
|
||||||
if self.portrait:
|
if self.portrait:
|
||||||
if self.recto_verso:
|
if self.recto_verso:
|
||||||
options += ' -o sides=two-sided-long-edge'
|
options += ' -o sides=two-sided-long-edge'
|
||||||
|
@ -240,7 +289,7 @@ class fichier_impression:
|
||||||
def affiche_messages_html(self):
|
def affiche_messages_html(self):
|
||||||
""" Creait le code html correspondant a un tableau contenant le code adequate [obsolete] """
|
""" Creait le code html correspondant a un tableau contenant le code adequate [obsolete] """
|
||||||
body = ""
|
body = ""
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if self.imprime:
|
if self.imprime:
|
||||||
body=string.join(map ((dico_message_laserjet.get),self.list_messages_importants))
|
body=string.join(map ((dico_message_laserjet.get),self.list_messages_importants))
|
||||||
|
@ -249,7 +298,7 @@ class fichier_impression:
|
||||||
else:
|
else:
|
||||||
body=string.join(map ((dico_message_devis.get),self.list_messages_importants))
|
body=string.join(map ((dico_message_devis.get),self.list_messages_importants))
|
||||||
body=body+'\nRemarque:\n'+string.join(map ((dico_message_devis.get),self.list_messages))
|
body=body+'\nRemarque:\n'+string.join(map ((dico_message_devis.get),self.list_messages))
|
||||||
|
|
||||||
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)
|
||||||
|
@ -277,10 +326,20 @@ class fichier_impression:
|
||||||
raise ErreurImpression("class :erreur dans enregistrement du .pdf %s: %s" % (self.nom_fichier_pdf,str(inst)))
|
raise ErreurImpression("class :erreur dans enregistrement du .pdf %s: %s" % (self.nom_fichier_pdf,str(inst)))
|
||||||
os.chmod(self.nom_fichier_pdf, 0640)
|
os.chmod(self.nom_fichier_pdf, 0640)
|
||||||
os.chmod(self.nom_fichier_desc, 0640)
|
os.chmod(self.nom_fichier_desc, 0640)
|
||||||
|
if self.taille == 'A3':
|
||||||
|
pdfbook = "pdfbook --paper a3paper %s"
|
||||||
|
else:
|
||||||
|
pdfbook = "pdfbook %s"
|
||||||
|
(status,rep) = commands.getstatusoutput(pdfbook % self.nom_fichier_pdf)
|
||||||
|
self.nom_fichier_pdf = "%s-book.pdf" % self.nom_fichier_pdf[:-4]
|
||||||
|
if status != 0:
|
||||||
|
print "<p>status:%d rep: %s</p>" % (status, rep)
|
||||||
|
openlog("impression")
|
||||||
|
syslog("pdfbook status:%d | rep: %s" % (status, rep))
|
||||||
|
|
||||||
self.nbr_pages = int(os.popen("pdfinfo '%s' | grep Pages " % (self.nom_fichier_pdf)).readline().split()[1])
|
self.nbr_pages = int(os.popen("pdfinfo '%s' | grep Pages " % (self.nom_fichier_pdf)).readline().split()[1])
|
||||||
self.modif_epoch = time.time()
|
self.modif_epoch = time.time()
|
||||||
|
|
||||||
|
|
||||||
def sauve_desc(self):
|
def sauve_desc(self):
|
||||||
""" Sauve les parametre du travaille d'impression dans le fichier nom_fichier_desc """
|
""" Sauve les parametre du travaille d'impression dans le fichier nom_fichier_desc """
|
||||||
try:
|
try:
|
||||||
|
@ -288,7 +347,7 @@ class fichier_impression:
|
||||||
for key in ("erreur_critique", "nom_job", "nbr_pages",
|
for key in ("erreur_critique", "nom_job", "nbr_pages",
|
||||||
"nb_copies","taille", "recto_verso",
|
"nb_copies","taille", "recto_verso",
|
||||||
"transparent", "couleur", "cout",
|
"transparent", "couleur", "cout",
|
||||||
"portrait", "user", "imprime",
|
"portrait", "user", "imprime", "livret",
|
||||||
"nom_fichier_pdf", "nom_fichier_desc",
|
"nom_fichier_pdf", "nom_fichier_desc",
|
||||||
"code", "modif_epoch", "job_id","agrafe"):
|
"code", "modif_epoch", "job_id","agrafe"):
|
||||||
file_obj_desc.write(key+"="+str(getattr(self,key))+"\n")
|
file_obj_desc.write(key+"="+str(getattr(self,key))+"\n")
|
||||||
|
@ -306,13 +365,13 @@ class fichier_impression:
|
||||||
parse = ligne.split("=")
|
parse = ligne.split("=")
|
||||||
if parse[1] == 'None':
|
if parse[1] == 'None':
|
||||||
setattr(self,parse[0],None)
|
setattr(self,parse[0],None)
|
||||||
elif parse[0] in ("nom_job", "taille", "user", "nom_fichier_pdf", "nom_fichier_desc", "job_id"):
|
elif parse[0] in ("nom_job", "taille", "user", "nom_fichier_pdf", "nom_fichier_desc", "job_id", "agrafe"):
|
||||||
#pour les attributs strings
|
#pour les attributs strings
|
||||||
setattr(self,parse[0],parse[1])
|
setattr(self,parse[0],parse[1])
|
||||||
elif parse[0] in ("nbr_pages", "nb_copies", "imprime", "code","agrafe"):
|
elif parse[0] in ("nbr_pages", "nb_copies", "imprime", "code"):
|
||||||
#pour les attributs entiers
|
#pour les attributs entiers
|
||||||
setattr(self,parse[0],int(parse[1]))
|
setattr(self,parse[0],int(parse[1]))
|
||||||
elif parse[0] in ("recto_verso", "transparent", "couleur", "portrait", "erreur_critique"):
|
elif parse[0] in ("recto_verso", "transparent", "couleur", "portrait", "erreur_critique", "livret"):
|
||||||
#pour les attributs boolean
|
#pour les attributs boolean
|
||||||
setattr(self,parse[0],(parse[1] == 'True'))
|
setattr(self,parse[0],(parse[1] == 'True'))
|
||||||
elif parse[0] in ("cout", "modif_epoch"):
|
elif parse[0] in ("cout", "modif_epoch"):
|
||||||
|
@ -321,14 +380,14 @@ class fichier_impression:
|
||||||
else:
|
else:
|
||||||
self.erreur_critique = True
|
self.erreur_critique = True
|
||||||
print '<p>ligne non parsée: %s</p>' % ligne
|
print '<p>ligne non parsée: %s</p>' % ligne
|
||||||
|
|
||||||
ligne=file_obj_desc.readline()[0:-1]
|
ligne=file_obj_desc.readline()[0:-1]
|
||||||
file_obj_desc.close()
|
file_obj_desc.close()
|
||||||
except Exception, inst :
|
except Exception, inst :
|
||||||
raise ErreurImpression("class : erreur dans l'ouverture du .desc %s : %s" % (self.nom_fichier_desc,repr(inst)))
|
raise ErreurImpression("class : erreur dans l'ouverture du .desc %s : %s" % (self.nom_fichier_desc,repr(inst)))
|
||||||
# Verifie que le fichier pdf existe bien si il doit exister.
|
# Verifie que le fichier pdf existe bien si il doit exister.
|
||||||
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
|
||||||
openlog("impression")
|
openlog("impression")
|
||||||
syslog("class : %s a disparu" % self.nom_fichier_pdf)
|
syslog("class : %s a disparu" % self.nom_fichier_pdf)
|
||||||
|
@ -340,10 +399,10 @@ class fichier_impression:
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
""" Cree le code html correspondant a un tableau contenant les informations pertinentes """
|
""" Cree le code html correspondant a un tableau contenant les informations pertinentes """
|
||||||
|
|
||||||
dict_contraire = { 'couleur' : 'Noir et Blanc',
|
dict_contraire = { 'couleur' : 'Noir et Blanc',
|
||||||
'transparent' : 'Normal',
|
'transparent' : 'Normal',
|
||||||
'portrait': 'Paysage',
|
'portrait': 'Paysage',
|
||||||
'recto_verso' : 'Recto',
|
'recto_verso' : 'Recto',
|
||||||
'erreur_critique' : "Pas d'erreur" }
|
'erreur_critique' : "Pas d'erreur" }
|
||||||
dict_normale = { 'couleur' : 'Couleur',
|
dict_normale = { 'couleur' : 'Couleur',
|
||||||
|
@ -351,14 +410,23 @@ class fichier_impression:
|
||||||
'portrait': 'Portrait',
|
'portrait': 'Portrait',
|
||||||
'recto_verso' : 'Recto-Verso',
|
'recto_verso' : 'Recto-Verso',
|
||||||
'erreur_critique' : "Problème survenu" }
|
'erreur_critique' : "Problème survenu" }
|
||||||
|
|
||||||
dict_agrafe = { -1 : "agrafe en diagonale",
|
dict_agrafe = { -1 : "agrafe en diagonale",
|
||||||
0 : "aucune agrafe",
|
0 : "aucune agrafe",
|
||||||
1 : "1 agrafe parallele",
|
1 : "1 agrafe parallele",
|
||||||
2 : "reliure 2 agrafe",
|
2 : "reliure 2 agrafe",
|
||||||
3 : "reliure 3 agrafe",
|
3 : "reliure 3 agrafe",
|
||||||
6 : "reliure 6 agrafe" }
|
6 : "reliure 6 agrafe",
|
||||||
|
"None" : "aucune agrafe",
|
||||||
|
"TopLeft" : u"agrafe en haut à gauche",
|
||||||
|
"TopRight" : u"agrafe en haut à droite",
|
||||||
|
"BottomLeft" : u"agrafe en bas à gauche",
|
||||||
|
"BottomRight" : u"agrafe en bas à droite",
|
||||||
|
"Left" : u"deux agrafes sur le bord gauche",
|
||||||
|
"Right" : u"deux agrafes sur le bord droit",
|
||||||
|
"Top" : u"deux agrafes sur le bord supérieur",
|
||||||
|
"Bottom" : u"deux agrafes sur le bord inférieur" }
|
||||||
|
|
||||||
corps = "<TABLE BORDER=0 CELLPADDDING=2>\n<TR><th ALIGN=CENTER COLSPAN=2><U>%s</U></th><td ALIGN=RIGHT>%s</TR>\n" % (self.nom_job, time.ctime(0.0))
|
corps = "<TABLE BORDER=0 CELLPADDDING=2>\n<TR><th ALIGN=CENTER COLSPAN=2><U>%s</U></th><td ALIGN=RIGHT>%s</TR>\n" % (self.nom_job, time.ctime(0.0))
|
||||||
corps += "<TR><td>\n<TABLE BORDER=2 RULES=ROWS CELLPADDDING=0>\n"
|
corps += "<TR><td>\n<TABLE BORDER=2 RULES=ROWS CELLPADDDING=0>\n"
|
||||||
|
|
||||||
|
@ -369,7 +437,7 @@ class fichier_impression:
|
||||||
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"
|
||||||
corps += '<TR><td>%s</td></TR>\n' % dict_agrafe[self.agrafe]
|
corps += '<TR><td>%s</td></TR>\n' % dict_agrafe[self.agrafe]
|
||||||
for key in ("couleur", "transparent",
|
for key in ("couleur", "transparent",
|
||||||
"portrait", "recto_verso"):
|
"portrait", "recto_verso"):
|
||||||
if getattr(self, key):
|
if getattr(self, key):
|
||||||
|
@ -388,7 +456,7 @@ class fichier_impression:
|
||||||
|
|
||||||
# Recuperation de lobjet ldap en lecture ou ecriture de l'adherent ayant le login user
|
# Recuperation de lobjet ldap en lecture ou ecriture de l'adherent ayant le login user
|
||||||
# reprise du backend
|
# reprise du backend
|
||||||
# Leve l'erreur ErreurImpression si l'adherent n'existe pas
|
# Leve l'erreur ErreurImpression si l'adherent n'existe pas
|
||||||
def utilisateur(user, rw):
|
def utilisateur(user, rw):
|
||||||
""" Renvoie l'adherent qui imprime le job
|
""" Renvoie l'adherent qui imprime le job
|
||||||
* user est l'utilisateur (argument n°2 des paramètres passés au backend)
|
* user est l'utilisateur (argument n°2 des paramètres passés au backend)
|
||||||
|
@ -421,14 +489,64 @@ def utilisateur(user, rw):
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# Fonction auxilliaire de calcul du cout, reprise directement de l'ancien backend
|
# Fonction auxilliaire de calcul du cout, reprise directement de l'ancien backend
|
||||||
def cout(fic_impr):
|
def cout_canon(fic_impr):
|
||||||
""" Calcule le pourcentage de couleur sur les pages
|
""" Calcule le pourcentage de couleur sur les pages
|
||||||
fic_impr est une instance de fichier_impression
|
fic_impr est une instance de fichier_impression
|
||||||
retourn :
|
retourn :
|
||||||
un string avec le nom de l'erreur si erreur il y a
|
un string avec le nom de l'erreur si erreur il y a
|
||||||
un float dans les cas de fonctionnement
|
un float dans les cas de fonctionnement
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# taille peut valoir A3 ou A4
|
||||||
|
# nb_copies est le nombre de copies désirées
|
||||||
|
|
||||||
|
if (fic_impr.recto_verso == False):
|
||||||
|
feuilles = faces # nb de pages par copies
|
||||||
|
else:
|
||||||
|
feuilles = int(faces/2.+0.5)
|
||||||
|
|
||||||
|
if (fic_impr.taille == "A3"):
|
||||||
|
c_papier = impression.c_a3
|
||||||
|
pages = 2*faces
|
||||||
|
else:
|
||||||
|
pages = faces
|
||||||
|
if fic_impr.transparent:
|
||||||
|
c_papier = impression.c_trans
|
||||||
|
else:
|
||||||
|
c_papier = impression.c_a4
|
||||||
|
|
||||||
|
if fic_impr.couleur:
|
||||||
|
c_impression = c_papier * pages + impression.c_face_couleur * pages
|
||||||
|
else:
|
||||||
|
c_impression = c_papier * pages + impression.c_face_nb * pages
|
||||||
|
|
||||||
|
# Cout des agrafes
|
||||||
|
if fic_impr.agrafe in ["Top", "Bottom", "Left", "Right"] or fic_impr.livret:
|
||||||
|
nb_agraphes = 2
|
||||||
|
elif fic_impr.agrafe in ["None", None]:
|
||||||
|
nb_agraphes = 0
|
||||||
|
else:
|
||||||
|
nb_agraphes = 1
|
||||||
|
|
||||||
|
if pages <= 50:
|
||||||
|
c_agrafes =fic nb_agraphes * impression.c_agrafe
|
||||||
|
else:
|
||||||
|
c_agrafes = 0
|
||||||
|
|
||||||
|
c_total = int(fic_impr.nb_copies * ( c_impression + impression.fact +
|
||||||
|
c_agrafes ) + 0.5) # arrondi et facture
|
||||||
|
|
||||||
|
return float(c_total)/100
|
||||||
|
|
||||||
|
|
||||||
|
def cout_laserjet(fic_impr):
|
||||||
|
""" Calcule le pourcentage de couleur sur les pages
|
||||||
|
fic_impr est une instance de fichier_impression
|
||||||
|
retourn :
|
||||||
|
un string avec le nom de l'erreur si erreur il y a
|
||||||
|
un float dans les cas de fonctionnement
|
||||||
|
"""
|
||||||
|
|
||||||
# taille peut valoir A3 ou A4
|
# taille peut valoir A3 ou A4
|
||||||
# nb_copies est le nombre de copies désirées
|
# nb_copies est le nombre de copies désirées
|
||||||
|
|
||||||
|
@ -475,20 +593,20 @@ def cout(fic_impr):
|
||||||
pages = int(faces/2.+0.5)
|
pages = int(faces/2.+0.5)
|
||||||
if total_couleur > 0:
|
if total_couleur > 0:
|
||||||
c_total = (c_taille * pages + (impression.c_tambour_coul +
|
c_total = (c_taille * pages + (impression.c_tambour_coul +
|
||||||
impression.c_tambour_noir) * faces +
|
impression.c_tambour_noir) * faces +
|
||||||
cout_noir * total_noir + cout_coul * total_couleur)
|
cout_noir * total_noir + cout_coul * total_couleur)
|
||||||
else: # Pas de couleur, malgre l'indication
|
else: # Pas de couleur, malgre l'indication
|
||||||
c_total = (c_taille * pages +
|
c_total = (c_taille * pages +
|
||||||
impression.c_tambour_noir * faces+cout_noir * total_noir)
|
impression.c_tambour_noir * faces+cout_noir * total_noir)
|
||||||
else:
|
else:
|
||||||
# Convertit les pdf en png
|
# Convertit les pdf en png
|
||||||
(status, rep) = commands.getstatusoutput("nice -n 5 gs -sDEVICE=pnggray -r30 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile=%s%%d -q %s" % (nom_png, fic_impr.nom_fichier_pdf))
|
(status, rep) = commands.getstatusoutput("nice -n 5 gs -sDEVICE=pnggray -r30 -dBATCH -dNOPAUSE -dSAFER -dPARANOIDSAFER -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dMaxBitmap=50000000 -sOutputFile=%s%%d -q %s" % (nom_png, fic_impr.nom_fichier_pdf))
|
||||||
if status:
|
if status:
|
||||||
return "ERREUR : Fichier invalide. Aucun png n'a été créé.\n"
|
return "ERREUR : Fichier invalide. Aucun png n'a été créé.\n"
|
||||||
|
|
||||||
#récupère la liste des fichiers
|
#récupère la liste des fichiers
|
||||||
list_filepng=os.listdir(nom_rep)
|
list_filepng=os.listdir(nom_rep)
|
||||||
|
|
||||||
remplissage = [0, 0] # Noir, nombre de pages
|
remplissage = [0, 0] # Noir, nombre de pages
|
||||||
for fichier in list_filepng:
|
for fichier in list_filepng:
|
||||||
resultats = commands.getoutput("nice -n 5 /usr/scripts/impression/percentblack '%s/%s'" % (nom_rep, fichier))
|
resultats = commands.getoutput("nice -n 5 /usr/scripts/impression/percentblack '%s/%s'" % (nom_rep, fichier))
|
||||||
|
@ -501,21 +619,21 @@ def cout(fic_impr):
|
||||||
pages = faces # nb de pages par copies
|
pages = faces # nb de pages par copies
|
||||||
else:
|
else:
|
||||||
pages = int(faces/2.+0.5)
|
pages = int(faces/2.+0.5)
|
||||||
c_total = (c_taille * pages +
|
c_total = (c_taille * pages +
|
||||||
impression.c_tambour_noir * faces+cout_noir * total_noir)
|
impression.c_tambour_noir * faces+cout_noir * total_noir)
|
||||||
|
|
||||||
# Cout des agrafes
|
# Cout des agrafes
|
||||||
if pages <= 50:
|
if pages <= 50:
|
||||||
c_agrafes = fic_impr.nb_copies * (impression.c_agrafe * abs(fic_impr.agrafe))
|
c_agrafes = fic_impr.nb_copies * (impression.c_agrafe * abs(fic_impr.agrafe))
|
||||||
else:
|
else:
|
||||||
c_agrafes = 0
|
c_agrafes = 0
|
||||||
|
|
||||||
c_total = int(fic_impr.nb_copies * c_total + impression.fact +
|
c_total = int(fic_impr.nb_copies * c_total + impression.fact +
|
||||||
c_agrafes +
|
c_agrafes +
|
||||||
0.5) # arrondi et facture
|
0.5) # arrondi et facture
|
||||||
|
|
||||||
if commands.getoutput("rm -r -f %s" % nom_rep):
|
if commands.getoutput("rm -r -f %s" % nom_rep):
|
||||||
self.list_messages_admin.append('erreur_cout')
|
self.list_messages_admin.append('erreur_cout')
|
||||||
sys.stderr.write("ERREUR : Impossible d'enlever le dossier.\n")
|
sys.stderr.write("ERREUR : Impossible d'enlever le dossier.\n")
|
||||||
|
|
||||||
return float(c_total)/100
|
return float(c_total)/100
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue