On utilise les fonctions de crans_backend.
darcs-hash:20050617154851-061a7-e9ea2dbfae84d2a35da92cd17768a01470f891f7.gz
This commit is contained in:
parent
f2ac3169c9
commit
707c50eec0
1 changed files with 38 additions and 79 deletions
|
@ -5,20 +5,25 @@
|
||||||
# Codé par Benoit et Fred, inspirés par CUPSPykota
|
# Codé par Benoit et Fred, inspirés par CUPSPykota
|
||||||
# Licence : GNU General Public Licence, version 2
|
# Licence : GNU General Public Licence, version 2
|
||||||
|
|
||||||
|
# Structure lineaire :
|
||||||
|
# 1) Preliminaires
|
||||||
|
# 2) Recuperation des donnees de l'utilisateur
|
||||||
|
# 3) Nettoyage du fichier
|
||||||
|
# 4) Calcul du prix de l'impression
|
||||||
|
# 5) Envoi du mail
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
sys.path.append('/usr/scripts/impression')
|
sys.path.append('/usr/scripts/impression')
|
||||||
from ipp import IPPMessage
|
import crans_backend
|
||||||
import couts
|
|
||||||
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
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
import resource
|
import resource
|
||||||
# Limitation à 50 Mo de mémoire
|
# Limitation à 50 Mo de mémoire
|
||||||
resource.setrlimit(resource.RLIMIT_DATA, (1024*1024*50, 1024*1024*50))
|
resource.setrlimit(resource.RLIMIT_DATA, (1024*1024*50, 1024*1024*50))
|
||||||
resource.setrlimit(resource.RLIMIT_RSS, (1024*1024*50, 1024*1024*50))
|
resource.setrlimit(resource.RLIMIT_RSS, (1024*1024*50, 1024*1024*50))
|
||||||
|
|
||||||
|
## 1) Preliminaires :
|
||||||
|
|
||||||
if len(sys.argv) == 1 :
|
if len(sys.argv) == 1 :
|
||||||
print '%s devis "Crans" "Mail un devis au demandeur"' % sys.argv[0]
|
print '%s devis "Crans" "Mail un devis au demandeur"' % sys.argv[0]
|
||||||
|
@ -35,88 +40,37 @@ else :
|
||||||
# Lecture sur stdin
|
# Lecture sur stdin
|
||||||
entree = sys.stdin
|
entree = sys.stdin
|
||||||
|
|
||||||
#\x1B est le caractere d'échappement échap.
|
|
||||||
UEL="\x1B%-12345X"
|
|
||||||
|
|
||||||
# On ecrit les données dans un vrai fichier
|
## 2) Recuperation du nom de l'utilisateur et de son mail
|
||||||
|
## en lecture seule :
|
||||||
|
|
||||||
fic = tempfile.NamedTemporaryFile()
|
utilisateur = crans_backend.utilisateur(sys.argv[1],0)
|
||||||
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()
|
|
||||||
|
|
||||||
# Recuperation du nom de l'utilisateur
|
# Recuperation de l'adresse mail
|
||||||
#user=sys.argv[2] #On ne fait pas comme ca, car samba passe l'utilisateur root
|
adrmail = utilisateur.mail()
|
||||||
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("ERROR: Erreur : Ne peut pas ouvrir/parser le fichier /var/spool/cups/%s" % fichier_ipp)
|
|
||||||
sys.exit(1) # on arrete l'imprimante devis
|
|
||||||
user=message["job-originating-user-name"]
|
|
||||||
|
|
||||||
# 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 :
|
if adrmail.find('@') == -1 :
|
||||||
adrmail += "@crans.org"
|
adrmail += "@crans.org"
|
||||||
adrmail = adrmail.encode("iso8859-15")
|
adrmail = adrmail.encode("iso8859-15")
|
||||||
|
sys.stderr.write("DEBUG: Utilisateur %s recupere.\n" % utilisateur.Nom())
|
||||||
|
|
||||||
# Récupérer le solde
|
|
||||||
solde = adherent.solde()
|
|
||||||
|
|
||||||
## calcul du prix
|
## 3) Nettoyage du fichier :
|
||||||
|
|
||||||
# Options par défaut (Couleur)
|
fic = crans_backend.fichier(entree)
|
||||||
mode_couleur = "Couleur"
|
nom_fic = fic.name
|
||||||
|
sys.stderr.write("DEBUG: Fichier %s nettoye.\n" % nom_fic)
|
||||||
|
|
||||||
|
|
||||||
|
## 4) Calcul du prix de l'impression :
|
||||||
|
|
||||||
# On récupère les options passées
|
|
||||||
if "media=transparency" in sys.argv:
|
if "media=transparency" in sys.argv:
|
||||||
format = "transparent"
|
prix = crans_backend.calcul_prix(nom_fic, "transparency")
|
||||||
|
else:
|
||||||
|
prix = crans_backend.calcul_prix(nom_fic, "")
|
||||||
|
sys.stderr.write("DEBUG: Prix calcule.\n" )
|
||||||
|
|
||||||
|
# Formulation du mail au vue des resultats
|
||||||
# Calcul du coût de l'impression
|
if prix.c_total_euros > (utilisateur.solde() - impression.decouvert) :
|
||||||
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."
|
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 :
|
else :
|
||||||
possible = u"Il vous sera possible d'imprimer ce document sur Laserjet."
|
possible = u"Il vous sera possible d'imprimer ce document sur Laserjet."
|
||||||
|
@ -126,7 +80,7 @@ if prix.format=="NON_VALIDE":
|
||||||
possible += u"Il ne vous sera pas possible d'imprimer ce document sur Laserjet.\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"
|
possible += u"Rappel : Si vous utilisez lp il faut définir l'option PageSize"
|
||||||
|
|
||||||
# Envoyer le mail
|
## 5) Envoi du mail :
|
||||||
sujet=u"Devis d'impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : sys.argv[3]}
|
sujet=u"Devis d'impression n°%(numero)s : %(fichier)s" % {'numero' : sys.argv[1], 'fichier' : sys.argv[3]}
|
||||||
mail = u"""
|
mail = u"""
|
||||||
Bonjour,
|
Bonjour,
|
||||||
|
@ -153,9 +107,14 @@ Prix total : %%(prix)s
|
||||||
|
|
||||||
--
|
--
|
||||||
L'imprimante devis
|
L'imprimante devis
|
||||||
""" % {'solde' : solde, 'blocage' : str(impression.decouvert), 'possible' : possible}
|
""" % {'solde' : utilisateur.solde(), 'blocage' : str(impression.decouvert), 'possible' : possible}
|
||||||
|
|
||||||
sys.stderr.write("DEBUG: Envoi du mail..\n" )
|
sys.stderr.write("DEBUG: Tentative d'envoi du mail.\n" )
|
||||||
|
|
||||||
prix.send_mail("%(nom)s <%(adrmail)s>" % {'nom' : nom_adher, 'adrmail' : adrmail}, sujet, mail )
|
try:
|
||||||
sys.stderr.write("DEBUG: Fin du devis..\n" )
|
prix.send_mail("%(nom)s <%(adrmail)s>" % {'nom' : utilisateur.Nom(), 'adrmail' : adrmail}, 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>" % adrmail)
|
||||||
|
|
||||||
|
sys.exit(0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue