From 08f772d84e43ea67b215a15d586b8d51883014f0 Mon Sep 17 00:00:00 2001 From: dubost Date: Tue, 14 Jun 2005 19:15:24 +0200 Subject: [PATCH] Re Re Re import initial darcs-hash:20050614171524-c3cc4-f14eca07ffc0df0393b03d714ea9fc8f169878c0.gz --- impression/backend/devis | 161 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100755 impression/backend/devis diff --git a/impression/backend/devis b/impression/backend/devis new file mode 100755 index 00000000..fc079a51 --- /dev/null +++ b/impression/backend/devis @@ -0,0 +1,161 @@ +#! /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 + +import sys +sys.path.append('/usr/scripts/impression') +#from ipp import IPPMessage +import couts +sys.path.append('/usr/scripts/gestion') +from config import impression +from ldap_crans import crans_ldap +import tempfile + +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)) + + +if len(sys.argv) == 1 : + print '%s devis "Crans" "Mail un devis au demandeur"' % sys.argv[0] + sys.exit(0) + +if len(sys.argv) not in (6, 7) : + sys.stderr.write("ERROR: %s job-id user title copies options [file]\n" % sys.argv[0]) + sys.exit(1) # Cela stoppe l'imprimante + +if sys.argv[-1].find('/') != -1 : + # Fichier fourni + entree = open(sys.argv[-1]) +else : + # Lecture sur stdin + entree = sys.stdin + +#\x1B est le caractere d'échappement échap. +UEL="\x1B%-12345X" + +# On ecrit les données dans un vrai fichier + +fic = tempfile.NamedTemporaryFile() +nom_fic=fic.name +ligne = entree.readline() +# On rends le fichier propre et on enleve les options qui nous gènent +while ligne: + #On ne choisit pas le bac de sortie + if ligne.find('%%BeginFeature: *OutputBin') != -1: + while ligne.find('%%EndFeature') == -1: + ligne = entree.readline() + ligne = entree.readline() + #On ne choisit pas le bac d'entree + if ligne.find('%%BeginFeature: *InputSlot') != -1: + while ligne.find('%%EndFeature') == -1: + ligne = entree.readline() + ligne = entree.readline() + #On elimine les instructions PJL + #Normalement on n'est pas obligé de retirer le UEL mais c'est plus propre + while ligne.startswith('@PJL') or ligne.startswith(UEL): + ligne = entree.readline() + fic.write(ligne) + ligne = entree.readline() +fic.flush() + +# Récupérer l'IP +#if len(sys.argv[1]) < 5 : +# fichier_ipp = "c%05i" % int(sys.argv[1]) +#else: +# fichier_ipp = "c%s" % sys.argv[1] +# +#try: +# message = IPPMessage(open('/var/spool/cups/%s' % fichier_ipp).read()) +#except: +# sys.stderr.write("Ne peut pas ouvrir/parser le fichier /var/spool/cups/%s" % fichier_ipp) + +#recuperation du nom de l'utilisateur +user=sys.argv[2] +#recuperation de l'adherent +base = crans_ldap() +res=base.search("login=%s"%user)['adherent'] +#si on ne trouve rien +if len(res) != 1 : + sys.stderr.write("ERROR: Erreur : adherent %s non trouvé\n" % user) +# import smtplib +# conn = smtplib.SMTP('localhost') +# titre="L\'adherent n\'existe pas" +# corps="Ceci est surement un probleme dans la base\nL\'utilisateur %s existe dans le fichier de mot de passe mais n\'est pas dans la base ldap" %user +# conn.sendmail(From_imprimante, From_imprimante , mail_err % (sys.argv[1],titre,corps)) +# conn.quit() + + sys.exit(0) # on ne stoppe pas l'imprimante pour le moment +adherent=res[0] + + +adrmail = adherent.mail() +nom_adher = adherent.Nom() +if adrmail.find('@') == -1 : + adrmail += "@crans.org" +adrmail = adrmail.encode("iso8859-15") + +# Récupérer le solde +solde = adherent.solde() + +## calcul du prix + +# Options par défaut (Couleur) +mode_couleur = "Couleur" + +# On récupère les options passées +if "media=transparency" in sys.argv: + format = "transparent" + + +# Calcul du coût de l'impression +sys.stderr.write("DEBUG: Calcul du prix..\n" ) +prix = couts.cout(nom_fic, mode_couleur) + +if prix.c_total_euros > (solde - impression.decouvert) : + possible = u"Désolé, je crois que cela ne va pas être possible d'imprimer.\nVous devez alimenter votre compte impression pour pouvoir imprimer ce document." +else : + possible = u"Il vous sera possible d'imprimer ce document sur Laserjet." + +if prix.format=="NON_VALIDE": + possible = u"ATTENTION : Le format de papier que vous avez choisi n'est pas valide\n" + possible += u"Il ne vous sera pas possible d'imprimer ce document sur Laserjet.\n" + possible += u"Rappel : Si vous utilisez lp il faut définir l'option PageSize" + +# Envoyer le mail +sujet=u"Devis d'impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : sys.argv[3]} +mail = u""" +Bonjour, + +L'impression que vous avez demandé vous sera facturé +la modique somme de %%(prix)s. + +Votre compte impression est actuellement crédité de %(solde)s euros. + +Rappel : votre compte est bloqué à %(blocage)s euros + +%(possible)s + +Voici le détail de votre devis + +Résultats de l'analyse : +Noir (par face) : %%(noir)s%%%% +Couleur (par face) : %%(couleur)s%%%% +Nombre de faces (par copie) : %%(faces)s +Nombre de pages (par copie) : %%(pages)s +Nombre de copies : %%(copies)s +Format : %%(format)s +Prix total : %%(prix)s + +-- +L'imprimante devis +""" % {'solde' : solde, 'blocage' : str(impression.decouvert), 'possible' : possible} + +sys.stderr.write("DEBUG: Envoi du mail..\n" ) + +prix.send_mail("%(nom)s <%(adrmail)s>" % {'nom' : nom_adher, 'adrmail' : adrmail}, sujet, mail ) +sys.stderr.write("DEBUG: Fin du devis..\n" )