From ad130e37a1876abd2c2e8f894c19f12f12989f20 Mon Sep 17 00:00:00 2001 From: bernat Date: Sun, 29 Jan 2006 16:32:30 +0100 Subject: [PATCH] Plus besoin de a darcs-hash:20060129153230-d1718-25c30ffa3c86b0fdf600c1b4eee6128d5af32db3.gz --- impression/backend/devis | 142 --------------------- impression/backend/laserjet | 239 ------------------------------------ 2 files changed, 381 deletions(-) delete mode 100755 impression/backend/devis delete mode 100755 impression/backend/laserjet diff --git a/impression/backend/devis b/impression/backend/devis deleted file mode 100755 index b317d029..00000000 --- a/impression/backend/devis +++ /dev/null @@ -1,142 +0,0 @@ -#! /usr/bin/env python -# -*- coding: iso-8859-15 -*- -# -# Backend CUPS réalisant les devis -# Codé par Benoit et Fred, inspirés par CUPSPykota -# Licence : GNU General Public Licence, version 2 - -# Structure lineaire : -# 1) Preliminaires -# 2) Recuperation des donnees de l'utilisateur -# 3) Calcul du prix de l'impression -# 4) Formulation du mail -# 5) Envoi du mail - -import sys -sys.path.append('/usr/scripts/impression') -import crans_backend -sys.path.append('/usr/scripts/gestion') -from config import impression - -import resource -# Limitation à 50 Mo de mémoire -resource.setrlimit(resource.RLIMIT_DATA, (1024*1024*50, 1024*1024*50)) -resource.setrlimit(resource.RLIMIT_RSS, (1024*1024*50, 1024*1024*50)) - -## 1) Preliminaires : - -description = '%s devis "Crans" "Mail un devis au demandeur"' % sys.argv[0] -fic = crans_backend.preliminaires(sys.argv, description) -nom_fic = fic.name - - -## 2) Recuperation de l'utilisateur et de son mail en lecture seule : - -utilisateur = crans_backend.utilisateur(sys.argv[2],0) - -# Recuperation de l'adresse mail -adrmail = utilisateur.mail() -if adrmail.find('@') == -1 : - adrmail += "@crans.org" -adrmail = adrmail.encode("iso8859-15") -To = u"%s <%s>" % (utilisateur.Nom(), adrmail) - -## 3) Calcul du prix de l'impression : - -prix = crans_backend.calcul_prix(nom_fic) - - -## 4) Formulation du mail au vue des resultats - -sujet=u"Devis d'impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : unicode(sys.argv[3],"utf-8" ,'replace')} - - -# Probleme de taille de papier -if prix.erreur=="Taille invalide": - sys.stderr.write(("ERROR: Erreur : utilisateur : %s, format invalide : %s\n" % (utilisateur.Nom(), prix.taille)).encode('latin-1')) - possible = u""" -Le format de papier que vous avez choisi (%(taille)s) n'est pas valide. - -Cela ne va pas être possible d'imprimer ce document sur Laserjet. - -Rappel : Si vous utilisez lp, il faut définir l'option PageSize -""" % {'taille' : prix.taille} - -# Postscript mal formatte -elif prix.erreur: - sys.stderr.write(("ERROR: Erreur : utilisateur : %s, raison : %s\n" % (utilisateur.Nom(), prix.erreur)).encode('latin-1')) - possible = u""" -Il y a malheureusement eu une erreur lors de votre impression. - -Le message d'erreur est le suivant : -%(erreur)s - -Si l'erreur se reproduit, envoyez un mail à %(adresse_imprimante)s -""" % { 'erreur' : prix.erreur, "adresse_imprimante" : impression.From_imprimante} - -# Compte non suffisamment approvisionné : -elif prix.c_total_euros > (utilisateur.solde() - impression.decouvert) : - sys.stderr.write("DEBUG: Pas d'impression : Compte trop bas\n") - template = u""" -L'impression que vous avez demandé vous coûterait la modique somme -de %(prix)s. - -Désolé, je crois que cela ne va pas être possible d'imprimer. - -Voici le détail de votre devis, 100 unités correspondant à un -remplissage total d'une face A4 : - -* Format de papier : %(taille)s -* Pour une copie : - Noir : %(noir)s unités - Couleur : %(couleur)s unités - Nombre de faces : %(faces)s - Nombre de pages : %(pages)s -* Nombre de copies : %(copies)s - -Vous devez alimenter votre compte impression pour pouvoir imprimer -ce document. -""" - possible = prix.remplis_template(template) - -# Tout est OK -else : - template =u""" -L'impression que vous avez demandé vous coûterait la modique somme -de %(prix)s. - -Il vous sera possible d'imprimer ce document sur Laserjet. - -Voici le détail de votre devis, 100 unités correspondant à un -remplissage total d'une face A4 : - -* Format de papier : %(taille)s -* Pour une copie : - Noir : %(noir)s unités - Couleur : %(couleur)s unités - Nombre de faces : %(faces)s - Nombre de pages : %(pages)s -* Nombre de copies : %(copies)s - -Prix total : %(prix)s -""" - possible = prix.remplis_template(template) - -## 5) Envoi du mail : - -mail = u""" -Bonjour, - -Votre compte impression est actuellement crédité de %(solde)s euros. -%(possible)s --- -L'imprimante devis -""" % {'solde' : utilisateur.solde(), 'possible' : possible} - -try: - crans_backend.send_email(prix.From, To, sujet, mail ) - sys.stderr.write("DEBUG: Mail envoye ; Fin du devis...\n" ) -except: - sys.stderr.write("ERROR: Erreur : Impossible d'envoyer le mail a l'adresse <%s>\n" % adrmail) - -sys.exit(0) diff --git a/impression/backend/laserjet b/impression/backend/laserjet deleted file mode 100755 index 020719a4..00000000 --- a/impression/backend/laserjet +++ /dev/null @@ -1,239 +0,0 @@ -#! /usr/bin/env python -# -*- coding: iso-8859-15 -*- -# -# Backend CUPS pour laserjet : imprime et debite -# Codé par Benoit, Fred et Braice, inspirés par CUPSPykota -# Licence : GNU General Public Licence, version 2 - -#TODO: -#Parser ce que réponds l'imprimante - -import sys, time, tempfile, os -sys.path.append('/usr/scripts/impression') -import crans_backend, pjl_comm -sys.path.append('/usr/scripts/gestion') -from config import impression - -## Préliminaires : - -description = '%s laserjet "Crans" "Imprime tout en debitant"' % sys.argv[0] -fic = crans_backend.preliminaires(sys.argv, description) -nom_fic = fic.name - - -## Récuperation de l'utilisateur en écriture : - -utilisateur = crans_backend.utilisateur(sys.argv[2],1) - -# Récuperation de l'adresse mail -adrmail = utilisateur.mail() -if adrmail.find('@') == -1 : - adrmail += "@crans.org" -adrmail = adrmail.encode("iso8859-15") -To = u"%s <%s>" % (utilisateur.Nom(), adrmail) - - -## Calcul du prix de l'impression : - -prix = crans_backend.calcul_prix(nom_fic) - -## Préparation des mails - -sujet=u"Impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : unicode(sys.argv[3],"utf-8" ,'replace')} - -mail_err = u""" -Bonjour, - -Il y a malheureusement eu une erreur lors de votre impression. - -Le message d'erreur est le suivant : -%%(erreur)s - -Si l'erreur se reproduit, envoyez un mail à %(adresse_imprimante)s - --- -L'imprimante Laserjet -""" % {"adresse_imprimante" : impression.From_imprimante} - -# Probleme de taille de papier -if prix.erreur=="Taille invalide": - error = u""" -Le format de papier que vous avez choisi (%(taille)s) n'est pas valide. - -Cela ne va pas être possible d'imprimer ce document sur Laserjet. -""" % {'taille' : prix.taille} - # On loggue l'erreur - sys.stderr.write(("ERROR: Erreur : utilisateur : %s, format invalide : %s\n" % (utilisateur.Nom(), prix.taille)).encode('latin-1')) - # et on envoi le mail d'erreur - crans_backend.send_email(prix.From, To, sujet, mail_err % {'erreur' : error} ) - sys.stderr.write("DEBUG: Mail envoye ;\n" ) - -# Postscript mal formatté : -elif prix.erreur: - # On loggue l'erreur - sys.stderr.write(("ERROR: Erreur : utilisateur : %s, raison : %s\n" % (utilisateur.Nom(), prix.erreur)).encode('latin-1')) - # et on envoi le mail d'erreur - crans_backend.send_email(prix.From, To, sujet, mail_err % {'erreur' : prix.erreur} ) - sys.stderr.write("DEBUG: Mail envoye ;\n" ) - -# Compte non suffisamment approvisionné : -elif prix.c_total_euros > (utilisateur.solde() - impression.decouvert) : - sys.stderr.write("DEBUG: Pas d'impression : Compte trop bas") - mail_err_solde = u""" -Bonjour, - -Votre compte n'est pas assez approvisionné pour effectuer l'impression -demandée. - -En effet, votre solde actuel est de %(solde)s euros et l'impression -coûte %(prix)s euros. - --- -L'imprimante Laserjet -""" % { 'solde' : utilisateur.solde(), 'prix' : prix.str_cout } - - crans_backend.send_email(prix.From, To, sujet, mail_err_solde) - sys.stderr.write("DEBUG: Mail envoye ;\n" ) - -# Tout est OK, on imprime -else: - try: - # Envoi du fichier à l'imprimante - nom_fic2=tempfile.mktemp() - if prix.recto_v=='Recto': - sys.stderr.write("DEBUG: Simple recto, on inverse juste l'ordre.\n" ) - os.system("cp %s %s" % (nom_fic, nom_fic2)) - os.system("psselect -r %s > %s" % (nom_fic, nom_fic2)) - elif prix.faces==1: - sys.stderr.write("DEBUG: Une seule face.\n" ) - os.system("cp %s %s " % (nom_fic, nom_fic2)) - else: - sys.stderr.write("DEBUG: Recto-verso on permute deux a deux.\n" ) - if(prix.faces%2 ==1): - sys.stderr.write("DEBUG: nombre de faces impair..\n" ) - prix.faces+=1 - sys.exit(0) - else: - sys.stderr.write("DEBUG: nombre de faces pair..\n" ) - liste_pages="" - for i in range(1,int(prix.faces/2)+1): - liste_pages+=str(2*i)+","+str(2*i-1)+"," - #on enleve la virgule superflue - liste_pages=liste_pages[:-1] - sys.stderr.write("DEBUG: Liste pages : %s\n" % liste_pages ) - os.system("cp %s %s " % (nom_fic, nom_fic2)) - os.system("psselect -p%s %s > %s 2>/dev/null" % (liste_pages, nom_fic, nom_fic2)) - - sys.stderr.write("DEBUG: Envoi du fichier à l'imprimante.\n" ) - imprimante=pjl_comm.hp9500() - imprimante.cx_open() - imprimante.pjl_command('USTATUS PAGE = ON') - imprimante.pjl_command('USTATUS JOB = ON') - imprimante.pjl_command('USTATUS DEVICE = ON') - imprimante.write_postscript(nom_fic2, sys.argv[1], utilisateur.Nom()) - os.system("mv %s /tmp/last_printed.ps" % nom_fic2) - os.system("chmod 644 /tmp/last_printed.ps") - - i=0 - message="" - sys.stderr.write("DEBUG: Messages de l'imprimante :\n") - while(message.find("PAGES=")==-1 and i<200): - message=imprimante.pjl_read() - sys.stderr.write("DEBUG: %s\n" % message) - i+=1 - time.sleep(2) - - if i==200: - sys.stderr.write("ERROR: Impression arrêtée car lancée depuis 400s...\n") - else: - sys.stderr.write("DEBUG: Impression terminée.\n") - imprimante.cx_close() - # Si messsage contient DISPLAY="Annulation de la tache" : - # On ne debite pas l'utilisateur et on envoie le mail adequat. - if "Annulation" in message: - # On loggue l'erreur - sys.stderr.write(("ERROR: Erreur : utilisateur : %s, Tache annulée" % utilisateur.Nom()).encode('latin-1')) - # et on envoi le mail d'erreur - crans_backend.send_email(prix.From, To, "Annulation : " + sujet, mail_err % {'erreur' : "Annulation de la tache"}) - sys.exit(0) - - # On débite l'adhérent si l'impression a eu lieu - utilisateur.solde(-prix.c_total_euros) - utilisateur.save() - - #Génération du code et écriture du code - i=0 - code=0 - import random - #instance de base - rand=random.Random() - #graine automatique avec le temps - rand.seed() - while(i<1000) : - #on génère le numéro de session - code=rand.randint(100000,999999) #pour avoir six chiffres - #on sauvegarde les données concernant la session dans un fichier qui périme dans duree_session - try: - open("/var/impression/codes/%d" %code, 'r') - except : - break - i=i+1 - - if code: - codefichier=open("/var/impression/codes/%d" %code, 'w') - codefichier.write("Utilisateur %s\n"%(utilisateur.Nom())) - codefichier.close() - else : - # Grosse erreur : on logue, on previent et on stoppe. - sys.stderr.write("ERROR: Il n'y a pas de code disponible" ) - try: - crans_backend.send_email(prix.From, "Impression <%s>" % impression.From_imprimante , u"ERREUR " + sujet, mail_err % {'erreur' : "Il n'y a plus de code disponible.\n"}) - sys.stderr.write("DEBUG: Un rapport de bug a ete automatiquement envoye.\n") - except : - sys.stderr.write("ERROR: Impossible d'envoyer le rapport de bug.\n") - sys.stderr.write("ERROR: Plus de codes disponibles.\n") - sys.stderr.write("ERROR: Penser a ouvrir a l'adherent debite...\n") - sys.exit(1) - - #envoi du mail avec le code et le prix - mail_ok = u""" -Bonjour, - -L'ancien solde de votre compte impression valait %(solde)s euros. - -L'impression que vous avez demandé coûte la modique somme -de %(prix)s. - -L'impression s'est correctement effectuée et votre compte a -été débité. - -Pour accéder au local de l'imprimante (4ème étage du Bat J), -le code unique de cette impression est : %(code)s# - --- -L'imprimante Laserjet -""" % { 'solde' : utilisateur.solde(), 'prix' : prix.str_cout, 'code' : code } - crans_backend.send_email(prix.From, To, sujet, mail_ok) - sys.stderr.write("DEBUG: Mail envoye ; Fin de l'impression...\n" ) - - except: - sys.stderr.write("ERROR: Erreur : Problème d'impression\n" ) - crans_backend.send_email(prix.From, To, sujet, mail_err % {'erreur' : u"Le fichier n'a pu être imprimé.\nVeuillez réessayer plus tard.\n"} ) - # Report de bug - import traceback - from cStringIO import StringIO - - s = StringIO() - sys.stderr = s - traceback.print_exc() - sys.stderr = sys.__stderr__ - traceback = s.getvalue() - try: - prix.erreur = "\n" - crans_backend.send_email(prix.From, "Impression <%s>" % impression.From_imprimante , sujet, "Une erreur s'est produite lors de cette impression, voici le compte rendu :\n" + traceback + "\nUne analyse des logs de CUPS peux aider a comprendre l'origine de cette erreur.\n-- \nL'imprimante Laserjet") - sys.stderr.write("DEBUG: Un rapport de bug a ete automatiquement envoye.\n") - except : - sys.stderr.write("ERROR: Impossible d'envoyer le rapport de bug.\n") - sys.stderr.write("ERROR: %s \n" % traceback) - -sys.exit(0)